You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.9 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* @description: bigScreen公共方法
* @Date: 2023-03-24 17:10:43
* @Author: xing.heng
*/
import _ from 'lodash'
import { mapMutations, mapState } from 'vuex'
import { getChatInfo, getUpdateChartInfo } from '../api/bigScreenApi'
export default {
data () {
return {
filterList: [],
treeParentId: 0,
dataLoading: false
}
},
computed: {
...mapState({
pageCode: state => state.bigScreen.pageInfo.code
}),
isPreview () {
return this.$route.path !== window?.BS_CONFIG?.routers?.designUrl
}
},
mounted () {},
methods: {
...mapMutations({
changeChartConfig: 'bigScreen/changeChartConfig'
}),
/**
* 初始化组件
*/
chartInit () {
// 初始化组件和数据,若自己的组件的初始化和数据处理不一样,可重写该方法
// 如果key和code相等说明是一进来刷新调用/chart/data/list否则是更新调用 chart/data/chart
// 或者是组件联动isLink,也需要调用/chart/data/list更新
if (this.config.code === this.config.key || this.isPreview) {
// 根据数据集初始化的组件
if (this.isPreview) {
this.getCurrentOption().then(({ config, data }) => {
config = this?.buildOption(config, data)
if (config) {
this.changeChartConfig(config)
this?.newChart(config.option)
}
})
} else {
this.updateChartData(this.config)
}
} else {
this?.newChart(this.config.option)
}
},
/**
* 初始化组件时获取后端返回的数据, 返回数据和当前组件的配置
* @param settingConfig 设置时的配置。不传则为当前组件的配置
* @returns {Promise<unknown>}
*/
getCurrentOption (settingConfig) {
const pageCode = this.pageCode
const chartCode = this.config.code
const type = this.config.type
const config = _.cloneDeep(settingConfig || this.config)
let currentPage = 1
let size = 10
if (config?.option?.pagination) {
currentPage = config.option.pagination.currentPage
size = config.option.pagination.pageSize
}
return new Promise((resolve, reject) => {
this.getDataByCode(pageCode, chartCode, type, currentPage, size).then((data) => {
resolve({
config, data
})
}).catch((err) => {
reject(err)
})
})
},
/**
* 根据 chatCode 获取后端返回的数据
* @param pageCode
* @param chartCode
* @param type
* @param current
* @param size
* @returns {Promise<*>}
*/
async getDataByCode (
pageCode,
chartCode,
type,
current = 1,
size = 10
) {
let parentCode
const data = await getChatInfo({
innerChartCode: parentCode ? chartCode : undefined,
chartCode: parentCode || chartCode,
current: current,
pageCode: pageCode,
size: size,
type: type
})
return data
},
/**
* @description: 更新chart
* @param {Object} config
*/
updateChartData (config) {
const filterList = this.filterList
const params = {
chart: {
...config,
option: undefined
},
current: 1,
pageCode: this.pageCode,
type: config.type,
filterList
}
getUpdateChartInfo(params).then((res) => {
// 获取数据后更新组件配置
config.key = new Date().getTime()
config = this.buildOption(config, res)
if (config) {
this.changeChartConfig(config)
}
// this.$message.success('更新成功')
}).catch((err) => {
console.error(err)
// this.$message.error('更新失败')
})
},
buildOption (config, data) {
// 覆盖
},
newChart (option) {
// 覆盖
}
}
}