From d5048a33e4760d414115a5e25645d30b41d24198 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 29 八月 2026 18:06:07 +0800
Subject: [PATCH] fix(wls): 修复多个组件中的类型安全和数据验证问题

---
 src/views/mes/pro/feedback/modules/batch-feedback.vue |   45 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/src/views/mes/pro/feedback/modules/batch-feedback.vue b/src/views/mes/pro/feedback/modules/batch-feedback.vue
index 7458c64..2f38bcb 100644
--- a/src/views/mes/pro/feedback/modules/batch-feedback.vue
+++ b/src/views/mes/pro/feedback/modules/batch-feedback.vue
@@ -1,13 +1,14 @@
 <script lang="ts" setup>
 import type { MesProTaskApi } from '#/api/mes/pro/task';
 
-import { ref } from 'vue';
+import { computed, ref } from 'vue';
 
 import { useVbenModal } from '@vben/common-ui';
 
 import { Button, message, Tag } from 'ant-design-vue';
 
 import { batchCreateFeedback } from '#/api/mes/pro/feedback';
+import { getRouteProcessByRouteAndProcess } from '#/api/mes/pro/route/process';
 import ProTaskSelectDialog from '#/views/mes/pro/task/components/select-dialog.vue';
 
 defineOptions({ name: 'BatchFeedbackForm' });
@@ -32,22 +33,49 @@
 
 const taskDialogRef = ref<InstanceType<typeof ProTaskSelectDialog>>();
 const selectedTasks = ref<MesProTaskApi.Task[]>([]);
+const needReportQuantityMap = ref<Record<number, boolean>>({});
 const formData = ref({
   feedbackQuantity: undefined as number | undefined,
   remark: '',
 });
 const submitting = ref(false);
 
+/** 鏄惁闇�瑕佸~鍐欐姤宸ユ暟閲忥紙浠讳竴閫変腑浠诲姟宸ュ簭瑕佹眰濉啓鏁伴噺鍗冲繀濉級 */
+const needQuantity = computed(() =>
+  selectedTasks.value.some(
+    (t) => needReportQuantityMap.value[t.id!] ?? true,
+  ),
+);
+
 function handleOpenTaskDialog() {
   taskDialogRef.value?.open([], { multiple: true });
 }
 
-function handleTaskSelected(rows: MesProTaskApi.Task[]) {
+/** 鎸夐�変腑浠诲姟宸ュ簭鍔犺浇鏄惁闇�瑕佹姤宸ユ暟閲� */
+async function handleTaskSelected(rows: MesProTaskApi.Task[]) {
   selectedTasks.value = rows;
+  needReportQuantityMap.value = {};
+  for (const task of rows) {
+    if (!task.routeId || !task.processId) {
+      continue;
+    }
+    try {
+      const routeProcess = await getRouteProcessByRouteAndProcess(
+        task.routeId,
+        task.processId,
+      );
+      needReportQuantityMap.value[task.id!] =
+        routeProcess?.needReportQuantity ?? true;
+    } catch {
+      // 鍔犺浇澶辫触鎸夐粯璁ゅ鐞嗭紙鏁伴噺蹇呭~锛�
+      needReportQuantityMap.value[task.id!] = true;
+    }
+  }
 }
 
 function handleRemoveTask(taskId: number) {
   selectedTasks.value = selectedTasks.value.filter((t) => t.id !== taskId);
+  delete needReportQuantityMap.value[taskId];
 }
 
 async function handleSubmit() {
@@ -55,7 +83,7 @@
     message.warning('璇烽�夋嫨浠诲姟');
     return;
   }
-  if (!formData.value.feedbackQuantity) {
+  if (needQuantity.value && !formData.value.feedbackQuantity) {
     message.warning('璇疯緭鍏ユ姤宸ユ暟閲�');
     return;
   }
@@ -63,7 +91,9 @@
   try {
     const result = await batchCreateFeedback({
       taskIds: selectedTasks.value.map((t) => t.id!),
-      feedbackQuantity: formData.value.feedbackQuantity,
+      feedbackQuantity: needQuantity.value
+        ? (formData.value.feedbackQuantity ?? 0)
+        : 0,
       remark: formData.value.remark || undefined,
     });
     if (result.failCount) {
@@ -101,7 +131,12 @@
           </Tag>
         </div>
       </a-form-item>
-      <a-form-item label="鎶ュ伐鏁伴噺" required>
+      <a-form-item
+        v-if="needQuantity"
+        label="鎶ュ伐鏁伴噺"
+        required
+        tooltip="宸ュ簭閰嶇疆涓轰笉闇�濉啓鎶ュ伐鏁伴噺鏃讹紝鍚堟牸鍝�/涓嶈壇鍝佹暟閲忕敱璐ㄦ纭畾"
+      >
         <a-input-number
           v-model:value="formData.feedbackQuantity"
           :min="0.01"

--
Gitblit v1.9.3