<template>
<div style="margin: 50px;">
<div v-for="(v,i) in arrList" :key="i">
<el-checkbox-group v-model="arrList[i].label" >
<el-checkbox v-for="(item, index) in data" :key="index" :label="item.label" @change="changeCheck($event,item.label,i)">
<div style="margin-bottom: 10px;">{{ item.label }}</div>
</el-checkbox>
</el-checkbox-group>
</div>
<el-button @click="add">添加</el-button>
</div>
</template>
<script>
export default {
data() {
return {
arrList:[
{
label:['不限']
}
],
data: [
{label: '不限'},
{label: '一级'},
{label: '二级'},
{label: '三级',}
],
}
},
methods: {
changeCheck(e,val,ind) {
if(e) {
if(val === '不限') {
this.arrList[ind].label = ['不限'];
}else {
const index = this.arrList[ind].label.findIndex(item => item === '不限');
if(index > -1) {
this.arrList[ind].label.splice(index,1);
}
}
if(this.arrList[ind].label.length>1) {
this.arrList[ind].label.shift()
}
}
},
add(){
let obj = {label:[ '不限']}
this.arrList.push(obj)
}
}
}
</script>
<template>
<div style="margin: 50px;">
<div v-for="(v,i) in arrList" :key="i">
<el-checkbox-group v-model="arrList[i]">
<el-checkbox
v-for="(item) in data"
:key="item.id"
:label="item.id"
:disabled="computedDisable(item.id,i)"
@change="changeCheck(item.id,i)"
>
<div style="margin-bottom: 10px;">{{ item.label }}</div>
</el-checkbox>
</el-checkbox-group>
</div>
<el-button @click="add">添加</el-button>
</div>
</template>
<script>
export default {
data() {
return {
arrList: [
[0]
],
data: [
{ label: '不限' },
{ label: '一级' },
{ label: '二级' },
{ label: '三级' }
]
}
},
created() {
this.data = this.data.map((e, i) => {
return { ...e, ...{
disable: false,
id: i
}}
})
},
methods: {
computedDisable(id, i) {
if (this.arrList[i].includes(id)) {
return false
}
return !!this.arrList.flat().includes(id)
},
add() {
this.arrList.push([])
}
}
}
</script>
个人习惯不喜欢用中文做id,可以根据你需要改动
disable
重新定义一个数组,点击添加的时候,push上一组选中的index,用这个数组给下一组设置disable