1 創(chuàng)建一個js,過濾樹形數(shù)組役耕,包含children的選項均禁用
export const filterTreeData = (treeData) => {
return treeData.filter(item => {
if (isNotEmpty(item.children)) {
item.disabled = true;
item.children = filterTreeData(item.children)
}
return item
})
}
const isNotEmpty = (arr) => {
return arr && Array.isArray(arr) && arr.length > 0;
}
2 在頁面上使用
<template>
<el-tree
class="filter-tree"
:data="treeData"
:props="defaultProps"
@check="checkChange"
node-key="name"
accordion
check-strictly
highlight-current
show-checkbox
:auto-expand-parent = "true"
:default-expanded-keys="defaultArr"
:default-checked-keys="defaultArr"
ref="tree">
</el-tree>
</template>
<script>
import {filterTreeData} from '../../../plugins/dealTree';//處理只能選擇最后一個節(jié)點(diǎn)
data() {
return {
treeData:[],
defaultProps: {
children: 'children',
label: 'name'
},//過濾使用字段
defaultArr:[]
}
}
methods: {
refreshTree() {
const vm = this;
vm.treeData = [...vm.treeData];
},
// //獲取數(shù)據(jù)
async getRuleData(){
let ruleData = [] //獲取非樹型格式的數(shù)據(jù)
this.treeData = this.listToTreeLoop(ruleData)
filterTreeData(this.treeData);
},
/** 控制樹形單選 */
checkChange(data, checked) {
if (checked) {
if (!!data.children && data.children.length>0) {
console.log("有子節(jié)點(diǎn)不可選")
}else{
this.checkedData = data;
this.ruleId = data._id
this.selectleveList = data;
//選中時需要回顯的值可在這里操作
......
this.$refs.tree.setCheckedKeys([data.name]);
this.defaultArr=[data.name]
}
}
},
//數(shù)據(jù)組裝
listToTreeLoop(data){
//數(shù)據(jù)組裝為樹型
},
}
</script>