From e71652ca4366f9b3e413bfc996927620af8942b0 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 28 一月 2026 13:45:56 +0800
Subject: [PATCH] 进销存升级 1.供应商往来查询接口调整 2.采购报表添加导出接口联调 3.采购管理来票登记附件上传修改

---
 src/views/procurementManagement/procurementInvoiceLedger/index.vue |  231 ++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 161 insertions(+), 70 deletions(-)

diff --git a/src/views/procurementManagement/procurementInvoiceLedger/index.vue b/src/views/procurementManagement/procurementInvoiceLedger/index.vue
index b33e3e4..b90ef0d 100644
--- a/src/views/procurementManagement/procurementInvoiceLedger/index.vue
+++ b/src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -58,36 +58,24 @@
         @selection-change="handleSelectionChange"
         @pagination="changePage"
       >
-        <template #commonFilesRef="{ row }">
-          <el-dropdown @command="(command) => handleCommand(command, row)">
-            <el-button link :icon="Files" type="danger"> 闄勪欢 </el-button>
-            <template #dropdown>
-              <el-dropdown-menu>
-                <el-dropdown-item
-                  v-if="row.commonFiles.length !== 0"
-                  :icon="Download"
-                  command="download"
-                >
-                  涓嬭浇
-                </el-dropdown-item>
-                <el-dropdown-item :icon="Upload" command="upload">
-                  涓婁紶
-                </el-dropdown-item>
-              </el-dropdown-menu>
-            </template>
-          </el-dropdown>
-        </template>
         <template #operation="{ row }">
           <el-button
             type="primary"
-            text
+            link
+            @click="downLoadFile(row)"
+          >
+            闄勪欢
+          </el-button>
+          <el-button
+            type="primary"
+            link
             @click="openEdit(row)"
           >
             缂栬緫
           </el-button>
           <el-button
             type="primary"
-            text
+            link
             @click="handleDelete(row)"
           >
             鍒犻櫎
@@ -95,7 +83,16 @@
         </template>
       </PIMTable>
     </div>
-    <UploadModal ref="modalRef" @uploadSuccess="uploadSuccess"></UploadModal>
+    <FileListDialog 
+      ref="fileListRef" 
+      v-model="fileListDialogVisible"
+      title="闄勪欢鍒楄〃"
+      :showUploadButton="true"
+      :showDeleteButton="true"
+      :deleteMethod="handleDeleteFile"
+      :uploadMethod="handleFileUpload"
+      :rulesRegulationsManagementId="currentRowId"
+    />
     <EditModal ref="editmodalRef" @success="getTableData"></EditModal>
   </div>
 </template>
@@ -104,31 +101,30 @@
 import { ref, getCurrentInstance } from "vue";
 import { usePaginationApi } from "@/hooks/usePaginationApi";
 import {
-  Files,
-  Download,
-  Search,
-  Upload,
-  EditPen,
+	Search,
 } from "@element-plus/icons-vue";
 import {
 	delRegistration,
 	productRecordPage,
-	productUploadFile,
+	delCommonFile,
 } from "@/api/procurementManagement/procurementInvoiceLedger.js";
+import request from "@/utils/request";
+import { getToken } from "@/utils/auth";
 import { onMounted } from "vue";
 import { ElMessageBox } from "element-plus";
-import UploadModal from "./Modal/UploadModal.vue";
 import EditModal from "./Modal/EditModal.vue";
+import FileListDialog from '@/components/Dialog/FileListDialog.vue';
 import useUserStore from "@/store/modules/user.js";
-import {delInvoiceLedgerByRegProductId} from "@/api/salesManagement/invoiceLedger.js";
 const userStore = useUserStore();
 
 defineOptions({
   name: "鏉ョエ鍙拌处",
 });
 
-const modalRef = ref();
 const editmodalRef = ref();
+const fileListRef = ref(null);
+const fileListDialogVisible = ref(false);
+const currentRowId = ref(null); // 褰撳墠鏌ョ湅闄勪欢鐨勮ID
 
 const { proxy } = getCurrentInstance();
 const multipleVal = ref([]);
@@ -219,17 +215,8 @@
       width: 200,
     },
     {
-      label: "闄勪欢",
-      align: "center",
-      prop: "commonFiles",
-      dataType: "slot",
-			fixed: "right",
-      slot: "commonFilesRef",
-      width: 120,
-    },
-    {
       fixed: "right",
-      width: 150,
+      width: 200,
       label: "鎿嶄綔",
       dataType: "slot",
       slot: "operation",
@@ -281,48 +268,152 @@
     });
 };
 
-const handleFiles = (fileList) => {
-  fileList.forEach((e) => {
-    proxy.$download.name(e.url);
-  });
-};
-
 const changePage = ({ page, limit }) => {
   pagination.currentPage = page;
 	pagination.pageSize = limit;
   onCurrentChange(page);
 };
 
