需求
多个el-checkbox-group复选框组 , 组与组之间的选项是互斥的效果
效果
代码实现(方法一)
< template>
< div class = " page" >
< el-checkbox-group
v-for = " (item, index) in list"
v-model = " item.checked"
:key = " index"
@change = " checkboxChange"
>
< el-checkbox
v-for = " (jitem, jindex) in item.checkData"
:label = " jitem.label"
:key = " jindex"
:disabled = " jitem.disabled"
> {{ jitem.name }}</ el-checkbox
>
</ el-checkbox-group>
</ div>
</ template>
< script>
export default {
name : 'xxx' ,
data ( ) {
return {
list : [
{
checked : [ ] ,
checkData : [
{ label : 'name1' , name : '名称1' , disabled : false } ,
{ label : 'name2' , name : '名称2' , disabled : false } ,
{ label : 'name3' , name : '名称3' , disabled : false }
]
} ,
{
checked : [ ] ,
checkData : [
{ label : 'name1' , name : '名称1' , disabled : false } ,
{ label : 'name4' , name : '名称4' , disabled : false } ,
{ label : 'name3' , name : '名称3' , disabled : false }
]
} ,
{
checked : [ ] ,
checkData : [
{ label : 'name1' , name : '名称1' , disabled : false } ,
{ label : 'name4' , name : '名称4' , disabled : false } ,
{ label : 'name3' , name : '名称3' , disabled : false }
]
} ,
{
checked : [ ] ,
checkData : [
{ label : 'name5' , name : '名称5' , disabled : false } ,
{ label : 'name1' , name : '名称1' , disabled : false } ,
{ label : 'name3' , name : '名称3' , disabled : false }
]
}
]
}
} ,
methods : {
checkboxChange ( ) {
let checkedAll = [ ]
this . list. forEach ( item => {
item. checkData. forEach ( jitem => {
jitem. disabled = false
} )
item. checked. forEach ( kitem => {
checkedAll. push ( kitem)
} )
} )
checkedAll = Array. from ( new Set ( checkedAll) )
this . list. forEach ( item => {
item. checkData. forEach ( jitem => {
if ( checkedAll. includes ( jitem. label) && ! item. checked. includes ( jitem. label) ) {
jitem. disabled = true
}
} )
} )
}
}
}
< / script>
代码实现(方法二)
< template>
< div class = " page" >
< el-form>
< el-form-item v-for = " (item, index) in list" :label = " ' 复选框组' + (index + 1)" :key = " index" >
< el-checkbox-group v-model = " item.checked" >
< el-checkbox
v-for = " (jitem, jindex) in item.checkData"
:label = " jitem.label"
:key = " jindex"
:disabled = " setDisabledMuti(jitem, index)"
> {{ jitem.name }}</ el-checkbox>
</ el-checkbox-group>
</ el-form-item>
</ el-form>
</ div>
</ template>
< script>
export default {
name : 'xxx' ,
data ( ) {
return {
checkedAll : [ ] ,
list : [
{
checked : [ 'name1' ] ,
checkData : [
{ label : 'name1' , name : '名称1' } ,
{ label : 'name2' , name : '名称2' } ,
{ label : 'name3' , name : '名称3' }
]
} ,
{
checked : [ 'name4' ] ,
checkData : [
{ label : 'name1' , name : '名称1' } ,
{ label : 'name4' , name : '名称4' } ,
{ label : 'name3' , name : '名称3' }
]
} ,
{
checked : [ 'name3' ] ,
checkData : [
{ label : 'name1' , name : '名称1' } ,
{ label : 'name4' , name : '名称4' } ,
{ label : 'name3' , name : '名称3' }
]
} ,
{
checked : [ 'name5' ] ,
checkData : [
{ label : 'name5' , name : '名称5' } ,
{ label : 'name1' , name : '名称1' } ,
{ label : 'name3' , name : '名称3' }
]
}
]
}
} ,
computed : {
setDisabledMuti ( ) {
return function ( opt, index ) {
const tempArr = this . list. map ( item => item. checked)
tempArr. splice ( index, 1 )
const selectedArr = tempArr. flat ( ) ;
return selectedArr. includes ( opt. label)
}
}
}
}
< / script>