From 64e47529e29ab013b32d3c09e4044b5b192c3c7a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 26 十月 2026 17:11:33 +0800
Subject: [PATCH] feat: 完善南通苏珩线缆工业智能系统

---
 src/views/basicData/mdm/modules/form.vue |   64 ++++++++++++++++++++++++++++++-
 1 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/src/views/basicData/mdm/modules/form.vue b/src/views/basicData/mdm/modules/form.vue
index 5d82e00..e9948c7 100644
--- a/src/views/basicData/mdm/modules/form.vue
+++ b/src/views/basicData/mdm/modules/form.vue
@@ -1,6 +1,4 @@
 <script lang="ts" setup>
-import type { MdmItemApi } from '#/api/mdm/item';
-
 import { ref } from 'vue';
 
 import { useVbenModal } from "#/packages/effects/common-ui/src";
@@ -8,7 +6,15 @@
 import { message } from "ant-design-vue";
 
 import { useVbenForm } from '#/adapter/form';
-import { createItem, getItem, updateItem } from '#/api/mdm/item';
+import {
+  createItem,
+  createTechnicalFile,
+  getItem,
+  getTechnicalFileList,
+  updateItem,
+} from '#/api/mdm/item';
+import type { MdmItemApi } from '#/api/mdm/item';
+import { FileUpload } from '#/components/upload';
 import { $t } from '#/locales';
 
 import { useFormSchema, clearUnitListCache, buildCategoryTree } from '../data';
@@ -18,6 +24,8 @@
 
 const emit = defineEmits(['success']);
 const formData = ref<MdmItemApi.Item>();
+const technicalFiles = ref<MdmItemApi.TechnicalFile[]>([]);
+const technicalUploadValue = ref<number[]>([]);
 
 const [Form, formApi] = useVbenForm({
   commonConfig: {
@@ -52,6 +60,8 @@
   async onOpenChange(isOpen: boolean) {
     if (!isOpen) {
       formData.value = undefined;
+      technicalFiles.value = [];
+      technicalUploadValue.value = [];
       return;
     }
     const data = modalApi.getData<MdmItemApi.Item>();
@@ -70,20 +80,68 @@
         // 鍚屾鐘舵�佹槧灏勶細璇︽儏鎺ュ彛杩斿洖 syncedMes锛岃〃鍗曞瓧娈典负 syncMes
         formData.value.syncMes = formData.value.syncedMes ?? true;
         await formApi.setValues(formData.value);
+        technicalFiles.value = await getTechnicalFileList(data.id);
       } finally {
         modalApi.unlock();
       }
     } else {
       // 鏂板妯″紡
       formData.value = undefined;
+      technicalFiles.value = [];
+      technicalUploadValue.value = [];
       await formApi.resetForm();
     }
   },
 });
+
+async function handleTechnicalFileChange(value: unknown) {
+  if (!formData.value?.id || !Array.isArray(value)) {
+    return;
+  }
+  const blobId = value.find((item): item is number => typeof item === 'number');
+  if (!blobId) {
+    return;
+  }
+  try {
+    await createTechnicalFile(formData.value.id, blobId);
+    technicalFiles.value = await getTechnicalFileList(formData.value.id);
+    message.success('鎶�鏈枃浠跺凡淇濆瓨锛屽巻鍙茬増鏈凡淇濈暀');
+  } finally {
+    technicalUploadValue.value = [];
+  }
+}
 </script>
 
 <template>
   <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>
+      <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="涓婁紶鏂版枃浠朵細鐢熸垚鏂扮殑鐗堟湰锛屽巻鍙叉枃浠朵粛鍙煡鐪�"
+        @change="handleTechnicalFileChange"
+      />
+      <a-table
+        class="mt-3"
+        size="small"
+        :data-source="technicalFiles"
+        :pagination="false"
+        row-key="id"
+      >
+        <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>
+          </template>
+        </a-table-column>
+      </a-table>
+    </div>
   </Modal>
 </template>

--
Gitblit v1.9.3