linkageMixins.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import _ from 'lodash'
  2. import { EventBus } from 'packages/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. },
  31. // 数据联动时改变数据(与点击设置面板的更新按钮及初始化时的数据处理做区分)
  32. async dataLinkageHandle (config, pageCode, filterList) {
  33. const params = {
  34. chart: {
  35. ...config,
  36. option: undefined
  37. },
  38. current: 1,
  39. pageCode,
  40. type: config.type,
  41. filterList,
  42. treeParentId: this.treeParentId || '0'
  43. }
  44. this.dataLoading = true
  45. return getUpdateChartInfo(params)
  46. .then(res => {
  47. console.log(2, res)
  48. config = this.buildOption(config, res)
  49. this.changeChartConfig(config)
  50. this.changeChartKey(config.code)
  51. })
  52. .catch(error => {
  53. console.error(error)
  54. })
  55. .finally(() => {
  56. this.dataLoading = false
  57. })
  58. },
  59. /**
  60. * 联动数据
  61. * @param {*} formData
  62. * */
  63. linkage (formData) {
  64. EventBus.$emit('dataInit', formData, this.config.linkage.components)
  65. },
  66. /**
  67. * 绑定数据
  68. * @param {*} formData
  69. * */
  70. // binding (formData) {
  71. // EventBus.$emit('dataInit', formData, this.config.binding.components)
  72. // },
  73. /**
  74. * 处理外部联动数据和内部联动数据,合并,如果内部搜索区的参数在外部联动,则赋值上
  75. * @param {Boolean} isInner 是否是内部组件
  76. */
  77. combineFilterList (isInner = false) {
  78. let filterList = isInner ? [] : _.cloneDeep(this.filterList)
  79. // 如果内部组件的搜索条件不存在,则直接返回全局的filterList
  80. if (!this.$refs?.searchForm?.form) {
  81. return filterList
  82. }
  83. // 对比,如果filterList的column和内部参数innerFilterList一致,则赋值内部参数
  84. const form = this.$refs.searchForm.form
  85. const innerFilteKeyMap = Object.keys(form)
  86. // eslint-disable-next-line no-unused-expressions
  87. filterList?.map(filterItem => {
  88. if (innerFilteKeyMap.includes(filterItem.column)) {
  89. this.formData[filterItem.column] = filterItem.value
  90. this.$refs.searchForm.form[filterItem.column] = filterItem.value
  91. }
  92. })
  93. // 处理内部参数 filterList
  94. const innerFilterList = this.config?.fields
  95. ?.map(field => {
  96. return {
  97. column: field.name,
  98. operator: field.queryRule || 'like',
  99. value: this.formData[field.name]
  100. }
  101. })
  102. .filter(field => ![undefined, ''].includes(field.value))
  103. // 合并去重
  104. filterList = [...filterList, ...innerFilterList]
  105. filterList = _.uniqBy(filterList, 'column')
  106. return filterList
  107. }
  108. }
  109. }