From 54274cf2cb44da9b7eac1f324cee9ad653936aef Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 30 四月 2026 11:58:25 +0800
Subject: [PATCH] Merge branch 'dev_NEW_pro' of http://114.132.189.42:9002/r/product-inventory-management into dev_NEW_pro

---
 src/main.js                                               |    3 
 jsconfig.json                                             |   10 
 src/components/Dialog/FileList.vue                        |  308 ++++++++++++-----------
 src/views/financialManagement/revenueManagement/index.vue |  423 ++++++++++----------------------
 4 files changed, 305 insertions(+), 439 deletions(-)

diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..365552f
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,10 @@
+{
+  "compilerOptions": {
+    "baseUrl": ".",
+    "paths": {
+      "@/*": ["src/*"],
+      "~/*": ["./*"]
+    }
+  },
+  "include": ["src/**/*.js", "src/**/*.vue", "vite.config.js"]
+}
diff --git a/src/components/Dialog/FileList.vue b/src/components/Dialog/FileList.vue
index 136ff8b..1506b25 100644
--- a/src/components/Dialog/FileList.vue
+++ b/src/components/Dialog/FileList.vue
@@ -13,13 +13,15 @@
       </el-button>
     </div>
     <!-- 涓婁紶缁勪欢寮圭獥 -->
-    <el-dialog v-model="uploadDialogVisible"
-               title="涓婁紶闄勪欢"
-               width="50%"
-               @close="handleUploadClose">
-      <AttachmentUpload v-model:file-list="newFileList" />
+    <el-dialog
+        v-model="uploadDialogVisible"
+        title="涓婁紶闄勪欢"
+        width="50%"
+        @close="closeUpload">
+      <AttachmentUpload v-model:file-list="newFileList"/>
       <template #footer>
-        <el-button @click="handleUploadClose">鍏抽棴</el-button>
+        <el-button @click="saveUpload">淇濆瓨</el-button>
+        <el-button @click="closeUpload">鍏抽棴</el-button>
       </template>
     </el-dialog>
     <!-- 鏂囦欢鍒楄〃琛ㄦ牸 -->
@@ -30,7 +32,7 @@
                 :height="tableData.length > 0 ? 'auto' : '120px'">
         <el-table-column label="闄勪欢鍚嶇О"
                          prop="originalFilename"
-                         show-overflow-tooltip />
+                         show-overflow-tooltip/>
         <el-table-column v-if="showActions"
                          fixed="right"
                          label="鎿嶄綔"
@@ -40,8 +42,8 @@
             <el-button link
                        type="primary"
                        size="small"
-                       :href="scope.row.downloadURL"
-                       class="download-link">
+                       class="download-link"
+                       @click="downloadFile(scope.row.downloadURL)">
               涓嬭浇
             </el-button>
             <el-button link
@@ -58,173 +60,181 @@
 </template>
 
 <script setup>
-  import { ref, computed, getCurrentInstance, onMounted, watch } from "vue";
-  import AttachmentUpload from "@/components/AttachmentUpload/file/index.vue";
-  import {
-    attachmentList,
-    deleteAttachment,
-    createAttachment,
-  } from "@/api/basicData/storageAttachment.js";
+import {ref, computed, getCurrentInstance, onMounted, watch} from "vue";
+import AttachmentUpload from "@/components/AttachmentUpload/file/index.vue";
+import {
+  attachmentList,
+  deleteAttachment,
+  createAttachment,
+} from "@/api/basicData/storageAttachment.js";
 
-  const props = defineProps({
-    visible: {
-      type: Boolean,
-      required: true,
-    },
-    recordType: {
-      type: String,
-      default: "",
-      required: true,
-    },
-    recordId: {
-      type: Number,
-      default: 0,
-      required: true,
-    },
-    title: {
-      type: String,
-      default: "闄勪欢",
-    },
-    width: {
-      type: String,
-      default: "50%",
-    },
-    showActions: {
-      type: Boolean,
-      default: true,
-    },
-  });
+const props = defineProps({
+  visible: {
+    type: Boolean,
+    required: true,
+  },
+  recordType: {
+    type: String,
+    default: "",
+    required: true,
+  },
+  recordId: {
+    type: Number,
+    default: 0,
+    required: true,
+  },
+  title: {
+    type: String,
+    default: "闄勪欢",
+  },
+  width: {
+    type: String,
+    default: "50%",
+  },
+  showActions: {
+    type: Boolean,
+    default: true,
+  },
+});
 
