From 1eab1a96de62818d72f9605d52b76a4f3dedb930 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Thu, 29 Jan 2026 13:50:16 +0800
Subject: [PATCH] feat:下载文件名
---
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue | 133 ++++++++++++++++++++++++++++++-------------
1 files changed, 92 insertions(+), 41 deletions(-)
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
index e275033..006b0ac 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
@@ -236,32 +236,52 @@
ElMessage.error(error?.message || '文件上传失败,请重试')
}
-// 查看文件
-const viewFile = file => {
- if (file.link) {
- window.open(file.link, '_blank')
- } else {
- ElMessage.warning('文件链接无效')
- }
-}
+// 从表格下载文件 - 使用 fetch API
+const downloadFileFromTable = async (file) => {
+ if (!file.fileUrl) {
+ ElMessage.warning('文件链接无效')
+ return
+ }
-// 从表格下载文件
-const downloadFileFromTable = file => {
- if (file.fileUrl) {
- // 创建一个隐藏的a标签来触发下载
- const a = document.createElement('a')
- a.href = file.fileUrl
- a.download = file.fileOriginalName || '下载附件'
- document.body.appendChild(a)
- a.click()
- document.body.removeChild(a)
- } else {
- ElMessage.warning('文件链接无效')
- }
+ try {
+ const response = await fetch(file.fileUrl)
+ const blob = await response.blob()
+ const url = window.URL.createObjectURL(blob)
+ const a = document.createElement('a')
+ a.href = url
+
+ // 获取原始文件名,处理中文和特殊字符
+ const originalName = file.fileOriginalName || 'download-file.zip'
+ // 确保文件名有正确的扩展名
+ let fileName = originalName
+ if (!fileName.includes('.')) {
+ // 从 Content-Type 推断扩展名
+ const contentType = response.headers.get('content-type')
+ if (contentType === 'application/zip') {
+ fileName += '.zip'
+ } else if (contentType === 'application/x-rar-compressed') {
+ fileName += '.rar'
+ }
+ }
+
+ a.download = fileName
+ a.style.display = 'none'
+ document.body.appendChild(a)
+ a.click()
+
+ // 清理
+ setTimeout(() => {
+ window.URL.revokeObjectURL(url)
+ document.body.removeChild(a)
+ }, 100)
+
+ } catch (error) {
+ console.error('下载失败:', error)
+ }
}
// 下载所有文件
-const downloadAllFiles = () => {
+const downloadAllFiles =async () => {
if (!tableData.value || tableData.value.length === 0) {
ElMessage.warning('没有可下载的文件')
return
@@ -273,22 +293,56 @@
ElMessage.warning('所有文件链接均无效')
return
}
-
- ElMessage.success(`开始下载${validFiles.length}个文件`)
-
- // 依次下载每个文件(添加延迟以避免浏览器限制)
- validFiles.forEach((file, index) => {
- setTimeout(() => {
- if (file.fileUrl) {
- const a = document.createElement('a')
- a.href = file.fileUrl
- a.download = file.fileOriginalName || `下载附件_${index + 1}`
- document.body.appendChild(a)
- a.click()
- document.body.removeChild(a)
- }
- }, index * 300) // 300ms delay between downloads
- })
+ // 顺序下载每个文件
+ for (let i = 0; i < validFiles.length; i++) {
+ const file = validFiles[i]
+
+ try {
+ const response = await fetch(file.fileUrl)
+ const blob = await response.blob()
+ const url = window.URL.createObjectURL(blob)
+ const a = document.createElement('a')
+ a.href = url
+
+ // 设置文件名,优先使用原始文件名
+ let fileName = file.fileOriginalName || `附件_${i + 1}`
+
+ // 确保文件名有扩展名
+ if (!fileName.includes('.')) {
+ const contentType = response.headers.get('content-type')
+ if (contentType === 'application/zip') {
+ fileName += '.zip'
+ } else if (contentType === 'application/x-rar-compressed') {
+ fileName += '.rar'
+ } else if (contentType === 'application/x-7z-compressed') {
+ fileName += '.7z'
+ } else {
+ fileName += '.zip'
+ }
+ }
+
+ a.download = fileName
+ a.style.display = 'none'
+ document.body.appendChild(a)
+ a.click()
+
+ // 清理资源
+ setTimeout(() => {
+ window.URL.revokeObjectURL(url)
+ document.body.removeChild(a)
+ }, 100)
+
+ // 文件间添加延迟(除了最后一个文件)
+ if (i < validFiles.length - 1) {
+ await new Promise(resolve => setTimeout(resolve, 500))
+ }
+
+ } catch (error) {
+ console.error(`文件下载失败: ${file.fileOriginalName || '未知文件'}`, error)
+ // 继续下载下一个文件
+ }
+ }
+
}
// 根据部门ID获取部门名称
@@ -362,9 +416,6 @@
// 拒绝申请
const rejectTheApplication = () => {
- // if (uploadedFiles.value.length === 0) {
- // return ElMessage.warning('请上传数据')
- // }
// 打开拒绝申请弹框
rejectionDialogVisible.value = true
}
--
Gitblit v1.9.3