Merge remote-tracking branch 'origin/0.8.X' into 0.8.X

This commit is contained in:
2026-06-01 13:51:00 +08:00
2 changed files with 195 additions and 4 deletions

View File

@@ -71,6 +71,9 @@ public class MesRollInfo extends BaseEntity {
/** 厂家 */
private String manufacturer;
/** 备注 */
private String remark;
@TableLogic
private Integer delFlag;
}

View File

@@ -49,6 +49,7 @@
<div slot="header" class="card-header">
<span class="card-title"><i class="el-icon-s-order" /> 轧辊列表</span>
<span class="card-count">{{ filteredRolls.length }}</span>
<el-button size="mini" type="text" icon="el-icon-plus" style="margin-left:auto" @click="handleAddRoll">新增轧辊</el-button>
</div>
<div v-loading="rollLoading" class="roll-list">
<div
@@ -72,7 +73,7 @@
</div>
<!-- 右侧明细 & 磨削台账 -->
<div class="detail-panel" v-loading="grindLoading">
<div v-loading="grindLoading" class="detail-panel">
<template v-if="!selectedRoll">
<div class="grind-empty"><i class="el-icon-arrow-left" /> 请从左侧选择一个轧辊</div>
</template>
@@ -82,6 +83,8 @@
<el-card shadow="never" class="detail-card" style="margin-bottom:10px">
<div slot="header" class="card-header">
<span class="card-title"><i class="el-icon-info" /> 轧辊明细</span>
<el-button size="mini" type="text" icon="el-icon-edit" style="margin-left:auto" @click="handleEditRoll(selectedRoll)">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" style="color:#c5221f" @click="handleDelRoll(selectedRoll)">删除</el-button>
</div>
<div class="roll-header-grid">
<div class="rh-item"><span class="rh-k">轧辊编号</span><span class="rh-v bold">{{ selectedRoll.rollNo }}</span></div>
@@ -332,11 +335,108 @@
</div>
</div>
</div>
<!-- 轧辊新增/修改对话框 -->
<el-dialog
:title="rollFormTitle"
:visible.sync="rollFormOpen"
width="600px"
append-to-body
:close-on-click-modal="false"
@close="resetRollForm"
>
<el-form ref="rollForm" :model="rollForm" :rules="rollFormRules" label-width="60px" size="small">
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="所属产线" prop="lineId">
<el-select v-model="rollForm.lineId" placeholder="请选择产线" style="width:100%" clearable>
<el-option v-for="l in productionLines" :key="l.lineId" :label="l.lineName" :value="l.lineId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="辊编号" prop="rollNo">
<el-input v-model="rollForm.rollNo" placeholder="请输入轧辊编号" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<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="支撑辊 BR" value="BR" />
<el-option label="中间辊 CR" value="CR" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="厂家" prop="manufacturer">
<el-input v-model="rollForm.manufacturer" placeholder="请输入厂家" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="8">
<el-form-item label="初始直径" prop="initialDia">
<el-input v-model="rollForm.initialDia" type="number" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="当前直径" prop="currentDia">
<el-input v-model="rollForm.currentDia" type="number" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="最小直径" prop="minDia">
<el-input v-model="rollForm.minDia" type="number" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="8">
<el-form-item label="材质" prop="material">
<el-input v-model="rollForm.material" placeholder="材质" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="粗糙度" prop="roughness">
<el-input v-model="rollForm.roughness" type="number" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="凸度" prop="crown">
<el-input v-model="rollForm.crown" type="number" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="制造日期" prop="manufactureDate">
<el-date-picker
v-model="rollForm.manufactureDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择制造日期"
style="width:100%"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="rollForm.remark" type="textarea" :rows="2" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" size="small" @click="submitRollForm"> </el-button>
<el-button size="small" @click="rollFormOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listRollInfo, getRollInfo } from '@/api/mes/roll/rollInfo'
import { listRollInfo, getRollInfo, addRollInfo, updateRollInfo, delRollInfo } from '@/api/mes/roll/rollInfo'
import { listRollGrind, addRollGrind, updateRollGrind, delRollGrind, getMonthlyStats } from '@/api/mes/roll/rollGrind'
import { listProductionLine } from '@/api/wms/productionLine'
import rollLineMixin from '../rollLineMixin'
@@ -368,7 +468,15 @@ export default {
monthlyList: [],
editRow: null,
grindSaving: false
grindSaving: false,
rollFormOpen: false,
rollFormTitle: '',
rollForm: {},
rollFormRules: {
rollNo: [{ required: true, message: '轧辊编号不能为空', trigger: 'blur' }],
rollType: [{ required: true, message: '请选择辊型', trigger: 'change' }]
}
}
},
@@ -567,6 +675,86 @@ export default {
statusLabel(s) {
return { Online: '在线', Standby: '备用', Offline: '离线', Scrapped: '报废' }[s] || s
},
// ── 轧辊 CRUD ──────────────────────────────────────
handleAddRoll() {
this.rollFormTitle = '新增轧辊'
this.rollForm = {
lineId: this.filterLineId || null,
rollNo: undefined,
rollType: this.filterType || undefined,
manufacturer: this.filterManufacturer || '',
initialDia: undefined,
currentDia: undefined,
minDia: undefined,
material: '',
roughness: undefined,
crown: undefined,
manufactureDate: '',
remark: '',
status: 'Offline'
}
this.rollFormOpen = true
},
handleEditRoll(row) {
getRollInfo(row.rollId).then(res => {
this.rollFormTitle = '修改轧辊'
const data = res.data || {}
this.rollForm = {
rollId: data.rollId,
lineId: data.lineId,
rollNo: data.rollNo,
rollType: data.rollType,
manufacturer: data.manufacturer || '',
initialDia: data.initialDia,
currentDia: data.currentDia,
minDia: data.minDia,
material: data.material || '',
roughness: data.roughness,
crown: data.crown,
manufactureDate: data.manufactureDate || '',
remark: data.remark || '',
status: data.status
}
this.rollFormOpen = true
})
},
handleDelRoll(row) {
this.$modal.confirm(`确认删除轧辊【${row.rollNo}】?此操作不可恢复。`).then(() => {
return delRollInfo(row.rollId)
}).then(() => {
this.$modal.msgSuccess('删除成功')
if (this.selectedRollId === row.rollId) {
this.selectedRollId = null
this.selectedRoll = null
this.grindList = []
}
this.loadRolls()
})
},
submitRollForm() {
this.$refs.rollForm.validate(valid => {
if (!valid) return
const form = { ...this.rollForm }
const numFields = ['initialDia', 'currentDia', 'minDia', 'roughness', 'crown']
numFields.forEach(k => {
if (form[k] != null) form[k] = Number(form[k])
})
const action = form.rollId ? updateRollInfo : addRollInfo
action(form).then(() => {
this.$modal.msgSuccess(form.rollId ? '修改成功' : '新增成功')
this.rollFormOpen = false
this.loadRolls()
if (this.selectedRollId === form.rollId) {
this.selectedRoll = { ...this.selectedRoll, ...form }
}
})
})
},
resetRollForm() {
this.rollForm = {}
this.$nextTick(() => { this.$refs.rollForm && this.$refs.rollForm.clearValidate() })
}
}
}
@@ -637,7 +825,7 @@ export default {
/* 左侧轧辊列表面板 */
.roll-list-panel {
width: 220px;
width: 240px;
flex-shrink: 0;
height: calc(100vh - 140px);
overflow-y: auto;