-  const emit = defineEmits(["close", "download", "upload", "delete"]);
+const emit = defineEmits(["close", "download", "upload", "delete"]);
 
-  const { proxy } = getCurrentInstance();
-  const tableData = ref([]);
-  const uploadDialogVisible = ref(false);
-  const newFileList = ref([]);
+const {proxy} = getCurrentInstance();
+const tableData = ref([]);
+const uploadDialogVisible = ref(false);
+const newFileList = ref([]);
 
-  const isShow = computed({
-    get() {
-      return props.visible;
-    },
-    set(val) {
-      emit("update:visible", val);
-    },
-  });
+const isShow = computed({
+  get() {
+    return props.visible;
+  },
+  set(val) {
+    emit("update:visible", val);
+  },
+});
 
-  const handleClose = () => {
-    isShow.value = false;
-  };
+const handleClose = () => {
+  isShow.value = false;
+};
 
-  const handleUpload = () => {
-    uploadDialogVisible.value = true;
-  };
+const handleUpload = () => {
+  uploadDialogVisible.value = true;
+};
 
-  const handleUploadClose = async () => {
-    // 妫�鏌ユ槸鍚︽湁鏂颁笂浼犵殑鏂囦欢
-    if (newFileList.value.length > 0) {
-      try {
-        await createAttachment({
-          application: "file",
-          recordType: props.recordType,
-          recordId: props.recordId,
-          storageBlobDTOs: [...newFileList.value, ...tableData.value],
-        });
-        newFileList.value = [];
-        // 鍒锋柊鍒楄〃
-        setList();
-      } catch (error) {
-        proxy?.$modal?.msgError("涓婁紶澶辫触");
-      }
-    }
-    uploadDialogVisible.value = false;
-  };
-
-  const handleDelete = async (row, index) => {
+const saveUpload = async () => {
+  // 妫�鏌ユ槸鍚︽湁鏂颁笂浼犵殑鏂囦欢
+  if (newFileList.value.length > 0) {
     try {
-      await deleteAttachment([row.storageAttachmentId]);
-      proxy?.$modal?.msgSuccess("鍒犻櫎鎴愬姛");
+      await createAttachment({
+        application: "file",
+        recordType: props.recordType,
+        recordId: props.recordId,
+        storageBlobDTOs: [...newFileList.value, ...tableData.value],
+      });
+      newFileList.value = [];
+      // 鍒锋柊鍒楄〃
       setList();
     } catch (error) {
-      proxy?.$modal?.msgError("鍒犻櫎澶辫触");
+      proxy?.$modal?.msgError("涓婁紶澶辫触");
     }
-  };
+  }
+  uploadDialogVisible.value = false;
+};
 
-  const setList = () => {
-    attachmentList({
-      recordType: props.recordType,
-      recordId: props.recordId,
-    }).then(res => {
-      if (res && res.data) {
-        tableData.value = res.data || [];
-      }
-    });
-  };
+const closeUpload = () => {
+  newFileList.value = [];
+  uploadDialogVisible.value = false;
+}
 
