From f3f855be1fd86d28485fceb02c30b6c6b2853aef Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 04 十一月 2026 18:15:40 +0800
Subject: [PATCH] feat(mes): 质检附件与来源关联界面,新增工单技术文件、废料登记与领料单打印

---
 src/views/basicData/mdm/modules/form.vue |   35 +++++++++++++++++++++++++----------
 1 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/views/basicData/mdm/modules/form.vue b/src/views/basicData/mdm/modules/form.vue
index e9948c7..e96e7f8 100644
--- a/src/views/basicData/mdm/modules/form.vue
+++ b/src/views/basicData/mdm/modules/form.vue
@@ -3,12 +3,13 @@
 
 import { useVbenModal } from "#/packages/effects/common-ui/src";
 
-import { message } from "ant-design-vue";
+import { message, Popconfirm } from "ant-design-vue";
 
 import { useVbenForm } from '#/adapter/form';
 import {
   createItem,
   createTechnicalFile,
+  deleteTechnicalFile,
   getItem,
   getTechnicalFileList,
   updateItem,
@@ -25,7 +26,7 @@
 const emit = defineEmits(['success']);
 const formData = ref<MdmItemApi.Item>();
 const technicalFiles = ref<MdmItemApi.TechnicalFile[]>([]);
-const technicalUploadValue = ref<number[]>([]);
+const technicalUploadValue = ref<number | number[] | string>([]);
 
 const [Form, formApi] = useVbenForm({
   commonConfig: {
@@ -95,20 +96,31 @@
 });
 
 async function handleTechnicalFileChange(value: unknown) {
-  if (!formData.value?.id || !Array.isArray(value)) {
+  if (!formData.value?.id) {
     return;
   }
-  const blobId = value.find((item): item is number => typeof item === 'number');
-  if (!blobId) {
+  // 鍗曟枃浠朵笂浼犵粍浠惰繑鍥炲崟涓� ID锛涘吋瀹规暟缁勫拰鏁板瓧瀛楃涓层��
+  const rawId = Array.isArray(value) ? value[0] : value;
+  const blobId = typeof rawId === 'number' ? rawId :
+    typeof rawId === 'string' && /^\d+$/.test(rawId) ? Number(rawId) : 0;
+  if (!Number.isSafeInteger(blobId) || blobId <= 0) {
     return;
   }
   try {
     await createTechnicalFile(formData.value.id, blobId);
     technicalFiles.value = await getTechnicalFileList(formData.value.id);
-    message.success('鎶�鏈枃浠跺凡淇濆瓨锛屽巻鍙茬増鏈凡淇濈暀');
+    message.success('鎶�鏈枃浠跺凡娣诲姞');
   } finally {
     technicalUploadValue.value = [];
   }
+}
+
+async function handleDeleteTechnicalFile(id: number) {
+  const itemId = formData.value?.id;
+  if (!itemId) return;
+  await deleteTechnicalFile(itemId, id);
+  technicalFiles.value = await getTechnicalFileList(itemId);
+  message.success('鎶�鏈枃浠跺凡绉婚櫎');
 }
 </script>
 
@@ -116,14 +128,14 @@
   <Modal class="w-[1000px]" :title="formData?.id ? $t('ui.actionTitle.edit', ['鐗╂枡']) : $t('ui.actionTitle.create', ['鐗╂枡'])">
     <Form class="mx-4" />
     <div v-if="formData?.id" class="mx-4 mb-4 rounded border p-4">
-      <div class="mb-3 text-base font-medium">鎶�鏈枃浠跺巻鍙�</div>
+      <div class="mb-3 text-base font-medium">鎶�鏈枃浠�</div>
       <FileUpload
         v-model:value="technicalUploadValue"
         value-key="id"
         :max-number="1"
         :multiple="false"
-        :accept="['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.dwg', '.png', '.jpg', '.jpeg']"
-        help-text="涓婁紶鏂版枃浠朵細鐢熸垚鏂扮殑鐗堟湰锛屽巻鍙叉枃浠朵粛鍙煡鐪�"
+        :accept="['pdf', 'doc', 'docx', 'xls', 'xlsx', 'dwg', 'png', 'jpg', 'jpeg']"
+        help-text="姣忔涓婁紶浼氳拷鍔犱竴浠芥妧鏈枃浠讹紝鍘熸枃浠剁户缁繚鐣�"
         @change="handleTechnicalFileChange"
       />
       <a-table
@@ -133,12 +145,15 @@
         :pagination="false"
         row-key="id"
       >
-        <a-table-column key="versionNo" title="鐗堟湰" data-index="versionNo" />
+        <a-table-column key="versionNo" title="涓婁紶搴忓彿" data-index="versionNo" />
         <a-table-column key="fileName" title="鏂囦欢鍚�" data-index="fileName" />
         <a-table-column key="createTime" title="涓婁紶鏃堕棿" data-index="createTime" />
         <a-table-column key="action" title="鎿嶄綔">
           <template #default="{ record }">
             <a :href="record.downloadURL || record.previewURL" target="_blank">鏌ョ湅鏂囦欢</a>
+            <Popconfirm title="绉婚櫎璇ユ妧鏈枃浠讹紵宸叉湁宸ュ崟浠嶄繚鐣欏師鏂囦欢锛屾柊宸ュ崟灏嗕笉鍐嶅甫鍏ャ��" ok-text="绉婚櫎" cancel-text="鍙栨秷" @confirm="handleDeleteTechnicalFile(record.id)">
+              <a class="ml-3 text-red-500">鍒犻櫎</a>
+            </Popconfirm>
           </template>
         </a-table-column>
       </a-table>

--
Gitblit v1.9.3