feat: workspace 目录树服务端懒加载

- api.ts: listWorkspaceDirectories 支持 parent_path 查询; WorkspaceDirectory 增加 has_children; 同步 WorkspaceBoundApi 签名
- AuthContext: 绑定透传 parentPath
- scriptWorkspaceStore: 新增 expandedPaths/loadingChildrenPaths/loadedChildPaths, loadChildren/toggleExpanded, 局部刷新 createFolder/deleteDirectory
- WorkspaceTree: 移除 useState, 改为受控展开/加载状态
- ScriptExplorer: 从 store 读取并透传展开状态与 toggle
This commit is contained in:
tao.chen
2026-08-12 18:06:35 +08:00
parent a09551bd3c
commit c6c2481b96
5 changed files with 160 additions and 13 deletions
+9 -4
View File
@@ -191,6 +191,7 @@ export type WorkspaceDirectory = {
path: string;
name: string;
parent_path: string;
has_children?: boolean;
};
type ApiEnvelope<T> = {
@@ -443,9 +444,13 @@ export async function deleteScript(
export async function listWorkspaceDirectories(
workspaceId: string,
parentPath: string = "",
): Promise<WorkspaceDirectory[]> {
const query = parentPath
? `?parent_path=${encodeURIComponent(parentPath)}`
: "";
const data = await apiRequest<{ directories: WorkspaceDirectory[] }>(
"/api/v1/workspace-tree",
`/api/v1/workspace-directories${query}`,
{},
workspaceId,
);
@@ -1325,9 +1330,9 @@ export type WorkspaceBoundApi = {
setScriptLock: (
scriptId: string,
isLocked: boolean,
) => Promise<ScriptItem>;
listWorkspaceDirectories: () => Promise<WorkspaceDirectory[]>;
createWorkspaceDirectory: (
) => Promise<ScriptItem>;
listWorkspaceDirectories: (parentPath?: string) => Promise<WorkspaceDirectory[]>;
createWorkspaceDirectory: (
directoryName: string,
parentPath?: string,
) => Promise<WorkspaceDirectory>;