From c7013a030ef8d782a86f1203a8aa0ead09e13beb Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Sat, 7 Jun 2025 12:54:50 +0800 Subject: [PATCH] feat: treeToString --- packages/@core/base/shared/src/utils/tree.ts | 46 +++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/packages/@core/base/shared/src/utils/tree.ts b/packages/@core/base/shared/src/utils/tree.ts index ca2a6765b..468d204f7 100644 --- a/packages/@core/base/shared/src/utils/tree.ts +++ b/packages/@core/base/shared/src/utils/tree.ts @@ -164,4 +164,48 @@ function handleTree( return tree; } -export { filterTree, handleTree, mapTree, traverseTreeValues }; +/** + * 获取节点的完整结构 + * @param tree 树数据 + * @param nodeId 节点 id + */ +function treeToString(tree: any[], nodeId: number | string) { + if (tree === undefined || !Array.isArray(tree) || tree.length === 0) { + console.warn('tree must be an array'); + return ''; + } + // 校验是否是一级节点 + const node = tree.find((item) => item.id === nodeId); + if (node !== undefined) { + return node.name; + } + let str = ''; + + function performAThoroughValidation(arr: any[]) { + if (arr === undefined || !Array.isArray(arr) || arr.length === 0) { + return false; + } + for (const item of arr) { + if (item.id === nodeId) { + str += ` / ${item.name}`; + return true; + } else if (item.children !== undefined && item.children.length > 0) { + str += ` / ${item.name}`; + if (performAThoroughValidation(item.children)) { + return true; + } + } + } + return false; + } + + for (const item of tree) { + str = `${item.name}`; + if (performAThoroughValidation(item.children)) { + break; + } + } + return str; +} + +export { filterTree, handleTree, mapTree, traverseTreeValues, treeToString };