linkageMixins.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import _ from 'lodash'
  2. import { EventBus } from 'data-room-ui/js/utils/eventBus'
  3. import { mapMutations } from 'vuex'
  4. import { getUpdateChartInfo } from '../api/bigScreenApi'
  5. export default {
  6. data () {
  7. return {
  8. filterList: [],
  9. treeParentId: 0,
  10. dataLoading: false
  11. }
  12. },
  13. methods: {
  14. ...mapMutations('bigScreen', {
  15. changeChartKey: 'changeChartKey'
  16. }),
  17. /**
  18. * bigScreen数据联动时根据入参的值进行数据处理
  19. * @param filterList 过滤条件
  20. * @param isInner 是否是组件内部的数据改变
  21. */
  22. dataInit (filterList, isInner = false) {
  23. if (Array.isArray(filterList) && filterList.length) {
  24. this.filterList = filterList
  25. }
  26. filterList = this.combineFilterList(isInner).filter(
  27. field => ![undefined, ''].includes(field.value)
  28. )
  29. // this.dataLinkageHandle(this.config, this.pageInfo.code, filterList)
  30. this.changeData(this.config, filterList)
  31. },
  32. /**
  33. * 联动数据
  34. * @param {*} formData
  35. * */
  36. linkage (formData) {
  37. EventBus.$emit('dataInit', formData, this.config.linkage.components)
  38. },
  39. /**
  40. * 绑定数据
  41. * @param {*} formData
  42. * */
  43. // binding (formData) {
  44. // EventBus.$emit('dataInit', formData, this.config.binding.components)
  45. // },
  46. /**
  47. * 处理外部联动数据和内部联动数据,合并,如果内部搜索区的参数在外部联动,则赋值上
  48. * @param {Boolean} isInner 是否是内部组件
  49. */
  50. combineFilterList (isInner = false) {
  51. let filterList = isInner ? [] : _.cloneDeep(this.filterList)
  52. // 如果内部组件的搜索条件不存在,则直接返回全局的filterList
  53. if (!this.$refs?.searchForm?.form) {
  54. return filterList
  55. }
  56. // 对比,如果filterList的column和内部参数innerFilterList一致,则赋值内部参数
  57. const form = this.$refs.searchForm.form
  58. const innerFilteKeyMap = Object.keys(form)
  59. // eslint-disable-next-line no-unused-expressions
  60. filterList?.map(filterItem => {
  61. if (innerFilteKeyMap.includes(filterItem.column)) {
  62. this.formData[filterItem.column] = filterItem.value
  63. this.$refs.searchForm.form[filterItem.column] = filterItem.value
  64. }
  65. })
  66. // 处理内部参数 filterList
  67. const innerFilterList = this.config?.fields
  68. ?.map(field => {
  69. return {
  70. column: field.name,
  71. operator: field.queryRule || 'like',
  72. value: this.formData[field.name]
  73. }
  74. })
  75. .filter(field => ![undefined, ''].includes(field.value))
  76. // 合并去重
  77. filterList = [...filterList, ...innerFilterList]
  78. filterList = _.uniqBy(filterList, 'column')
  79. return filterList
  80. }
  81. }
  82. }