import { useState } from "react"; import { Button, Form, Input, Message, Modal, Space, Table, Tag } from "@arco-design/web-react"; import { IconPlus } from "@arco-design/web-react/icon"; import { roleApi } from "../api"; import { usePageData } from "../hooks/usePageData"; import { Panel } from "../components/Panel"; import { PermissionTreePicker } from "./components/PermissionTreePicker"; import type { CreateRoleFormValues, Permission, Role } from "./interface"; function RolesPage() { const { data, loading, reload, changePage } = usePageData(roleApi.listRoles, { page: 1, pageSize: 20 }); const permissions = usePageData(roleApi.listPermissions, { page: 1, pageSize: 20 }); const [createForm] = Form.useForm(); const [createVisible, setCreateVisible] = useState(false); const [creatingRole, setCreatingRole] = useState(false); const [createPermissionIds, setCreatePermissionIds] = useState([]); const [assignmentVisible, setAssignmentVisible] = useState(false); const [selectedRole, setSelectedRole] = useState(null); const [selectedPermissionIds, setSelectedPermissionIds] = useState([]); const [savingPermissions, setSavingPermissions] = useState(false); const openCreateRole = () => { createForm.resetFields(); setCreatePermissionIds([]); setCreateVisible(true); }; const createRole = async (values: CreateRoleFormValues) => { setCreatingRole(true); try { await roleApi.createRole({ ...values, permissionIds: createPermissionIds, }); Message.success("角色创建成功"); setCreateVisible(false); await reload(); } finally { setCreatingRole(false); } }; const openAssignPermissions = (role: Role) => { setSelectedRole(role); setSelectedPermissionIds(role.permissions.map((permission) => permission.id)); setAssignmentVisible(true); }; const saveRolePermissions = async () => { if (!selectedRole) { return; } setSavingPermissions(true); try { await roleApi.updateRolePermissions(selectedRole.id, selectedPermissionIds); Message.success("角色权限已更新"); setAssignmentVisible(false); await reload(); } finally { setSavingPermissions(false); } }; return (
} onClick={openCreateRole}> 新增角色 } noPadding > ( {record.permissions.map((item) => ( {item.name} ))} ), }, { title: "操作", width: 140, render: (_, record: Role) => ( ), }, ]} /> setCreateVisible(false)} footer={null} style={{ width: "40rem" }}>
角色的唯一标识,创建后不可修改
权限设置
为角色分配系统权限,决定拥有此角色的用户可以进行的操作
setAssignmentVisible(false)} style={{ width: "40rem" }} > ); } export default RolesPage;