123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- <!--
- @name:数据预览弹窗
- @description:
- @author: liu.shiyi
- @time:
- -->
- <template>
- <div class="bs-data-view-dialog">
- <el-dialog
- :close-on-click-modal="false"
- title="数据查看"
- :visible.sync="formVisible"
- :append-to-body="false"
- class="bs-dialog-wrap bs-el-dialog"
- >
- <el-table
- ref="table"
- v-loading="loading"
- class="bs-table bs-el-table"
- height="300"
- :data="dataList"
- >
- <el-table-column
- v-for="(col,index) in columnData"
- :key="index"
- show-overflow-tooltip
- :prop="col.alias"
- :label="getLabel(col)"
- align="center"
- />
- </el-table>
- <div
- slot="footer"
- class="dialog-footer"
- >
- <DownloadExcel
- :data="dataList"
- :fields="fields"
- :name="chartTitle+'数据导出'"
- class="output-excel"
- :before-finish="exportHandler"
- >
- <el-button
- type="primary"
- :loading="exportLoading"
- >
- 导出数据
- </el-button>
- </DownloadExcel>
- </div>
- </el-dialog>
- </div>
- </template>
- <script>
- import { getUpdateChartInfo } from 'data-room-ui/js/api/bigScreenApi'
- import { mapState } from 'vuex'
- import Vue from 'vue'
- import JsonExcel from 'vue-json-excel'
- Vue.component('DownloadExcel', JsonExcel)
- export default {
- name: 'DataViewDialog',
- components: {},
- props: {
- },
- data () {
- return {
- chartTitle: '',
- fields: {},
- formVisible: false,
- exportLoading: false,
- loading: false,
- dataList: [],
- columnData: {}
- }
- },
- computed: {
- ...mapState({
- pageCode: state => state.bigScreen.pageInfo.code
- })
- },
- watch: {},
- created () {
- },
- mounted () {
- },
- methods: {
- init (config) {
- this.resetData()
- this.chartTitle = config.title
- this.formVisible = true
- this.getDataList(config)
- },
- // 获取数据列表
- getDataList (config) {
- this.loading = true
- // 如果是G2组件则需要从option里面取数据
- if (config.type === 'customComponent' && (!config.dataSource.businessKey)) {
- this.getDataByOption(config)
- this.fieldsFormat()
- this.loading = false
- } else {
- const params = {
- chart: {
- ...config,
- option: undefined
- },
- current: 1,
- pageCode: this.pageCode,
- type: config.type
- }
- // 调接口获取数据
- getUpdateChartInfo(params).then(res => {
- this.loading = false
- if (Array.isArray(res.data)) {
- this.dataList = res.data || []
- } else {
- // 如果返回的data不是数组,则是js数据集或者是http前端数据集,则直接从option中获取
- this.getDataByOption(config)
- }
- this.columnData = res.columnData || {}
- this.fieldsFormat()
- }).catch(err => { console.log(err) }).finally(() => {
- this.loading = false
- })
- }
- },
- // 通过option获取数据
- getDataByOption (config) {
- const list = config.option.data || []
- for (const key of Object.keys(list[0])) {
- this.columnData[key] = {
- aggregate: '',
- alias: key,
- originalColumn: key,
- remark: key,
- tableName: '',
- type: 'varchar'
- }
- }
- this.dataList = list
- },
- // 获取表格的表头
- getLabel (col) {
- return col.remark || col.originalColumn
- },
- // 数据重置
- resetData () {
- this.columnData = {}
- this.dataList = []
- this.fields = {}
- this.chartTitle = ''
- },
- // 格式化fields
- fieldsFormat () {
- for (const item in this.columnData) {
- this.fields[this.columnData[item].remark || this.columnData[item].originalColumn] = this.columnData[item].originalColumn
- }
- },
- // 导出数据
- exportHandler () {
- this.$message.success('导出数据')
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .bs-data-view-dialog{
- /deep/.el-dialog__body{
- background-color: var(--bs-background-2) !important;
- max-height: unset!important;
- min-height: unset!important;
- }
- .el-table th.el-table__cell.is-leaf, .el-table /deep/td.el-table__cell{
- border-bottom:none;
- }
- /deep/.el-loading-mask{
- background-color: var(--bs-background-2) !important;
- }
- .el-table /deep/thead{
- color: var(--bs-el-title);
- }
- .bs-el-table /deep/td.el-table__cell{
- color: #bcc9d4;
- }
- /* 自定义滚动条样式 */
- /deep/.el-table__body-wrapper::-webkit-scrollbar {
- width: 6px; /* 滚动条宽度 */
- }
- /deep/.el-table__body-wrapper::-webkit-scrollbar-thumb {
- background-color: #888; /* 滚动条拖动块颜色 */
- height: 30px;
- border-radius: 5px;
- }
- /deep/.el-table__body-wrapper::-webkit-scrollbar-track {
- background-color: transparent; /* 滚动条轨道颜色 */
- }
- /* 鼠标悬停在滚动条上时的样式 */
- /deep/.el-table__body-wrapper::-webkit-scrollbar-thumb:hover {
- background-color: #555;
- cursor: pointer;
- }
- }
- </style>
|