1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-13 07:04:21 +08:00
elsiosanchez a4a1cdb182
raname variable (#475)
* raname variable

* change conditional
2020-04-30 12:26:08 -04:00

235 lines
5.9 KiB
Vue

<template>
<div v-if="isLoading" key="report-viewer-loaded" style="min-height: inherit;">
<context-menu
v-if="showContextMenu"
:container-uuid="reportResult.processUuid"
:panel-type="panelType"
:is-report="true"
:last-parameter="reportResult.processUuid"
:report-format="reportFormat"
/>
<el-row type="flex" style="min-height: inherit;">
<el-col :span="24">
<div class="content">
<h3 class="text-center" style="margin: 0 !important;">
<el-popover
v-if="!isEmptyValue(processMetadata.help)"
ref="helpTitle"
placement="top-start"
:title="reportTitle"
width="400"
trigger="hover"
>
<div v-html="processMetadata.help" />
</el-popover>
<el-button
v-popover:helpTitle
type="text"
class="title"
>
{{ reportTitle }}
</el-button>
</h3>
<iframe
v-if="reportFormat === 'pdf'"
key="report-content-pdf"
class="content-api"
:src="url"
width="100%"
height="100%"
/>
<div
v-else-if="collectionReportFormat.includes(reportFormat)"
key="report-content-all"
class="content-api"
:src="url"
/>
<div
v-else-if="reportFormat === 'html'"
key="report-content-html"
class="content-txt"
>
<el-container class="sub-content-html">
<el-main style="padding: 0;">
<div
class="el-table--striped el-table--border el-table--scrollable-y el-table--scrollable-x"
v-html="reportContent"
/>
</el-main>
</el-container>
</div>
</div>
</el-col>
</el-row>
<modal-dialog
:metadata="processMetadata"
:parent-uuid="reportResult.processUuid"
:report-export-type="reportFormat"
:panel-type="panelType"
/>
</div>
<div
v-else
key="report-viewer-loading"
v-loading="!isLoading"
:element-loading-text="$t('notifications.loading')"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.8)"
class="loading-report-viewer"
/>
</template>
<script>
import ContextMenu from '@/components/ADempiere/ContextMenu'
import ModalDialog from '@/components/ADempiere/Dialog'
import { showNotification } from '@/utils/ADempiere/notification'
export default {
name: 'ReportViewer',
components: {
ContextMenu,
ModalDialog
},
data() {
return {
panelType: 'process',
processMetadata: {},
reportFormat: '',
collectionReportFormat: [
'ps',
'xml',
'pdf',
'txt',
'ssv',
'csv',
'xls',
'xlsx',
'arxml'
],
reportContent: '',
isLoading: false,
reportResult: {}
}
},
computed: {
// TODO: Add get metadata from server to open report view from link
showContextMenu() {
return this.$store.state.settings.showContextMenu
},
getterProcess() {
return this.$store.getters.getProcessById(this.$route.params.processId)
},
reportTitle() {
return this.processMetadata.name || this.$route.meta.title
},
url() {
return this.$store.getters.getProcessResult.url
},
getterCachedReport() {
return this.$store.getters.getCachedReport(this.$route.params.instanceUuid)
}
},
created() {
this.processMetadata = this.getterProcess
},
mounted() {
this.getCachedReport()
this.$route.meta.reportFormat = this.reportFormat
},
methods: {
showNotification,
displayReport(reportResult) {
if (!reportResult.isError) {
const { output } = reportResult
this.reportFormat = this.isEmptyValue(output.reportType) ? reportResult.reportType : output.reportType
this.reportContent = this.isEmptyValue(output.output) ? reportResult.output : output.output
this.isLoading = true
}
},
getCachedReport() {
this.reportResult = this.getterCachedReport
if (this.reportResult === undefined) {
this.$store.dispatch('getSessionProcessFromServer')
.then(response => {
this.reportResult = this.getterCachedReport
if (this.reportResult === undefined) {
this.showNotification({
type: 'error',
title: 'error',
message: 'requestError'
})
this.$store.dispatch('tagsView/delView', this.$route)
.then(({ visitedViews }) => {
this.$router.push('/')
})
return
}
this.displayReport(this.reportResult)
})
} else {
this.displayReport(this.reportResult)
}
}
}
}
</script>
<style lang="scss" scoped>
.loading-report-viewer {
padding: 100px 100px;
height: 100%;
}
.title {
color: #000000;
text-size-adjust: 20px;
font-size: 100%;
font-weight: 605!important;
}
.content {
width: 100%;
height: 100%;
position: absolute;
top: 0%;
}
.content-html {
width: 100%;
height: 100%;
padding: 10px;
}
.content-api {
width: 100%;
height: 90%;
padding-right: 10px;
}
.content-txt {
width: 100%;
height: inherit;
padding-left: 10px;
padding-right: 10px;
.sub-content-html {
min-height: inherit;
height: inherit;
max-height: -webkit-max-content;
max-height: -moz-max-content;
max-height: max-content;
width: 100%;
padding-bottom: 4%;
}
}
.content-excel {
width: 100%;
margin-top:20px;
}
.container {
width: 200%;
/* left: 50%; */
}
.container-report {
width: 100%;
}
</style>