Procházet zdrojové kódy

feat(unqualifiedList): 不良品处置按检测类型区分审批流程并优化弹窗标题显示单据编码

lucw před 4 dny
rodič
revize
94730e3496

+ 11 - 1
src/views/unqualifiedProduct/unqualifiedList/detailList.vue

@@ -326,6 +326,7 @@
         // ===== 弹窗控制 =====
         visible: false,
         title: '不合格品明细',
+        baseTitle: '不合格品明细',
         activeComp: 'main',
         tabOptions: [
           { key: 'main', name: '不良品台账' },
@@ -706,7 +707,9 @@ box-sizing: content-box;
           qualityType: params.qualityType || null,
           workOrderCode: params.workOrderCode || null
         };
-        this.title = params.title || '不合格品明细';
+        this.baseTitle = params.title || '不合格品明细';
+        // 弹窗标题带上单据编码,例如:不合格品明细-QBLP20261109001
+        this.title = this.buildTitle(params.unqualifiedProductsCode);
         this.visible = true;
         this.datasource();
         // 如果有工单编码,获取回流工序
@@ -746,6 +749,7 @@ box-sizing: content-box;
         };
         this.refluxTaskList = [];
         this.loading = false;
+        this.title = this.baseTitle;
       },
 
       // ===== 原有方法 =====
@@ -763,6 +767,12 @@ box-sizing: content-box;
         if (this.form.contentText) {
           this.form.contentText = JSON.parse(this.form.contentText);
         }
