From e4b5fab2fadd92a2965fbf569bc7fd0fdf827696 Mon Sep 17 00:00:00 2001 From: Frankie Huang Date: Sun, 13 Apr 2025 20:37:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20FolderTree=20?= =?UTF-8?q?=E5=B1=82=E7=BA=A7=E5=B1=95=E5=BC=80=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/FolderTree.vue | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/FolderTree.vue b/src/components/FolderTree.vue index dae43b3..8088b65 100644 --- a/src/components/FolderTree.vue +++ b/src/components/FolderTree.vue @@ -27,6 +27,7 @@ export default { required: false, default: [], }, + // 文件树展开层级。-1 表示全部展开,0 表示不展开,1 表示仅展开一层 expandLevel: { type: Number, required: false, @@ -57,10 +58,12 @@ export default { }, }, methods: { + // 以 treeData 为源数据,渲染文件树 renderTreeByTreeData(currentTreeData) { - const renderNode = this.renderNodeByNodeData(currentTreeData, 1) + const renderNode = this.renderNodeByNodeData(currentTreeData, 0) this.treeRenderData = renderNode == null ? [] : [renderNode] }, + // 渲染文件树节点。level 表示 nodeData 在文件树的层级(从 0 开始计数) renderNodeByNodeData(nodeData, level) { // 判断必须包含的字段,没有则返回 null if (nodeData == null || nodeData == undefined) { @@ -85,14 +88,15 @@ export default { } } - let allowExpand = this.expandLevel < 0 || level <= this.expandLevel + let allowExpand = this.expandLevel < 0 || level < this.expandLevel let nodeRenderData = { title: nodeData.name, directory: nodeData.directory, expand: (allowExpand && nodeData.directory) ? true : false, + selected: this.selectedNode.includes(nodeData.path), // 附带数据,不直接参与渲染 path: nodeData.path, - selected: this.selectedNode.includes(nodeData.path), + level: level, } if (nodeData.directory) { let childrenRenderData = [] @@ -143,7 +147,7 @@ export default { // 向父组件暴露当前选中的文件 this.$emit('file-selected', nodeData); - } + }, } }