From d1371cc5c0f147b4dcb4b2be80c5fa4e69471ce5 Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Tue, 8 Jul 2025 23:15:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(file):=20=E5=B0=86=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=E9=A2=84=E8=A7=88=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=9B=BF=E6=8D=A2=E4=B8=BA=E4=B8=8B=E8=BD=BD=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除预览按钮及相关的handlePreview函数 - 新增下载按钮,使用download图标 - 实现handleDownload函数,支持直接下载文件 - 添加权限控制,需要FILE.LIST权限才能显示下载按钮 - 优化表格列对齐方式,统一使用center对齐 - 下载功能支持原始文件名保持,提升用户体验 --- src/views/system/file/index.vue | 53 +++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/src/views/system/file/index.vue b/src/views/system/file/index.vue index 19195c8..8cc523e 100644 --- a/src/views/system/file/index.vue +++ b/src/views/system/file/index.vue @@ -314,7 +314,7 @@ import { } from '@/service/api/system/file' import type { SysFileQueryBo, SysFileSearchForm, SysFileVo } from '@/service/api/system/file' import IconParkOutlineDelete from '~icons/icon-park-outline/delete' -import IconParkOutlinePreviewOpen from '~icons/icon-park-outline/preview-open' +import IconParkOutlineDownload from '~icons/icon-park-outline/download' // 文件分类图标组件 const StarIcon = () => h('span', { class: 'text-yellow-500' }, '✨') @@ -400,6 +400,7 @@ const columns: DataTableColumns = [ { title: '序号', key: 'index', + align: 'center', width: 80, render: (_, index) => { return (pagination.value.page - 1) * pagination.value.pageSize + index + 1 @@ -409,6 +410,7 @@ const columns: DataTableColumns = [ title: '文件原始名称', key: 'fileName', width: 200, + align: 'center', ellipsis: { tooltip: true, }, @@ -417,6 +419,7 @@ const columns: DataTableColumns = [ title: '文件新名称', key: 'newName', width: 200, + align: 'center', ellipsis: { tooltip: true, }, @@ -425,6 +428,7 @@ const columns: DataTableColumns = [ title: '文件后缀', key: 'fileSuffix', width: 100, + align: 'center', render: (row) => { return h(NTag, { type: 'primary', @@ -436,6 +440,7 @@ const columns: DataTableColumns = [ title: '文件上传路径', key: 'fileUpload', width: 250, + align: 'center', ellipsis: { tooltip: true, }, @@ -444,6 +449,7 @@ const columns: DataTableColumns = [ title: '文件回显路径', key: 'filePath', width: 200, + align: 'center', ellipsis: { tooltip: true, }, @@ -471,6 +477,7 @@ const columns: DataTableColumns = [ { title: '文件服务类型', key: 'fileService', + align: 'center', width: 120, render: (row) => { const serviceMap: Record = { @@ -488,6 +495,7 @@ const columns: DataTableColumns = [ { title: '创建时间', key: 'createTime', + align: 'center', width: 160, render: (row) => { return row.createTime ? new Date(row.createTime).toLocaleString() : '--' @@ -502,17 +510,19 @@ const columns: DataTableColumns = [ render: (row) => { const buttons = [] - // 预览按钮 - buttons.push(h(NButton, { - type: 'primary', - size: 'small', - onClick: () => handlePreview(row), - }, { - icon: () => h(NIcon, { size: 14, style: 'transform: translateY(-1px)' }, { - default: () => h(IconParkOutlinePreviewOpen), - }), - default: () => '预览', - })) + // 下载按钮 + if (hasPermission(PERMISSIONS.FILE.LIST)) { + buttons.push(h(NButton, { + type: 'primary', + size: 'small', + onClick: () => handleDownload(row), + }, { + icon: () => h(NIcon, { size: 14, style: 'transform: translateY(-1px)' }, { + default: () => h(IconParkOutlineDownload), + }), + default: () => '下载', + })) + } // 删除按钮 if (hasPermission(PERMISSIONS.FILE.DELETE)) { @@ -648,10 +658,23 @@ async function handleBatchDelete() { } } -// 预览文件 -function handlePreview(row: SysFileVo) { +// 下载文件 +function handleDownload(row: SysFileVo) { if (row.filePath) { - handleImagePreview(row.filePath, row.fileName) + const link = document.createElement('a') + link.href = row.filePath + link.download = row.fileName || '下载文件' + link.target = '_blank' + + // 添加到DOM并触发点击 + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + + coiMsgSuccess('文件下载已开始') + } + else { + coiMsgError('文件路径不存在,无法下载') } }