+        this.title = this.buildTitle(this.form?.unqualifiedProductsCode);
+      },
+
+      /* 弹窗标题:基础标题-单据编码 */
+      buildTitle(code) {
+        return code ? `${this.baseTitle}-${code}` : this.baseTitle;
       },
       setKey(key) {
         this.activeComp = key;

+ 102 - 15
src/views/unqualifiedProduct/unqualifiedList/index.vue

@@ -65,7 +65,7 @@
             v-if="
               (row.status == 0 || row.status == 1) &&
               [0, 3].includes(row.approvalStatus) &&
-              (!unqualified_approval || unqualified_approval == 0)
+              !needApproval(row)
             "
             type="primary"
             :underline="false"
@@ -77,7 +77,8 @@
           <el-link
             v-if="
               (row.status == 0 || row.status == 1) &&
-              [0, 3].includes(row.approvalStatus)&&unqualified_approval == 1
+              [0, 3].includes(row.approvalStatus) &&
+              needApproval(row)
             "
             type="primary"
             :underline="false"
@@ -115,6 +116,66 @@
   import DetailList from '@/views/unqualifiedProduct/unqualifiedList/detailList.vue';
   import { reviewStatus } from '@/enum/dict';
 
+  // 检测类型 → 处置审批流程Key + 审批开关参数编码(与后端 ProcessTypeEnum.QMS_UNQUALIFIED_*、
+  // UNQUALIFIED_APPROVAL_PARAM_CODE_MAP 一一对应,合并配置避免两张表错位)
+  const APPROVAL_CONFIG = {
+    1: {
+      processKey: 'qms_approval_unqualifiedList',
+      paramCode: 'unqualifiedList_approval'
+    },
+    2: {
+      processKey: 'qms_approval_unqualifiedList2',
+      paramCode: 'unqualifiedList2_approval'
+    },
+    3: {
+      processKey: 'qms_approval_unqualifiedList3',
+      paramCode: 'unqualifiedList3_approval'
+    },
+    4: {
+      processKey: 'qms_approval_unqualifiedList4',
+      paramCode: 'unqualifiedList4_approval'
+    },
+    5: {
+      processKey: 'qms_approval_unqualifiedList5',
+      paramCode: 'unqualifiedList5_approval'
+    },
+    6: {
+      processKey: 'qms_approval_unqualifiedList6',
+      paramCode: 'unqualifiedList6_approval'
+    },
+    7: {
+      processKey: 'qms_approval_unqualifiedList7',
+      paramCode: 'unqualifiedList7_approval'
+    },
+    8: {
+      processKey: 'qms_approval_unqualifiedList8',
+      paramCode: 'unqualifiedList8_approval'
+    },
+    9: {
+      processKey: 'qms_approval_unqualifiedList9',
+      paramCode: 'unqualifiedList9_approval'
+    },
+    10: {
+      processKey: 'qms_approval_unqualifiedList10',
+      paramCode: 'unqualifiedList10_approval'
+    },
+    11: {
+      processKey: 'qms_approval_unqualifiedList11',
+      paramCode: 'unqualifiedList11_approval'
+    }
+  };
+
+  // 流程结束回调:未在 bpm_process_business_relation 注册的流程Key需由流程变量显式携带
+  const UNQUALIFIED_CALLBACK_BEAN = 'qmsUnqualifiedProductsServiceImpl';
+  const UNQUALIFIED_CALLBACK_END_METHOD = 'updateApprovalStatus';
+
+  // 默认全部按“需要审批”处理,与后端参数未配置时的缺省语义一致,避免首屏按钮闪变
+  const buildDefaultApprovalMap = () =>
+    Object.keys(APPROVAL_CONFIG).reduce((result, type) => {
+      result[type] = true;
+      return result;
+    }, {});
+
   export default {
     components: {
       OrderSearch,
@@ -129,7 +190,8 @@
         visible: false,
         loading: false,
         processSubmitDialogFlag: false,
-        unqualified_approval: 0,
+        // 检测类型 → 是否开启处置审批(true:需要审批,显示“提交”)
+        approvalParamMap: buildDefaultApprovalMap(),
         releasParams: {
           teamId: '',
           id: ''
@@ -276,10 +338,7 @@
             formatter: (_row, _column, cellValue) => {
               // 无流程实例说明单据未进入审批流程,直接展示为“无流程”
               const processInstanceId = _row.processInstanceId;
-              if (
-                !processInstanceId ||
-                !String(processInstanceId).trim()
-              ) {
+              if (!processInstanceId || !String(processInstanceId).trim()) {
                 return '无流程';
               }
               return reviewStatus[_row.approvalStatus];
@@ -336,25 +395,53 @@
     created() {
       this.requestDict('质检计划类型');
       this.requestDict('处置状态');
-      parameterGetByCode({
-        code: 'unqualifiedList_approval'
-      }).then((res) => {
-        this.unqualified_approval = res.value;
-      });
+      this.loadApprovalParams();
     },
     filters: {},
     methods: {
+      // 按检测类型加载审批开关:参数值为 0 表示不需要审批,未配置或读取失败保持默认(需要审批)
+      async loadApprovalParams() {
+        await Promise.all(
+          Object.keys(APPROVAL_CONFIG).map(async (type) => {
+            try {
+              const res = await parameterGetByCode({
+                code: APPROVAL_CONFIG[type].paramCode
+              });
+              this.$set(
+                this.approvalParamMap,
+                type,
+                String(res && res.value).trim() !== '0'
+              );
+            } catch (e) {
+              // 读取失败保持默认“需要审批”
+            }
+          })
+        );
+      },
+      // 该行检测类型是否开启处置审批:开启显示“提交”,关闭显示“处置”
+      needApproval(row) {
+        return this.approvalParamMap[row.qualityType] !== false;
+      },
       reportApprovalSubmit(res) {
+        const approvalConfig = APPROVAL_CONFIG[res.qualityType];
+        if (!approvalConfig) {
+          this.$message.warning('该检测类型未配置不良品处置审批流程');
+          return;
+        }
         this.processSubmitDialogFlag = true;
         this.$nextTick(async () => {
-          let params = {
+          const params = {
             businessId: res.id,
-            businessKey: 'qms_approval_unqualifiedList',
+            businessKey: approvalConfig.processKey,
             formCreateUserId: res.createUserId,
             variables: {
               businessCode: res.unqualifiedProductsCode,
               businessName: res.categoryName,
-              businessType: '不良品处置'
+              businessType: '不良品处置',
+              // List2~11 未在 bpm_process_business_relation 注册,需显式携带业务主键与回调方法,否则流程结束无法回写审批状态
+              businessId: res.id,
+              callBackMethodType: UNQUALIFIED_CALLBACK_BEAN,
+              callBackMethod: UNQUALIFIED_CALLBACK_END_METHOD
             }
           };