feat: 优化 SelectFolder 组件,支持为 node 节点自定义返回数据

This commit is contained in:
Frankie Huang 2025-04-13 20:25:45 +08:00
parent 2b6a4b019c
commit 3ae8a65f70
2 changed files with 25 additions and 8 deletions

View File

@ -104,6 +104,15 @@ function changeRootPath(newRootPath) {
localStorage.setItem('rootPathOfFolderTree', newRootPath) localStorage.setItem('rootPathOfFolderTree', newRootPath)
rootPathOfFolderTree.value = newRootPath rootPathOfFolderTree.value = newRootPath
} }
// <SelectFolder> 便 <FolderTree>
function appendDataForNode(nodeData) {
if (!nodeData.directory) {
// suffix 便 <FolderTree>
let splitResult = nodeData.name.split('.');
let fileSuffix = splitResult.length > 1 ? splitResult.pop() : '';
nodeData.suffix = fileSuffix;
}
}
// <SelectFolder> folderTreeData <FolderTree> // <SelectFolder> folderTreeData <FolderTree>
const folderTreeData = ref(null) const folderTreeData = ref(null)
@ -158,7 +167,8 @@ onUnmounted(() => {
<template #left> <template #left>
<div class="split-left"> <div class="split-left">
<SelectFolder :class="hiddenSplitRight" :rootPath="rootPathOfFolderTree" <SelectFolder :class="hiddenSplitRight" :rootPath="rootPathOfFolderTree"
@update:rootPath="changeRootPath" @folder-selected="showFileTree" /> :nodeDataCallback="appendDataForNode" @update:rootPath="changeRootPath"
@folder-selected="showFileTree" />
<FolderTree :class="hiddenSplitRight" :treeData="folderTreeData" :expandLevel="1" <FolderTree :class="hiddenSplitRight" :treeData="folderTreeData" :expandLevel="1"
:selectedNode="[currentFilePath]" :specifyFileSuffix="['md']" @file-selected="fileSelected" /> :selectedNode="[currentFilePath]" :specifyFileSuffix="['md']" @file-selected="fileSelected" />
</div> </div>

View File

@ -15,7 +15,6 @@
{ {
"path": "root-path/root/folder1/folder1-file2", "path": "root-path/root/folder1/folder1-file2",
"name": "folder1-file2.txt.md", "name": "folder1-file2.txt.md",
"suffix": "md",
"directory": false, "directory": false,
}, },
] ]
@ -23,7 +22,6 @@
{ {
"path": "root-path/root/file3", "path": "root-path/root/file3",
"name": "file3.txt", "name": "file3.txt",
"suffix": "txt",
"directory": false, "directory": false,
}, },
] ]
@ -45,6 +43,15 @@ export default {
required: false, required: false,
default: '' default: ''
}, },
// node
nodeDataCallback: {
type: Function,
required: false,
default: (node) => {
// node
return;
}
},
}, },
mounted() { mounted() {
// //
@ -79,6 +86,7 @@ export default {
"nodes": [], "nodes": [],
"directory": true, "directory": true,
} }
this.nodeDataCallback(folderTreeNode);
// folderPath // folderPath
let entries; let entries;
@ -104,14 +112,13 @@ export default {
if (entry.isDirectory) { if (entry.isDirectory) {
folderTreeNode.nodes.push(await this.readDirRecursively(entryPath)) folderTreeNode.nodes.push(await this.readDirRecursively(entryPath))
} else { } else {
let splitResult = entry.name.split('.') let subTreeNode = {
let fileSuffix = splitResult.length > 1 ? splitResult.pop() : ''
folderTreeNode.nodes.push({
"path": entryPath, "path": entryPath,
"name": entry.name, "name": entry.name,
"suffix": fileSuffix,
"directory": false, "directory": false,
}) }
this.nodeDataCallback(subTreeNode)
folderTreeNode.nodes.push(subTreeNode)
} }
} }
return folderTreeNode return folderTreeNode