treeSelect中遇到的问题

前言:treeSelect部门数,不同于element-UI中的tree,没有那么多方法可供使用,这就限制了有些操作

1、比如某些逻辑中,后端需要子部门id数组

        可以通过设置 :disableBranchNodes='true'来实现只能选择子节点来实现,但是这种体验非常不好,如果部门过多,我们希望通过选择父节点来实现全选子节点,就没有办法实现

在看了treeSelect的API文档之后,确定没有相关props可以使用,于是就想到了ref,通过打印台查看ref的相关节点,可以实现选中父节点,也能拿到子节点所有ID,话不多说,上代码

<!--multiple是设置多选,show-checkbox是设置多选框-->
<treeselect
 show-checkbox
 multiple
 ref="tree"
 v-model="form.deptIdList"
 :options="deptOptions"
 :show-count="true"  
 placeholder="请选择部门"
/>



<script>
 //处理排除父节点之后的数组
    objectTrans(arr){
     let a =  arr.map(res=>{
    //判断如果部门数据下没有子节点,就返回此部门id
        if(!res.children){
          return res.id
        }else{
            //如果有子节点,继续遍历
           this.objectTrans(res.children)
        }
      })
       //将返回的数组解构添加到变量中
      this.deptArr.push(...a)
       // 给数组去重
      this.deptArr = Array.from(new Set(this.deptArr))
    },
    //获取部门数  项目中部门树的接口
     getTreeselect() {
      treeselect().then((response) => {
        this.deptOptions = response.data;
        //拿到部门树数据调用处理方法
        this.objectTrans(this.deptOptions);
       
      });
    },

//定义一个变量,储存处理后的数组
let deptIds = []
//this.deptArr变量储存的是不包含父节点ID的数组,通过$refs得到的是选中的数组(包含父节点)
let deptArr = this.$refs.tree.forest.selectedNodeIds
//遍历数组,与this.deptArr对比,去重
for(let i=0;i<deptArr.length;i++){
    //如果deptArr在this.deptArr中,说明是子节点,给到新数组,如果不在,跳过
    let a =  this.deptArr.indexOf(deptArr[i])
    if(a>-1){
       deptIds.push(deptArr[i])
     }
}
//最后得到的deptIds就是不包含父节点的所有子节点数组数据

</script>

好了,分享就到这,大家有什么好的方法或者文章有什么不足,可以评论发表出来,一起学习

有不懂的可以随时留言哦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值