<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>