el-select 下拉多选 选项互斥

需求

例如:一个下拉多选框,只能选择 “全部” 选项 或 除 “全部” 以外的选项;


方案一:

选择“全部”选项时,其他选项禁用;
选择除“全部”以外的选项时,禁用“全部”选项;

在这里插入图片描述

<el-form-item label="test" prop="">
  <el-select 
    v-model='values' 
    placeholder='请选择' 
    size='small' 
    multiple collapse-tags 
    @change="valuesChange">
    <el-option
      v-for='item in options'
      :disabled="item.disabled"
      :key='item.dimCde'
      :label='item.dimNme'
      :value='item.dimCde'>
    </el-option>
  </el-select>
</el-form-item>
    valuesChange(data){
      if(data && data.length){
        if(data.includes('all')){
          this.options.forEach(item=>{
            if(item.dimCde === 'all'){
              item.disabled = false;
            }else{
              item.disabled = true;
            }
          })
        }else{
          this.options.forEach(item=>{
            if(item.dimCde === 'all'){
              item.disabled = true;
            }else{
              item.disabled = false;
            }
          })
        }
      }else{
        this.options.forEach(item=>{
          item.disabled = false;
        })
      }
    },

方案二:

选择“全部”选项时,清除其他选项;
选择除“全部”以外的选项时,清除“全部”选项;

在这里插入图片描述

<el-form-item label="test" prop="">
  <el-select 
    v-model='values'
    placeholder='请选择'
    size='small'
    multiple collapse-tags>
    <el-option
      v-for='item in options'
      :key='item.dimCde'
      :label='item.dimNme'
      :value='item.dimCde'
      @click.native="itemClick(item)">
    </el-option>
  </el-select>
</el-form-item>
    itemClick(data){
      // 判断操作类型(勾选/取消勾选)
      const _index = this.values.findIndex(item=>{
        return item === data.dimCde
      })
      if(_index !== -1){  // 勾选
        if(data.dimCde === "all"){
          // 如果勾选的是‘全部’选项
          this.values = ['all']
        }else{
          // 如果勾选的不是全部选项
          const _index2 = this.values.findIndex(item=>{
            return item === "all"
          })
          if(_index2 !== -1){
            this.values.splice(_index2, 1);
          }
        }
      }
    },
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值