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