From 215c9364ded64114f9ea83713556b313ca2d1a80 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 28 May 2026 09:43:50 +0800 Subject: [PATCH] feat: Optimize the file preview - use `vue-files-preview` package --- apps/vben5/apps/app-antd/src/store/auth.ts | 1 + .../@abp/blob-management/package.json | 5 +- .../blob-management/src/api/useBlobsApi.ts | 26 ++++- .../components/blobs/BlobFilePreviewModal.vue | 4 +- .../blobs/BlobFilePreviewModal1.vue | 106 ++++++++++++++++++ .../src/components/blobs/BlobFileTable.vue | 9 +- apps/vben5/pnpm-workspace.yaml | 2 + 7 files changed, 140 insertions(+), 13 deletions(-) create mode 100644 apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal1.vue diff --git a/apps/vben5/apps/app-antd/src/store/auth.ts b/apps/vben5/apps/app-antd/src/store/auth.ts index 51e03bfcb..e93399281 100644 --- a/apps/vben5/apps/app-antd/src/store/auth.ts +++ b/apps/vben5/apps/app-antd/src/store/auth.ts @@ -180,6 +180,7 @@ export const useAuthStore = defineStore('auth', () => { userId: userInfoRes.sub ?? abpConfig.currentUser.id, username: userInfoRes.uniqueName ?? abpConfig.currentUser.userName, realName: + userInfoRes.given_name ?? userInfoRes.name ?? abpConfig.currentUser.name ?? abpConfig.currentUser.userName, diff --git a/apps/vben5/packages/@abp/blob-management/package.json b/apps/vben5/packages/@abp/blob-management/package.json index de1e2f0ec..93fddb80b 100644 --- a/apps/vben5/packages/@abp/blob-management/package.json +++ b/apps/vben5/packages/@abp/blob-management/package.json @@ -37,13 +37,10 @@ "@vben/locales": "workspace:*", "@vben/stores": "workspace:*", "@vben/utils": "workspace:*", - "@vue-office/docx": "catalog:", - "@vue-office/excel": "catalog:", - "@vue-office/pdf": "catalog:", - "@vue-office/pptx": "catalog:", "ant-design-vue": "catalog:", "vue": "catalog:", "vue-demi": "catalog:", + "vue-files-preview": "catalog:", "vue-simple-uploader": "catalog:", "vxe-table": "catalog:" } diff --git a/apps/vben5/packages/@abp/blob-management/src/api/useBlobsApi.ts b/apps/vben5/packages/@abp/blob-management/src/api/useBlobsApi.ts index f1c109147..9ea8590f7 100644 --- a/apps/vben5/packages/@abp/blob-management/src/api/useBlobsApi.ts +++ b/apps/vben5/packages/@abp/blob-management/src/api/useBlobsApi.ts @@ -32,8 +32,26 @@ export function useBlobsApi() { }); } - function getContentApi(id: string): Promise { - return request(`/api/blob-management/blobs/uid/${id}/content`, { + function generateDownloadUrlApi(id: string): Promise { + return request( + `/api/blob-management/blobs/generate/download-url/${id}`, + { + method: 'GET', + }, + ); + } + + function generatePreviewUrlApi(id: string): Promise { + return request( + `/api/blob-management/blobs/generate/preview-url/${id}`, + { + method: 'GET', + }, + ); + } + + function downloadApi(id: string): Promise { + return request(`/api/blob-management/blobs/download/${id}`, { method: 'GET', responseType: 'blob', }); @@ -70,8 +88,10 @@ export function useBlobsApi() { cancel, createFolderApi, deleteApi, + downloadApi, getApi, - getContentApi, + generateDownloadUrlApi, + generatePreviewUrlApi, getFolderPagedListApi, getFilePagedListApi, getPagedListApi, diff --git a/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal.vue b/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal.vue index 55caa5ddf..69868c3ff 100644 --- a/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal.vue +++ b/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal.vue @@ -64,7 +64,7 @@ const blobType = ref(); const errorMessage = ref(''); const excelComponentKey = ref(0); // 只对 Excel 组件使用 key -const { getContentApi } = useBlobsApi(); +const { downloadApi } = useBlobsApi(); // 文件类型配置 const allowFiles: Record = { @@ -175,7 +175,7 @@ async function onInit() { } // 获取文件内容 - const content = await getContentApi(blob.value.id); + const content = await downloadApi(blob.value.id); // 检查文件大小 if (!isFileSizeValid(content)) { diff --git a/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal1.vue b/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal1.vue new file mode 100644 index 000000000..aac734a60 --- /dev/null +++ b/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFilePreviewModal1.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFileTable.vue b/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFileTable.vue index 36dab6532..2d8cdd2ad 100644 --- a/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFileTable.vue +++ b/apps/vben5/packages/@abp/blob-management/src/components/blobs/BlobFileTable.vue @@ -35,7 +35,7 @@ const kbUnit = 1 * 1024; const mbUnit = kbUnit * 1024; const gbUnit = mbUnit * 1024; -const { deleteApi, getPagedListApi } = useBlobsApi(); +const { deleteApi, getPagedListApi, generateDownloadUrlApi } = useBlobsApi(); const selectedKeys = ref([]); @@ -169,7 +169,7 @@ const [BlobFileUploadModal, uploadModalApi] = useVbenModal({ }); const [BlobFilePreviewModal, previewModalApi] = useVbenModal({ connectedComponent: defineAsyncComponent( - () => import('./BlobFilePreviewModal.vue'), + () => import('./BlobFilePreviewModal1.vue'), ), }); @@ -191,10 +191,11 @@ function onDownload(row: BlobDto) { centered: true, content: $t('BlobManagement.BlobWellDownloadMessage', [row.name]), onCancel: () => {}, - onOk: () => { + onOk: async () => { + const downloadUrl = await generateDownloadUrlApi(row.id); downloadFileFromUrl({ fileName: row.name, - source: `/api/blob-management/blobs/uid/${row.id}/content`, + source: downloadUrl, }); }, title: $t('AbpUi.AreYouSure'), diff --git a/apps/vben5/pnpm-workspace.yaml b/apps/vben5/pnpm-workspace.yaml index e267880d2..058ee7799 100644 --- a/apps/vben5/pnpm-workspace.yaml +++ b/apps/vben5/pnpm-workspace.yaml @@ -83,6 +83,7 @@ catalog: '@vite-pwa/vitepress': ^1.1.0 '@vitejs/plugin-vue': ^6.0.4 '@vitejs/plugin-vue-jsx': ^5.1.4 + '@vue-files-preview': ^0.0.0 '@vue-office/docx': ^1.6.3 '@vue-office/excel': ^1.7.14 '@vue-office/pdf': ^2.0.10 @@ -235,6 +236,7 @@ catalog: vue: ^3.5.27 vue-demi: ^0.14.6 vue-eslint-parser: ^10.2.0 + vue-files-preview: ^1.0.43 vue-i18n: ^11.2.8 vue-json-viewer: ^3.0.4 vue-router: ^5.0.3