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.

86 lines
2.8 KiB
JavaScript

// import _ from 'lodash'
import cloneDeep from 'lodash/cloneDeep'
import uniqBy from 'lodash/uniqBy'
import { EventBus } from 'data-room-ui/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)
this.changeData(this.config, filterList)
},
/**
* 联动数据
* @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
}
}
}