• liang's avatar
    init · dad95e78
    liang authored
    dad95e78
handleFormData.js 2.2 KB
// 已废弃
export default {
  data() {
    return {
    }
  },
  methods: {
    //  监听数据
    setformWatch({ group, column }, watchObj) {
      this.watchColumn(column, group, watchObj)
      if (group && group.length > 0) {
        group.forEach((g) => {
          this.watchColumn(g.column, group, watchObj)
        })
      }
    },

    watchColumn(column = [], group = [], watchObj = "widgetModels") {
      column.forEach((c) => {
        if (c.type === "group" || c.type === "dynamic") {
          let col = c.children.column
          this.watchColumn(col, column, watchObj)
        } else {
          this.setDicData(c)
          // 表单子项控制显隐
          const dynamicshSet = c.dynamicshSet || []
          if (dynamicshSet.length > 0) {
            this.$watch(
              `${watchObj}.${c.prop}`,
              function (val) {
                const dyMap = {} // 显示数据集合
                dynamicshSet.forEach((dy) => {
                  if (dyMap[dy.target]) {
                    dyMap[dy.target].push(dy.value)
                  } else {
                    dyMap[dy.target] = [dy.value]
                  }
                })
                Object.keys(dyMap).forEach((key) => {
                  let targetItem = column.find((_) => _.prop === key)
                  if (!targetItem) {
                    targetItem = group.find((_) => _.prop === key)
                  }
                  if (!targetItem) return
                  const values = dyMap[key]
                  let display = false
                  if (Array.isArray(val)) {
                    display = values.filter((v) => val.includes(v)).length > 0
                  } else {
                    display = values.includes(val)
                  }
                  this.$set(targetItem, "display", Boolean(display))
                })
              },
              {
                immediate: true,
              }
            )
          }
        }
      })
    },
    // 添加字典数据
    setDicData(c) {
      const { dicType, dicData } = c
      if (dicType) {
        if (dicData && dicData.length !== 0) return
        let data = this.dictMap[dicType] || []
        this.$set(c, "dicData", data)
      }
    },
  },
}