feat: 树状视图路径压缩 - 单子节点文件夹自动合并

文件夹只有 1 个子节点时合并名称, 避免不必要的层级展开:
- a:b:c:d (单个 key) 直接显示为 a:b:c:d 而非 4 层嵌套
- a:b:c + a:b:d 仍展开为 a > b > {c, d} (b 有 2 个子节点)
- a:b:c + a:d:e 显示为 a > {b:c, d:e} (b/d 各 1 子节点, 合并)
This commit is contained in:
2026-07-11 15:35:06 +08:00
parent 4305773f0d
commit ccb91731fc
+21 -1
View File
@@ -452,7 +452,27 @@ const treeData = computed<TreeNode[]>(() => {
updateCounts(node) updateCounts(node)
} }
return root // Compress: merge folders that have exactly 1 child into a single node
// e.g. a > b > c (single key "a:b:c") becomes one leaf "a:b:c"
function compress(nodes: TreeNode[]): TreeNode[] {
return nodes.map(node => {
if (node.isLeaf) return node
const children = compress(node.children)
if (children.length === 1) {
const child = children[0]
return {
name: node.name + separator + child.name,
fullPath: child.fullPath,
isLeaf: child.isLeaf,
children: child.children,
count: child.count,
}
}
return { ...node, children }
})
}
return compress(root)
}) })
function isFolderExpanded(path: string): boolean { function isFolderExpanded(path: string): boolean {