elementui获取所有树节点_element-ui tree获取子节点全选的父节点信息
公司服務升級確定了新的架構,假如當前部門是二級部門,二級部門下的三級部門全部已選擇,那么后端接口要求只需要傳二級部門的id,并且操作符傳參為 like;如果某一個部門已選擇,切父級部門沒有選擇,那么就需要傳參為具體子部門的id,操作符為 in
① 只要所選部門中包含一個或一個以上的父級部門(父級部門標識 isParent 為true),
傳參:將屬于該父級部門中的子級部門全部去除,并保留該父級部門
操作符: like
② 只要所選部門中不包含任何一個父級部門(父級部門標識 isParent 為true),
傳參: 所有已選部門的id
操作符: in
這個之前我翻了好多的elementUI tree的文檔,都沒有找到合適的解決方案,上次看到了一個解決方法,但是對性能不是很好,所以我優化了一下
思路: 可以使用 getCheckedNodes() 獲取到所有已選的數據(包括所有的父子部門),根據父部門的特點isParent === true 來去除所有的父級部門,并且樹綁定的treePos,是有特殊規律的,根據當前樹的層級來的
解決方案一:
let treeNodes = this.$refs.tree.getCheckedNodes()
let treeKeys = this.$refs.tree.getCheckedKeys()
this.checkPos = []
this.operatorType = this.scope.dataScope.operatorType || 'like'
let parentNodes = treeNodes.filter((item) => {
return item.isParent === true
})
if (parentNodes.length !== 0) {
let parentPos = parentNodes.map(it => {
return it.treePos
})
this.operatorType = 'like'
this.checkPos = treeKeys.filter(elem => {
let isBottom = parentPos.every((el) => {
return elem.includes(el) && elem !== el
})
if (!isBottom) {
return elem
}
})
} else {
this.operatorType = 'in'
this.checkPos = treeKeys
}
解決方案二:循環遍歷樹結構,找到上一級或者最后一級已選中的data
findParents(store) {
const checkedNodes = [];
const filterNodes = function(node) {
const treeNodes = node.root ? node.root.childNodes : node.childNodes;
treeNodes.forEach(child => {
if (child.checked) { // 已找到選中的上一級或者當前最后一級
checkedNodes.push(child);
}
if (child.indeterminate) { // 節點的子樹中是否有被選中的節點
filterNodes(child);
}
});
};
filterNodes(store)
return checkedNodes;
}
findParents(this.$refs.tree.store) // 輸出樹數據
總結
以上是生活随笔為你收集整理的elementui获取所有树节点_element-ui tree获取子节点全选的父节点信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四大银行金条价格是多少?超全汇总!
- 下一篇: hashmap 遍历_别慌,送你21 个