实现el-cascader 同一子级单选 不同子级多选,隐藏父级复选框

实现el-cascader 同一子级单选 不同子级多选,隐藏父级复选框

  <el-cascader class='cascader hide' v-model="preValue" :options='companylist' :props='props' clearable
            popper-class="disableFirstLevel" @change='handleChange' ref='cascade' style="width:50%"></el-cascader>

data

preValue: [],    
props: { multiple: true, expandTrigger: 'click' },
companylist:[{value:1,label:1,children:[{value:11,label:11},  {value:12,label:12}]]

methods

   handleChange(val) {
      if (this.preValue.length > 0 && val.length > this.preValue.length) {
        let newIndex;
        let i = 0, j = 0;
        while (i < val.length && j < this.preValue.length) {
          if (val[i][0] === this.preValue[j][0] && val[i][1] === this.preValue[j][1]) {
            i++;
            j++;
          } else {
            //添加在中间的情况
            newIndex = i;
            break;
          }
        }
        //添加在末尾的情况
        if (j === this.preValue.length) {
          newIndex = i;
        }

        let delIndex = val.findIndex((item, index) => index !== newIndex && item[0] === val[newIndex][0]);
        if (delIndex >= 0) {
          // 取消选择的节点
          let cancelIndex;
          for (let i = 0; i < this.companylist.length; i++) {
            if (this.companylist[i].value === val[delIndex][0]) {
              for (let j = 0; j < this.companylist[i].children.length; j++) {
                if (this.companylist[i].children[j].value === val[delIndex][1]) {
                  cancelIndex = j;
                  break;
                }
              }
              break;
            }
          }
          this.$nextTick(() => {
            let panelId = this.$refs.cascade.panel.$refs.menu[1].$el.id;
            let liId = document.getElementById(panelId + '-' + cancelIndex);
            liId.children[0].click();
          })
          val[delIndex] = '';
          val = val.filter(item => item !== '');
        }
      }
      this.preValue = val;
      console.log(this.preValue);
    },

style

.disableFirstLevel {
  .el-cascader-menu:first-of-type {
    .el-cascader-node {
      .el-checkbox {
        display: none;
      }
    }
  }
}

注: 需要什么数据格式可以自行对 this.preValue进行处理 但是双向绑定el-cascader接受的是一个数组 如: [ 1 , 11 ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值