From dea4fd4af1fb436666c3db38535a21aa448339f7 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 12 五月 2026 13:10:09 +0800
Subject: [PATCH] Merge branch 'dev_NEW_pro' of http://114.132.189.42:9002/r/product-inventory-management into dev_西宁_青铝绿行

---
 src/views/collaborativeApproval/shipmentReview/fileList.vue                |    3 -
 src/views/procurementManagement/procurementLedger/fileList.vue             |    3 -
 src/views/projectManagement/projectType/index.vue                          |    9 +---
 src/views/productionManagement/workOrderManagement/components/filesDia.vue |    2 
 src/views/basicData/customerFileOpenSea/index.vue                          |    2 
 src/views/lavorissue/ledger/filesDia.vue                                   |    2 
 src/views/qualityManagement/rawMaterialInspection/components/filesDia.vue  |    2 
 src/views/basicData/supplierManage/filesDia.vue                            |    2 
 src/views/qualityManagement/finalInspection/components/filesDia.vue        |    2 
 src/views/salesManagement/invoiceLedger/index.vue                          |    6 ---
 src/views/basicData/customerFile/index.vue                                 |    2 
 src/views/productionManagement/workOrder/components/filesDia.vue           |    2 
 src/views/equipmentManagement/measurementEquipment/filesDia.vue            |    2 
 src/views/projectManagement/Management/components/formDia.vue              |    4 +-
 src/views/qualityManagement/processInspection/components/filesDia.vue      |    2 
 src/components/Dialog/FileList.vue                                         |   22 ++++++++++
 src/views/projectManagement/Management/projectDetail.vue                   |   12 +----
 src/views/collaborativeApproval/approvalProcess/fileList.vue               |    3 -
 src/views/personnelManagement/contractManagement/filesDia.vue              |    2 
 src/plugins/download.js                                                    |   10 +++++
 src/views/safeProduction/safeWorkApproval/fileList.vue                     |    2 
 src/views/salesManagement/salesLedger/fileList.vue                         |    2 
 src/components/filePreview/index.vue                                       |   16 ++++----
 23 files changed, 62 insertions(+), 52 deletions(-)

diff --git a/src/components/Dialog/FileList.vue b/src/components/Dialog/FileList.vue
index 139dbfb..b0e78cf 100644
--- a/src/components/Dialog/FileList.vue
+++ b/src/components/Dialog/FileList.vue
@@ -36,9 +36,16 @@
         <el-table-column v-if="showActions"
                          fixed="right"
                          label="鎿嶄綔"
-                         :width="120"
+                         :width="150"
                          align="center">
           <template #default="scope">
+            <el-button link
+                       type="primary"
+                       size="small"
+                       class="download-link"
+                       @click="previewFile(scope.row.previewURL)">
+              棰勮
+            </el-button>
             <el-button link
                        type="primary"
                        size="small"
@@ -58,9 +65,11 @@
       </el-table>
     </div>
   </el-dialog>
+  <filePreview ref="filePreviewRef" />
 </template>
 
 <script setup>
+import { ElMessage } from 'element-plus'
   import { ref, computed, getCurrentInstance, onMounted, watch } from "vue";
   import AttachmentUpload from "@/components/AttachmentUpload/file/index.vue";
   import {
@@ -68,6 +77,8 @@
     deleteAttachment,
     createAttachment,
   } from "@/api/basicData/storageAttachment.js";
+  import filePreview from '@/components/filePreview/index.vue'
+  const filePreviewRef = ref()
 
   const props = defineProps({
     visible: {
@@ -122,6 +133,15 @@
     isShow.value = false;
   };
 
+  // 棰勮鏂囦欢
+  const previewFile = (url) => {
+    if (url) {
+      filePreviewRef.value.open(url)
+    } else {
+      ElMessage.warning('鏂囦欢鍦板潃鏃犳晥锛屾棤娉曢瑙�')
+    }
+  }
+
   const handleUpload = () => {
     uploadDialogVisible.value = true;
   };
diff --git a/src/components/filePreview/index.vue b/src/components/filePreview/index.vue
index cda5b56..d8720c3 100644
--- a/src/components/filePreview/index.vue
+++ b/src/components/filePreview/index.vue
@@ -78,9 +78,9 @@
   transformData: (workbookData) => workbookData,
 });
 
