| | |
| | | <img :src="imgUrl" alt="Image Preview" /> |
| | | </div> |
| | | |
| | | <!-- PDF预览提示 --> |
| | | <div v-if="isPdf" style="height: 100vh; display: flex; align-items: center; justify-content: center;"> |
| | | <p>正在准备PDF预览...</p> |
| | | <!-- PDF预览 --> |
| | | <div v-if="isPdf" class="pdf-preview-wrapper"> |
| | | <iframe :src="fileUrl" class="pdf-preview-frame" frameborder="0"></iframe> |
| | | </div> |
| | | |
| | | <!-- Word文档预览 --> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, getCurrentInstance, watch } from 'vue'; |
| | | import { ref, computed, getCurrentInstance } from 'vue'; |
| | | import VueOfficeDocx from '@vue-office/docx'; |
| | | import '@vue-office/docx/lib/index.css'; |
| | | import VueOfficeExcel from '@vue-office/excel'; |
| | |
| | | return isImage.value || isPdf.value || isDoc.value || isXls.value || isZipOrRar.value; |
| | | }); |
| | | |
| | | // 动态创建a标签并跳转预览PDF |
| | | const previewPdf = (url) => { |
| | | // 创建a标签 |
| | | const link = document.createElement('a'); |
| | | // 设置PDF文件URL |
| | | link.href = url; |
| | | // 在新标签页打开 |
| | | link.target = '_blank'; |
| | | // 安全属性,防止新页面访问原页面 |
| | | link.rel = 'noopener noreferrer'; |
| | | // 可选:设置链接文本 |
| | | link.textContent = '预览PDF'; |
| | | // 将a标签添加到页面(部分浏览器要求必须在DOM中) |
| | | document.body.appendChild(link); |
| | | // 触发点击事件 |
| | | link.click(); |
| | | // 移除a标签,清理DOM |
| | | document.body.removeChild(link); |
| | | }; |
| | | |
| | | |
| | | // 监听PDF状态变化,自动触发跳转 |
| | | watch( |
| | | () => isPdf.value, |
| | | (newVal) => { |
| | | |
| | | // 当确认是PDF且文件URL有效时 |
| | | if (newVal && fileUrl.value) { |
| | | // 关闭对话框 |
| | | dialogVisible.value = false; |
| | | // 加个小延迟确保状态更新完成 |
| | | setTimeout(() => { |
| | | previewPdf(fileUrl.value); |
| | | fileUrl.value = ''; |
| | | }, 100); |
| | | } |
| | | } |
| | | ); |
| | | |
| | | // 方法定义 |
| | | const renderedHandler = () => { |
| | | console.log("渲染完成"); |
| | |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | .pdf-preview-wrapper { |
| | | height: 100vh; |
| | | } |
| | | |
| | | .pdf-preview-frame { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .oneLine { |
| | | overflow: hidden; |
| | | white-space: nowrap; |