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.

111 lines
3.5 KiB
JavaScript

import _ from 'lodash'
import { EventBus } from 'packages/js/utils/eventBus'
import { mapMutations } from 'vuex'
import { getUpdateChartInfo } from '../api/bigScreenApi'
export default {
data () {
return {
filterList: [],
treeParentId: 0,
dataLoading: false
}
},
methods: {
...mapMutations('bigScreen', {
changeChartKey: 'changeChartKey'
}),
/**
* bigScreen数据联动时根据入参的值进行数据处理
* @param filterList 过滤条件
* @param isInner 是否是组件内部的数据改变
*/
dataInit (filterList, isInner = false) {
if (Array.isArray(filterList) && filterList.length) {
this.filterList = filterList
}
filterList = this.combineFilterList(isInner).filter(
field => ![undefined, ''].includes(field.value)
)
this.dataLinkageHandle(this.config, this.pageInfo.code, filterList)
},
// 数据联动时改变数据(与点击设置面板的更新按钮及初始化时的数据处理做区分)
async dataLinkageHandle (config, pageCode, filterList) {
const params = {
chart: {
...config,
option: undefined
},
current: 1,
pageCode,
type: config.type,
filterList,
treeParentId: this.treeParentId || '0'
}
this.dataLoading = true
return getUpdateChartInfo(params)
.then(res => {
console.log(2, res)
config = this.buildOption(config, res)
this.changeChartConfig(config)
this.changeChartKey(config.code)
})
.catch(error => {
console.error(error)
})
.finally(() => {
this.dataLoading = false
})
},
/**
* 联动数据
* @param {*} formData
* */
linkage (formData) {
EventBus.$emit('dataInit', formData, this.config.linkage.components)
},
/**
* 绑定数据
* @param {*} formData
* */
// binding (formData) {
// EventBus.$emit('dataInit', formData, this.config.binding.components)
// },
/**
* 处理外部联动数据和内部联动数据合并如果内部搜索区的参数在外部联动则赋值上
* @param {Boolean} isInner 是否是内部组件
*/
combineFilterList (isInner = false) {
let filterList = isInner ? [] : _.cloneDeep(this.filterList)
// 如果内部组件的搜索条件不存在则直接返回全局的filterList
if (!this.$refs?.searchForm?.form) {
return filterList
}
// 对比如果filterList的column和内部参数innerFilterList一致则赋值内部参数
const form = this.$refs.searchForm.form
const innerFilteKeyMap = Object.keys(form)
// eslint-disable-next-line no-unused-expressions
filterList?.map(filterItem => {
if (innerFilteKeyMap.includes(filterItem.column)) {
this.formData[filterItem.column] = filterItem.value
this.$refs.searchForm.form[filterItem.column] = filterItem.value
}
})
// 处理内部参数 filterList
const innerFilterList = this.config?.fields
?.map(field => {
return {
column: field.name,
operator: field.queryRule || 'like',
value: this.formData[field.name]
}
})
.filter(field => ![undefined, ''].includes(field.value))
// 合并去重
filterList = [...filterList, ...innerFilterList]
filterList = _.uniqBy(filterList, 'column')
return filterList
}
}
}