From 04e8e3a312ed1f2d9dc40354ae5847ef9cc11360 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 29 八月 2026 16:22:35 +0800
Subject: [PATCH] fix: 新疆-绿能 1.报工等待时长倒计时 + 报工数量可选 2.报工自动生成产品入库单 + 勾选入库 + 不合格仓库兜底

---
 src/views/mes/workbench/components/tabs/FeedbackTab.vue |   65 ++++++++++++++++++++++++++++----
 1 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/src/views/mes/workbench/components/tabs/FeedbackTab.vue b/src/views/mes/workbench/components/tabs/FeedbackTab.vue
index 86b6e25..2166e3f 100644
--- a/src/views/mes/workbench/components/tabs/FeedbackTab.vue
+++ b/src/views/mes/workbench/components/tabs/FeedbackTab.vue
@@ -26,14 +26,20 @@
   updateFeedback,
 } from '#/api/mes/pro/feedback';
 import { getRouteProcessByRouteAndProcess } from '#/api/mes/pro/route/process';
+import { getTask } from '#/api/mes/pro/task';
 import { $t } from '#/locales';
 
 import { useFormSchema } from '../../../pro/feedback/data';
 import {
   loadParamDetails,
   paramDetails,
+  resetWaitConfig,
+  waitDuration,
+  waitStartTime,
+  waitTaskId,
 } from '../../../pro/feedback/param-state';
 import BatchInputDialog from '../../../pro/feedback/modules/batch-input-dialog.vue';
+import WaitCountdown from '../../../pro/feedback/modules/wait-countdown.vue';
 const batchDialogRef = ref<InstanceType<typeof BatchInputDialog>>();
 const batchActionType = ref<'' | 'submit' | 'approve'>('');
 const pendingSubmitMode = ref<'saveAndSubmit' | 'submit'>('submit');
@@ -79,12 +85,16 @@
 
 /** 鎻愪氦鍓嶅榻愭暟閲忥細鎶ュ伐鍙~鍐欐姤宸ユ暟閲忥紝鍚堟牸/涓嶈壇/搴熷搧鏁伴噺鐢辫川妫�纭畾锛屾姤宸ョ幆鑺備笉閲囬泦 */
 function alignQuantity(data: any) {
+  if (data.needReportQuantity === false) {
+    data.feedbackQuantity = 0;
+  }
   data.uncheckQuantity = data.checkFlag ? data.feedbackQuantity : 0;
   delete data.qualifiedQuantity;
   delete data.unqualifiedQuantity;
   delete data.laborScrapQuantity;
   delete data.materialScrapQuantity;
   delete data.otherScrapQuantity;
+  delete data.needReportQuantity;
 }
 
 async function getAlignedData() {
@@ -102,14 +112,21 @@
   }));
 }
 
-/** 鍔犺浇 checkFlag */
-async function resolveCheckFlag(routeId?: number, processId?: number) {
-  if (!routeId || !processId) return true;
+/** 鍔犺浇宸ュ簭閰嶇疆锛坈heckFlag / 绛夊緟鏃堕暱 / 鎶ュ伐鏁伴噺瑙勫垯锛� */
+async function resolveRouteProcessConfig(routeId?: number, processId?: number) {
+  if (!routeId || !processId) {
+    return { checkFlag: true, needReportQuantity: true };
+  }
   try {
     const rp = await getRouteProcessByRouteAndProcess(routeId, processId);
-    return rp?.checkFlag ?? false;
+    waitDuration.value = rp?.waitDuration;
+    return {
+      checkFlag: rp?.checkFlag ?? false,
+      needReportQuantity: rp?.needReportQuantity ?? true,
+    };
   } catch {
-    return true;
+    waitDuration.value = undefined;
+    return { checkFlag: true, needReportQuantity: true };
   }
 }
 
@@ -119,13 +136,17 @@
   feedbackId.value = undefined;
   feedbackStatus.value = undefined;
   originalSnapshot.value = '';
+  resetWaitConfig();
 
   formApi.setState({ schema: useFormSchema(formType.value, formApi) });
 
   const code = await generateAutoCode(MesAutoCodeRuleCode.PRO_FEEDBACK_CODE);
-  const checkFlag = await resolveCheckFlag(task.routeId, task.processId);
+  const config = await resolveRouteProcessConfig(task.routeId, task.processId);
   // 鍔犺浇浠诲姟缁戝畾鐨勫伐鑹哄弬鏁帮紙蹇呭~鍙傛暟鏍¢獙 + 鍙傛暟鍊煎洖鏄撅級
   await loadParamDetails(task.id);
+
+  waitTaskId.value = task.id;
+  waitStartTime.value = task.waitStartTime;
 
   await formApi.setValues({
     code,
@@ -145,7 +166,8 @@
     reportableQuantity: task.reportableQuantity,
     scheduledQuantity: task.quantity,
     feedbackApprove: task.feedbackApprove,
-    checkFlag,
+    checkFlag: config.checkFlag,
+    needReportQuantity: config.needReportQuantity,
   });
   originalSnapshot.value = JSON.stringify(await getAlignedData());
 }
@@ -337,9 +359,23 @@
   feedbackStatus.value = data.status;
   formType.value = 'update';
   formApi.setState({ schema: useFormSchema(formType.value, formApi) });
-  const checkFlag = await resolveCheckFlag(data.routeId, data.processId);
+  const config = await resolveRouteProcessConfig(data.routeId, data.processId);
   await loadParamDetails(data.taskId);
-  await formApi.setValues({ ...data, checkFlag });
+  waitTaskId.value = data.taskId;
+  waitStartTime.value = undefined;
+  if (data.taskId) {
+    try {
+      const task = await getTask(data.taskId);
+      waitStartTime.value = task?.waitStartTime;
+    } catch {
+      // 浠诲姟涓嶅瓨鍦ㄦ椂蹇界暐鍊掕鏃跺洖鏄�
+    }
+  }
+  await formApi.setValues({
+    ...data,
+    checkFlag: config.checkFlag,
+    needReportQuantity: config.needReportQuantity,
+  });
   originalSnapshot.value = JSON.stringify(await getAlignedData());
 }
 
@@ -377,6 +413,17 @@
 
       <Form class="feedback-tab__form" />
 
+      <!-- 鎶ュ伐鍊掕鏃讹紙宸ュ簭閰嶇疆绛夊緟鏃堕暱鏃跺睍绀猴級 -->
+      <div v-if="waitDuration" class="feedback-tab__params">
+        <div class="feedback-tab__params-title">鎶ュ伐鍊掕鏃�</div>
+        <WaitCountdown
+          :task-id="waitTaskId"
+          :wait-duration="waitDuration"
+          :wait-start-time="waitStartTime"
+          :disabled="!isEditable"
+        />
+      </div>
+
       <!-- 宸ヨ壓鍙傛暟锛堜换鍔$粦瀹氬弬鏁版椂灞曠ず锛屽繀濉弬鏁版湭濉細琚悗绔嫤鎴級 -->
       <div v-if="paramDetails.length" class="feedback-tab__params">
         <div class="feedback-tab__params-title">宸ヨ壓鍙傛暟</div>

--
Gitblit v1.9.3