mirror of
https://github.com/ccmjga/zhilu-admin
synced 2026-03-13 21:27:19 +08:00
68 lines
1.4 KiB
TypeScript
68 lines
1.4 KiB
TypeScript
import type { ComponentPublicInstance } from "vue";
|
|
import type { Router } from "vue-router";
|
|
import {
|
|
ForbiddenError,
|
|
InternalServerError,
|
|
RequestError,
|
|
ValidationError,
|
|
UnAuthError,
|
|
} from "../types/error";
|
|
import { z } from "zod";
|
|
import { Routes } from "../router/constants";
|
|
|
|
const makeErrorHandler =
|
|
(
|
|
router: Router,
|
|
signOut: () => void,
|
|
showAlert: ({
|
|
content,
|
|
level,
|
|
}: {
|
|
content: string;
|
|
level: "info" | "success" | "warning" | "error";
|
|
}) => void,
|
|
) =>
|
|
(err: unknown, instance: ComponentPublicInstance | null, info: string) => {
|
|
console.error(err);
|
|
if (err instanceof ValidationError) {
|
|
showAlert({
|
|
level: "error",
|
|
content: err.message,
|
|
});
|
|
} else if (err instanceof UnAuthError) {
|
|
signOut();
|
|
router.push(Routes.LOGIN.path);
|
|
showAlert({
|
|
level: "error",
|
|
content: err.message,
|
|
});
|
|
} else if (err instanceof ForbiddenError) {
|
|
showAlert({
|
|
level: "error",
|
|
content: err.message,
|
|
});
|
|
} else if (err instanceof RequestError) {
|
|
showAlert({
|
|
level: "error",
|
|
content: err.message,
|
|
});
|
|
} else if (err instanceof InternalServerError) {
|
|
showAlert({
|
|
level: "error",
|
|
content: err.detail ?? err.message,
|
|
});
|
|
} else if (err instanceof z.ZodError) {
|
|
showAlert({
|
|
level: "error",
|
|
content: err.errors[0].message,
|
|
});
|
|
} else {
|
|
showAlert({
|
|
level: "error",
|
|
content: "发生异常,请稍候再试",
|
|
});
|
|
}
|
|
};
|
|
|
|
export default makeErrorHandler;
|