import { useEffect, useState } from "react"; import type { PlatformPermission, Role } from "../../services/api"; import { AppFormDialog, dialogPrimaryButtonClass, dialogSecondaryButtonClass, } from "~/components/common/AppFormDialog"; import { Button } from "~/components/ui/button"; import { modalFormClass } from "../platform/modalUi"; import { PermissionCheckboxList } from "./PermissionCheckboxList"; export function PermissionEditDialog({ open, target, permissions, currentCodes, saving, onSubmit, onClose, }: { open: boolean; target: Role | null; permissions: PlatformPermission[]; currentCodes: string[]; saving: boolean; onSubmit: (codes: string[]) => void; onClose: () => void; }) { const [selectedCodes, setSelectedCodes] = useState(() => { if (!open || !target) return []; const initial = [...currentCodes]; if (target.role_code === "admin" && !initial.includes("system:view")) { initial.push("system:view"); } return initial; }); useEffect(() => { const initial = [...currentCodes]; if (target?.role_code === "admin" && !initial.includes("system:view")) { initial.push("system:view"); } setSelectedCodes(initial); }, [open, target, currentCodes]); const togglePermission = (code: string): void => { if (!target) return; const locked = target.role_code === "admin" ? code === "system:view" : code.startsWith("system:"); if (locked) return; setSelectedCodes((current) => current.includes(code) ? current.filter((item) => item !== code) : [...current, code], ); }; return ( { if (!nextOpen) onClose(); }} eyebrow="PERMISSIONS" title={target ? `权限配置 · ${target.role_name}` : "权限配置"} footer={ <> } >
{target?.role_code === "admin" && (

admin 角色必须保留 system:view 权限。

)} {target ? ( ) : null}
); }