<template> <a-card :bordered="false"> <a-row> <!-- 左侧文件树 --> <a-col :span="4" class="clName"> <a-tree :treeData="treeData" :defaultExpandAll="true" @select="onSelect" style="height: 500px; overflow-y: auto"> </a-tree> </a-col> <!--右侧缩略图--> <a-col :span="18"> <div v-for="(file, key) in dataSource" :key="key"> <a-col :span="24"> <a-divider orientation="left">{{ file.fileName }}</a-divider> </a-col> <!-- 预览区域 --> <a-col :span="24"> <template v-if="file.filePdfPath"> <div @click="pdfPreview(file.title)"> <img style="width: 80px; height: 80px" src="../../../assets/images/pdf4.jpg" /> </div> </template> <template v-else> (暂无材料,点击"选择文件"或"扫描上传"上传文件) </template> </a-col> </div> </a-col> </a-row> <div style="display: none"> <iframe id="pdfPreviewIframe" :src="url" frameborder="0" width="100%" height="550px" scrolling="auto"></iframe> </div> </a-card> </template> <script lang="ts"> import { defineComponent, ref, unref, onMounted } from 'vue'; import { useGlobSetting } from '/@/hooks/setting'; import { getToken } from '/@/utils/auth'; const mockdata = [ { id: '1', key: '1', title: '实例.pdf', fileCode: 'shili', fileName: '实例', filePdfPath: '实例', }, ]; export default defineComponent({ name: 'JeecgPdfView', setup() { const glob = useGlobSetting(); const treeData = ref([ { title: '所有PDF电子档', key: '0-0', children: mockdata, }, ]); const dataSource = ref(mockdata); const allData = ref(mockdata); const url = ref(`${glob.domainUrl}/sys/common/pdf/pdfPreviewIframe`); /** * 打开iframe窗口 * @param title */ function pdfPreview(title) { let iframe = document.getElementById('pdfPreviewIframe'); let json = { title: title, token: getToken() }; iframe.contentWindow.postMessage(json, '*'); } // 选择PDF文件 function onSelect(selectedKeys, info) { dataSource.value = []; if (selectedKeys[0] === undefined || selectedKeys[0] === '0-0') { dataSource.value = unref(allData); } else { dataSource.value.push(info.node.dataRef); } } return { url, dataSource, treeData, allData, onSelect, pdfPreview, }; }, }); </script>