vue组件<el-select-tree>实现树形下拉框

近期业务需求,需要结合el-tree和el-select,做一个下拉树形多选,本来使用 el-select-tree 组件库可以实现,但是有一些小细节官方文档上都没体现出来,下面是设计图

在这里插入图片描述

需求:点击子节点时,如果父节点没有勾选要勾选,点击父节点如果子节点全选就取消,如果没有就全选

下面是实现代码

<el-select-tree
    style="width: 100%"
    :placeholder="$t('introduce.tip.select_category')"
     :data="classData"
     :props="treeDefaultProps"
     v-model="product.classId"
     :default-checked-keys="product.classId"
     @change="areaChangeClassify(product.classId)"
     @check="confirmTree"
     checkStrictly
     multiple
     show-checkbox
></el-select-tree>
>
areaChangeClassify(classId) {
		// 这里判断是否包含父节点,没有就加上去
      if(this.product.classId.length && this.product.classId.indexOf(this.classData[0].id) === -1){
        this.product.classId.unshift(this.classData[0].id)
      }
      // 这里判断是否点击的是父节点
      if(this.currentClassId === this.classData[0].id){
      // 这里判断子元素是否全选,是的话取消,不是就全选
        if(this.product.classId.length <= this.classData[0].children.length){
          this.product.classId = []
          this.product.classId.unshift(this.classData[0].id)
          this.classData[0].children.forEach(item=>{
            this.product.classId.push(item.id)
          })
        }else if(this.product.classId.length > 1){
          this.product.classId = []
        }
      }
      // 有时候会有重复的,这里去重
      this.product.classId = [...new Set(this.product.classId)]
    },
    // 这里是获取到当前点击的节点,赋值过去判断
    confirmTree(classId){
      this.currentClassId = classId.id
    },

注意:

1. 这里版本要用 `2.0.18` 以上, 否则没有 check 事件
2. 如果是赋值,需要用到 `default-checked-keys`,否则不会回显

~ 到这里就完成了,这是最简单的,只有一层结构
如果有多级,还可以使用递归的方法来判断,这里就不做展示了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值