feat(error):持久显示系统更新提示

This commit is contained in:
肖应宇 2026-04-13 11:18:32 +08:00
parent ff5075e519
commit 2b90d7305c
1 changed files with 20 additions and 4 deletions

View File

@ -5,8 +5,10 @@ import { toast } from "sonner";
import { loadModels } from "./api";
import type { Model } from "./types";
const MODELS_UPDATING_TOAST_ID = "models-server-updating";
export function useModels({ enabled = true }: { enabled?: boolean } = {}) {
const { data, isLoading, error } = useQuery<Model[], Error>({
const { data, isLoading, error, failureReason } = useQuery<Model[], Error>({
queryKey: ["models"],
queryFn: () => loadModels(),
enabled,
@ -15,16 +17,30 @@ export function useModels({ enabled = true }: { enabled?: boolean } = {}) {
if (queryError.message.startsWith("HTTP error: 4")) {
return false;
}
if (queryError.message.startsWith("Server error: 5")) {
return true;
}
return failureCount < 1;
},
retryDelay: 3000,
});
useEffect(() => {
// React Query v5 removed per-query onError callbacks from useQuery options.
if (error?.message.includes("Server error: 5")) {
toast.error("系统正在更新-5请稍候……");
const serverError = [failureReason, error].find((candidate) =>
candidate?.message.includes("Server error: 5"),
);
if (serverError) {
toast.loading("系统正在更新,请稍候……", {
id: MODELS_UPDATING_TOAST_ID,
});
return;
}
toast.dismiss(MODELS_UPDATING_TOAST_ID);
}, [error, failureReason]);
useEffect(() => {
if (error?.message.includes("HTTP error: 4")) {
toast.error("模型接口不可用,请检查后端路由或服务状态。");
}