el-tree懒加载获取数据,反显,数据重组为特定格式{ datasourceId: ‘‘, tableIds: [] }

<el-scrollbar wrap-class="assets-tree" view-style="display: flex; flex-direction: column; width: 100%;height: 100%;" wrap-style="overflow-x: auto; ">
  <el-tree ref="assetsTree" :data="assetDataList" :filter-node-method="filterNode" show-        
  checkbox node-key="id" :props=" defaultProps" lazy :load=" loadNode" :default-expanded- 
  keys="defaultExpandedKeys"  @check="handleCheck" />
</el-scrollbar>
<script>
data(){
  return {
    checkassetTableData: [], // 反显||选中
     defaultExpandedKeys: [],
    }

}
    loadNode(node, resolve) { //懒加载
      var data = { templateId: this.formData.templateId, taskId: this.taskId }
      if (node.level === 0) {
        data.userId = this.userId
        getListDataSourceInfo(data).then(res => {
          var assetData = []
          res.data.forEach(item => {
            assetData.push({ name: item.name, id: item.id, children: [] })
          })
          this.assetDataList = assetData
          resolve(res.data)
          this.treeCheck(this.checkassetTableData, node.level)
        })
      }
      if (node.level === 1) {
        data.dataSourceId = node.data.id
        getListTable(data).then(res => {
          var childrenData = []
          res.data.forEach(item => {
            childrenData.push({ name: item.name, id: item.id, datasourceId: item.datasourceId })
          })
          node.data.children = childrenData
          resolve(node.data.children)
          this.treeCheck(this.checkassetTableData, node.level)
        })

        // 同时展开节点
        if (!node.expanded) {
          node.expanded = true
        }
      } else {
        resolve([])
      }
    },
    treeCheck(data, level) { // 反显
        var levelnodeIds = []
        var nodeIds = []
        var checkData = []
        data.forEach((item) => {
          levelnodeIds.push(item.datasourceId)
          if (item.tableIds.length > 0) {
            item.tableIds.forEach((table) => {
              nodeIds.push(table)
            })
          }
        })
        if (level === 0) {
          checkData = levelnodeIds
        } else {
          checkData = nodeIds
        }
        this.defaultExpandedKeys = levelnodeIds
        this.$nextTick(() => {
          this.$refs.assetsTree.setCheckedKeys(checkData)
        })
    },
    handleCheck(data) {
      const checkeds = this.$refs.assetsTree.getCheckedNodes()
      const halfNode = this.$refs.assetsTree.getHalfCheckedNodes()
      halfNode.forEach((item) => {
        checkeds.push(item)
      })
      // this.assetTableData = checkeds
      this.checkassetTableData = this.getassetTableId(checkeds)
    },
    // 数组去重且重组为{ datasourceId: '', tableIds: [] }
// const arr = [
//   { id: 2, name: 'qq', datasourceId: 1002 },
//   { id: 1002, name: 'qq' },
//   { id: 4, name: 'qq', datasourceId: 1003 },
//   { id: 1003, name: 'qq' },
//   { id: 3, name: 'qq', datasourceId: 1002 },
//   { id: 1104, name: 'qq' },
//   { id: 5, name: 'qq', datasourceId: 1003 },
//   { id: 1, name: 'qq', datasourceId: 1002 }
// ]
 getassetTableId(arr) {
  const res = []
  arr.forEach(item => {
    const temp = {}
    let isNewDatasource = true
    if (item.datasourceId) {
      const data = res.find(val => val.datasourceId === item.datasourceId)
      if (data) {
        data.tableIds.push(item.id)
        isNewDatasource = false
      } else {
        temp.datasourceId = item.datasourceId
        temp.tableIds = []
        temp.tableIds.push(item.id)
      }
    } else {
      const data = res.find(val => val.datasourceId === item.id)
      if (data) {
        isNewDatasource = false
      } else {
        temp.datasourceId = item.id
        temp.tableIds = []
      }
    }
    if (isNewDatasource && temp.datasourceId) {
      res.push(temp)
    }
  })
  return res
}
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值