From 944d176240ce0f4167192302fc325cd330477cab Mon Sep 17 00:00:00 2001 From: siujamo Date: Mon, 29 Dec 2025 14:20:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/role/index.ts | 4 + src/components/role-display-form/index.tsx | 4 +- src/page/role/index.tsx | 112 ++++++++++++++------- 3 files changed, 81 insertions(+), 39 deletions(-) diff --git a/src/api/role/index.ts b/src/api/role/index.ts index 2cf1138..67d58a8 100644 --- a/src/api/role/index.ts +++ b/src/api/role/index.ts @@ -33,3 +33,7 @@ export async function addRole(request: RoleFormValues) { export async function editRole(request: RoleFormValues) { return await webClient.put("/roles", request) } + +export async function deleteRole(id: number | string) { + return await webClient.delete(`/roles/${id}`) +} diff --git a/src/components/role-display-form/index.tsx b/src/components/role-display-form/index.tsx index 498acb5..97837a0 100644 --- a/src/components/role-display-form/index.tsx +++ b/src/components/role-display-form/index.tsx @@ -69,10 +69,10 @@ export default function RoleDisplayForm({ initialValues, form, mode }: RoleDispl { required: true, message: "排序不能为空" }, { type: "number", min: 0, max: Number.MAX_VALUE, message: "排序必须是正数" }, ]}> - + label="是否为默认角色" name="defaultValue"> - + label="角色状态" name="status"> options={StatusOptions} /> diff --git a/src/page/role/index.tsx b/src/page/role/index.tsx index 00d02b2..408d49e 100644 --- a/src/page/role/index.tsx +++ b/src/page/role/index.tsx @@ -18,9 +18,6 @@ import type { Status } from "@/types/constant" import AddRoleDialogue from "@/components/add-role-dialogue" import type { RoleFormValues } from "@/components/role-display-form" import EditRoleDialogue from "@/components/edit-role-dialogue" -import { addRole } from "@/api/role" -import type { AntFormValidationError } from "@/types/antd" -import { AntUtils } from "@/utils" export default function RolePage() { const { message, modal } = App.useApp() @@ -32,6 +29,8 @@ export default function RolePage() { const [pageNum, setPageNum] = useState(1) const [pageSize, setPageSize] = useState(10) const [totalElementCount, setTotalElementCount] = useState(0) + const [isLastPage, setIsLastPage] = useState(false) + const [isFirstPage, setIsFirstPage] = useState(false) const queryRoles = (pageNum: number, pageSize: number, queryRoleForm: QueryRoleForm | null) => { const queryRoleRequest: QueryRoleRequest = { @@ -44,11 +43,12 @@ export default function RolePage() { RoleApi.fetchRoles(queryRoleRequest) .then((response) => { - // console.log("role response", response) setPageNum(response.pageable.pageNumber + 1) setPageSize(response.pageable.pageSize) setTotalElementCount(response.totalElements) setRoles(response.content.sort((role1, role2) => role1.sort - role2.sort)) + setIsLastPage(response.last) + setIsFirstPage(response.first) }) .catch((error) => { const err = error as AxiosError @@ -64,26 +64,24 @@ export default function RolePage() { } const onAddRoleFinish = async () => { - addRoleForm - .validateFields() - .then(async (values) => { - try { - await RoleApi.addRole(values) - void message.success(`角色 ${values.name} 创建成功`) - } catch (error: unknown) { - if (axios.isAxiosError(error)) { - void message.error(error.response?.data.message ?? "创建失败,请稍后再试") - } else if (error instanceof Error) { - void message.error(error.message) - } else { - void message.error("发生未知错误,新增角色信息失败。") - } - return false - } - }) - .catch((error: AntFormValidationError) => { - void message.error(`角色信息检验失败:${AntUtils.getFieldErrorMessage(error)}`) - }) + try { + const values = await addRoleForm.validateFields() + console.log(values) + await RoleApi.addRole(values) + void message.success(`角色 ${values.name} 创建成功`) + return true + } catch (error: unknown) { + if (axios.isAxiosError(error)) { + // 处理 Axios 请求错误 + const serverMsg = error.response?.data?.message + void message.error(serverMsg ?? "服务异常,请稍后再试") + } else { + // 处理其他预期外的错误(如代码逻辑 Bug) + console.error("未知错误:", error) + void message.error("发生系统错误,请联系管理员") + } + return false + } } const handleAddRole = () => { @@ -96,12 +94,10 @@ export default function RolePage() { }) .then( () => { - addRoleForm.resetFields() const formValues = queryForm.getFieldsValue() queryRoles(pageNum, pageSize, formValues) }, () => { - addRoleForm.resetFields() console.error("用户取消添加角色") } ) @@ -111,16 +107,22 @@ export default function RolePage() { } const onEditRoleFinish = async () => { - editRoleForm - .validateFields() - .then(async (values) => { - // console.log(values) - await RoleApi.editRole(values) - void message.success(`角色 ${values.name} 修改成功`) - }) - .catch((error: AntFormValidationError) => { - void message.error(`角色信息检验失败:${AntUtils.getFieldErrorMessage(error)}`) - }) + try { + const values = await editRoleForm.validateFields() + console.log(values) + await RoleApi.editRole(values) + void message.success(`角色 ${values.name} 更新成功`) + return true + } catch (error: unknown) { + if (axios.isAxiosError(error)) { + const serverMsg = error.response?.data?.message + void message.error(serverMsg ?? "后端服务异常,请稍后再试") + } else { + console.error("未知错误:", error) + void message.error("发生系统错误,请联系管理员") + } + return false + } } const handleEditRole = (role: Role) => { @@ -145,6 +147,42 @@ export default function RolePage() { }) } + const onDeleteRoleFinish = async (role: Role) => { + try { + await RoleApi.deleteRole(role.id) + void message.info(`角色 ${role.name} 删除成功`) + + // Refresh roles + if (roles.length == 1 && isLastPage && !isFirstPage) { + setPageNum(pageNum - 1) + } else { + // Execute refresh manually + const searchParams = queryForm.getFieldsValue() + queryRoles(pageNum, pageSize, searchParams) + } + + return true + } catch (error: unknown) { + if (axios.isAxiosError(error)) { + const serverMsg = error.response?.data?.message + void message.error(serverMsg ?? "服务异常,请稍后再试") + } else { + console.error("未知错误:", error) + void message.error("发生系统错误,请联系管理员") + } + return false + } + } + + const handleDeleteRole = async (role: Role) => { + modal + .confirm({ + title: "删除角色确认", + content: <>删除角色会同步解除该角色与用户的绑定关系,确定要删除吗?, + onOk: () => onDeleteRoleFinish(role), + }) + } + useEffect(() => { queryRoles(pageNum, pageSize, null) }, [pageNum, pageSize]) @@ -246,7 +284,7 @@ export default function RolePage() { -