-// 璁$畻灞炴�� - 鍒ゆ柇鏂囦欢绫诲瀷
+// 璁$畻灞炴�� - 鍒ゆ柇鏂囦欢绫诲瀷锛堟敮鎸乁RL甯︽煡璇㈠弬鏁帮級
 const isImage = computed(() => {
-  const state = /\.(jpg|jpeg|png|gif)$/i.test(fileUrl.value);
+  const state = /\.(jpg|jpeg|png|gif)(\?.*)?$/i.test(fileUrl.value);
   if (state) {
     imgUrl.value = fileUrl.value.replaceAll('word', 'img');
   }
@@ -89,23 +89,23 @@
 
 const isPdf = computed(() => {
   console.log(fileUrl.value)
-  return /\.pdf$/i.test(fileUrl.value);
+  return /\.pdf(\?.*)?$/i.test(fileUrl.value);
 });
 
 const isDoc = computed(() => {
-  return /\.(doc|docx)$/i.test(fileUrl.value);
+  return /\.(doc|docx)(\?.*)?$/i.test(fileUrl.value);
 });
 
 const isXls = computed(() => {
-  const state = /\.(xls|xlsx)$/i.test(fileUrl.value);
+  const state = /\.(xls|xlsx)(\?.*)?$/i.test(fileUrl.value);
   if (state) {
-    options.value.xls = /\.(xls)$/i.test(fileUrl.value);
+    options.value.xls = /\.(xls)(\?.*)?$/i.test(fileUrl.value);
   }
   return state;
 });
 
 const isZipOrRar = computed(() => {
-  return /\.(zip|rar)$/i.test(fileUrl.value);
+  return /\.(zip|rar)(\?.*)?$/i.test(fileUrl.value);
 });
 
 const isSupported = computed(() => {
@@ -164,7 +164,7 @@
 };
 
 const open = (url) => {
-  fileUrl.value = window.location.protocol+'//'+window.location.host+ url;
+  fileUrl.value = url;
   dialogVisible.value = true;
 };
 const handleClose = () => {
diff --git a/src/plugins/download.js b/src/plugins/download.js
index 2705310..35ac92f 100644
--- a/src/plugins/download.js
+++ b/src/plugins/download.js
@@ -82,6 +82,16 @@
   saveAs(text, name, opts) {
     saveAs(text, name, opts);
   },
+  byUrl(url, filename) {
+    // 灏哢RL涓殑preview鏇挎崲鎴恉ownload
+    const downloadUrl = url.replace(/preview/g, 'download')
+    const link = document.createElement('a')
+    link.href = downloadUrl
+    link.download = filename || ''
+    document.body.appendChild(link)
+    link.click()
+    document.body.removeChild(link)
+  },
   async printErrMsg(data) {
     const resText = await data.text();
     const rspObj = JSON.parse(resText);
diff --git a/src/views/basicData/customerFile/index.vue b/src/views/basicData/customerFile/index.vue
index a080bd9..97ea3e6 100644
--- a/src/views/basicData/customerFile/index.vue
+++ b/src/views/basicData/customerFile/index.vue
@@ -1413,7 +1413,7 @@
   const downloadAttachment = row => {
     if (row.url) {
       // proxy.download(row.url, {}, row.name);
-      proxy.$download.name(row.url);
+			proxy.$download.byUrl(row.url, row.originalFilename);
     } else {
       proxy.$modal.msgError("涓嬭浇閾炬帴涓嶅瓨鍦�");
     }
diff --git a/src/views/basicData/customerFileOpenSea/index.vue b/src/views/basicData/customerFileOpenSea/index.vue
index 2598f48..bad28e1 100644
--- a/src/views/basicData/customerFileOpenSea/index.vue
+++ b/src/views/basicData/customerFileOpenSea/index.vue
@@ -1651,7 +1651,7 @@
   const downloadAttachment = row => {
     if (row.url) {
       // proxy.download(row.url, {}, row.name);
-      proxy.$download.name(row.url);
+			proxy.$download.byUrl(row.url, row.originalFilename);
     } else {
       proxy.$modal.msgError("涓嬭浇閾炬帴涓嶅瓨鍦�");
     }
diff --git a/src/views/basicData/supplierManage/filesDia.vue b/src/views/basicData/supplierManage/filesDia.vue
index 7943185..ef41985 100644
--- a/src/views/basicData/supplierManage/filesDia.vue
+++ b/src/views/basicData/supplierManage/filesDia.vue
@@ -164,7 +164,7 @@
 }
 // 涓嬭浇闄勪欢
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 // 鍒犻櫎
 const handleDelete = () => {
diff --git a/src/views/collaborativeApproval/approvalProcess/fileList.vue b/src/views/collaborativeApproval/approvalProcess/fileList.vue
index 498f474..1f1b671 100644
--- a/src/views/collaborativeApproval/approvalProcess/fileList.vue
+++ b/src/views/collaborativeApproval/approvalProcess/fileList.vue
@@ -32,8 +32,7 @@
   tableData.value = list
 }
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
-
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 const lookFile = (row) => {
   filePreviewRef.value.open(row.url)
diff --git a/src/views/collaborativeApproval/shipmentReview/fileList.vue b/src/views/collaborativeApproval/shipmentReview/fileList.vue
index da37db2..555312a 100644
--- a/src/views/collaborativeApproval/shipmentReview/fileList.vue
+++ b/src/views/collaborativeApproval/shipmentReview/fileList.vue
@@ -29,8 +29,7 @@
   tableData.value = list
 }
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
-
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 const lookFile = (row) => {
   filePreviewRef.value.open(row.url)
diff --git a/src/views/equipmentManagement/measurementEquipment/filesDia.vue b/src/views/equipmentManagement/measurementEquipment/filesDia.vue
index ee9dc3a..16c026e 100644
--- a/src/views/equipmentManagement/measurementEquipment/filesDia.vue
+++ b/src/views/equipmentManagement/measurementEquipment/filesDia.vue
@@ -157,7 +157,7 @@
 }
 // 涓嬭浇闄勪欢
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 // 鍒犻櫎
 const handleDelete = () => {
diff --git a/src/views/lavorissue/ledger/filesDia.vue b/src/views/lavorissue/ledger/filesDia.vue
index f752496..46da350 100644
--- a/src/views/lavorissue/ledger/filesDia.vue
+++ b/src/views/lavorissue/ledger/filesDia.vue
@@ -163,7 +163,7 @@
 }
 // 涓嬭浇闄勪欢
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 // 鍒犻櫎
 const handleDelete = () => {
diff --git a/src/views/personnelManagement/contractManagement/filesDia.vue b/src/views/personnelManagement/contractManagement/filesDia.vue
index 4bcd812..02f9cef 100644
--- a/src/views/personnelManagement/contractManagement/filesDia.vue
+++ b/src/views/personnelManagement/contractManagement/filesDia.vue
@@ -158,7 +158,7 @@
 }
 // 涓嬭浇闄勪欢
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 // 鍒犻櫎
 const handleDelete = () => {
diff --git a/src/views/procurementManagement/procurementLedger/fileList.vue b/src/views/procurementManagement/procurementLedger/fileList.vue
index fb392c5..945d6a1 100644
--- a/src/views/procurementManagement/procurementLedger/fileList.vue
+++ b/src/views/procurementManagement/procurementLedger/fileList.vue
@@ -32,8 +32,7 @@
   tableData.value = list
 }
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
-
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 const lookFile = (row) => {
   filePreviewRef.value.open(row.url)
diff --git a/src/views/productionManagement/workOrder/components/filesDia.vue b/src/views/productionManagement/workOrder/components/filesDia.vue
index ca6d7a9..1336861 100644
--- a/src/views/productionManagement/workOrder/components/filesDia.vue
+++ b/src/views/productionManagement/workOrder/components/filesDia.vue
@@ -78,7 +78,7 @@
         name: "涓嬭浇",
         type: "text",
         clickFun: row => {
-          proxy.$download.name(row.url);
+					proxy.$download.byUrl(row.url, row.originalFilename);
         },
       },
       {
diff --git a/src/views/productionManagement/workOrderManagement/components/filesDia.vue b/src/views/productionManagement/workOrderManagement/components/filesDia.vue
index 7f038f7..84d8bd4 100644
--- a/src/views/productionManagement/workOrderManagement/components/filesDia.vue
+++ b/src/views/productionManagement/workOrderManagement/components/filesDia.vue
@@ -78,7 +78,7 @@
         name: "涓嬭浇",
         type: "text",
         clickFun: row => {
-          proxy.$download.name(row.url);
+					proxy.$download.byUrl(row.url, row.originalFilename);
         },
       },
       {
diff --git a/src/views/projectManagement/Management/components/formDia.vue b/src/views/projectManagement/Management/components/formDia.vue
index c2ee9c2..0db3efe 100644
--- a/src/views/projectManagement/Management/components/formDia.vue
+++ b/src/views/projectManagement/Management/components/formDia.vue
@@ -1342,9 +1342,9 @@
 }
 
 function downloadAttachment(att) {
-  if (att?.name) {
+  if (att) {
     try {
-      proxy.$download.name(att.url);
+			proxy.$download.byUrl(att.url, att.originalFilename);
       return
     } catch (e) {}
   }
diff --git a/src/views/projectManagement/Management/projectDetail.vue b/src/views/projectManagement/Management/projectDetail.vue
index b526fc6..be670cb 100644
--- a/src/views/projectManagement/Management/projectDetail.vue
+++ b/src/views/projectManagement/Management/projectDetail.vue
@@ -364,16 +364,10 @@
   }
 }
 
-function downloadAttachment(att) {
-  if (att?.url) {
+function downloadAttachment(row) {
+  if (row?.url) {
     try {
-      proxy.$download.resource(att.url)
-      return
-    } catch (e) {}
-  }
-  if (att?.name) {
-    try {
-      proxy.$download.name(att.name, false)
+			proxy.$download.byUrl(row.url, row.originalFilename);
       return
     } catch (e) {}
   }
diff --git a/src/views/projectManagement/projectType/index.vue b/src/views/projectManagement/projectType/index.vue
index 16a17e0..65cc916 100644
--- a/src/views/projectManagement/projectType/index.vue
+++ b/src/views/projectManagement/projectType/index.vue
@@ -250,13 +250,8 @@
 }
 
 /** 涓嬭浇闄勪欢 */
-function handleDownload(attachment) {
-  const url = attachment?.url || attachment?.fileUrl || attachment?.tempPath || attachment?.fileName;
-  if (!url) {
-    ElMessage.warning("鏈壘鍒板彲涓嬭浇鐨勬枃浠跺湴鍧�");
-    return;
-  }
-  proxy.$download.name(url);
+function handleDownload(row) {
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 
 onMounted(() => {
diff --git a/src/views/qualityManagement/finalInspection/components/filesDia.vue b/src/views/qualityManagement/finalInspection/components/filesDia.vue
index 8cda761..4517844 100644
--- a/src/views/qualityManagement/finalInspection/components/filesDia.vue
+++ b/src/views/qualityManagement/finalInspection/components/filesDia.vue
@@ -120,7 +120,7 @@
 };
 // 涓嬭浇闄勪欢
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 // 鍏抽棴寮规
 const closeDia = () => {
diff --git a/src/views/qualityManagement/processInspection/components/filesDia.vue b/src/views/qualityManagement/processInspection/components/filesDia.vue
index b0cb258..fe63f4b 100644
--- a/src/views/qualityManagement/processInspection/components/filesDia.vue
+++ b/src/views/qualityManagement/processInspection/components/filesDia.vue
@@ -124,7 +124,7 @@
 };
 // 涓嬭浇闄勪欢
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 // 鍏抽棴寮规
 const closeDia = () => {
diff --git a/src/views/qualityManagement/rawMaterialInspection/components/filesDia.vue b/src/views/qualityManagement/rawMaterialInspection/components/filesDia.vue
index 9b89a3b..e4c9700 100644
--- a/src/views/qualityManagement/rawMaterialInspection/components/filesDia.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/components/filesDia.vue
@@ -153,7 +153,7 @@
 }
 // 涓嬭浇闄勪欢
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 }
 // 棰勮闄勪欢
 const lookFile = (row) => {
diff --git a/src/views/safeProduction/safeWorkApproval/fileList.vue b/src/views/safeProduction/safeWorkApproval/fileList.vue
index 5cc65f1..c3b7597 100644
--- a/src/views/safeProduction/safeWorkApproval/fileList.vue
+++ b/src/views/safeProduction/safeWorkApproval/fileList.vue
@@ -32,7 +32,7 @@
   tableData.value = list
 }
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 
 }
 const lookFile = (row) => {
diff --git a/src/views/salesManagement/invoiceLedger/index.vue b/src/views/salesManagement/invoiceLedger/index.vue
index 444560d..e52ea47 100644
--- a/src/views/salesManagement/invoiceLedger/index.vue
+++ b/src/views/salesManagement/invoiceLedger/index.vue
@@ -409,12 +409,6 @@
   }
 };
 
-const handleFile = (commonFiles) => {
-  commonFiles.forEach((e) => {
-    proxy.$download.name(e.url);
-  });
-};
-
 const clearRange = () => {
   searchForm.invoiceDate = [];
   searchForm.invoiceDateStart = undefined;
diff --git a/src/views/salesManagement/salesLedger/fileList.vue b/src/views/salesManagement/salesLedger/fileList.vue
index 57c4332..eb4d401 100644
--- a/src/views/salesManagement/salesLedger/fileList.vue
+++ b/src/views/salesManagement/salesLedger/fileList.vue
@@ -29,7 +29,7 @@
   tableData.value = list
 }
 const downLoadFile = (row) => {
-  proxy.$download.name(row.url);
+	proxy.$download.byUrl(row.url, row.originalFilename);
 
 }
 const lookFile = (row) => {

--
Gitblit v1.9.3