element-ui級(jí)聯(lián)選擇器為多選(multiple:true,emitPath:false,checkStrictly:false)
核心在于值改變后格嘁,檢查全選子集,push對(duì)應(yīng)上級(jí)菜單
選中
5824CFA3-3FEA-4c99-9FD8-A1F6207C54BC.png
返回
46490484-D559-4a76-9F2E-8D1437695093.png
<div class="block">
<el-cascader
:options="options"
:props="props"
@change="cascaderChange"
v-model="cascaderData"
clearable></el-cascader>
</div>
<script>
export default {
data() {
return {
cascaderData:[],
props: { multiple:true,emitPath:false,checkStrictly:false },
options: [{
value: '1',
label: '東南',
children: [{
value: '2',
label: '上海',
children: [
{ value: '3', label: '普陀' },
{ value: '4', label: '黃埔' },
{ value: '5', label: '徐匯' }
]
}, {
value: '7',
label: '江蘇',
children: [
{ value: '8', label: '南京' },
{ value: '9', label: '蘇州' },
{ value: '10', label: '無(wú)錫' }
]
}, {
value: '12',
label: '浙江',
children: [
{ value: '13', label: '杭州' },
{ value: '14', label: '寧波' },
{ value: '15', label: '嘉興' }
]
}]
}, {
value: '17',
label: '西北',
children: [{
value: '18',
label: '陜西',
children: [
{ value: '19', label: '西安' },
{ value: '20', label: '延安' }
]
}, {
value: '21',
label: '新疆維吾爾自治區(qū)',
children: [
{ value: '22', label: '烏魯木齊' },
{ value: '23', label: '克拉瑪依' }
]
}]
}]
};
},
methods: {
cascaderChange(val){
if (val && val.length > 0) {
//賦值
let ob = {};
//recursive處理ob數(shù)據(jù)源
//參數(shù)1:ob 接收處理后的數(shù)據(jù)
//參數(shù)2:this.options el-cascader 選擇數(shù)據(jù)源
//參數(shù)3:'value' 值鍵名
//參數(shù)4:'children' 子集鍵名
//參數(shù)5:null
//參數(shù)6:null
this.recursive(ob,this.options,'value','children',null,null)
//檢測(cè)賦值
if(ob&&JSON.stringify(ob)!="{}"){
for (const key in ob) {
let len = 0
for(let j = 0 ; j < val.length ; j++){
if(ob[key].includes(val[j])){
len ++
}
}
if(ob[key].length===len){
this.cascaderData.push(key)
}
}
}
}
},
// element Cascader 級(jí)聯(lián)選擇器 數(shù)據(jù)處理
recursive(object,data,valueKey,subsetKey,last,lastData){
if(last){
object[last] = [];
}
if(data&&data.length>0){
for(let i = 0 ; i < data.length ; i++){
if(last&&!data[i][subsetKey]){
object[last].push(data[i][valueKey])
}
if(lastData&&!data[i][subsetKey]){
lastData.push(data[i][valueKey])
}
if(data[i][subsetKey]&&data[i][subsetKey].length>0){
this.recursive(object,data[i][subsetKey],valueKey,subsetKey,data[i][valueKey],object[last])
}
}
}
},
}
};
</script>