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
+32 -27
View File
@@ -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<GeneralErrorResponse>(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<GeneralErrorResponse>(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<RoleFormValues>) => {
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<GeneralErrorResponse>(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<RoleFormValues>) => {
void message.error(`角色信息检验失败:${AntUtils.getFieldErrorMessage(error)}`)
})
}
const handleEditRole = (role: Role) => {
+13
View File
@@ -19,3 +19,16 @@ export interface 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 DepartmentUtils from "./department-utils"
export * as AntUtils from "./ant-utils"