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/workorder-center/modules/quick-feedback.vue |  108 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 81 insertions(+), 27 deletions(-)

diff --git a/src/views/mes/pro/workorder-center/modules/quick-feedback.vue b/src/views/mes/pro/workorder-center/modules/quick-feedback.vue
index b249fdf..fc91d88 100644
--- a/src/views/mes/pro/workorder-center/modules/quick-feedback.vue
+++ b/src/views/mes/pro/workorder-center/modules/quick-feedback.vue
@@ -9,6 +9,13 @@
 import { message } from 'ant-design-vue';
 
 import { quickCreateFeedback } from '#/api/mes/pro/feedback';
+import { getRouteProcessByRouteAndProcess } from '#/api/mes/pro/route/process';
+import { getTask } from '#/api/mes/pro/task';
+import {
+  loadParamDetails,
+  paramDetails,
+} from '#/views/mes/pro/feedback/param-state';
+import WaitCountdown from '#/views/mes/pro/feedback/modules/wait-countdown.vue';
 import ProTaskSelect from '#/views/mes/pro/task/components/select.vue';
 
 defineOptions({ name: 'QuickFeedbackForm' });
@@ -35,10 +42,20 @@
       selectedTask.value = undefined;
       formData.value = {
         feedbackQuantity: undefined,
-        qualifiedQuantity: undefined,
-        unqualifiedQuantity: undefined,
         remark: '',
       };
+      waitDuration.value = undefined;
+      needReportQuantity.value = true;
+      waitStartTime.value = undefined;
+      // 棰勮浠诲姟鏃跺姞杞藉叾宸ヨ壓鍙傛暟涓庣瓑寰呴厤缃紱鍚﹀垯绛夊緟閫夋嫨浠诲姟鍚庡啀鍔犺浇
+      if (props.taskId) {
+        loadParamDetails(props.taskId);
+        getTask(props.taskId)
+          .then(applyTaskWaitConfig)
+          .catch(() => {});
+      } else {
+        paramDetails.value = [];
+      }
     }
   },
 });
@@ -48,11 +65,12 @@
 const selectedTask = ref<MesProTaskApi.Task>();
 const formData = ref({
   feedbackQuantity: undefined as number | undefined,
-  qualifiedQuantity: undefined as number | undefined,
-  unqualifiedQuantity: undefined as number | undefined,
   remark: '',
 });
 const submitting = ref(false);
+const waitDuration = ref<number>();
+const needReportQuantity = ref<boolean>(true);
+const waitStartTime = ref<string>();
 
 const hasPredefinedTask = computed(() => !!props.taskId);
 
@@ -70,6 +88,28 @@
 function handleTaskChange(task: MesProTaskApi.Task | undefined) {
   selectedTask.value = task;
   selectedTaskId.value = task?.id;
+  loadParamDetails(task?.id);
+  applyTaskWaitConfig(task);
+}
+
+/** 鎸変换鍔″伐搴忓姞杞界瓑寰呮椂闀夸笌鎶ュ伐鏁伴噺瑙勫垯 */
+async function applyTaskWaitConfig(task?: MesProTaskApi.Task) {
+  waitDuration.value = undefined;
+  needReportQuantity.value = true;
+  waitStartTime.value = task?.waitStartTime;
+  if (!task?.routeId || !task?.processId) {
+    return;
+  }
+  try {
+    const routeProcess = await getRouteProcessByRouteAndProcess(
+      task.routeId,
+      task.processId,
+    );
+    waitDuration.value = routeProcess?.waitDuration;
+    needReportQuantity.value = routeProcess?.needReportQuantity ?? true;
+  } catch {
+    // 鍔犺浇澶辫触鎸夐粯璁ゅ鐞嗭紙鏃犻渶鍊掕鏃躲�佹暟閲忓繀濉級
+  }
 }
 
 async function handleSubmit() {
@@ -78,7 +118,7 @@
     message.warning('璇烽�夋嫨浠诲姟');
     return;
   }
-  if (!formData.value.feedbackQuantity) {
+  if (needReportQuantity.value && !formData.value.feedbackQuantity) {
     message.warning('璇疯緭鍏ユ姤宸ユ暟閲�');
     return;
   }
@@ -86,9 +126,13 @@
   try {
     await quickCreateFeedback({
       taskId,
-      feedbackQuantity: formData.value.feedbackQuantity,
-      qualifiedQuantity: formData.value.qualifiedQuantity,
-      unqualifiedQuantity: formData.value.unqualifiedQuantity,
+      feedbackQuantity: needReportQuantity.value
+        ? (formData.value.feedbackQuantity ?? 0)
+        : 0,
+      paramValues: paramDetails.value.map((detail) => ({
+        detailId: detail.id,
+        value: detail.paramValue,
+      })),
       remark: formData.value.remark || undefined,
     });
     message.success('鎶ュ伐鎴愬姛');
@@ -118,7 +162,14 @@
           class="!w-full"
         />
       </a-form-item>
-      <a-form-item label="鏈鎶ュ伐鏁伴噺" required>
+      <a-form-item v-if="waitDuration" label="鎶ュ伐鍊掕鏃�">
+        <WaitCountdown
+          :task-id="selectedTaskId"
+          :wait-duration="waitDuration"
+          :wait-start-time="waitStartTime"
+        />
+      </a-form-item>
+      <a-form-item v-if="needReportQuantity" label="鏈鎶ュ伐鏁伴噺" required>
         <a-input-number
           v-model:value="formData.feedbackQuantity"
           :min="0.01"
@@ -128,24 +179,27 @@
           class="!w-full"
         />
       </a-form-item>
-      <a-form-item label="鍚堟牸鍝佹暟閲�">
-        <a-input-number
-          v-model:value="formData.qualifiedQuantity"
-          :min="0"
-          :precision="2"
-          placeholder="璇疯緭鍏ュ悎鏍煎搧鏁伴噺"
-          class="!w-full"
-        />
-      </a-form-item>
-      <a-form-item label="涓嶈壇鍝佹暟閲�">
-        <a-input-number
-          v-model:value="formData.unqualifiedQuantity"
-          :min="0"
-          :precision="2"
-          placeholder="璇疯緭鍏ヤ笉鑹搧鏁伴噺"
-          class="!w-full"
-        />
-      </a-form-item>
+      <div v-if="paramDetails.length" class="mb-4">
+        <div class="mb-1 font-medium">宸ヨ壓鍙傛暟</div>
+        <div
+          v-for="detail in paramDetails"
+          :key="detail.id"
+          class="mb-2 flex items-center gap-2"
+        >
+          <span class="w-40 flex-shrink-0 text-right text-sm text-gray-600">
+            <span v-if="detail.required" class="text-red-500">*&nbsp;</span>
+            {{ detail.paramName || detail.paramCode
+            }}{{
+              detail.unitMeasureName ? `锛�${detail.unitMeasureName}锛塦 : ''
+            }}
+          </span>
+          <a-input
+            v-model:value="detail.paramValue"
+            placeholder="璇疯緭鍏ュ弬鏁板��"
+            class="!w-full"
+          />
+        </div>
+      </div>
       <a-form-item label="澶囨敞">
         <a-textarea
           v-model:value="formData.remark"

--
Gitblit v1.9.3