linkageMixins.js 2.8 KB

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