element-ui は動的レンダリング ドロップダウン選択ボックスを使用します el-select 選択したドロップダウン ボックスの値を繰り返し選択することはできません

1. 要件:
開発中は、動的レンダリング ドロップダウン選択ボックスが表示されます. [追加] ボタンをクリックするたびに、新しいドロップダウン メニューをリスト typeList に追加できます. ドロップダウン メニューがいずれかを選択した場合値A, その後、追加後のドロップダウンメニューのAは、再度選択することはできません. フロントエンドを使用して無効にし、選択できないようにする必要があります.
ここに画像の説明を挿入

実現:
1. 最初にドロップダウン メニューのオプションを取得し、その中の各項目に item.disabled=false 属性を追加して、ドロップダウン ボックスを無効にするかどうかを制御できるようにします。

this.$store.dispatch('pm/GetBrandList', {
    
     ...this.BrandListForm, ...page }).then(res => {
    
    
  this.projectListOptions = res.pocket.projectList
  this.projectListOptions.forEach(item => {
    
    
    item.disabled = false
  })
})

2. ドロップダウン ボックスの値が変更されたときに監視するメソッドを作成し、選択した値をインターフェイスから取得したリスト データと比較します。同じ値があるかどうかを判断し、ある場合は、リスト データの対応する値を無効にします。
注: ここで使用する必要がある場所が 2 つあります。[1、ドロップダウン ボックスの値が変更されたときにこのメソッドを呼び出す、2、対応するドロップダウン ボックスを削除するときにこのメソッドを呼び出す]

// 项目名称选中不可以重复选择
 projectnameChange (val) {
    
    
   const findItem = this.projectListOptions.find(e => e.projectId === val)
   // 添加其他参数值例如再项目名称后面加客户名称custmtomerName
   this.addcocorporationName = findItem?.custmtomerName
   this.getprojectlistdisabled(val)
 },
// 获取是否有禁用数据给disabled
// 思路分析:1,准备一个空数组用来存放当前选中后下拉框值---typesarry ;
// 2, 然后遍历接口拿到的下拉框列表数据去进行遍历拿到对应value值,拿到后和我们存放选中的下拉框进行比对是否有相同的value值,有的话就disabled为true表示已经选择过不允许再次选中。
getprojectlistdisabled () {
    
    
   const typesarry = []
   this.BrandForm.projectNameArry.forEach(item => {
    
    
     if (item.value) {
    
    
       typesarry.push(item.value)
     }
   })
   this.projectListOptions.forEach(element => {
    
    
     if (typesarry.indexOf(element.value) !== -1) {
    
    
       element.disabled = true
       // 这里是添加额外的参数custmtomerName用来显示在项目名称旁边的
       if (val) {
    
    
         this.BrandForm.projectNameArry.forEach(itemchild => {
    
    
           if (val === itemchild.projectId) {
    
    
             itemchild.custmtomerName = this.addcocorporationName
           }
         })
       }
     } else {
    
    
       element.disabled = false
     }
   })
 },

3. 動的ドロップダウン ボックスを次のようにレンダリングします。

<div v-if="BrandForm.projectNameArry.length > 0">
	<div v-for="(item, index) in BrandForm.projectNameArry" :key="index">
	  <el-form-item label="项目名称" :prop="'projectNameArry.'+ index +'.value' " :rules="{ required: true, message: '请选择项目名称', trigger: 'blur' }" class="subsettypebox">
	    <el-select
	      clearable
	      filterable
	      v-model="item.value"
	      @change="projectnameChange"
	      placeholder="请选项目名称">
	      <el-option
	        v-for="item in projectListOptions"
	        :key="item.value"
	        :label="item.label"
	        :disabled="item.disabled"
	        :value="item.value">
	      </el-option>
	    </el-select>
	    <i @click="addproductClick(item)" class="btn-group el-icon-circle-plus-outline"></i>
	    <i @click="removproductClick(index)" class="btn-group del el-icon-delete" v-show="BrandForm.projectNameArry.length > 1"></i>
	  </el-form-item>
	</div>
</div>
// 新增项目名称
addproductClick (item) {
    
    
  if (!item.value) {
    
    
    this.$message.warning('请先选择项目名称再进行新增操作!')
  } else {
    
    
    this.BrandForm.projectNameArry.push({
    
    
      value: ''
    })
  }
},

removproductClick (index) {
    
    
  this.BrandForm.projectNameArry.splice(index, 1)
  this.getprojectlistdisabled()
},

おすすめ

転載: blog.csdn.net/qq_44552416/article/details/129621571