feat(roll): 完成轧辊管理全栈模块
DB:mill_roll(轧辊库)+ mill_roll_change(换辊记录),已执行到服务器 后端: - MillRoll / MillRollChange domain - Mapper 接口 + XML(keyProperty 正确:rollId/changeId) - Service + ServiceImpl(换辊时自动更新轧辊 status 为 Online Use) - MillRollController /mill/roll + MillRollChangeController /mill/rollChange 前端: - api/mill/roll.js 8个接口函数 - views/mill/roll.vue 三段式布局 ·上:换辊数据历史表格 ·左下:当前辊系参数(6辊图形 CSS 圆圈 + 编号/径/时间展示) ·右下:轧辊库表格 + 条件查询 + 更换/添加/修改/删除操作 - 路由注册 /mill/roll Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package com.ruoyi.mill.controller;
|
||||
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.mill.domain.MillRollChange;
|
||||
import com.ruoyi.mill.service.IMillRollChangeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/mill/rollChange")
|
||||
public class MillRollChangeController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private IMillRollChangeService changeService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(MillRollChange query) {
|
||||
startPage();
|
||||
return getDataTable(changeService.selectList(query));
|
||||
}
|
||||
|
||||
@GetMapping("/current")
|
||||
public AjaxResult current() {
|
||||
return AjaxResult.success(changeService.selectLatest());
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody MillRollChange change) {
|
||||
return toAjax(changeService.addChange(change));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.ruoyi.mill.controller;
|
||||
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.mill.domain.MillRoll;
|
||||
import com.ruoyi.mill.service.IMillRollService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/mill/roll")
|
||||
public class MillRollController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private IMillRollService rollService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(MillRoll query) {
|
||||
startPage();
|
||||
return getDataTable(rollService.selectList(query));
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public AjaxResult getInfo(@PathVariable Long id) {
|
||||
return AjaxResult.success(rollService.selectById(id));
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody MillRoll roll) {
|
||||
int rows = rollService.insert(roll);
|
||||
if (rows > 0) {
|
||||
return AjaxResult.success(roll.getRollId());
|
||||
}
|
||||
return AjaxResult.error("新增失败");
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public AjaxResult edit(@RequestBody MillRoll roll) {
|
||||
return toAjax(rollService.update(roll));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||
return toAjax(rollService.deleteByIds(ids));
|
||||
}
|
||||
}
|
||||
33
ruoyi-mill/src/main/java/com/ruoyi/mill/domain/MillRoll.java
Normal file
33
ruoyi-mill/src/main/java/com/ruoyi/mill/domain/MillRoll.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package com.ruoyi.mill.domain;
|
||||
|
||||
import com.ruoyi.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/** 轧辊库 */
|
||||
@Data
|
||||
public class MillRoll extends BaseEntity {
|
||||
|
||||
private Long rollId;
|
||||
|
||||
/** 轧辊编号 */
|
||||
private String rollNo;
|
||||
|
||||
/** 轧辊类型 WR/IR/BR */
|
||||
private String rollType;
|
||||
|
||||
/** 使用状态 */
|
||||
private String status;
|
||||
|
||||
/** 初始辊径(mm) */
|
||||
private BigDecimal initialDia;
|
||||
|
||||
/** 当前辊径(mm) */
|
||||
private BigDecimal currentDia;
|
||||
|
||||
/** 标志位 */
|
||||
private String flag;
|
||||
|
||||
/** 删除标志 0正常 2删除 */
|
||||
private String delFlag;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.ruoyi.mill.domain;
|
||||
|
||||
import com.ruoyi.common.core.domain.BaseEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/** 换辊记录 */
|
||||
@Data
|
||||
public class MillRollChange extends BaseEntity {
|
||||
|
||||
private Long changeId;
|
||||
|
||||
/** 换辊时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date changeTime;
|
||||
|
||||
/** 换辊状态 */
|
||||
private String changeStatus;
|
||||
|
||||
/** 上工作辊编号 */
|
||||
private String upperWrNo;
|
||||
|
||||
/** 上工作辊径(mm) */
|
||||
private BigDecimal upperWrDia;
|
||||
|
||||
/** 下工作辊编号 */
|
||||
private String lowerWrNo;
|
||||
|
||||
/** 下工作辊径(mm) */
|
||||
private BigDecimal lowerWrDia;
|
||||
|
||||
/** 上中间辊编号 */
|
||||
private String upperIrNo;
|
||||
|
||||
/** 上中间辊径(mm) */
|
||||
private BigDecimal upperIrDia;
|
||||
|
||||
/** 下中间辊编号 */
|
||||
private String lowerIrNo;
|
||||
|
||||
/** 下中间辊径(mm) */
|
||||
private BigDecimal lowerIrDia;
|
||||
|
||||
/** 上支承辊编号 */
|
||||
private String upperBrNo;
|
||||
|
||||
/** 上支承辊径(mm) */
|
||||
private BigDecimal upperBrDia;
|
||||
|
||||
/** 下支承辊编号 */
|
||||
private String lowerBrNo;
|
||||
|
||||
/** 下支承辊径(mm) */
|
||||
private BigDecimal lowerBrDia;
|
||||
|
||||
/** 删除标志 0正常 2删除 */
|
||||
private String delFlag;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.ruoyi.mill.mapper;
|
||||
|
||||
import com.ruoyi.mill.domain.MillRollChange;
|
||||
import java.util.List;
|
||||
|
||||
public interface MillRollChangeMapper {
|
||||
|
||||
List<MillRollChange> selectList(MillRollChange query);
|
||||
|
||||
MillRollChange selectLatest();
|
||||
|
||||
int insert(MillRollChange change);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.ruoyi.mill.mapper;
|
||||
|
||||
import com.ruoyi.mill.domain.MillRoll;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.List;
|
||||
|
||||
public interface MillRollMapper {
|
||||
|
||||
List<MillRoll> selectList(MillRoll query);
|
||||
|
||||
MillRoll selectById(Long rollId);
|
||||
|
||||
int insert(MillRoll roll);
|
||||
|
||||
int update(MillRoll roll);
|
||||
|
||||
int deleteByIds(Long[] ids);
|
||||
|
||||
int updateStatus(@Param("rollId") Long rollId, @Param("status") String status);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.ruoyi.mill.service;
|
||||
|
||||
import com.ruoyi.mill.domain.MillRollChange;
|
||||
import java.util.List;
|
||||
|
||||
public interface IMillRollChangeService {
|
||||
|
||||
List<MillRollChange> selectList(MillRollChange query);
|
||||
|
||||
MillRollChange selectLatest();
|
||||
|
||||
int addChange(MillRollChange change);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.ruoyi.mill.service;
|
||||
|
||||
import com.ruoyi.mill.domain.MillRoll;
|
||||
import java.util.List;
|
||||
|
||||
public interface IMillRollService {
|
||||
|
||||
List<MillRoll> selectList(MillRoll query);
|
||||
|
||||
MillRoll selectById(Long rollId);
|
||||
|
||||
int insert(MillRoll roll);
|
||||
|
||||
int update(MillRoll roll);
|
||||
|
||||
int deleteByIds(Long[] ids);
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.ruoyi.mill.service.impl;
|
||||
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.mill.domain.MillRoll;
|
||||
import com.ruoyi.mill.domain.MillRollChange;
|
||||
import com.ruoyi.mill.mapper.MillRollChangeMapper;
|
||||
import com.ruoyi.mill.mapper.MillRollMapper;
|
||||
import com.ruoyi.mill.service.IMillRollChangeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class MillRollChangeServiceImpl implements IMillRollChangeService {
|
||||
|
||||
@Autowired
|
||||
private MillRollChangeMapper changeMapper;
|
||||
|
||||
@Autowired
|
||||
private MillRollMapper rollMapper;
|
||||
|
||||
@Override
|
||||
public List<MillRollChange> selectList(MillRollChange query) {
|
||||
return changeMapper.selectList(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MillRollChange selectLatest() {
|
||||
return changeMapper.selectLatest();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int addChange(MillRollChange change) {
|
||||
String user = SecurityUtils.getUsername();
|
||||
change.setCreateBy(user);
|
||||
change.setUpdateBy(user);
|
||||
change.setDelFlag("0");
|
||||
if (change.getChangeTime() == null) {
|
||||
change.setChangeTime(new Date());
|
||||
}
|
||||
if (change.getChangeStatus() == null || change.getChangeStatus().isEmpty()) {
|
||||
change.setChangeStatus("新辊换上");
|
||||
}
|
||||
|
||||
int rows = changeMapper.insert(change);
|
||||
|
||||
// Update roll status to "Online Use" for each populated roll position
|
||||
updateRollStatusByNo(change.getUpperWrNo(), "Online Use");
|
||||
updateRollStatusByNo(change.getLowerWrNo(), "Online Use");
|
||||
updateRollStatusByNo(change.getUpperIrNo(), "Online Use");
|
||||
updateRollStatusByNo(change.getLowerIrNo(), "Online Use");
|
||||
updateRollStatusByNo(change.getUpperBrNo(), "Online Use");
|
||||
updateRollStatusByNo(change.getLowerBrNo(), "Online Use");
|
||||
|
||||
return rows;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find roll by roll_no and update its status.
|
||||
* Silently skips if roll_no is blank or roll not found.
|
||||
*/
|
||||
private void updateRollStatusByNo(String rollNo, String newStatus) {
|
||||
if (rollNo == null || rollNo.trim().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
MillRoll query = new MillRoll();
|
||||
query.setRollNo(rollNo.trim());
|
||||
List<MillRoll> list = rollMapper.selectList(query);
|
||||
if (!list.isEmpty()) {
|
||||
rollMapper.updateStatus(list.get(0).getRollId(), newStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.ruoyi.mill.service.impl;
|
||||
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.mill.domain.MillRoll;
|
||||
import com.ruoyi.mill.mapper.MillRollMapper;
|
||||
import com.ruoyi.mill.service.IMillRollService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class MillRollServiceImpl implements IMillRollService {
|
||||
|
||||
@Autowired
|
||||
private MillRollMapper rollMapper;
|
||||
|
||||
@Override
|
||||
public List<MillRoll> selectList(MillRoll query) {
|
||||
return rollMapper.selectList(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MillRoll selectById(Long rollId) {
|
||||
return rollMapper.selectById(rollId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int insert(MillRoll roll) {
|
||||
String user = SecurityUtils.getUsername();
|
||||
roll.setCreateBy(user);
|
||||
roll.setUpdateBy(user);
|
||||
roll.setDelFlag("0");
|
||||
if (roll.getStatus() == null || roll.getStatus().isEmpty()) {
|
||||
roll.setStatus("Offline");
|
||||
}
|
||||
return rollMapper.insert(roll);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(MillRoll roll) {
|
||||
roll.setUpdateBy(SecurityUtils.getUsername());
|
||||
return rollMapper.update(roll);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteByIds(Long[] ids) {
|
||||
return rollMapper.deleteByIds(ids);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.mill.mapper.MillRollChangeMapper">
|
||||
|
||||
<resultMap id="BaseRM" type="com.ruoyi.mill.domain.MillRollChange">
|
||||
<id property="changeId" column="change_id"/>
|
||||
<result property="changeTime" column="change_time"/>
|
||||
<result property="changeStatus" column="change_status"/>
|
||||
<result property="upperWrNo" column="upper_wr_no"/>
|
||||
<result property="upperWrDia" column="upper_wr_dia"/>
|
||||
<result property="lowerWrNo" column="lower_wr_no"/>
|
||||
<result property="lowerWrDia" column="lower_wr_dia"/>
|
||||
<result property="upperIrNo" column="upper_ir_no"/>
|
||||
<result property="upperIrDia" column="upper_ir_dia"/>
|
||||
<result property="lowerIrNo" column="lower_ir_no"/>
|
||||
<result property="lowerIrDia" column="lower_ir_dia"/>
|
||||
<result property="upperBrNo" column="upper_br_no"/>
|
||||
<result property="upperBrDia" column="upper_br_dia"/>
|
||||
<result property="lowerBrNo" column="lower_br_no"/>
|
||||
<result property="lowerBrDia" column="lower_br_dia"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="cols">
|
||||
change_id, change_time, change_status,
|
||||
upper_wr_no, upper_wr_dia, lower_wr_no, lower_wr_dia,
|
||||
upper_ir_no, upper_ir_dia, lower_ir_no, lower_ir_dia,
|
||||
upper_br_no, upper_br_dia, lower_br_no, lower_br_dia,
|
||||
del_flag, create_by, create_time, update_by, update_time, remark
|
||||
</sql>
|
||||
|
||||
<select id="selectList" resultMap="BaseRM">
|
||||
SELECT <include refid="cols"/> FROM mill_roll_change
|
||||
WHERE del_flag = '0'
|
||||
<if test="changeStatus != null and changeStatus != ''">
|
||||
AND change_status = #{changeStatus}
|
||||
</if>
|
||||
ORDER BY change_time DESC
|
||||
</select>
|
||||
|
||||
<select id="selectLatest" resultMap="BaseRM">
|
||||
SELECT <include refid="cols"/> FROM mill_roll_change
|
||||
WHERE del_flag = '0'
|
||||
ORDER BY change_id DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<insert id="insert" useGeneratedKeys="true" keyProperty="changeId">
|
||||
INSERT INTO mill_roll_change (
|
||||
change_time, change_status,
|
||||
upper_wr_no, upper_wr_dia, lower_wr_no, lower_wr_dia,
|
||||
upper_ir_no, upper_ir_dia, lower_ir_no, lower_ir_dia,
|
||||
upper_br_no, upper_br_dia, lower_br_no, lower_br_dia,
|
||||
del_flag, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES (
|
||||
#{changeTime}, #{changeStatus},
|
||||
#{upperWrNo}, #{upperWrDia}, #{lowerWrNo}, #{lowerWrDia},
|
||||
#{upperIrNo}, #{upperIrDia}, #{lowerIrNo}, #{lowerIrDia},
|
||||
#{upperBrNo}, #{upperBrDia}, #{lowerBrNo}, #{lowerBrDia},
|
||||
'0', #{createBy}, NOW(), #{updateBy}, NOW(), #{remark}
|
||||
)
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
92
ruoyi-mill/src/main/resources/mapper/mill/MillRollMapper.xml
Normal file
92
ruoyi-mill/src/main/resources/mapper/mill/MillRollMapper.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.mill.mapper.MillRollMapper">
|
||||
|
||||
<resultMap id="BaseRM" type="com.ruoyi.mill.domain.MillRoll">
|
||||
<id property="rollId" column="roll_id"/>
|
||||
<result property="rollNo" column="roll_no"/>
|
||||
<result property="rollType" column="roll_type"/>
|
||||
<result property="status" column="status"/>
|
||||
<result property="initialDia" column="initial_dia"/>
|
||||
<result property="currentDia" column="current_dia"/>
|
||||
<result property="flag" column="flag"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="cols">
|
||||
roll_id, roll_no, roll_type, status, initial_dia, current_dia,
|
||||
flag, del_flag, create_by, create_time, update_by, update_time, remark
|
||||
</sql>
|
||||
|
||||
<select id="selectList" resultMap="BaseRM">
|
||||
SELECT <include refid="cols"/> FROM mill_roll
|
||||
WHERE del_flag = '0'
|
||||
<if test="rollNo != null and rollNo != ''">
|
||||
AND roll_no LIKE CONCAT('%', #{rollNo}, '%')
|
||||
</if>
|
||||
<if test="rollType != null and rollType != ''">
|
||||
AND roll_type = #{rollType}
|
||||
</if>
|
||||
<if test="status != null and status != ''">
|
||||
AND status = #{status}
|
||||
</if>
|
||||
ORDER BY roll_id ASC
|
||||
</select>
|
||||
|
||||
<select id="selectById" resultMap="BaseRM">
|
||||
SELECT <include refid="cols"/> FROM mill_roll
|
||||
WHERE roll_id = #{rollId} AND del_flag = '0'
|
||||
</select>
|
||||
|
||||
<insert id="insert" useGeneratedKeys="true" keyProperty="rollId">
|
||||
INSERT INTO mill_roll (
|
||||
roll_no, roll_type, status, initial_dia, current_dia,
|
||||
flag, del_flag, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES (
|
||||
#{rollNo}, #{rollType},
|
||||
<choose>
|
||||
<when test="status != null and status != ''">#{status}</when>
|
||||
<otherwise>'Offline'</otherwise>
|
||||
</choose>,
|
||||
#{initialDia}, #{currentDia},
|
||||
#{flag}, '0',
|
||||
#{createBy}, NOW(), #{updateBy}, NOW(), #{remark}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="update">
|
||||
UPDATE mill_roll
|
||||
<set>
|
||||
<if test="rollNo != null and rollNo != ''">roll_no = #{rollNo},</if>
|
||||
<if test="rollType != null and rollType != ''">roll_type = #{rollType},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="initialDia != null">initial_dia = #{initialDia},</if>
|
||||
<if test="currentDia != null">current_dia = #{currentDia},</if>
|
||||
<if test="flag != null">flag = #{flag},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
update_by = #{updateBy},
|
||||
update_time = NOW()
|
||||
</set>
|
||||
WHERE roll_id = #{rollId} AND del_flag = '0'
|
||||
</update>
|
||||
|
||||
<update id="deleteByIds">
|
||||
UPDATE mill_roll SET del_flag = '2', update_time = NOW()
|
||||
WHERE roll_id IN
|
||||
<foreach collection="array" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<update id="updateStatus">
|
||||
UPDATE mill_roll SET status = #{status}, update_time = NOW()
|
||||
WHERE roll_id = #{rollId}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
33
ruoyi-ui/src/api/mill/roll.js
Normal file
33
ruoyi-ui/src/api/mill/roll.js
Normal file
@@ -0,0 +1,33 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listRoll(query) {
|
||||
return request({ url: '/mill/roll/list', method: 'get', params: query })
|
||||
}
|
||||
|
||||
export function getRoll(id) {
|
||||
return request({ url: `/mill/roll/${id}`, method: 'get' })
|
||||
}
|
||||
|
||||
export function addRoll(data) {
|
||||
return request({ url: '/mill/roll', method: 'post', data })
|
||||
}
|
||||
|
||||
export function updateRoll(data) {
|
||||
return request({ url: '/mill/roll', method: 'put', data })
|
||||
}
|
||||
|
||||
export function delRoll(ids) {
|
||||
return request({ url: `/mill/roll/${ids}`, method: 'delete' })
|
||||
}
|
||||
|
||||
export function listRollChange(query) {
|
||||
return request({ url: '/mill/rollChange/list', method: 'get', params: query })
|
||||
}
|
||||
|
||||
export function getCurrentRolls() {
|
||||
return request({ url: '/mill/rollChange/current', method: 'get' })
|
||||
}
|
||||
|
||||
export function addRollChange(data) {
|
||||
return request({ url: '/mill/rollChange', method: 'post', data })
|
||||
}
|
||||
@@ -205,6 +205,19 @@ export const constantRoutes = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/mill',
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
children: [
|
||||
{
|
||||
path: 'roll',
|
||||
component: () => import('@/views/mill/roll'),
|
||||
name: 'MillRoll',
|
||||
meta: { title: '轧辊管理', icon: '' }
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
|
||||
// 动态路由,基于用户权限动态去加载
|
||||
|
||||
822
ruoyi-ui/src/views/mill/roll.vue
Normal file
822
ruoyi-ui/src/views/mill/roll.vue
Normal file
@@ -0,0 +1,822 @@
|
||||
<template>
|
||||
<div class="roll-page">
|
||||
|
||||
<!-- ===== TOP: 换辊数据 ===== -->
|
||||
<div class="change-section">
|
||||
<div class="section-header"><span>换辊数据</span></div>
|
||||
<el-table :data="changeList" border size="mini" class="change-table"
|
||||
height="calc(35vh - 80px)"
|
||||
:row-class-name="changeRowClass">
|
||||
<el-table-column label="换辊时间" prop="changeTime" width="140" align="center" />
|
||||
<el-table-column label="状态" prop="changeStatus" width="90" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<span class="status-tag">{{ row.changeStatus }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="上工作辊编号" prop="upperWrNo" width="110" />
|
||||
<el-table-column label="上工作辊径" prop="upperWrDia" width="95" align="right" />
|
||||
<el-table-column label="下工作辊编号" prop="lowerWrNo" width="110" />
|
||||
<el-table-column label="下工作辊径" prop="lowerWrDia" width="95" align="right" />
|
||||
<el-table-column label="上中间辊编号" prop="upperIrNo" width="110" />
|
||||
<el-table-column label="上中间辊径" prop="upperIrDia" width="95" align="right" />
|
||||
<el-table-column label="下中间辊编号" prop="lowerIrNo" width="110" />
|
||||
<el-table-column label="下中间辊径" prop="lowerIrDia" width="95" align="right" />
|
||||
<el-table-column label="上支承辊编号" prop="upperBrNo" width="110" />
|
||||
<el-table-column label="上支承辊径" prop="upperBrDia" width="95" align="right" />
|
||||
<el-table-column label="下支承辊编号" prop="lowerBrNo" width="110" />
|
||||
<el-table-column label="下支承辊径" prop="lowerBrDia" width="95" align="right" />
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- ===== BOTTOM: Two panels ===== -->
|
||||
<div class="bottom-section">
|
||||
|
||||
<!-- LEFT: 当前辊系参数 graphical display -->
|
||||
<div class="rolls-panel">
|
||||
<div class="section-header"><span>当前辊系参数</span></div>
|
||||
<div class="rolls-body">
|
||||
<div class="roll-stack">
|
||||
|
||||
<!-- 上支承辊 -->
|
||||
<div class="roll-row">
|
||||
<div class="roll-circle br-circle">
|
||||
<span class="roll-abbr">上支承辊</span>
|
||||
</div>
|
||||
<div class="roll-info">
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊号</span>
|
||||
<span class="info-val">{{ currentRolls.upperBrNo || '--' }}</span>
|
||||
</div>
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊径</span>
|
||||
<span class="info-val">{{ currentRolls.upperBrDia != null ? currentRolls.upperBrDia + ' mm' : '--' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stack-connector"></div>
|
||||
|
||||
<!-- 上中间辊 -->
|
||||
<div class="roll-row">
|
||||
<div class="roll-circle ir-circle">
|
||||
<span class="roll-abbr">上中间辊</span>
|
||||
</div>
|
||||
<div class="roll-info">
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊号</span>
|
||||
<span class="info-val">{{ currentRolls.upperIrNo || '--' }}</span>
|
||||
</div>
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊径</span>
|
||||
<span class="info-val">{{ currentRolls.upperIrDia != null ? currentRolls.upperIrDia + ' mm' : '--' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stack-connector"></div>
|
||||
|
||||
<!-- 上工作辊 -->
|
||||
<div class="roll-row">
|
||||
<div class="roll-circle wr-circle">
|
||||
<span class="roll-abbr">上工作辊</span>
|
||||
</div>
|
||||
<div class="roll-info">
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊号</span>
|
||||
<span class="info-val">{{ currentRolls.upperWrNo || '--' }}</span>
|
||||
</div>
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊径</span>
|
||||
<span class="info-val">{{ currentRolls.upperWrDia != null ? currentRolls.upperWrDia + ' mm' : '--' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="nip-line">
|
||||
<span class="nip-label">轧制线</span>
|
||||
</div>
|
||||
|
||||
<!-- 下工作辊 -->
|
||||
<div class="roll-row">
|
||||
<div class="roll-circle wr-circle">
|
||||
<span class="roll-abbr">下工作辊</span>
|
||||
</div>
|
||||
<div class="roll-info">
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊号</span>
|
||||
<span class="info-val">{{ currentRolls.lowerWrNo || '--' }}</span>
|
||||
</div>
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊径</span>
|
||||
<span class="info-val">{{ currentRolls.lowerWrDia != null ? currentRolls.lowerWrDia + ' mm' : '--' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stack-connector"></div>
|
||||
|
||||
<!-- 下中间辊 -->
|
||||
<div class="roll-row">
|
||||
<div class="roll-circle ir-circle">
|
||||
<span class="roll-abbr">下中间辊</span>
|
||||
</div>
|
||||
<div class="roll-info">
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊号</span>
|
||||
<span class="info-val">{{ currentRolls.lowerIrNo || '--' }}</span>
|
||||
</div>
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊径</span>
|
||||
<span class="info-val">{{ currentRolls.lowerIrDia != null ? currentRolls.lowerIrDia + ' mm' : '--' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stack-connector"></div>
|
||||
|
||||
<!-- 下支承辊 -->
|
||||
<div class="roll-row">
|
||||
<div class="roll-circle br-circle">
|
||||
<span class="roll-abbr">下支承辊</span>
|
||||
</div>
|
||||
<div class="roll-info">
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊号</span>
|
||||
<span class="info-val">{{ currentRolls.lowerBrNo || '--' }}</span>
|
||||
</div>
|
||||
<div class="roll-info-row">
|
||||
<span class="info-label">辊径</span>
|
||||
<span class="info-val">{{ currentRolls.lowerBrDia != null ? currentRolls.lowerBrDia + ' mm' : '--' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 换辊时间 -->
|
||||
<div class="change-time-bar">
|
||||
<span class="ct-label">换辊时间:</span>
|
||||
<span class="ct-val">{{ currentRolls.changeTime || '--' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- RIGHT: 轧辊库数据 -->
|
||||
<div class="rolldb-panel">
|
||||
<div class="section-header"><span>轧辊库数据</span></div>
|
||||
|
||||
<!-- Query bar -->
|
||||
<div class="query-bar">
|
||||
<el-select v-model="queryField" size="mini" style="width:110px;margin-right:6px">
|
||||
<el-option label="轧辊编号" value="rollNo" />
|
||||
<el-option label="轧辊类型" value="rollType" />
|
||||
<el-option label="使用状态" value="status" />
|
||||
</el-select>
|
||||
<el-input v-model="queryValue" size="mini" placeholder="查询条件" style="width:140px;margin-right:6px"
|
||||
@keyup.enter.native="handleConditionQuery" clearable />
|
||||
<el-button size="mini" type="primary" icon="el-icon-search" @click="handleConditionQuery">条件查询</el-button>
|
||||
<el-button size="mini" icon="el-icon-refresh" @click="handleAllQuery">全部查询</el-button>
|
||||
</div>
|
||||
|
||||
<!-- Action buttons -->
|
||||
<div class="action-bar">
|
||||
<el-button size="mini" type="primary" icon="el-icon-refresh-right" @click="openChangeRollDialog">更换轧辊</el-button>
|
||||
<el-button size="mini" icon="el-icon-plus" @click="openAddDialog">轧辊添加</el-button>
|
||||
<el-button size="mini" icon="el-icon-edit" :disabled="!selectedRoll" @click="openEditDialog">轧辊修改</el-button>
|
||||
<el-button size="mini" icon="el-icon-delete" :disabled="!selectedRoll" @click="handleDelete">轧辊删除</el-button>
|
||||
</div>
|
||||
|
||||
<!-- Roll library table -->
|
||||
<el-table :data="rollList" border size="mini" class="roll-table"
|
||||
height="calc(65vh - 160px)"
|
||||
highlight-current-row
|
||||
@current-change="handleRollSelect">
|
||||
<el-table-column label="ID" prop="rollId" width="60" align="center" />
|
||||
<el-table-column label="轧辊编号" prop="rollNo" width="110" />
|
||||
<el-table-column label="轧辊类型" prop="rollType" width="80" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<span :class="rollTypeClass(row.rollType)">{{ row.rollType }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="使用状态" prop="status" width="100" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<span :class="rollStatusClass(row.status)">{{ row.status }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="初始辊径" prop="initialDia" width="85" align="right">
|
||||
<template slot-scope="{ row }">{{ row.initialDia }} mm</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="当前辊径" prop="currentDia" width="85" align="right">
|
||||
<template slot-scope="{ row }">{{ row.currentDia }} mm</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="标志位" prop="flag" width="65" align="center" />
|
||||
<el-table-column label="备注" prop="remark" min-width="80" />
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ===== Dialog: 轧辊添加/修改 ===== -->
|
||||
<el-dialog :title="rollDialogTitle" :visible.sync="rollDialogVisible"
|
||||
width="480px" append-to-body>
|
||||
<el-form :model="rollForm" :rules="rollRules" ref="rollFormRef"
|
||||
size="mini" label-width="90px">
|
||||
<el-form-item label="轧辊编号" prop="rollNo">
|
||||
<el-input v-model="rollForm.rollNo" placeholder="请输入轧辊编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="轧辊类型" prop="rollType">
|
||||
<el-select v-model="rollForm.rollType" placeholder="请选择" style="width:100%">
|
||||
<el-option label="WR (工作辊)" value="WR" />
|
||||
<el-option label="IR (中间辊)" value="IR" />
|
||||
<el-option label="BR (支承辊)" value="BR" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="使用状态">
|
||||
<el-select v-model="rollForm.status" placeholder="请选择" style="width:100%">
|
||||
<el-option label="Offline" value="Offline" />
|
||||
<el-option label="Online Use" value="Online Use" />
|
||||
<el-option label="Scrap" value="Scrap" />
|
||||
<el-option label="Grinding" value="Grinding" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="初始辊径(mm)">
|
||||
<el-input-number v-model="rollForm.initialDia" :precision="2" :step="0.01"
|
||||
:min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="当前辊径(mm)">
|
||||
<el-input-number v-model="rollForm.currentDia" :precision="2" :step="0.01"
|
||||
:min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标志位">
|
||||
<el-input v-model="rollForm.flag" placeholder="如 U / D / 0" maxlength="4" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="rollForm.remark" type="textarea" :rows="2" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer">
|
||||
<el-button size="mini" @click="rollDialogVisible = false">取 消</el-button>
|
||||
<el-button size="mini" type="primary" @click="submitRollForm">保 存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<!-- ===== Dialog: 更换轧辊 ===== -->
|
||||
<el-dialog title="更换轧辊" :visible.sync="changeDialogVisible"
|
||||
width="640px" append-to-body>
|
||||
<el-form :model="changeForm" ref="changeFormRef" size="mini" label-width="110px">
|
||||
<el-form-item label="换辊状态">
|
||||
<el-select v-model="changeForm.changeStatus" style="width:180px">
|
||||
<el-option label="新辊换上" value="新辊换上" />
|
||||
<el-option label="磨后换上" value="磨后换上" />
|
||||
<el-option label="换辊检修" value="换辊检修" />
|
||||
<el-option label="计划换辊" value="计划换辊" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<div class="change-dialog-grid">
|
||||
<!-- 上支承辊 -->
|
||||
<div class="change-group-header">支承辊</div>
|
||||
<el-form-item label="上支承辊编号">
|
||||
<el-input v-model="changeForm.upperBrNo" placeholder="辊号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上支承辊径(mm)">
|
||||
<el-input-number v-model="changeForm.upperBrDia" :precision="2" :min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下支承辊编号">
|
||||
<el-input v-model="changeForm.lowerBrNo" placeholder="辊号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下支承辊径(mm)">
|
||||
<el-input-number v-model="changeForm.lowerBrDia" :precision="2" :min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
|
||||
<!-- 中间辊 -->
|
||||
<div class="change-group-header">中间辊</div>
|
||||
<el-form-item label="上中间辊编号">
|
||||
<el-input v-model="changeForm.upperIrNo" placeholder="辊号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上中间辊径(mm)">
|
||||
<el-input-number v-model="changeForm.upperIrDia" :precision="2" :min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下中间辊编号">
|
||||
<el-input v-model="changeForm.lowerIrNo" placeholder="辊号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下中间辊径(mm)">
|
||||
<el-input-number v-model="changeForm.lowerIrDia" :precision="2" :min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
|
||||
<!-- 工作辊 -->
|
||||
<div class="change-group-header">工作辊</div>
|
||||
<el-form-item label="上工作辊编号">
|
||||
<el-input v-model="changeForm.upperWrNo" placeholder="辊号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上工作辊径(mm)">
|
||||
<el-input-number v-model="changeForm.upperWrDia" :precision="2" :min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下工作辊编号">
|
||||
<el-input v-model="changeForm.lowerWrNo" placeholder="辊号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下工作辊径(mm)">
|
||||
<el-input-number v-model="changeForm.lowerWrDia" :precision="2" :min="0" style="width:100%" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="changeForm.remark" type="textarea" :rows="2" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer">
|
||||
<el-button size="mini" @click="changeDialogVisible = false">取 消</el-button>
|
||||
<el-button size="mini" type="primary" @click="submitChangeForm">确认换辊</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
listRoll, getRoll, addRoll, updateRoll, delRoll,
|
||||
listRollChange, getCurrentRolls, addRollChange
|
||||
} from '@/api/mill/roll'
|
||||
|
||||
export default {
|
||||
name: 'MillRoll',
|
||||
data() {
|
||||
return {
|
||||
// 换辊数据
|
||||
changeList: [],
|
||||
|
||||
// 当前辊系
|
||||
currentRolls: {},
|
||||
|
||||
// 轧辊库
|
||||
rollList: [],
|
||||
selectedRoll: null,
|
||||
|
||||
// 查询
|
||||
queryField: 'rollNo',
|
||||
queryValue: '',
|
||||
|
||||
// 轧辊添加/修改 dialog
|
||||
rollDialogVisible: false,
|
||||
rollDialogTitle: '轧辊添加',
|
||||
isNewRoll: true,
|
||||
rollForm: {
|
||||
rollId: null,
|
||||
rollNo: '',
|
||||
rollType: 'WR',
|
||||
status: 'Offline',
|
||||
initialDia: 0,
|
||||
currentDia: 0,
|
||||
flag: '',
|
||||
remark: ''
|
||||
},
|
||||
rollRules: {
|
||||
rollNo: [{ required: true, message: '请输入轧辊编号', trigger: 'blur' }],
|
||||
rollType: [{ required: true, message: '请选择轧辊类型', trigger: 'change' }]
|
||||
},
|
||||
|
||||
// 换辊 dialog
|
||||
changeDialogVisible: false,
|
||||
changeForm: {
|
||||
changeStatus: '新辊换上',
|
||||
upperWrNo: '', upperWrDia: 0,
|
||||
lowerWrNo: '', lowerWrDia: 0,
|
||||
upperIrNo: '', upperIrDia: 0,
|
||||
lowerIrNo: '', lowerIrDia: 0,
|
||||
upperBrNo: '', upperBrDia: 0,
|
||||
lowerBrNo: '', lowerBrDia: 0,
|
||||
remark: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.loadChangeList()
|
||||
this.loadCurrentRolls()
|
||||
this.loadRollList()
|
||||
},
|
||||
|
||||
methods: {
|
||||
// ===== Load data =====
|
||||
loadChangeList() {
|
||||
listRollChange({}).then(res => {
|
||||
this.changeList = res.rows || []
|
||||
})
|
||||
},
|
||||
|
||||
loadCurrentRolls() {
|
||||
getCurrentRolls().then(res => {
|
||||
this.currentRolls = res.data || {}
|
||||
})
|
||||
},
|
||||
|
||||
loadRollList(query) {
|
||||
listRoll(query || {}).then(res => {
|
||||
this.rollList = res.rows || []
|
||||
})
|
||||
},
|
||||
|
||||
// ===== Query =====
|
||||
handleConditionQuery() {
|
||||
const q = {}
|
||||
if (this.queryValue && this.queryValue.trim()) {
|
||||
q[this.queryField] = this.queryValue.trim()
|
||||
}
|
||||
this.loadRollList(q)
|
||||
},
|
||||
|
||||
handleAllQuery() {
|
||||
this.queryValue = ''
|
||||
this.loadRollList({})
|
||||
},
|
||||
|
||||
// ===== Roll table =====
|
||||
handleRollSelect(row) {
|
||||
this.selectedRoll = row || null
|
||||
},
|
||||
|
||||
// ===== Add roll =====
|
||||
openAddDialog() {
|
||||
this.isNewRoll = true
|
||||
this.rollDialogTitle = '轧辊添加'
|
||||
this.rollForm = {
|
||||
rollId: null,
|
||||
rollNo: '',
|
||||
rollType: 'WR',
|
||||
status: 'Offline',
|
||||
initialDia: 0,
|
||||
currentDia: 0,
|
||||
flag: '',
|
||||
remark: ''
|
||||
}
|
||||
this.rollDialogVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.rollFormRef && this.$refs.rollFormRef.clearValidate()
|
||||
})
|
||||
},
|
||||
|
||||
// ===== Edit roll =====
|
||||
openEditDialog() {
|
||||
if (!this.selectedRoll) return
|
||||
this.isNewRoll = false
|
||||
this.rollDialogTitle = '轧辊修改'
|
||||
this.rollForm = { ...this.selectedRoll }
|
||||
this.rollDialogVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.rollFormRef && this.$refs.rollFormRef.clearValidate()
|
||||
})
|
||||
},
|
||||
|
||||
submitRollForm() {
|
||||
this.$refs.rollFormRef.validate(valid => {
|
||||
if (!valid) return
|
||||
const api = this.isNewRoll ? addRoll : updateRoll
|
||||
api(this.rollForm).then(() => {
|
||||
this.$message.success('保存成功')
|
||||
this.rollDialogVisible = false
|
||||
this.loadRollList()
|
||||
}).catch(() => {
|
||||
this.$message.error('保存失败,请检查输入')
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// ===== Delete roll =====
|
||||
handleDelete() {
|
||||
if (!this.selectedRoll) return
|
||||
this.$confirm(`确定删除轧辊「${this.selectedRoll.rollNo}」?`, '提示', { type: 'warning' }).then(() => {
|
||||
delRoll(this.selectedRoll.rollId).then(() => {
|
||||
this.$message.success('删除成功')
|
||||
this.selectedRoll = null
|
||||
this.loadRollList()
|
||||
})
|
||||
}).catch(() => {})
|
||||
},
|
||||
|
||||
// ===== Change rolls =====
|
||||
openChangeRollDialog() {
|
||||
// Pre-fill from current rolls
|
||||
const c = this.currentRolls || {}
|
||||
this.changeForm = {
|
||||
changeStatus: '新辊换上',
|
||||
upperWrNo: c.upperWrNo || '',
|
||||
upperWrDia: c.upperWrDia != null ? Number(c.upperWrDia) : 0,
|
||||
lowerWrNo: c.lowerWrNo || '',
|
||||
lowerWrDia: c.lowerWrDia != null ? Number(c.lowerWrDia) : 0,
|
||||
upperIrNo: c.upperIrNo || '',
|
||||
upperIrDia: c.upperIrDia != null ? Number(c.upperIrDia) : 0,
|
||||
lowerIrNo: c.lowerIrNo || '',
|
||||
lowerIrDia: c.lowerIrDia != null ? Number(c.lowerIrDia) : 0,
|
||||
upperBrNo: c.upperBrNo || '',
|
||||
upperBrDia: c.upperBrDia != null ? Number(c.upperBrDia) : 0,
|
||||
lowerBrNo: c.lowerBrNo || '',
|
||||
lowerBrDia: c.lowerBrDia != null ? Number(c.lowerBrDia) : 0,
|
||||
remark: ''
|
||||
}
|
||||
this.changeDialogVisible = true
|
||||
},
|
||||
|
||||
submitChangeForm() {
|
||||
addRollChange(this.changeForm).then(() => {
|
||||
this.$message.success('换辊记录已保存')
|
||||
this.changeDialogVisible = false
|
||||
this.loadChangeList()
|
||||
this.loadCurrentRolls()
|
||||
this.loadRollList()
|
||||
}).catch(() => {
|
||||
this.$message.error('换辊失败,请重试')
|
||||
})
|
||||
},
|
||||
|
||||
// ===== Style helpers =====
|
||||
changeRowClass({ rowIndex }) {
|
||||
return rowIndex === 0 ? 'row-latest' : ''
|
||||
},
|
||||
|
||||
rollTypeClass(type) {
|
||||
return { WR: 'type-wr', IR: 'type-ir', BR: 'type-br' }[type] || ''
|
||||
},
|
||||
|
||||
rollStatusClass(status) {
|
||||
return {
|
||||
'Online Use': 'sts-online',
|
||||
'Offline': 'sts-offline',
|
||||
'Scrap': 'sts-scrap',
|
||||
'Grinding': 'sts-grinding'
|
||||
}[status] || ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.roll-page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: calc(100vh - 84px);
|
||||
background: #f0f2f5;
|
||||
padding: 8px 12px;
|
||||
box-sizing: border-box;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
background: #1c2b3a;
|
||||
color: #ecf0f1;
|
||||
padding: 6px 12px;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-shrink: 0;
|
||||
border-radius: 3px 3px 0 0;
|
||||
}
|
||||
|
||||
/* ===== TOP section ===== */
|
||||
.change-section {
|
||||
flex-shrink: 0;
|
||||
height: 35vh;
|
||||
background: #fff;
|
||||
border: 1px solid #dde1e6;
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.change-table {
|
||||
::v-deep .row-latest td {
|
||||
background: #e8f0fb !important;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
.status-tag {
|
||||
font-size: 11px;
|
||||
color: #1d4e89;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* ===== BOTTOM section ===== */
|
||||
.bottom-section {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
gap: 8px;
|
||||
overflow: hidden;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* ===== LEFT: 当前辊系参数 ===== */
|
||||
.rolls-panel {
|
||||
width: 280px;
|
||||
flex-shrink: 0;
|
||||
background: #fff;
|
||||
border: 1px solid #dde1e6;
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.rolls-body {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 10px 12px 6px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.roll-stack {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.roll-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.roll-circle {
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
flex-direction: column;
|
||||
box-shadow: inset 0 2px 4px rgba(0,0,0,0.3), 0 1px 3px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.br-circle {
|
||||
background: radial-gradient(circle at 35% 35%, #2e4a6e, #1c2b3a);
|
||||
border: 2px solid #3d6494;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.ir-circle {
|
||||
background: radial-gradient(circle at 35% 35%, #25446a, #182538);
|
||||
border: 2px solid #3a5a86;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.wr-circle {
|
||||
background: radial-gradient(circle at 35% 35%, #1f3a5c, #152232);
|
||||
border: 2px solid #2d4d73;
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
}
|
||||
|
||||
.roll-abbr {
|
||||
color: #a9bcd0;
|
||||
font-size: 9px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
line-height: 1.2;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.roll-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 3px;
|
||||
}
|
||||
|
||||
.roll-info-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-size: 11px;
|
||||
color: #909399;
|
||||
width: 28px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.info-val {
|
||||
font-size: 11px;
|
||||
color: #1d4e89;
|
||||
font-weight: 600;
|
||||
font-family: 'Courier New', monospace;
|
||||
background: #f0f4fa;
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #d0daea;
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
.stack-connector {
|
||||
width: 2px;
|
||||
height: 10px;
|
||||
background: #3d6494;
|
||||
margin-left: 27px;
|
||||
}
|
||||
|
||||
.nip-line {
|
||||
width: 100%;
|
||||
border-top: 2px dashed #1d4e89;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 4px 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nip-label {
|
||||
font-size: 10px;
|
||||
color: #1d4e89;
|
||||
background: #fff;
|
||||
padding: 0 6px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: -8px;
|
||||
}
|
||||
|
||||
.change-time-bar {
|
||||
padding: 8px 0 4px;
|
||||
border-top: 1px solid #e4e7ed;
|
||||
margin-top: 6px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.ct-label {
|
||||
font-size: 11px;
|
||||
color: #909399;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.ct-val {
|
||||
font-size: 12px;
|
||||
color: #1d4e89;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* ===== RIGHT: 轧辊库数据 ===== */
|
||||
.rolldb-panel {
|
||||
flex: 1;
|
||||
background: #fff;
|
||||
border: 1px solid #dde1e6;
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.query-bar {
|
||||
padding: 8px 12px 4px;
|
||||
border-bottom: 1px solid #eaeef2;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.action-bar {
|
||||
padding: 6px 12px;
|
||||
border-bottom: 1px solid #eaeef2;
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.roll-table {
|
||||
flex: 1;
|
||||
::v-deep .el-table__row.current-row td {
|
||||
background: #e8f0fb !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Roll type badges */
|
||||
.type-wr { color: #1d4e89; font-weight: 700; }
|
||||
.type-ir { color: #5a5a9a; font-weight: 700; }
|
||||
.type-br { color: #4a6a8a; font-weight: 700; }
|
||||
|
||||
/* Roll status */
|
||||
.sts-online { color: #1d4e89; font-weight: 700; }
|
||||
.sts-offline { color: #909399; }
|
||||
.sts-scrap { color: #c0392b; }
|
||||
.sts-grinding { color: #d68910; }
|
||||
|
||||
/* ===== Change dialog ===== */
|
||||
.change-dialog-grid {
|
||||
.change-group-header {
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
background: #1c2b3a;
|
||||
padding: 3px 10px;
|
||||
border-radius: 2px;
|
||||
margin: 8px 0 6px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
44
sql/mill_roll_tables.sql
Normal file
44
sql/mill_roll_tables.sql
Normal file
@@ -0,0 +1,44 @@
|
||||
DROP TABLE IF EXISTS `mill_roll`;
|
||||
CREATE TABLE `mill_roll` (
|
||||
`roll_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`roll_no` varchar(20) NOT NULL COMMENT '轧辊编号',
|
||||
`roll_type` char(2) NOT NULL COMMENT '轧辊类型 WR/IR/BR',
|
||||
`status` varchar(20) DEFAULT 'Offline' COMMENT '使用状态',
|
||||
`initial_dia` decimal(8,2) DEFAULT 0.00 COMMENT '初始辊径(mm)',
|
||||
`current_dia` decimal(8,2) DEFAULT 0.00 COMMENT '当前辊径(mm)',
|
||||
`flag` varchar(4) DEFAULT '' COMMENT '标志位 U/D/0等',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志 0正常 2删除',
|
||||
PRIMARY KEY (`roll_id`),
|
||||
UNIQUE KEY `uk_roll_no` (`roll_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='轧辊库';
|
||||
|
||||
DROP TABLE IF EXISTS `mill_roll_change`;
|
||||
CREATE TABLE `mill_roll_change` (
|
||||
`change_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`change_time` datetime DEFAULT NULL COMMENT '换辊时间',
|
||||
`change_status` varchar(20) DEFAULT '' COMMENT '换辊状态',
|
||||
`upper_wr_no` varchar(20) DEFAULT '' COMMENT '上工作辊编号',
|
||||
`upper_wr_dia` decimal(8,2) DEFAULT 0.00 COMMENT '上工作辊径(mm)',
|
||||
`lower_wr_no` varchar(20) DEFAULT '' COMMENT '下工作辊编号',
|
||||
`lower_wr_dia` decimal(8,2) DEFAULT 0.00 COMMENT '下工作辊径(mm)',
|
||||
`upper_ir_no` varchar(20) DEFAULT '' COMMENT '上中间辊编号',
|
||||
`upper_ir_dia` decimal(8,2) DEFAULT 0.00 COMMENT '上中间辊径(mm)',
|
||||
`lower_ir_no` varchar(20) DEFAULT '' COMMENT '下中间辊编号',
|
||||
`lower_ir_dia` decimal(8,2) DEFAULT 0.00 COMMENT '下中间辊径(mm)',
|
||||
`upper_br_no` varchar(20) DEFAULT '' COMMENT '上支承辊编号',
|
||||
`upper_br_dia` decimal(8,2) DEFAULT 0.00 COMMENT '上支承辊径(mm)',
|
||||
`lower_br_no` varchar(20) DEFAULT '' COMMENT '下支承辊编号',
|
||||
`lower_br_dia` decimal(8,2) DEFAULT 0.00 COMMENT '下支承辊径(mm)',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志 0正常 2删除',
|
||||
PRIMARY KEY (`change_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='换辊记录';
|
||||
Reference in New Issue
Block a user