From 3fcb03ebc33a233cd361aec0a546a062a392b553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E6=98=8A?= <15984991+wwh2328692301@user.noreply.gitee.com> Date: Wed, 1 Jul 2026 10:45:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(qc):=20=E4=BC=98=E5=8C=96=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E8=AF=84=E5=AE=A1=E6=A8=A1=E5=9D=97=E7=9A=84=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=B8=8E=E9=80=BB=E8=BE=91=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 替换改判状态硬编码选项为系统字典 2. 修复钢卷明细更新的误删问题,仅在传coilList时更新 3. 拆分评审意见表单避免数据串用 4. 补充线上数据库修复脚本与缺失字典 5. 修复钢卷字段名不匹配问题 --- docs/sql_fix_online.sql | 38 ++++++++++++++++ .../impl/QcQualityReviewServiceImpl.java | 13 +++--- .../src/views/mes/qc/qualityReview/index.vue | 45 ++++++++++--------- .../src/views/mes/qc/qualityReview/todo.vue | 11 +---- 4 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 docs/sql_fix_online.sql diff --git a/docs/sql_fix_online.sql b/docs/sql_fix_online.sql new file mode 100644 index 000000000..cbc175fc9 --- /dev/null +++ b/docs/sql_fix_online.sql @@ -0,0 +1,38 @@ +-- ============================================================= +-- 线上 klp-oa 库修复脚本 +-- 1. 删除乱码父菜单 +-- 2. 补充缺失字典 +-- ============================================================= +SET NAMES utf8mb4; + +-- ========== 1. 清理乱码父菜单 ========== +DELETE FROM sys_role_menu WHERE menu_id = 2100000000000000035; +DELETE FROM sys_menu WHERE menu_id = 2100000000000000035; + +-- ========== 2. 补充缺失字典类型 ========== +INSERT IGNORE INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) +VALUES ('改判后质量状态', 'regrade_quality_type', '0', 'admin', NOW(), 'admin', NOW(), ''); + +-- ========== 3. 补充缺失字典数据 ========== +-- quality_review_status 缺的3条 +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (2, '待审批', '2', 'quality_review_status', '', 'warning', 'Y', '0', 'admin', NOW()); +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (3, '已通过', '3', 'quality_review_status', '', 'success', 'Y', '0', 'admin', NOW()); +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (4, '已驳回', '4', 'quality_review_status', '', 'danger', 'Y', '0', 'admin', NOW()); + +-- regrade_quality_type 全部5条 +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (1, '协议销售', 'protocol_sale', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (2, '转分剪', 'to_slitting', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (3, '降级', 'downgrade', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (4, '返修', 'rework', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (5, '报废', 'scrap', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); + +-- ========== 4. 验证 ========== +SELECT 'OK' as result FROM sys_dict_type WHERE dict_type = 'regrade_quality_type' LIMIT 1; diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java index 460b9cb61..edcc61ea0 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java @@ -121,11 +121,13 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService { validEntityBeforeSave(update); boolean flag = baseMapper.updateById(update) > 0; if (flag) { - // 先删除原有明细,再重新插入 - coilMapper.delete(Wrappers.lambdaQuery() - .eq(QcQualityReviewCoil::getReviewId, bo.getReviewId())); - if (CollUtil.isNotEmpty(bo.getCoilList())) { - saveCoilList(bo.getReviewId(), bo.getCoilList()); + // 只有明确传了coilList才更新钢卷明细(saveOpinion等场景不传coilList,避免误删) + if (bo.getCoilList() != null) { + coilMapper.delete(Wrappers.lambdaQuery() + .eq(QcQualityReviewCoil::getReviewId, bo.getReviewId())); + if (CollUtil.isNotEmpty(bo.getCoilList())) { + saveCoilList(bo.getReviewId(), bo.getCoilList()); + } } } return flag; @@ -334,6 +336,7 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService { int seq = 1; for (QcQualityReviewCoilBo coilBo : coilBoList) { QcQualityReviewCoil coil = BeanUtil.toBean(coilBo, QcQualityReviewCoil.class); + coil.setDetailId(null); // 清空主键,使用数据库自增(避免软删除后重复) coil.setReviewId(reviewId); coil.setExecuteStatus(0L); if (coil.getGroupSeq() == null) { diff --git a/klp-ui/src/views/mes/qc/qualityReview/index.vue b/klp-ui/src/views/mes/qc/qualityReview/index.vue index b08cfe63f..3b84de969 100644 --- a/klp-ui/src/views/mes/qc/qualityReview/index.vue +++ b/klp-ui/src/views/mes/qc/qualityReview/index.vue @@ -145,11 +145,11 @@
品质部评审意见
-
- +
+
- - + +
保存意见
@@ -182,8 +182,8 @@
请为每个钢卷指定改判后质量状态:
{{ coil.currentCoilNo }}({{ coil.spec }}) - - + +
@@ -264,7 +264,6 @@
问题钢卷 - 选择O级钢卷
@@ -283,7 +282,7 @@ -
请点击上方按钮选择O级钢卷
+
请选择O级钢卷
@@ -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() diff --git a/klp-ui/src/views/mes/qc/qualityReview/todo.vue b/klp-ui/src/views/mes/qc/qualityReview/todo.vue index 25bae2859..3c22133c5 100644 --- a/klp-ui/src/views/mes/qc/qualityReview/todo.vue +++ b/klp-ui/src/views/mes/qc/qualityReview/todo.vue @@ -57,7 +57,7 @@ @@ -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