import { Button, Form, Input, Modal, Popconfirm, Space, Table, Tag, Select } from "antd"; import { useEffect, useMemo, useState } from "react"; import { createRole, deleteRole, listRoles, updateRole } from "../api"; import type { SysRole } from "../types"; import { usePermission } from "../hooks/usePermission"; export default function Roles() { const [loading, setLoading] = useState(false); const [data, setData] = useState([]); const [query, setQuery] = useState({ roleCode: "", roleName: "" }); const [pagination, setPagination] = useState({ current: 1, pageSize: 10 }); const [open, setOpen] = useState(false); const [editing, setEditing] = useState(null); const [form] = Form.useForm(); const { can } = usePermission(); const load = async () => { setLoading(true); try { const list = await listRoles(); setData(list || []); } finally { setLoading(false); } }; useEffect(() => { load(); }, []); const filtered = useMemo(() => { return data.filter((r) => { const hitCode = query.roleCode ? r.roleCode?.includes(query.roleCode) : true; const hitName = query.roleName ? r.roleName?.includes(query.roleName) : true; return hitCode && hitName; }); }, [data, query]); const pageData = useMemo(() => { const start = (pagination.current - 1) * pagination.pageSize; return filtered.slice(start, start + pagination.pageSize); }, [filtered, pagination]); const openCreate = () => { setEditing(null); form.resetFields(); setOpen(true); }; const openEdit = (record: SysRole) => { setEditing(record); form.setFieldsValue(record); setOpen(true); }; const submit = async () => { const values = await form.validateFields(); const payload: Partial = { roleCode: values.roleCode, roleName: values.roleName, remark: values.remark, status: values.status }; if (editing) { await updateRole(editing.roleId, payload); } else { await createRole(payload); } setOpen(false); load(); }; const remove = async (id: number) => { await deleteRole(id); load(); }; return (
setQuery({ ...query, roleCode: e.target.value })} /> setQuery({ ...query, roleName: e.target.value })} /> {can("sys_role:create") && ( )} setPagination({ current, pageSize }) }} columns={[ { title: "ID", dataIndex: "roleId" }, { title: "编码", dataIndex: "roleCode" }, { title: "名称", dataIndex: "roleName" }, { title: "备注", dataIndex: "remark" }, { title: "状态", dataIndex: "status", render: (v) => (v === 1 ? 启用 : 禁用) }, { title: "操作", render: (_, record) => ( {can("sys_role:update") && } {can("sys_role:delete") && ( remove(record.roleId)}> )} ) } ]} /> setOpen(false)} destroyOnClose >