update: dir tree

This commit is contained in:
tao.chen
2026-08-14 15:02:55 +08:00
parent 4530811441
commit 65d14b8610
6 changed files with 73 additions and 21 deletions
@@ -58,6 +58,7 @@ export default function ScriptsPage() {
const uploadDataResource = useScriptWorkspaceStore((s) => s.uploadDataResource);
const createFolder = useScriptWorkspaceStore((s) => s.createFolder);
const deleteScript = useScriptWorkspaceStore((s) => s.deleteScript);
const deleteDataResource = useScriptWorkspaceStore((s) => s.deleteDataResource);
const deleteDirectory = useScriptWorkspaceStore((s) => s.deleteDirectory);
const toggleScriptLock = useScriptWorkspaceStore((s) => s.toggleScriptLock);
const openPublishDialog = useScriptWorkspaceStore((s) => s.openPublishDialog);
@@ -421,6 +422,7 @@ export default function ScriptsPage() {
onChooseUpload={(parentPath) => triggerUpload(parentPath ?? "")}
onRemoveDirectory={(p) => void deleteDirectory(p)}
onCopyResourcePath={(p) => void handleCopyResourcePath(p)}
onRemoveResource={(id) => void deleteDataResource(id)}
onClose={closeContextMenu}
/>
@@ -1,7 +1,6 @@
import { useEffect } from "react";
import {
bindScriptWorkspaceApi,
editSessionHandle,
useScriptWorkspaceStore,
} from "../state/scriptWorkspaceStore";
@@ -61,11 +60,4 @@ export function useEditSessionLifecycle({
window.addEventListener("beforeunload", handleUnload);
return () => window.removeEventListener("beforeunload", handleUnload);
}, []);
// 4) layout 卸载时解绑 api
useEffect(() => {
return () => {
bindScriptWorkspaceApi(null);
};
}, []);
}
@@ -118,6 +118,7 @@ type State = {
}) => Promise<ResourceItem | null>;
createFolder: (name: string, parentPath: string) => Promise<void>;
deleteScript: (script: ScriptItem) => Promise<void>;
deleteDataResource: (resourceId: string) => Promise<void>;
deleteDirectory: (path: string) => Promise<void>;
toggleExpanded: (path: string, loadPath?: string) => Promise<void>;
loadChildren: (parentPath: string) => Promise<void>;
@@ -856,6 +857,28 @@ export const useScriptWorkspaceStore = create<State>((set, get) => {
}
},
deleteDataResource: async (resourceId) => {
const api = requireApi();
useUiStore.getState().closeContextMenu();
if (!window.confirm(`确定删除数据资源吗?稳定版本会保留。`)) {
return;
}
try {
await api.deleteResource(resourceId);
set((state) => ({
dataResources: state.dataResources.filter(
(r) => r.resource_id !== resourceId,
),
}));
pushToast("success", "数据资源已删除");
} catch (error) {
pushToast(
"error",
error instanceof Error ? error.message : "数据资源删除失败",
);
}
},
createFolder: async (name, parentPath) => {
const api = requireApi();
const trimmed = name.trim();