-  onMounted(() => {
+const handleDelete = async (row, index) => {
+  try {
+    await deleteAttachment([row.storageAttachmentId]);
+    proxy?.$modal?.msgSuccess("鍒犻櫎鎴愬姛");
     setList();
+  } catch (error) {
+    proxy?.$modal?.msgError("鍒犻櫎澶辫触");
+  }
+};
+
+const setList = () => {
+  attachmentList({
+    recordType: props.recordType,
+    recordId: props.recordId,
+  }).then(res => {
+    if (res && res.data) {
+      tableData.value = res.data || [];
+    }
   });
+};
+
+const downloadFile = (url) => {
+  window.open(url, "_blank");
+};
+onMounted(() => {
+  setList();
+});
 </script>
 
 <style scoped>
-  .attachment-dialog {
-    border-radius: 12px;
-  }
+.attachment-dialog {
+  border-radius: 12px;
+}
 
-  .toolbar {
-    margin-bottom: 16px;
-    text-align: right;
-  }
+.toolbar {
+  margin-bottom: 16px;
+  text-align: right;
+}
 
-  .table-container {
-    max-height: 40vh;
-    overflow-y: auto;
-    min-height: 120px;
-    padding-bottom: 16px;
-    box-sizing: border-box;
-    will-change: scroll-position;
-    transform: translateZ(0);
-    -webkit-overflow-scrolling: touch;
-  }
+.table-container {
+  max-height: 40vh;
+  overflow-y: auto;
+  min-height: 120px;
+  padding-bottom: 16px;
+  box-sizing: border-box;
+  will-change: scroll-position;
+  transform: translateZ(0);
+  -webkit-overflow-scrolling: touch;
+}
 
-  :deep(.el-table) {
-    margin-bottom: 0;
-  }
+:deep(.el-table) {
+  margin-bottom: 0;
+}
 
-  :deep(.el-table__body-wrapper) {
-    overflow-y: auto;
-    will-change: transform;
-    transform: translateZ(0);
-  }
+:deep(.el-table__body-wrapper) {
+  overflow-y: auto;
+  will-change: transform;
+  transform: translateZ(0);
+}
 
-  :deep(.el-table__body tr) {
-    transition: none;
-  }
+:deep(.el-table__body tr) {
+  transition: none;
+}
 
-  :deep(.el-dialog__footer) {
-    padding-top: 12px;
-    border-top: 1px solid #e9ecef;
-  }
+:deep(.el-dialog__footer) {
+  padding-top: 12px;
+  border-top: 1px solid #e9ecef;
+}
 
-  .attachment-table {
-    border-radius: 8px;
-  }
+.attachment-table {
+  border-radius: 8px;
+}
 
-  :deep(.el-dialog__header) {
-    background-color: #f8f9fa;
-    border-bottom: 1px solid #e9ecef;
-    padding: 16px 20px;
-  }
+:deep(.el-dialog__header) {
+  background-color: #f8f9fa;
+  border-bottom: 1px solid #e9ecef;
+  padding: 16px 20px;
+}
 
-  :deep(.el-dialog__title) {
-    font-size: 16px;
-    font-weight: 600;
-  }
+:deep(.el-dialog__title) {
+  font-size: 16px;
+  font-weight: 600;
+}
 
-  :deep(.el-dialog__body) {
-    padding: 16px 20px;
-  }
+:deep(.el-dialog__body) {
+  padding: 16px 20px;
+}
 
-  :deep(.el-table__empty-text) {
-    color: #999;
-  }
+:deep(.el-table__empty-text) {
+  color: #999;
+}
 </style>
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
index b80c9b6..025ff14 100644
--- a/src/main.js
+++ b/src/main.js
@@ -48,6 +48,8 @@
 import ImageUpload from "@/components/AttachmentUpload/image";
 // 鍥剧墖棰勮缁勪欢
 import ImagePreview from "@/components/AttachmentPreview/image";
+// 闄勪欢寮圭獥缁勪欢
+import FileListDialog from "@/components/Dialog/FileList.vue";
 // 瀛楀吀鏍囩缁勪欢
 import DictTag from "@/components/DictTag";
 // 琛ㄦ牸缁勪欢
@@ -92,6 +94,7 @@
 app.component("FileUpload", FileUpload);
 app.component("ImageUpload", ImageUpload);
 app.component("ImagePreview", ImagePreview);
+app.component("FileListDialog", FileListDialog);
 app.component("RightToolbar", RightToolbar);
 app.component("Editor", Editor);
 app.component("PIMTable", PIMTable);
diff --git a/src/views/financialManagement/revenueManagement/index.vue b/src/views/financialManagement/revenueManagement/index.vue
index e2eb28e..bcef5b6 100644
--- a/src/views/financialManagement/revenueManagement/index.vue
+++ b/src/views/financialManagement/revenueManagement/index.vue
@@ -3,22 +3,22 @@
     <el-form :model="filters" :inline="true">
       <el-form-item label="鏀跺叆鏃ユ湡:">
         <el-date-picker v-model="filters.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
-                        placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
+                        placeholder="璇烽�夋嫨" clearable @change="changeDaterange"/>
       </el-form-item>
       <el-form-item label="鏀舵鏂瑰紡:">
         <el-select
-                v-model="filters.incomeMethodLabel"
-                placeholder="璇烽�夋嫨"
-                clearable
-                style="width: 200px;"
-              >
-                <el-option
-                  v-for="item in incomeMethodOptions"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
+            v-model="filters.incomeMethodLabel"
+            placeholder="璇烽�夋嫨"
+            clearable
+            style="width: 200px;"
+        >
+          <el-option
+              v-for="item in incomeMethodOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+          />
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="getTableData">鎼滅储</el-button>
@@ -29,32 +29,32 @@
       <div class="actions">
         <div></div>
         <div>
-          <el-button type="primary" @click="add" icon="Plus"> 鏂板 </el-button>
+          <el-button type="primary" @click="add" icon="Plus"> 鏂板</el-button>
           <el-button @click="handleOut" icon="download">瀵煎嚭</el-button>
           <el-button
-            type="danger"
-            icon="Delete"
-            :disabled="multipleList.length <= 0 || hasBusinessIdInSelection"
-            @click="handleBatchDelete"
+              type="danger"
+              icon="Delete"
+              :disabled="multipleList.length <= 0 || hasBusinessIdInSelection"
+              @click="handleBatchDelete"
           >
             鎵归噺鍒犻櫎
           </el-button>
         </div>
       </div>
       <PIMTable
-        rowKey="id"
-        isSelection
-        :column="columns"
-        :tableData="dataList"
-        :page="{
+          rowKey="id"
+          isSelection
+          :column="columns"
+          :tableData="dataList"
+          :page="{
           current: pagination.currentPage,
           size: pagination.pageSize,
           total: pagination.total,
         }"
-        :isShowSummary="true"
-        :summaryMethod="summarizeMainTable"
-        @selection-change="handleSelectionChange"
-        @pagination="changePage"
+          :isShowSummary="true"
+          :summaryMethod="summarizeMainTable"
+          @selection-change="handleSelectionChange"
+          @pagination="changePage"
       >
         <template #incomeMethodSlot="{ row }">
           <el-tag>
@@ -62,18 +62,18 @@
           </el-tag>
         </template>
         <template #operation="{ row }">
-          <el-button 
-            type="primary" 
-            link 
-            :disabled="!!row.businessId"
-            @click="edit(row.id)"
+          <el-button
+              type="primary"
+              link
+              :disabled="!!row.businessId"
+              @click="edit(row.id)"
           >
             缂栬緫
           </el-button>
           <el-button
-            type="primary"
-						link
-            @click="openFilesFormDia(row)"
+              type="primary"
+              link
+              @click="openFilesFormDia(row)"
           >
             闄勪欢
           </el-button>
@@ -81,28 +81,16 @@
       </PIMTable>
     </div>
     <Modal ref="modalRef" @success="getTableData"></Modal>
-    <!--  todo 闄勪欢棰勮鐩稿叧 -->
-    <FileListDialog 
-      ref="fileListRef" 
-      v-model="fileListDialogVisible"
-      :show-upload-button="true"
-      :show-delete-button="true"
-      :upload-method="handleUpload"
-      :delete-method="handleFileDelete"
-    />
+    <FileListDialog v-if="fileListDialogVisible" :record-id="currentRecordId" record-type="account_income" v-model:visible="fileListDialogVisible"/>
   </div>
 </template>
 
 <script setup>
-import { usePaginationApi } from "@/hooks/usePaginationApi";
-import { listPage, delAccountIncome, fileListPage, fileAdd, fileDel } from "@/api/financialManagement/revenueManagement";
-import { onMounted, getCurrentInstance, ref, computed } from "vue";
-import Modal from "./Modal.vue";
-import { ElMessageBox, ElMessage } from "element-plus";
+import {usePaginationApi} from "@/hooks/usePaginationApi";
+import {listPage, delAccountIncome} from "@/api/financialManagement/revenueManagement";
+import {onMounted, getCurrentInstance, ref, computed} from "vue";
+import {ElMessageBox, ElMessage} from "element-plus";
 import dayjs from "dayjs";
-import FileListDialog from "@/components/Dialog/FileListDialog.vue";
-import request from "@/utils/request";
-import { getToken } from "@/utils/auth";
 
 defineOptions({
   name: "鏀跺叆绠$悊",
@@ -110,15 +98,14 @@
 
 // 琛ㄦ牸澶氶�夋閫変腑椤�
 const multipleList = ref([]);
-const { proxy } = getCurrentInstance();
+const {proxy} = getCurrentInstance();
 const modalRef = ref();
-const { payment_methods } = proxy.useDict("payment_methods");
-const { receipt_payment_type } = proxy.useDict("receipt_payment_type");
-const { income_types } = proxy.useDict("income_types");
+const {payment_methods} = proxy.useDict("payment_methods");
+const {receipt_payment_type} = proxy.useDict("receipt_payment_type");
+const {income_types} = proxy.useDict("income_types");
 const fileListRef = ref(null);
 const fileListDialogVisible = ref(false);
-const currentFileRow = ref(null);
-const accountType = ref('鏀跺叆');
+const currentRecordId = ref(0);
 
 const incomeMethodOptions = computed(() => {
   const merged = [...(payment_methods.value || []), ...(receipt_payment_type.value || [])];
@@ -127,7 +114,7 @@
     const label = item?.label;
     if (!label) return;
     if (!uniqueMap.has(label)) {
-      uniqueMap.set(label, { label, value: label });
+      uniqueMap.set(label, {label, value: label});
     }
   });
   return Array.from(uniqueMap.values());
@@ -142,86 +129,86 @@
   resetFilters,
   onCurrentChange,
 } = usePaginationApi(
-  listPage,
-  {
-    incomeMethodLabel: undefined,
-    entryDate: undefined,
-  },
-  [
+    listPage,
     {
-      label: "鏀跺叆鏃ユ湡",
-      prop: "incomeDate",
+      incomeMethodLabel: undefined,
+      entryDate: undefined,
     },
-    {
-      label: "鏀跺叆绫诲瀷",
-      prop: "incomeType",
-      dataType: "tag",
-      formatData: (params) => {
-        if (income_types.value.find((m) => m.value == params)) {
-          return income_types.value.find((m) => m.value == params).label;
-        } else {
-          return null
-        }
+    [
+      {
+        label: "鏀跺叆鏃ユ湡",
+        prop: "incomeDate",
       },
-    },
-    {
-      label: "瀹㈡埛鍚嶇О",
-      prop: "customerName",
-			width: '200'
+      {
+        label: "鏀跺叆绫诲瀷",
+        prop: "incomeType",
+        dataType: "tag",
+        formatData: (params) => {
+          if (income_types.value.find((m) => m.value == params)) {
+            return income_types.value.find((m) => m.value == params).label;
+          } else {
+            return null
+          }
+        },
+      },
+      {
+        label: "瀹㈡埛鍚嶇О",
+        prop: "customerName",
+        width: '200'
 
-    },
-    {
-      label: "鏀跺叆閲戦",
-      prop: "incomeMoney",
+      },
+      {
+        label: "鏀跺叆閲戦",
+        prop: "incomeMoney",
 
-    },
-    {
-      label: "鏀跺叆鎻忚堪",
-      prop: "incomeDescribed",
+      },
+      {
+        label: "鏀跺叆鎻忚堪",
+        prop: "incomeDescribed",
 
-    },
-    {
-      label: "鏀舵鏂瑰紡",
-      prop: "incomeMethodLabel",
-			align: 'center',
-			width: '100',
-      dataType: "slot",
-      slot: "incomeMethodSlot",
-    },
-    {
-      label: "鍙戠エ鍙风爜",
-      prop: "invoiceNumber",
+      },
+      {
+        label: "鏀舵鏂瑰紡",
+        prop: "incomeMethodLabel",
+        align: 'center',
+        width: '100',
+        dataType: "slot",
+        slot: "incomeMethodSlot",
+      },
+      {
+        label: "鍙戠エ鍙风爜",
+        prop: "invoiceNumber",
 
-    },
-    {
-      label: "澶囨敞",
-      prop: "note",
+      },
+      {
+        label: "澶囨敞",
+        prop: "note",
 
-    },
-    {
-      label: "褰曞叆浜�",
-      prop: "inputUser",
-    },
-    {
-      label: "褰曞叆鏃ユ湡",
-      prop: "inputTime",
+      },
+      {
+        label: "褰曞叆浜�",
+        prop: "inputUser",
+      },
+      {
+        label: "褰曞叆鏃ユ湡",
+        prop: "inputTime",
 
-    },
+      },
+      {
+        fixed: "right",
+        label: "鎿嶄綔",
+        dataType: "slot",
+        slot: "operation",
+        align: "center",
+        width: "160px",
+      },
+    ],
+    undefined,
     {
-      fixed: "right",
-      label: "鎿嶄綔",
-      dataType: "slot",
-      slot: "operation",
-      align: "center",
-      width: "160px",
-    },
-  ],
-  undefined,
-  {
-    incomeMethodLabel: (value) => ({
-      incomeMethodLabel: value || undefined,
-    }),
-  }
+      incomeMethodLabel: (value) => ({
+        incomeMethodLabel: value || undefined,
+      }),
+    }
 );
 
 // 琛ㄦ牸鍚堣锛氭敹鍏ラ噾棰�
@@ -232,8 +219,8 @@
 const getIncomeMethodLabel = (row) => {
   const methodValue = row?.incomeMethod;
   const dictList = String(row?.businessType) === "1"
-    ? receipt_payment_type.value
-    : payment_methods.value;
+      ? receipt_payment_type.value
+      : payment_methods.value;
   return dictList.find((item) => item.value == methodValue)?.label || "--";
 };
 
@@ -259,9 +246,9 @@
   }
   modalRef.value.loadForm(id);
 };
