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 方法