fix(qc): 优化质量评审模块的字典使用与逻辑修复

1. 替换改判状态硬编码选项为系统字典
2. 修复钢卷明细更新的误删问题,仅在传coilList时更新
3. 拆分评审意见表单避免数据串用
4. 补充线上数据库修复脚本与缺失字典
5. 修复钢卷字段名不匹配问题
This commit is contained in:
王文昊
2026-07-01 10:45:20 +08:00
parent 7aea184a81
commit 3fcb03ebc3
4 changed files with 72 additions and 35 deletions

View File

@@ -145,11 +145,11 @@
<!-- ===== 品质部评审意见 ===== -->
<el-card class="detail-section" shadow="never">
<div slot="header"><span><i class="el-icon-edit-outline"></i> 品质部评审意见</span></div>
<div v-if="editing" class="section-editor">
<el-input type="textarea" :rows="3" v-model="editForm.deptOpinion" placeholder="请填写品质部评审意见..." />
<div v-if="currentRow.flowStatus === 1 || currentRow.flowStatus === 4" class="section-editor">
<el-input type="textarea" :rows="3" v-model="opinionForm.deptOpinion" placeholder="请填写品质部评审意见..." />
<div style="margin-top:8px; display:flex; gap:8px;">
<el-input v-model="editForm.deptSign" placeholder="签字人" style="width:160px;" size="small" />
<el-date-picker v-model="editForm.deptSignDate" type="date" placeholder="签字日期" size="small" />
<el-input v-model="opinionForm.deptSign" placeholder="签字人" style="width:160px;" size="small" />
<el-date-picker v-model="opinionForm.deptSignDate" type="date" placeholder="签字日期" size="small" />
</div>
<el-button size="small" type="primary" @click="saveOpinion" style="margin-top:8px;">保存意见</el-button>
</div>
@@ -182,8 +182,8 @@
<div class="approve-coil-title">请为每个钢卷指定改判后质量状态</div>
<div v-for="coil in coilList" :key="coil.detailId" class="approve-coil-row">
<span class="approve-coil-label">{{ coil.currentCoilNo }}{{ coil.spec }}</span>
<el-select v-model="approveCoilMap[coil.detailId]" placeholder="请选择改判后状态" size="small" style="width:180px;">
<el-option v-for="item in regradeOptions" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="approveCoilMap[coil.detailId]" placeholder="请选择改判后等级" size="small" style="width:180px;">
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
</div>
@@ -264,7 +264,6 @@
<div class="dialog-section">
<div class="dialog-section-header">
<span>问题钢卷</span>
<el-button size="mini" type="primary" plain icon="el-icon-plus" @click="showCoilSelector = true">选择O级钢卷</el-button>
</div>
<el-table :data="editForm.coilList" border style="width:100%" size="small" max-height="250">
<el-table-column type="index" label="序号" width="60" align="center" />
@@ -283,7 +282,7 @@
</template>
</el-table-column>
</el-table>
<div v-if="editForm.coilList.length === 0" class="dialog-table-empty">点击上方按钮选择O级钢卷</div>
<div v-if="editForm.coilList.length === 0" class="dialog-table-empty" style="cursor:pointer;" @click="showCoilSelector = true">请选择O级钢卷</div>
</div>
<!-- ===== 钢卷选择器嵌套在弹窗内 ===== -->
@@ -332,7 +331,7 @@ import CoilSelector from '@/components/CoilSelector'
export default {
name: 'QualityReview',
components: { CoilSelector },
dicts: ['quality_review_status', 'regrade_quality_type'],
dicts: ['quality_review_status', 'regrade_quality_type', 'coil_quality_status'],
data() {
return {
// 列表
@@ -355,6 +354,12 @@ export default {
// 钢卷选择
showCoilSelector: false,
// 品质部意见编辑独立于editForm避免串数据
opinionForm: {
deptOpinion: '',
deptSign: '',
deptSignDate: undefined
},
// 编辑弹窗
dialogVisible: false,
dialogTitle: '',
@@ -375,14 +380,6 @@ export default {
productName: [{ required: true, message: '请输入产品名称', trigger: 'blur' }]
},
// 改判状态选项(硬编码后备,优先使用字典)
regradeOptions: [
{ label: '协议销售', value: 'protocol_sale' },
{ label: '转分剪', value: 'to_slitting' },
{ label: '降级', value: 'downgrade' },
{ label: '返修', value: 'rework' },
{ label: '报废', value: 'scrap' }
],
// 审批
approveAction: 'approve',
approveForm: {
@@ -430,6 +427,12 @@ export default {
map[c.detailId] = c.regradeQuality || ''
})
this.approveCoilMap = map
// 初始化品质部意见编辑独立于editForm
this.opinionForm = {
deptOpinion: data.deptOpinion || '',
deptSign: data.deptSign || '',
deptSignDate: data.deptSignDate || undefined
}
this.approveForm.reviewId = reviewId
this.approveForm.leaderOpinion = ''
this.approveForm.leaderSign = ''
@@ -507,7 +510,7 @@ export default {
coilId: coil.coilId,
currentCoilNo: coil.currentCoilNo,
supplierCoilNo: coil.supplierCoilNo || coil.enterCoilNo,
spec: coil.spec,
spec: coil.specification, // CoilSelector返回的字段名为specification
netWeight: coil.netWeight,
defectDesc: '',
groupSeq: startIdx + idx + 1,
@@ -628,9 +631,9 @@ export default {
if (!this.currentRow) return
updateQualityReview({
reviewId: this.currentRow.reviewId,
deptOpinion: this.editForm.deptOpinion,
deptSign: this.editForm.deptSign,
deptSignDate: this.editForm.deptSignDate
deptOpinion: this.opinionForm.deptOpinion,
deptSign: this.opinionForm.deptSign,
deptSignDate: this.opinionForm.deptSignDate
}).then(() => {
this.$modal.msgSuccess('保存成功')
this.handleRefreshDetail()

View File

@@ -57,7 +57,7 @@
<el-table-column label="改判后状态" width="160">
<template slot-scope="s">
<el-select v-model="approveCoilMap[s.row.detailId]" placeholder="请选择" size="small">
<el-option v-for="item in regradeOptions" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
</el-table-column>
@@ -81,7 +81,7 @@ import { listQualityReview, approveQualityReview, rejectQualityReview, getQualit
export default {
name: 'QualityReviewTodo',
dicts: ['quality_review_status', 'regrade_quality_type'],
dicts: ['quality_review_status', 'regrade_quality_type', 'coil_quality_status'],
data() {
return {
loading: false,
@@ -92,13 +92,6 @@ export default {
pageSize: 20,
flowStatus: 2
},
regradeOptions: [
{ label: '协议销售', value: 'protocol_sale' },
{ label: '转分剪', value: 'to_slitting' },
{ label: '降级', value: 'downgrade' },
{ label: '返修', value: 'rework' },
{ label: '报废', value: 'scrap' }
],
approveDialog: {
visible: false,
review: null