1. element ui 级联选择器动态加载子菜单,使用多选并且关联父子节点时无法返回选中节点的正确实现
<template>
<div>
<div class="df jsw mtb10 top-box">
<div class="rightBox">
<el-cascader
v-model="selected.cascader"
:props="cascaderProps"
@change="standChange"
placeholder="全部变电站"
size="small"
collapse-tags
></el-cascader>
<div>
</div>
</template>
<script>
import { getSubControlAreaList } from '@/api/zts-gis/subControlArea'
import { getSubstationList } from '@/api/zts-gis/substation'
import { getMeasurementList } from '@/api/zts-gis/measurement'
export default {
data() {
return {
// 级联选择器
cascaderProps: {
lazy: true,
multiple: true,
maxLevel: this.maxLevel,
// checkStrictly: true,
lazyLoad (node, resolve) {
const { level } = node;
// console.log("node", node)
// console.log("resolve", resolve)
if( level == 0 ){
getSubControlAreaList().then((response) => {
console.log("所有片区", response)
if(response.code == 0 ){
let area = response.data.map((v) => {
// console.log(1684, level, this.maxLevel, level >= this.maxLevel-1)
if(level >= this.maxLevel-1) {
return {
value: v.id,
label: v.name,
leaf: true
}
}else{
return {
value: v.id,
label: v.name
}
}
})
resolve(area);
}
})
}else if( level == 1 ){
if(level >= this.maxLevel-2){
resolve([]);
}
let id = node.value
getSubstationList({ areaId: id }).then((response) => {
console.log("所有厂站", response)
if(response.code == 0 ){
let area = response.data.map((v) => {
if(level >= this.maxLevel-1) {
return {
value: v.id,
label: v.name,
leaf: true
}
}else{
// 为每一个节点添加一个不显示的叶子节点,使没有加载到最后一个选项时前面的选项可选中
return {
value: v.id,
label: v.name,
children: [
{
value: null,
label: null,
leaf: true
}
]
}
}
})
// node.data.children = area
resolve(area);
}
})
}else if( level == 2 ){
if(level >= this.maxLevel-2){
resolve([]);
}
// 因为前面在父节点的子节点添加了一个空children, 在此删除父节点的children
node.children = []
let id = node.value getMeasurementList({ substationId: id }).then((response) => { console.log("所有变电站", response) if(response.code == 0 ){ let area = response.data.map((v) => { return { value: v.equipment, label: v.name, leaf: true // 表示所有层级的最后一层 } }) // node.data.children = area resolve(area); } }) }else{ resolve([]); } } }, } } } </script> <style lang="scss" scoped> </style>
若不指定节点的结束层,会无法绑定值到变量中,且不会触发 change 方法
