linkageMixins.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. config = this.buildOption(config, res)
  48. this.changeChartConfig(config)
  49. this.changeChartKey(config.code)
  50. })
  51. .catch(error => {
  52. console.error(error)
  53. })
  54. .finally(() => {
  55. this.dataLoading = false
  56. })
  57. },
  58. /**
  59. * 联动数据
  60. * @param {*} formData
  61. * */
  62. linkage (formData) {
  63. EventBus.$emit('dataInit', formData, this.config.linkage.components)
  64. },
  65. /**
  66. * 绑定数据
  67. * @param {*} formData
  68. * */
  69. // binding (formData) {
  70. // EventBus.$emit('dataInit', formData, this.config.binding.components)
  71. // },
  72. /**
  73. * 处理外部联动数据和内部联动数据,合并,如果内部搜索区的参数在外部联动,则赋值上
  74. * @param {Boolean} isInner 是否是内部组件
  75. */
  76. combineFilterList (isInner = false) {
  77. let filterList = isInner ? [] : _.cloneDeep(this.filterList)
  78. // 如果内部组件的搜索条件不存在,则直接返回全局的filterList
  79. if (!this.$refs?.searchForm?.form) {
  80. return filterList
  81. }
  82. // 对比,如果filterList的column和内部参数innerFilterList一致,则赋值内部参数
  83. const form = this.$refs.searchForm.form
  84. const innerFilteKeyMap = Object.keys(form)
  85. // eslint-disable-next-line no-unused-expressions
  86. filterList?.map(filterItem => {
  87. if (innerFilteKeyMap.includes(filterItem.column)) {
  88. this.formData[filterItem.column] = filterItem.value
  89. this.$refs.searchForm.form[filterItem.column] = filterItem.value
  90. }
  91. })
  92. // 处理内部参数 filterList
  93. const innerFilterList = this.config?.fields
  94. ?.map(field => {
  95. return {
  96. column: field.name,
  97. operator: field.queryRule || 'like',
  98. value: this.formData[field.name]
  99. }
  100. })
  101. .filter(field => ![undefined, ''].includes(field.value))
  102. // 合并去重
  103. filterList = [...filterList, ...innerFilterList]
  104. filterList = _.uniqBy(filterList, 'column')
  105. return filterList
  106. }
  107. }
  108. }