Vue: 多个el-select不能重复选择相同属性

一、场景

1.需求: 用户可自由选择需要修改的对象并同时修改多个属性,需要校验修改对象不能重复选择,但是可供修改属性是固定的

2.目标效果:
在这里插入图片描述

二、原理与步骤

1.首先将所有select选项,设置disabled默认false
2.改变select选项,change方法:
①将所有选项disabled置为false,这一步是避免有遗漏
②判断修改项table中是否存在select中的值,若存在,将选项disabled置为true

三、实现

1.主要代码:

<template>
 <el-select
    v-model="selValue"
    :size="$attrs.size"
    placeholder="请选择"
    @change="canidateChange(scope)"
  >
    <el-option
      v-for="(selc, index) in SelectColumns"
      :key="index + selc.item.key"
      :label="selc.item.title"
      :value="selc.item.key"
      :disabled="selc.item.disabled"
    ></el-option>
  </el-select>
 </template>
<script>
export default{
	name:"",
	data(){
	  const SelectColumns = [
		    {
		      item: {
		        key: "priceType",
		        title: "属性1",
		      },
		      attr: {
		        is: "el-select",
		        dictName: "sys_price_type",
		      }
		    },
		    {
		      item: {
		        key: "assignSupplierName",
		        title: "属性2",
		        // key: "supplierName",
		      },
		      attr: {
		        readonly: true,
		        is: "el-input",
		      },
		    },
		    {
		      item: {
		        key: "input1",
		        title: "属性3",
		      },
		      attr: {
		        is: "el-input",
		      }
		    },
		    {
		      item: {
		        key: "input2",
		        title: "属性4",
		      },
		      attr: {
		        is: "el-input",
		      }
		    },
		
		  ].map(({ item, attr }) => {
		    return {
		      item: { ...item },
		      attr: {
		        ...attr,
		        disabled: false,
		      }
		    }
		  });
		return {
			SelectColumns:SelectColumns,
		}
	},
	methods:{
		canidateChange(prop) {
	      let { $index, row } = prop;
      	  this.SelectColumns = this.SelectColumns.map(({ item, attr }) => {
      	  	// 重置
        	item.disabled = false;

        	let index = this.innerValue.findIndex(
          		(inVal) => inVal.candidate === item.key
        	);
	        // 存在
	        if (index !== -1) {
	          item.disabled = true;
	        }

	        return {
	          item,
	          attr,
	        };
	      });
	    }
	}
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值