首先看一个数据结构:
1:无缺陷
2:有缺陷-》缺陷1,缺陷2,缺陷3
3:审核不通过
把它们集成到一个平面数据,进行下拉所选就变成了:
1:无缺陷,2:审核不通过,3:缺陷一,4:缺陷二,5:缺陷三。
因为字典项是个平面的,所以在类似的大批量的情况下,有缺陷这个类如果还按照这种结构除非自己去归类。想要直接映射到下拉就要进行数据的判断。
所以需求就变成了这样:
1:下拉框可多选
2:当选中(多选后包含指定值)有 无缺陷 选项时,只能选择无缺陷的,其它的缺陷标签就不能同时出现了
3:当选中(多选或直接选择)有不符合样本 选项时,只能选择不符合样本项,其它的缺陷标签包括无缺陷标签就不能同时出现
实现思路:
1:首先做正常下拉选项,然后支持多选
2:监听选择事件@changeSelect=""select"
3:因为是数据驱动,所以只要在数据层面控制数据即可
根据不同的条件监听到当前选中的是不是包含指定不让冲突类型进行判断
代码:
<el-form-item label="缺陷标签:" prop="tag"> <el-select v-model="searchform.tag" @change="tagchange" multiple> <el-option v-for="v in opttag" :value="v.value" :label="v.label" :key="v.label"></el-option> </el-select> </el-form-item> tagchange(v){ // 限制无故障不冲突 if(v.includes('无故障')){ this.searchform.tag = [] this.searchform.tag.push('无故障') } // 限制后使组件还能正常多选其它项 if(v[0]=='无故障'){ this.searchform.tag.shift() this.searchform.tag.push(v[1]) } // 以此类推 可以添加其它 if(v.includes('审核不通过')){ this.searchform.tag = [] this.searchform.tag.push('审核不通过') } if(v[0]=='审核不通过'){ this.searchform.tag.shift() this.searchform.tag.push(v[1]) } console.log(this.searchform.tag) },
如果只是限制如果选中a项,就清空了其它已选的多个项目,那么后面再选就会被限制选择了,所以要补充,首先清空然后添加当前所选的v[1],而v[0] 永远是当前所选项,所以可以以此判断出。
同理:如果还有其它类似的条件限制,依照这种判断往后添加即可
扩展:其它模块显示中 点击按钮给图片导入此类似标签,也需要这种限制:
如果只是限制如果选中a项,就清空了其它已选的多个项目,那么后面再选就会被限制选择了,所以要补充,首先清空然后添加当前所选的v[1],而v[0] 永远是当前所选项,所以可以以此判断出。
代码判断:
// 审核 fnchosetag(item){ if(this.tagslist.includes(item)){ // this.$message('不能重复选择') }else{ this.tagslist.push(item) } if(item.value=='无缺陷'){ this.tagslist = [] this.tagslist.push(item) } if(item.value=='样本不合格'){ this.tagslist = [] this.tagslist.push(item) } if(this.tagslist[0].value=='无缺陷'){ this.tagslist = [] this.tagslist.push(item) } if(this.tagslist[0].value=='样本不合格'){ this.tagslist = [] this.tagslist.push(item) } },
判断限制的思路其实是一样的。
标签:el,vue,searchform,item,tag,push,缺陷,select,tagslist From: https://www.cnblogs.com/zbbk/p/17439980.html