174 lines
4.0 KiB
Vue
174 lines
4.0 KiB
Vue
<route lang="json5" type="page">
|
||
{
|
||
layout: 'default',
|
||
style: {
|
||
navigationStyle: 'custom',
|
||
navigationBarTitleText: '三册',
|
||
},
|
||
}
|
||
</route>
|
||
<template>
|
||
<PageLayout navTitle="三册查看">
|
||
<wd-col-picker label="选择目录" v-model="selectedValue" :columns="dataSource" :column-change="columnChange"
|
||
@confirm="handleConfirm" :display-format="displayFormat"></wd-col-picker>
|
||
<iframe id="bdIframe" :src="fileUrl" ref="bdIframe" style="border: none;" class="iframe" v-if="fileUrl" />
|
||
<view v-if="fileUrl2" class="bdIframe" @click="onlinePreview(item.path)" v-for="(item, i) in fileUrl2" style="padding: 15px 0 0 0">
|
||
<wd-card :title="item.name"></wd-card>
|
||
</view>
|
||
<view v-else style="padding: 20px;">
|
||
未获取到文件信息,请选择其他目录!
|
||
</view>
|
||
</PageLayout>
|
||
</template>
|
||
|
||
<script setup>
|
||
import {
|
||
useUserStore
|
||
} from '@/store/user'
|
||
import {
|
||
getListApi,
|
||
getJobDesIdByDepAndName,
|
||
getPathByInsflagQuote,
|
||
queryByIdApi
|
||
} from '@/api/pages/sc'
|
||
import {
|
||
Base64
|
||
} from 'js-base64'
|
||
import base64 from '@/utils/code';
|
||
import {
|
||
getEnvBaseUrl
|
||
} from '@/utils/index'
|
||
const baseUrl = 'https://10.75.166.6/jeecg-boot/sys/common/static/';
|
||
const data = ref([])
|
||
const dataSource = ref([])
|
||
const selectedValue = ref([]);
|
||
const loading = ref(false);
|
||
const path = ref('')
|
||
const url = ref('')
|
||
const fileUrl = ref('')
|
||
const fileUrl2 = ref([])
|
||
const columnChange = ({
|
||
selectedItem,
|
||
resolve,
|
||
finish
|
||
}) => {
|
||
const areaData = findChildrenByCode(data.value, selectedItem.value)
|
||
if (areaData && areaData.length) {
|
||
resolve(
|
||
areaData.map((item) => {
|
||
return {
|
||
value: item.value,
|
||
label: item.text
|
||
}
|
||
})
|
||
)
|
||
} else {
|
||
finish()
|
||
}
|
||
}
|
||
|
||
const handleConfirm = ({
|
||
value
|
||
}) => {
|
||
queryByIdApi(value[value.length - 1]).then(res => {
|
||
let url = res.result.path
|
||
let quote = res.result.quote
|
||
let insFlag = res.result.insFlag
|
||
if (url) {
|
||
if (isH5()) {
|
||
fileUrl.value = 'https://36.112.48.190/preview/onlinePreview?url=' + encodeURIComponent(
|
||
Base64.encode(baseUrl + url))
|
||
} else {
|
||
fileUrl.value = 'https://36.112.48.190/preview/onlinePreview?url=' + encodeURIComponent(
|
||
new base64().encode(baseUrl + url))
|
||
}
|
||
} else if (/^-?\d+$/.test(quote) && !insFlag) {
|
||
getJobDesIdByDepAndName({
|
||
jobname: quote,
|
||
jobdep: useUserStore().userInfo.orgCode
|
||
}).then((res) => {
|
||
fileUrl.value = getEnvBaseUrl() + '/jmreport/view/929517863011811328?id=' + res
|
||
.id +
|
||
"&token=" + useUserStore().userInfo.token;
|
||
})
|
||
} else if (insFlag) {
|
||
getPathByInsflagQuote({
|
||
insFlag: insFlag,
|
||
quote: quote
|
||
}).then(res => {
|
||
fileUrl.value = ''
|
||
fileUrl2.value = res;
|
||
})
|
||
} else {
|
||
fileUrl.value = ''
|
||
fileUrl2.value = ''
|
||
}
|
||
})
|
||
}
|
||
|
||
const displayFormat = (selectedItems) => {
|
||
if (selectedItems.length > 0) {
|
||
return selectedItems[selectedItems.length - 1].label
|
||
}
|
||
}
|
||
|
||
const getList = () => {
|
||
getListApi(useUserStore().userInfo.orgCode).then(res => {
|
||
data.value = res.result
|
||
dataSource.value = [data.value.map(item => {
|
||
return {
|
||
value: item.value,
|
||
label: item.text
|
||
}
|
||
})]
|
||
});
|
||
}
|
||
|
||
const onlinePreview = (e) => {
|
||
uni.navigateTo({
|
||
url: `/pages/onlinePreview/detail?data=${e}`
|
||
});
|
||
};
|
||
|
||
const findChildrenByCode = (data, code) => {
|
||
if (!code) {
|
||
return data
|
||
}
|
||
for (const item of data) {
|
||
if (item.value === code) {
|
||
return item.children || null
|
||
}
|
||
if (item.children) {
|
||
const childrenResult = findChildrenByCode(item.children, code)
|
||
if (childrenResult) {
|
||
return childrenResult
|
||
}
|
||
}
|
||
}
|
||
return null
|
||
}
|
||
|
||
// 判断是否是 H5 环境
|
||
const isH5 = () => {
|
||
// #ifdef H5
|
||
return true;
|
||
// #endif
|
||
// #ifndef H5
|
||
return false;
|
||
// #endif
|
||
}
|
||
|
||
onLoad(() => {
|
||
getList();
|
||
});
|
||
</script>
|
||
<style lang="scss">
|
||
#bdIframe {
|
||
height: calc(100vh - 230rpx);
|
||
/* 使用视口高度减去顶部固定高度 */
|
||
border: none;
|
||
/* 移除absolute定位,改用普通文档流 */
|
||
position: relative;
|
||
top: 0;
|
||
}
|
||
</style> |