From 8f8dcdae7e40ba4e94a363aa8eb91c7665810bc3 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 31 八月 2026 15:29:17 +0800
Subject: [PATCH] fix: 新疆-绿能 1.报工自动生成产品入库单 + 勾选入库 + 不合格仓库兜底

---
 src/views/mes/pro/feedback/data.ts |  195 +++++++++++-------------------------------------
 1 files changed, 44 insertions(+), 151 deletions(-)

diff --git a/src/views/mes/pro/feedback/data.ts b/src/views/mes/pro/feedback/data.ts
index 573f29c..a68d8ab 100644
--- a/src/views/mes/pro/feedback/data.ts
+++ b/src/views/mes/pro/feedback/data.ts
@@ -19,7 +19,13 @@
 import { generateAutoCode } from '#/api/mes/md/autocode/record';
 import { getRouteProcessByRouteAndProcess } from '#/api/mes/pro/route/process';
 import { getSimpleUserList } from '#/api/system/user';
-import { loadParamDetails } from './param-state';
+import {
+  loadParamDetails,
+  resetWaitConfig,
+  waitDuration,
+  waitStartTime,
+  waitTaskId,
+} from './param-state';
 import { getRangePickerDefaultProps } from '#/utils';
 import { MdItemSelect } from '#/views/mes/md/item/components';
 import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
@@ -174,9 +180,8 @@
  * - create / update锛氬綍鍏ユ姤宸ヤ富浣撲俊鎭拰鏁伴噺
  * - submit / approve / detail锛氫富浣撳瓧娈靛彧璇�
  *