-const changePage = ({ page, limit }) => {
+const changePage = ({page, limit}) => {
   pagination.currentPage = page;
-	pagination.pageSize = limit;
+  pagination.pageSize = limit;
   onCurrentChange(page);
 };
 const deleteRow = (id) => {
@@ -283,13 +270,13 @@
       return;
     }
   }
-  
+
   ElMessageBox.confirm("姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?", "鎻愮ず", {
     confirmButtonText: "纭畾",
     cancelButtonText: "鍙栨秷",
     type: "warning",
   }).then(async () => {
-    const { code } = await delAccountIncome(id);
+    const {code} = await delAccountIncome(id);
     if (code == 200) {
       ElMessage({
         type: "success",
@@ -306,13 +293,13 @@
     proxy.$modal.msgWarning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
     return;
   }
-  
+
   // 妫�鏌ユ槸鍚︽湁 businessId
   if (hasBusinessIdInSelection.value) {
     proxy.$modal.msgWarning("閫変腑鐨勮褰曚腑鍖呭惈宸插叧鑱斾笟鍔$殑璁板綍锛屼笉鑳藉垹闄�");
     return;
   }
-  
+
   const ids = multipleList.value.map((item) => item.id);
   deleteRow(ids);
 };
@@ -336,162 +323,17 @@
     cancelButtonText: "鍙栨秷",
     type: "warning",
   })
-    .then(() => {
-      proxy.download(`/account/accountIncome/export`, {}, "鏀跺叆鍙拌处.xlsx");
-    })
-    .catch(() => {
-      proxy.$modal.msg("宸插彇娑�");
-    });
+      .then(() => {
+        proxy.download(`/account/accountIncome/export`, {}, "鏀跺叆鍙拌处.xlsx");
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
 };
 // 鎵撳紑闄勪欢寮规
 const openFilesFormDia = async (row) => {
-  currentFileRow.value = row;
-  accountType.value = '鏀跺叆';
-  try {
-    const res = await fileListPage({
-      accountId: row.id,
-      accountType: accountType.value,
-      current: 1,
-      size: 100
-    });
-    if (res.code === 200 && fileListRef.value) {
-      // 灏嗘暟鎹浆鎹负 FileListDialog 闇�瑕佺殑鏍煎紡
-      const fileList = (res.data?.records || []).map(item => ({
-        name: item.name,
-        url: item.url,
-        id: item.id,
-        ...item
-      }));
-      fileListRef.value.open(fileList);
-      fileListDialogVisible.value = true;
-    }
-  } catch (error) {
-    proxy.$modal.msgError("鑾峰彇闄勪欢鍒楄〃澶辫触");
-  }
-};
-
-// 涓婁紶闄勪欢
-const handleUpload = async () => {
-  if (!currentFileRow.value) {
-    proxy.$modal.msgWarning("璇峰厛閫夋嫨鏁版嵁");
-    return null;
-  }
-  
-  return new Promise((resolve) => {
-    // 鍒涘缓涓�涓殣钘忕殑鏂囦欢杈撳叆鍏冪礌
-    const input = document.createElement('input');
-    input.type = 'file';
-    input.style.display = 'none';
-    input.onchange = async (e) => {
-      const file = e.target.files[0];
-      if (!file) {
-        resolve(null);
-        return;
-      }
-      
-      try {
-        // 浣跨敤 FormData 涓婁紶鏂囦欢
-        const formData = new FormData();
-        formData.append('file', file);
-        
-        const uploadRes = await request({
-          url: '/file/upload',
-          method: 'post',
-          data: formData,
-          headers: {
-            'Content-Type': 'multipart/form-data',
-            Authorization: `Bearer ${getToken()}`
-          }
-        });
-        
-        if (uploadRes.code === 200) {
-          // 淇濆瓨闄勪欢淇℃伅
-          const fileData = {
-            accountId: currentFileRow.value.id,
-            accountType: accountType.value,
-            name: uploadRes.data.originalName || file.name,
-            url: uploadRes.data.tempPath || uploadRes.data.url
-          };
-          
-          const saveRes = await fileAdd(fileData);
-          if (saveRes.code === 200) {
-            proxy.$modal.msgSuccess("鏂囦欢涓婁紶鎴愬姛");
-            // 閲嶆柊鍔犺浇鏂囦欢鍒楄〃
-            const listRes = await fileListPage({
-              accountId: currentFileRow.value.id,
-              accountType: accountType.value,
-              current: 1,
-              size: 100
-            });
-            if (listRes.code === 200 && fileListRef.value) {
-              const fileList = (listRes.data?.records || []).map(item => ({
-                name: item.name,
-                url: item.url,
-                id: item.id,
-                ...item
-              }));
-              fileListRef.value.setList(fileList);
-            }
-            // 杩斿洖鏂版枃浠朵俊鎭�
-            resolve({
-              name: fileData.name,
-              url: fileData.url,
-              id: saveRes.data?.id
-            });
-          } else {
-            proxy.$modal.msgError(saveRes.msg || "鏂囦欢淇濆瓨澶辫触");
-            resolve(null);
-          }
-        } else {
-          proxy.$modal.msgError(uploadRes.msg || "鏂囦欢涓婁紶澶辫触");
-          resolve(null);
-        }
-      } catch (error) {
-        proxy.$modal.msgError("鏂囦欢涓婁紶澶辫触");
-        resolve(null);
-      } finally {
-        document.body.removeChild(input);
-      }
-    };
-    
-    document.body.appendChild(input);
-    input.click();
-  });
-};
-
-// 鍒犻櫎闄勪欢
-const handleFileDelete = async (row) => {
-  try {
-    const res = await fileDel([row.id]);
-    if (res.code === 200) {
-      proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-      // 閲嶆柊鍔犺浇鏂囦欢鍒楄〃
-      if (currentFileRow.value && fileListRef.value) {
-        const listRes = await fileListPage({
-          accountId: currentFileRow.value.id,
-          accountType: accountType.value,
-          current: 1,
-          size: 100
-        });
-        if (listRes.code === 200) {
-          const fileList = (listRes.data?.records || []).map(item => ({
-            name: item.name,
-            url: item.url,
-            id: item.id,
-            ...item
-          }));
-          fileListRef.value.setList(fileList);
-        }
-      }
-      return true; // 杩斿洖 true 琛ㄧず鍒犻櫎鎴愬姛锛岀粍浠朵細鏇存柊鍒楄〃
-    } else {
-      proxy.$modal.msgError(res.msg || "鍒犻櫎澶辫触");
-      return false;
-    }
-  } catch (error) {
-    proxy.$modal.msgError("鍒犻櫎澶辫触");
-    return false;
-  }
+  currentRecordId.value = row.id;
+  fileListDialogVisible.value = true;
 };
 
 onMounted(() => {
@@ -503,6 +345,7 @@
 .table_list {
   margin-top: unset;
 }
+
 .actions {
   display: flex;
   justify-content: space-between;

--
Gitblit v1.9.3