refactor(layout, i18n, admin): 优化布局结构与多语言支持

调整 AdminShell 组件的子组件顺序,提升代码可读性。更新 admin-breadcrumb 组件,简化导航标签翻译逻辑,确保多语言支持的一致性。重构 admin-language-switcher 组件,优化语言切换的用户体验,增强界面交互性。更新多语言配置,新增登录界面的副标题,提升用户体验。
This commit is contained in:
2026-05-30 17:46:27 +08:00
parent 36117144dc
commit a550c418e5
64 changed files with 3405 additions and 1378 deletions

View File

@@ -5,6 +5,10 @@ import axios, {
} from "axios";
import { withAdminAuthHeader } from "@/lib/admin-auth";
import {
handleAdminAuthRejected,
isAdminAuthRejected,
} from "@/lib/admin-auth-reject";
import { withAdminLocaleHeaders } from "@/lib/admin-locale";
import { LotteryApiBizError, LotteryApiEnvelopeError } from "@/types/api/errors";
import { isApiEnvelope } from "@/types/api/envelope";
@@ -18,6 +22,23 @@ export const adminHttp = axios.create({
headers: { Accept: "application/json" },
});
adminHttp.interceptors.response.use(
(response) => response,
(error: unknown) => {
if (isAdminAuthRejected(error)) {
handleAdminAuthRejected();
}
return Promise.reject(error);
},
);
function rejectAfterAuthCheck(err: unknown): never {
if (isAdminAuthRejected(err)) {
handleAdminAuthRejected();
}
throw err;
}
export function unwrapData<T>(payload: unknown): T {
if (!isApiEnvelope(payload)) {
throw new LotteryApiEnvelopeError();
@@ -48,7 +69,7 @@ export async function publicAdminRequest<T>(
throw new LotteryApiBizError(body.msg, body.code, body.data);
}
}
throw err;
rejectAfterAuthCheck(err);
}
}
@@ -64,7 +85,7 @@ export async function request<T>(config: AxiosRequestConfig): Promise<T> {
throw new LotteryApiBizError(body.msg, body.code, body.data);
}
}
throw err;
rejectAfterAuthCheck(err);
}
}