- * 鏁伴噺鍖哄煙鏍规嵁 `checkFlag` 鍜� `unqualifiedQuantity` 鍔ㄦ�佹樉绀猴細
- * - 闈炶川妫�宸ュ簭锛氭姤宸ユ暟閲� = 鍚堟牸 + 涓嶈壇锛涗笉鑹� > 0 鏃跺啀灞曞紑宸ュ簾/鏂欏簾/鍏朵粬搴熷搧
- * - 璐ㄦ宸ュ簭锛氬彧濉姤宸ユ暟閲忥紙瑙嗕负寰呮鏁伴噺锛�
+ * 鎶ュ伐鍙~鍐�"鎶ュ伐鏁伴噺"锛涘悎鏍煎搧/涓嶈壇鍝佹暟閲忕敱璐ㄦ纭畾锛屾姤宸ョ幆鑺備笉閲囬泦銆�
+ * 璐ㄦ宸ュ簭鎶ュ伐鍚庤繘鍏ュ緟妫�楠岋紙uncheckQuantity = 鎶ュ伐鏁伴噺锛夛紝闈炶川妫�宸ュ簭鐩存帴瀹岀粨銆�
  */
 export function useFormSchema(
   formType: FormType,
@@ -191,6 +196,12 @@
     },
     {
       fieldName: 'checkFlag',
+      component: 'Input',
+      dependencies: { triggerFields: [''], show: () => false },
+      defaultValue: true,
+    },
+    {
+      fieldName: 'needReportQuantity',
       component: 'Input',
       dependencies: { triggerFields: [''], show: () => false },
       defaultValue: true,
@@ -256,8 +267,10 @@
         status: MesProWorkOrderStatusEnum.CONFIRMED,
         // 璁㈠崟鍙樻洿锛氭竻绌轰换鍔″強浠诲姟甯﹀嚭鐨勪骇鍝佷俊鎭�佹暟閲忓尯鍩熸帶鍒朵綅
         onChange: async () => {
+          resetWaitConfig();
           await formApi?.setValues({
             checkFlag: true,
+            needReportQuantity: true,
             itemCode: undefined,
             itemId: undefined,
             itemName: undefined,
@@ -292,6 +305,8 @@
         onChange: async (task?: MesProTaskApi.Task) => {
           await loadParamDetails(task?.id);
           if (!task) {
+            resetWaitConfig();
+            await formApi?.setFieldValue('needReportQuantity', true);
             return;
           }
           await formApi?.setValues({
@@ -305,7 +320,9 @@
             workstationId: task.workstationId,
             reportableQuantity: task.reportableQuantity,
           });
-          // 宸ヨ壓璺嚎宸ュ簭鐨� checkFlag 鍐冲畾鏁伴噺鍖哄煙灞曠ず
+          waitTaskId.value = task.id;
+          waitStartTime.value = task.waitStartTime;
+          // 宸ヨ壓璺嚎宸ュ簭鐨� checkFlag / 绛夊緟鏃堕暱 / 鎶ュ伐鏁伴噺瑙勫垯鍐冲畾灞曠ず
           if (task.routeId && task.processId) {
             try {
               const routeProcess = await getRouteProcessByRouteAndProcess(
@@ -316,9 +333,19 @@
                 'checkFlag',
                 routeProcess?.checkFlag ?? false,
               );
+              await formApi?.setFieldValue(
+                'needReportQuantity',
+                routeProcess?.needReportQuantity ?? true,
+              );
+              waitDuration.value = routeProcess?.waitDuration;
             } catch {
               await formApi?.setFieldValue('checkFlag', true);
+              await formApi?.setFieldValue('needReportQuantity', true);
+              waitDuration.value = undefined;
             }
+          } else {
+            waitDuration.value = undefined;
+            await formApi?.setFieldValue('needReportQuantity', true);
           }
         },
       },
@@ -392,8 +419,11 @@
         precision: 2,
       },
       dependencies: {
-        triggerFields: ['taskId'],
-        show: (values) => !!values.taskId && ['create', 'update'].includes(formType),
+        triggerFields: ['taskId', 'needReportQuantity'],
+        show: (values) =>
+          values.needReportQuantity !== false &&
+          !!values.taskId &&
+          ['create', 'update'].includes(formType),
       },
     },
     {
@@ -404,150 +434,13 @@
         class: 'w-full',
         min: 0,
         precision: 2,
+        placeholder: '璇疯緭鍏ユ姤宸ユ暟閲�',
       },
       dependencies: {
-        triggerFields: ['checkFlag'],
-        // 闈炶川妫�宸ュ簭鏃讹紝鎶ュ伐鏁伴噺 = 鍚堟牸 + 涓嶈壇锛岀鐢ㄧ洿鎺ョ紪杈�
-        componentProps: (values) => ({
-          class: 'w-full',
-          disabled: !values.checkFlag,
-          min: 0,
-          placeholder: '璇疯緭鍏ユ姤宸ユ暟閲�',
-          precision: 2,
-        }),
-      },
-      rules: 'required',
-    },
-    {
-      fieldName: 'qualifiedQuantity',
-      label: '鍚堟牸鍝佹暟閲�',
-      component: 'InputNumber',
-      componentProps: {
-        class: 'w-full',
-        min: 0,
-        precision: 2,
-        // 鍚堟牸/涓嶈壇鍙樻洿锛岃嚜鍔ㄧ疮璁′负鎶ュ伐鏁伴噺
-        onChange: async () => {
-          const values = await formApi?.getValues();
-          await formApi?.setFieldValue(
-            'feedbackQuantity',
-            (values?.qualifiedQuantity || 0) +
-              (values?.unqualifiedQuantity || 0),
-          );
-        },
-      },
-      defaultValue: 0,
-      dependencies: {
-        triggerFields: ['checkFlag'],
-        show: (values) => !values.checkFlag,
-      },
-    },
-    {
-      fieldName: 'unqualifiedQuantity',
-      label: '涓嶈壇鍝佹暟閲�',
-      component: 'InputNumber',
-      componentProps: {
-        class: 'w-full',
-        min: 0,
-        precision: 2,
-        // 鍚堟牸/涓嶈壇鍙樻洿锛岃嚜鍔ㄧ疮璁′负鎶ュ伐鏁伴噺
-        onChange: async () => {
-          const values = await formApi?.getValues();
-          await formApi?.setFieldValue(
-            'feedbackQuantity',
-            (values?.qualifiedQuantity || 0) +
-              (values?.unqualifiedQuantity || 0),
-          );
-        },
-      },
-      defaultValue: 0,
-      dependencies: {
-        triggerFields: ['checkFlag'],
-        show: (values) => !values.checkFlag,
-      },
-    },
-    {
-      fieldName: 'laborScrapQuantity',
-      label: '宸ュ簾鏁伴噺',
-      component: 'InputNumber',
-      componentProps: {
-        class: 'w-full',
-        min: 0,
-        precision: 2,
-        // 搴熷搧鍒嗙被鍙樻洿锛岃嚜鍔ㄧ疮璁′负涓嶈壇鍝佹暟閲忓強鎶ュ伐鏁伴噺
-        onChange: async () => {
-          const values = await formApi?.getValues();
-          const unqualified =
-            (values?.laborScrapQuantity || 0) +
-            (values?.materialScrapQuantity || 0) +
-            (values?.otherScrapQuantity || 0);
-          await formApi?.setValues({
-            feedbackQuantity: (values?.qualifiedQuantity || 0) + unqualified,
-            unqualifiedQuantity: unqualified,
-          });
-        },
-      },
-      defaultValue: 0,
-      dependencies: {
-        triggerFields: ['checkFlag', 'unqualifiedQuantity'],
-        show: (values) =>
-          !values.checkFlag && (values.unqualifiedQuantity || 0) > 0,
-      },
-    },
-    {
-      fieldName: 'materialScrapQuantity',
-      label: '鏂欏簾鏁伴噺',
-      component: 'InputNumber',
-      componentProps: {
-        class: 'w-full',
-        min: 0,
-        precision: 2,
-        // 搴熷搧鍒嗙被鍙樻洿锛岃嚜鍔ㄧ疮璁′负涓嶈壇鍝佹暟閲忓強鎶ュ伐鏁伴噺
-        onChange: async () => {
-          const values = await formApi?.getValues();
-          const unqualified =
-            (values?.laborScrapQuantity || 0) +
-            (values?.materialScrapQuantity || 0) +
-            (values?.otherScrapQuantity || 0);
-          await formApi?.setValues({
-            feedbackQuantity: (values?.qualifiedQuantity || 0) + unqualified,
-            unqualifiedQuantity: unqualified,
-          });
-        },
-      },
-      defaultValue: 0,
-      dependencies: {
-        triggerFields: ['checkFlag', 'unqualifiedQuantity'],
-        show: (values) =>
-          !values.checkFlag && (values.unqualifiedQuantity || 0) > 0,
-      },
-    },
-    {
-      fieldName: 'otherScrapQuantity',
-      label: '鍏朵粬搴熷搧',
-      component: 'InputNumber',
-      componentProps: {
-        class: 'w-full',
-        min: 0,
-        precision: 2,
-        // 搴熷搧鍒嗙被鍙樻洿锛岃嚜鍔ㄧ疮璁′负涓嶈壇鍝佹暟閲忓強鎶ュ伐鏁伴噺
-        onChange: async () => {
-          const values = await formApi?.getValues();
-          const unqualified =
-            (values?.laborScrapQuantity || 0) +
-            (values?.materialScrapQuantity || 0) +
-            (values?.otherScrapQuantity || 0);
-          await formApi?.setValues({
-            feedbackQuantity: (values?.qualifiedQuantity || 0) + unqualified,
-            unqualifiedQuantity: unqualified,
-          });
-        },
-      },
-      defaultValue: 0,
-      dependencies: {
-        triggerFields: ['checkFlag', 'unqualifiedQuantity'],
-        show: (values) =>
-          !values.checkFlag && (values.unqualifiedQuantity || 0) > 0,
+        triggerFields: ['needReportQuantity'],
+        show: (values) => values.needReportQuantity !== false,
+        rules: (values) =>
+          values.needReportQuantity === false ? null : 'required',
       },
     },
     {
@@ -616,8 +509,8 @@
       render: (val) =>
         h(DictTag, { type: DICT_TYPE.MES_PRO_FEEDBACK_TYPE, value: val }),
     },
-    { field: 'workOrderId', label: '鐢熶骇璁㈠崟', render: (_val, data) => data.workOrderCode },
-    { field: 'taskId', label: '鐢熶骇浠诲姟', render: (_val, data) => data.taskCode },
+    { field: 'workOrderId', label: '鐢熶骇璁㈠崟', render: (_val, data) => data?.workOrderCode },
+    { field: 'taskId', label: '鐢熶骇浠诲姟', render: (_val, data) => data?.taskCode },
     { field: 'workstationName', label: '宸ヤ綔绔�' },
     { field: 'itemCode', label: '浜у搧缂栫爜' },
     { field: 'itemName', label: '浜у搧鍚嶇О' },

--
Gitblit v1.9.3