import axios from "axios"; import { clearAdminSession, getAdminToken } from "../utils/auth"; import { resolveApiBaseUrl } from "../utils/env"; import { goToAdminLogin } from "../utils/navigation"; interface ApiPayload { code?: number; message?: string; data?: unknown; } function redirectToLoginOnUnauthorized() { clearAdminSession(); goToAdminLogin(); } const request = axios.create({ baseURL: resolveApiBaseUrl(), timeout: 20000, }); request.interceptors.request.use((config) => { const token = getAdminToken(); if (token) { config.headers = config.headers || {}; config.headers.Authorization = `Bearer ${token}`; } return config; }); request.interceptors.response.use( (response) => { if (response.config.responseType === "blob" || response.config.responseType === "arraybuffer") { return response.data as any; } const payload = response.data as ApiPayload; if (payload?.code === 0) { return payload as any; } if (payload?.code === 401) { redirectToLoginOnUnauthorized(); } const error = new Error(payload?.message || "请求失败") as Error & { payload?: ApiPayload; status?: number; }; error.payload = payload; error.status = response.status; return Promise.reject(error); }, (error) => { const status = error?.response?.status; if (status === 401) { redirectToLoginOnUnauthorized(); } return Promise.reject(error); }, ); export default request;