| | |
| | | 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 |
| | |
| | | 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获取部门名称 |
| | |
| | | |
| | | // 拒绝申请 |
| | | const rejectTheApplication = () => { |
| | | // if (uploadedFiles.value.length === 0) { |
| | | // return ElMessage.warning('请上传数据') |
| | | // } |
| | | // 打开拒绝申请弹框 |
| | | rejectionDialogVisible.value = true |
| | | } |