diff --git a/src/page/role/index.tsx b/src/page/role/index.tsx index f896c35..00d02b2 100644 --- a/src/page/role/index.tsx +++ b/src/page/role/index.tsx @@ -19,6 +19,8 @@ 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() @@ -62,19 +64,26 @@ export default function RolePage() { } const onAddRoleFinish = async () => { - try { - const values = await addRoleForm.validateFields() - await RoleApi.addRole(values) - void message.success(`角色 ${values.name} 创建成功`) - return true - } catch (error: unknown) { - if (error instanceof Error && error.message.includes("Validation Failed")) { - return false - } else if (axios.isAxiosError(error)) { - void message.error(error.response?.data.message ?? "创建失败,请稍后再试") - } - return false - } + 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)}`) + }) } const handleAddRole = () => { @@ -102,20 +111,16 @@ export default function RolePage() { } const onEditRoleFinish = async () => { - try { - const values = await editRoleForm.validateFields() - // console.log(values) - await RoleApi.editRole(values) - void message.success(`角色 ${values.name} 修改成功`) - return true - } catch (error: unknown) { - if (error instanceof Error && error.message.includes("Validation Failed")) { - return false - } else if (axios.isAxiosError(error)) { - void message.error(error.response?.data.message ?? "创建失败,请稍后再试") - } - return false - } + 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)}`) + }) } const handleEditRole = (role: Role) => { diff --git a/src/types/antd/index.ts b/src/types/antd/index.ts index 3320e3b..42d142e 100644 --- a/src/types/antd/index.ts +++ b/src/types/antd/index.ts @@ -19,3 +19,16 @@ export interface AntSelectOptionItem { } export type AntSelectOption = AntSelectOptionItem[] + +export interface AntFieldError { + errors: string[] + name: string[] + warnings: unknown[] +} + +export interface AntFormValidationError { + values: T + message: string + outOfDate: boolean + errorFields: AntFieldError[] +} diff --git a/src/utils/ant-utils/index.ts b/src/utils/ant-utils/index.ts new file mode 100644 index 0000000..69dd794 --- /dev/null +++ b/src/utils/ant-utils/index.ts @@ -0,0 +1,5 @@ +import type { AntFormValidationError } from "@/types/antd" + +export function getFieldErrorMessage(error: AntFormValidationError): string { + return error.errorFields.map((errorField) => errorField.errors.join(",")).join(";") +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 39caf36..16ecaf0 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,2 +1,3 @@ export * as PhoneNumberUtils from "./phone-number-utils" export * as DepartmentUtils from "./department-utils" +export * as AntUtils from "./ant-utils"