完善模型库权限与工艺数据解析

This commit is contained in:
zhangshun
2026-05-25 18:41:25 +08:00
parent 318105443a
commit a31c620420
15 changed files with 1013 additions and 123 deletions

View File

@@ -12,6 +12,10 @@ type JsTreeNode = {
text: string;
};
function isRealFolderId(id: string) {
return /^\d+$/.test(id);
}
function selectFolder(node: JsTreeNode) {
appState.selectedFolderId = Number(node.id);
appState.selectedFolderName = appState.folders.find((folder) => folder.id === Number(node.id))?.name ?? node.text;
@@ -60,7 +64,6 @@ async function runFolderAction(action: () => Promise<void>) {
}
export async function loadFolders() {
const isAdmin = getCurrentUser()?.role === "admin";
const result = await api<FolderTreeResponse>("/api/folders");
appState.folders = result.folders;
const root = appState.folders.find((folder) => folder.parent_id === null);
@@ -73,16 +76,19 @@ export async function loadFolders() {
data: result.tree,
multiple: false
},
plugins: isAdmin ? ["contextmenu"] : [],
plugins: ["contextmenu"],
contextmenu: {
items(node: JsTreeNode) {
if (!isRealFolderId(node.id)) return {};
const folderId = Number(node.id);
const folder = appState.folders.find((item) => item.id === folderId);
const isRoot = folder?.parent_id === null;
const canWrite = Boolean(folder?.permissions.write);
const isSystem = Boolean(folder?.is_system);
return {
create: {
label: "新建目录",
icon: "tree-menu-icon tree-menu-icon-add",
_disabled: !canWrite,
action: () => runFolderAction(async () => {
selectFolder(node);
await createFolder(folderId);
@@ -91,7 +97,7 @@ export async function loadFolders() {
rename: {
label: "重命名",
icon: "tree-menu-icon tree-menu-icon-edit",
_disabled: isRoot,
_disabled: !canWrite || isSystem,
action: () => runFolderAction(async () => {
selectFolder(node);
await renameFolder(folderId);
@@ -100,7 +106,7 @@ export async function loadFolders() {
remove: {
label: "删除",
icon: "tree-menu-icon tree-menu-icon-delete",
_disabled: isRoot,
_disabled: !canWrite || isSystem,
action: () => runFolderAction(async () => {
selectFolder(node);
await deleteFolder(folderId);
@@ -110,6 +116,7 @@ export async function loadFolders() {
}
}
}).on("select_node.jstree", async (_event: JQuery.Event, data: { node: { id: string; text: string } }) => {
if (!isRealFolderId(data.node.id)) return;
appState.selectedFolderId = Number(data.node.id);
appState.selectedFolderName = appState.folders.find((folder) => folder.id === appState.selectedFolderId)?.name ?? data.node.text;
appState.page = 1;