From 1d980ebcd037a34739f505bcf82e8d5b2e984db0 Mon Sep 17 00:00:00 2001 From: bestlee Date: Fri, 18 Sep 2026 14:24:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E9=A2=84=E8=A7=88=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E7=BB=84=E4=BB=B6=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/previewFile/index.vue | 63 ++++++++++++++++++ src/typings/components.d.ts | 2 + src/views/details/closeDoc/index.vue | 66 ++----------------- src/views/details/disposal/index.vue | 65 ++---------------- src/views/details/index/index.vue | 36 +++++++++- .../my/initiateChange/modules/changeApply.vue | 58 +--------------- 6 files changed, 112 insertions(+), 178 deletions(-) create mode 100644 src/components/previewFile/index.vue diff --git a/src/components/previewFile/index.vue b/src/components/previewFile/index.vue new file mode 100644 index 0000000..72215af --- /dev/null +++ b/src/components/previewFile/index.vue @@ -0,0 +1,63 @@ + + + + diff --git a/src/typings/components.d.ts b/src/typings/components.d.ts index d53d190..561f08e 100644 --- a/src/typings/components.d.ts +++ b/src/typings/components.d.ts @@ -90,6 +90,7 @@ declare module 'vue' { NUpload: typeof import('naive-ui')['NUpload'] NWatermark: typeof import('naive-ui')['NWatermark'] PinToggler: typeof import('./../components/common/pin-toggler.vue')['default'] + PreviewFile: typeof import('./../components/previewFile/index.vue')['default'] ReloadButton: typeof import('./../components/common/reload-button.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] @@ -184,6 +185,7 @@ declare global { const NUpload: typeof import('naive-ui')['NUpload'] const NWatermark: typeof import('naive-ui')['NWatermark'] const PinToggler: typeof import('./../components/common/pin-toggler.vue')['default'] + const PreviewFile: typeof import('./../components/previewFile/index.vue')['default'] const ReloadButton: typeof import('./../components/common/reload-button.vue')['default'] const RouterLink: typeof import('vue-router')['RouterLink'] const RouterView: typeof import('vue-router')['RouterView'] diff --git a/src/views/details/closeDoc/index.vue b/src/views/details/closeDoc/index.vue index 18a6207..5d48521 100644 --- a/src/views/details/closeDoc/index.vue +++ b/src/views/details/closeDoc/index.vue @@ -9,10 +9,7 @@ import { uploadFileApi, deleteFileApi, fileListApi } from "@/service/api/file"; import { systemConfigApi } from '@/service/api/system'; import { getChangeDetailApi } from '@/service/api/change'; import { myTasksCloseMaterialApi } from '@/service/api/myTasks'; - -import PDF from 'pdf-vue3' -import { VueOfficeDocx, VueOfficeExcel, VueOfficePptx } from 'vue3-office-preview' -import 'vue3-office-preview/lib/style.css' +import previewComponent from '@/components/previewFile/index.vue' const themeStore = useThemeStore(); const { routerPushByKey } = useRouterPush(); @@ -150,32 +147,6 @@ const removeFile = (index:number, fileIndex:number) => { } } } - -// 判断文件类型 -const handleFileType = (type:string) => { - if(type){ - const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'] - const wordExtensions = ['docx'] - const excelExtensions = ['xlsx'] - const pptExtensions = ['pptx'] - if(imageExtensions.includes(type)){ - return 'image' - } - if(wordExtensions.includes(type)){ - return 'word' - } - if(excelExtensions.includes(type)){ - return 'excel' - } - if(pptExtensions.includes(type)){ - return 'ppt' - } - if(type==='pdf'){ - return 'pdf' - } - } - return '' -} // 打开预览 const preview = (file:any) => { previewFile.value = file; @@ -630,37 +601,12 @@ onMounted(async () => { diff --git a/src/views/details/disposal/index.vue b/src/views/details/disposal/index.vue index 9afb15a..7724b20 100644 --- a/src/views/details/disposal/index.vue +++ b/src/views/details/disposal/index.vue @@ -9,10 +9,7 @@ import { AiError, aiTypeJudge } from "@/service/api/ai"; import { systemConfigApi } from '@/service/api/system'; import { getChangeDetailApi } from '@/service/api/change'; import { myTasksDisposalSubmitApi, myTasksAddItemApi } from '@/service/api/myTasks'; - -import PDF from 'pdf-vue3' -import { VueOfficeDocx, VueOfficeExcel, VueOfficePptx } from 'vue3-office-preview' -import 'vue3-office-preview/lib/style.css' +import previewComponent from '@/components/previewFile/index.vue' const themeStore = useThemeStore(); const { routerPushByKey } = useRouterPush(); @@ -226,31 +223,6 @@ const openPreview = (file:any) => { previewFile.value = file; previewModal.value = true; } -// 判断文件类型 -const handleFileType = (type:string) => { - if(type){ - const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'] - const wordExtensions = ['docx'] - const excelExtensions = ['xlsx'] - const pptExtensions = ['pptx'] - if(imageExtensions.includes(type)){ - return 'image' - } - if(wordExtensions.includes(type)){ - return 'word' - } - if(excelExtensions.includes(type)){ - return 'excel' - } - if(pptExtensions.includes(type)){ - return 'ppt' - } - if(type==='pdf'){ - return 'pdf' - } - } - return '' -} // 催办 const handleReminder = (m: any) => { @@ -1115,37 +1087,12 @@ onMounted(async () => { diff --git a/src/views/details/index/index.vue b/src/views/details/index/index.vue index 2cef108..f8b98af 100644 --- a/src/views/details/index/index.vue +++ b/src/views/details/index/index.vue @@ -8,6 +8,7 @@ import { getColorWithOpacity, tagTextColor, tagBgColor, tagBorderColor } from '@ import { AiError, aiTypeJudge } from "@/service/api/ai"; import { systemConfigApi } from '@/service/api/system'; import { getChangeDetailApi } from '@/service/api/change'; +import previewComponent from '@/components/previewFile/index.vue' const themeStore = useThemeStore(); const { routerPushByKey } = useRouterPush(); @@ -53,6 +54,10 @@ const pssrlist = ref<{ g: string; type:number; na_flag:number; items: any[] }[]> ]); // 验收评价 const acceptList = ref([]); +// 当前预览文件 +const previewFile = ref(null); +// 预览文件弹框 +const previewModal = ref(false); // 等级判断问题 const questions = ref([ { @@ -252,8 +257,9 @@ const downloadFile = (type: string) => { } }; // 变更附带资料预览 -const previewFile = () => { - window.$message?.info('还没导入插件'); +const openPreview = (file:any) => { + previewFile.value = file; + previewModal.value = true; } // 催办 @@ -536,7 +542,7 @@ onMounted(async () => {
- 预览 + 预览 下载
@@ -958,6 +964,30 @@ onMounted(async () => { + + + + + diff --git a/src/views/my/initiateChange/modules/changeApply.vue b/src/views/my/initiateChange/modules/changeApply.vue index 331a190..cfe0637 100644 --- a/src/views/my/initiateChange/modules/changeApply.vue +++ b/src/views/my/initiateChange/modules/changeApply.vue @@ -9,10 +9,7 @@ import { useChangeStore } from '@/store/modules/change'; import { AiError, aiTypeJudge, aiLevelScore, aiApplication } from "@/service/api/ai"; import { uploadFileApi, deleteFileApi } from "@/service/api/file"; import Footer from './footer.vue' - -import PDF from 'pdf-vue3' -import { VueOfficeDocx, VueOfficeExcel, VueOfficePptx } from 'vue3-office-preview' -import 'vue3-office-preview/lib/style.css' +import previewComponent from '@/components/previewFile/index.vue' const themeStore = useThemeStore(); const changeStore = useChangeStore(); @@ -364,32 +361,6 @@ const renderSwitcherIcon = (node:any) => { }); } -// 判断文件类型 -const handleFileType = (type:string) => { - if(type){ - const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'] - const wordExtensions = ['docx'] - const excelExtensions = ['xlsx'] - const pptExtensions = ['pptx'] - if(imageExtensions.includes(type)){ - return 'image' - } - if(wordExtensions.includes(type)){ - return 'word' - } - if(excelExtensions.includes(type)){ - return 'excel' - } - if(pptExtensions.includes(type)){ - return 'ppt' - } - if(type==='pdf'){ - return 'pdf' - } - } - return '' -} - // 上传资料 const onUploadFile = async (e:any) => { const file = e.target.files[0]; @@ -818,32 +789,7 @@ defineExpose({form, questions, applyAiResult, generateLevel: useAiLevel}) 上传时间:{{ previewFile?.created_at }} {{ `版本:${previewFile?.version}(受控)` }} -
- - - - - - - - - - -
+