-const handleCommand = (command, row) => {
-  switch (command) {
-    case "download":
-      handleFiles(row.commonFiles);
-      break;
-    case "upload":
-      console.log(row.commonFiles);
-      openUoload(row.ticketRegistrationId);
-      break;
+const downLoadFile = row => {
+  currentRowId.value = row.id;
+  if (fileListRef.value) {
+    fileListRef.value.open(row.commonFiles || []);
   }
 };
 
-const openUoload = (id) => {
-  modalRef.value.handleImport(id);
+// 涓婁紶闄勪欢锛堣嚜瀹氫箟涓婁紶鏂规硶锛�
+const handleFileUpload = async () => {
+  if (!currentRowId.value) {
+    proxy.$modal.msgWarning("缂哄皯鐧昏ID锛屾棤娉曚繚瀛橀檮浠�");
+    return;
+  }
+  
+  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);
+        formData.append('type', '4'); // type 鍙傛暟锛岀敤鎴锋湭鎸囧畾鍏蜂綋鍊硷紝鍏堜紶绌哄瓧绗︿覆
+        formData.append('id', currentRowId.value); // 褰撳墠琛岀殑 id
+        
+        const uploadRes = await request({
+          url: '/file/uploadByCommon',
+          method: 'post',
+          data: formData,
+          headers: {
+            'Content-Type': 'multipart/form-data',
+            Authorization: `Bearer ${getToken()}`
+          }
+        });
+        
+        if (uploadRes.code === 200) {
+          proxy.$modal.msgSuccess("闄勪欢涓婁紶鎴愬姛");
+          
+          // 鍒锋柊鍒楄〃鑾峰彇鏈�鏂版暟鎹�
+          await new Promise((resolveRefresh) => {
+            // 璋冪敤 API 鑾峰彇鏈�鏂板垪琛ㄦ暟鎹�
+            productRecordPage({
+              ...filters,
+              current: pagination.currentPage,
+              size: pagination.pageSize
+            }).then(({ code, data }) => {
+              if (code === 200) {
+                // 鏇存柊鏁版嵁鍒楄〃
+                dataList.value = data.records;
+                pagination.total = data.total;
+                
+                // 浠庡閮ㄦ暟鎹幏鍙� commonFiles
+                const currentRow = dataList.value.find(row => row.id === currentRowId.value);
+                if (currentRow && fileListRef.value) {
+                  // 鍒锋柊闄勪欢鍒楄〃锛屼娇鐢ㄤ粠澶栭儴鑾峰彇鐨勬渶鏂� commonFiles
+                  fileListRef.value.open(currentRow.commonFiles || []);
+                }
+                resolveRefresh();
+              } else {
+                resolveRefresh();
+              }
+            }).catch(() => {
+              resolveRefresh();
+            });
+          });
+          
+          resolve({
+            name: uploadRes.data?.originalName || file.name,
+            url: uploadRes.data?.tempPath || uploadRes.data?.url,
+            id: uploadRes.data?.id
+          });
+        } else {
+          proxy.$modal.msgError(uploadRes.msg || "鏂囦欢涓婁紶澶辫触");
+          resolve(null);
+        }
+      } catch (error) {
+        console.error("闄勪欢涓婁紶澶辫触:", error);
+        proxy.$modal.msgError("闄勪欢涓婁紶澶辫触");
+        resolve(null);
+      } finally {
+        document.body.removeChild(input);
+      }
+    };
+    
+    document.body.appendChild(input);
+    input.click();
+  });
+};
+
+// 鍒犻櫎闄勪欢
+const handleDeleteFile = async (file) => {
+  try {
+    await delCommonFile([file.id]);
+    proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+    
+    // 鍒锋柊鍒楄〃鑾峰彇鏈�鏂版暟鎹�
+    await new Promise((resolveRefresh) => {
+      // 璋冪敤 API 鑾峰彇鏈�鏂板垪琛ㄦ暟鎹�
+      productRecordPage({
+        ...filters,
+        current: pagination.currentPage,
+        size: pagination.pageSize
+      }).then(({ code, data }) => {
+        if (code === 200) {
+          // 鏇存柊鏁版嵁鍒楄〃
+          dataList.value = data.records;
+          pagination.total = data.total;
+          
+          // 浠庡閮ㄦ暟鎹幏鍙� commonFiles
+          const currentRow = dataList.value.find(row => row.id === currentRowId.value);
+          if (currentRow && fileListRef.value) {
+            // 鍒锋柊闄勪欢鍒楄〃锛屼娇鐢ㄤ粠澶栭儴鑾峰彇鐨勬渶鏂� commonFiles
+            fileListRef.value.open(currentRow.commonFiles || []);
+          }
+          resolveRefresh();
+        } else {
+          resolveRefresh();
+        }
+      }).catch(() => {
+        resolveRefresh();
+      });
+    });
+    
+    return true;
+  } catch (error) {
+    proxy.$modal.msgError("鍒犻櫎澶辫触");
+    return false;
+  }
 };
 
 const openEdit = (row) => {
   editmodalRef.value.open(row);
-};
-
-// 涓婁紶鎴愬姛鍚庡仛浠�涔�
-const uploadSuccess = async (data) => {
-  const { code } = await productUploadFile({
-    ticketRegistrationId: data.id,
-    tempFileIds: data.tempFileIds,
-  });
-  if (code === 200) {
-    proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-    getTableData();
-  }
 };
 // 鍒犻櫎
 const handleDelete = (row) => {

--
Gitblit v1.9.3