feat: 优化 SelectFolder 组件,支持为 node 节点自定义返回数据
This commit is contained in:
parent
2b6a4b019c
commit
3ae8a65f70
12
src/App.vue
12
src/App.vue
@ -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>
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user