From d8e1eb9ca328d3bbaa8b243fa30a80cab742ae8c Mon Sep 17 00:00:00 2001 From: xiaozhu <2395895331@qq.com> Date: Wed, 2 Sep 2026 16:37:43 +0800 Subject: [PATCH] =?UTF-8?q?update:=E9=83=A8=E5=88=86=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/features/admin/UserFormDialog.tsx | 99 ++++++++++++------- .../app/features/platform/PythonEditor.tsx | 3 +- .../app/features/platform/ScriptWorkspace.tsx | 3 +- frontend/app/features/platform/scriptPath.ts | 16 +++ 4 files changed, 81 insertions(+), 40 deletions(-) create mode 100644 frontend/app/features/platform/scriptPath.ts diff --git a/frontend/app/features/admin/UserFormDialog.tsx b/frontend/app/features/admin/UserFormDialog.tsx index 12ad2c3..f13ea44 100644 --- a/frontend/app/features/admin/UserFormDialog.tsx +++ b/frontend/app/features/admin/UserFormDialog.tsx @@ -1,3 +1,5 @@ +import { useMemo, useState } from "react"; +import { ChevronDown } from "lucide-react"; import type { Employee, Role, Workspace } from "../../services/api"; import { AppFormDialog, @@ -59,6 +61,18 @@ export function UserFormDialog({ onClose: () => void; onResetPassword?: () => void; }) { + const roleOptions = useMemo( + () => (editing ? roles : createRoleOptions), + [editing, roles, createRoleOptions], + ); + const [roleMenuOpen, setRoleMenuOpen] = useState(false); + const roleDisabled = editing + ? editing.user_id === currentUserId || roles.length === 0 + : createRoleOptions.length === 0; + const selectedRole = + roleOptions.find((role) => role.role_code === form.role_code) ?? + roleOptions[0]; + return ( {!editing && ( Workspace Python Editor - {script.relative_path} + {displayScriptPath(script.relative_path)}

- {script.relative_path} + {displayScriptPath(script.relative_path)}