refactor: 优化错误处理逻辑

This commit is contained in:
siujamo
2025-12-29 11:49:44 +08:00
parent b0ccd8f832
commit 1ae17823ef
4 changed files with 51 additions and 27 deletions
+21 -16
View File
@@ -19,6 +19,8 @@ import AddRoleDialogue from "@/components/add-role-dialogue"
import type { RoleFormValues } from "@/components/role-display-form" import type { RoleFormValues } from "@/components/role-display-form"
import EditRoleDialogue from "@/components/edit-role-dialogue" import EditRoleDialogue from "@/components/edit-role-dialogue"
import { addRole } from "@/api/role" import { addRole } from "@/api/role"
import type { AntFormValidationError } from "@/types/antd"
import { AntUtils } from "@/utils"
export default function RolePage() { export default function RolePage() {
const { message, modal } = App.useApp() const { message, modal } = App.useApp()
@@ -62,19 +64,26 @@ export default function RolePage() {
} }
const onAddRoleFinish = async () => { const onAddRoleFinish = async () => {
addRoleForm
.validateFields()
.then(async (values) => {
try { try {
const values = await addRoleForm.validateFields()
await RoleApi.addRole(values) await RoleApi.addRole(values)
void message.success(`角色 ${values.name} 创建成功`) void message.success(`角色 ${values.name} 创建成功`)
return true
} catch (error: unknown) { } catch (error: unknown) {
if (error instanceof Error && error.message.includes("Validation Failed")) { if (axios.isAxiosError<GeneralErrorResponse>(error)) {
return false
} else if (axios.isAxiosError<GeneralErrorResponse>(error)) {
void message.error(error.response?.data.message ?? "创建失败,请稍后再试") void message.error(error.response?.data.message ?? "创建失败,请稍后再试")
} else if (error instanceof Error) {
void message.error(error.message)
} else {
void message.error("发生未知错误,新增角色信息失败。")
} }
return false return false
} }
})
.catch((error: AntFormValidationError<RoleFormValues>) => {
void message.error(`角色信息检验失败:${AntUtils.getFieldErrorMessage(error)}`)
})
} }
const handleAddRole = () => { const handleAddRole = () => {
@@ -102,20 +111,16 @@ export default function RolePage() {
} }
const onEditRoleFinish = async () => { const onEditRoleFinish = async () => {
try { editRoleForm
const values = await editRoleForm.validateFields() .validateFields()
.then(async (values) => {
// console.log(values) // console.log(values)
await RoleApi.editRole(values) await RoleApi.editRole(values)
void message.success(`角色 ${values.name} 修改成功`) void message.success(`角色 ${values.name} 修改成功`)
return true })
} catch (error: unknown) { .catch((error: AntFormValidationError<RoleFormValues>) => {
if (error instanceof Error && error.message.includes("Validation Failed")) { void message.error(`角色信息检验失败:${AntUtils.getFieldErrorMessage(error)}`)
return false })
} else if (axios.isAxiosError<GeneralErrorResponse>(error)) {
void message.error(error.response?.data.message ?? "创建失败,请稍后再试")
}
return false
}
} }
const handleEditRole = (role: Role) => { const handleEditRole = (role: Role) => {
+13
View File
@@ -19,3 +19,16 @@ export interface AntSelectOptionItem {
} }
export type AntSelectOption = AntSelectOptionItem[] export type AntSelectOption = AntSelectOptionItem[]
export interface AntFieldError {
errors: string[]
name: string[]
warnings: unknown[]
}
export interface AntFormValidationError<T> {
values: T
message: string
outOfDate: boolean
errorFields: AntFieldError[]
}
+5
View File
@@ -0,0 +1,5 @@
import type { AntFormValidationError } from "@/types/antd"
export function getFieldErrorMessage(error: AntFormValidationError<unknown>): string {
return error.errorFields.map((errorField) => errorField.errors.join("")).join("")
}
+1
View File
@@ -1,2 +1,3 @@
export * as PhoneNumberUtils from "./phone-number-utils" export * as PhoneNumberUtils from "./phone-number-utils"
export * as DepartmentUtils from "./department-utils" export * as DepartmentUtils from "./department-utils"
export * as AntUtils from "./ant-utils"