This commit is contained in:
Mrx
2026-02-04 15:19:10 +08:00
parent ba924f1a95
commit d181fd7da4
2 changed files with 67 additions and 40 deletions

View File

@@ -24,6 +24,35 @@ const safeJsonFetch = async (input, init) => {
} }
}; };
// 封禁用户:清理登录态并跳转登录页,保证用户能看到提示
const USER_DISABLED_CODE = 100011;
function handleUserDisabled(msg) {
const message = msg || "您已被封禁";
if (typeof showToast === "function") {
showToast({ message });
}
localStorage.removeItem("token");
localStorage.removeItem("refreshAfter");
localStorage.removeItem("accessExpire");
localStorage.removeItem("userInfo");
localStorage.removeItem("agentInfo");
try {
const userStore = useUserStore();
const agentStore = useAgentStore();
if (userStore?.resetUser) userStore.resetUser();
if (agentStore?.resetAgent) agentStore.resetAgent();
} catch (_) {}
// 先 replace 再 setTimeout 兜底,确保离开当前页并进入登录页
if (typeof router !== "undefined" && router?.replace) {
router.replace("/login");
}
setTimeout(() => {
if (typeof window !== "undefined" && !window.location.pathname.includes("login")) {
window.location.href = "/login";
}
}, 300);
}
// 创建全局的 fetch 实例 // 创建全局的 fetch 实例
const useApiFetch = createFetch({ const useApiFetch = createFetch({
baseUrl: "/api/v1", // 你的 API 基础路径 baseUrl: "/api/v1", // 你的 API 基础路径
@@ -67,60 +96,58 @@ const useApiFetch = createFetch({
// 全局处理响应 // 全局处理响应
if (response.status === 401) { if (response.status === 401) {
// 有错误文案时先弹出让用户看到 if (msg && typeof showToast === "function") showToast({ message: msg });
if (msg) {
showToast({ message: msg });
}
localStorage.removeItem("token"); localStorage.removeItem("token");
localStorage.removeItem('refreshAfter') localStorage.removeItem("refreshAfter");
localStorage.removeItem('accessExpire') localStorage.removeItem("accessExpire");
router.replace("/login"); if (typeof router !== "undefined" && router?.replace) router.replace("/login");
} }
if (code !== undefined && code !== 200) { if (code !== undefined && code !== 200) {
if (code === 100009) { const codeNum = Number(code);
if (msg) showToast({ message: msg }); if (codeNum === 100009) {
localStorage.removeItem('token') if (msg && typeof showToast === "function") showToast({ message: msg });
localStorage.removeItem('refreshAfter') localStorage.removeItem('token');
localStorage.removeItem('accessExpire') localStorage.removeItem('refreshAfter');
localStorage.removeItem('userInfo') localStorage.removeItem('accessExpire');
localStorage.removeItem('agentInfo') localStorage.removeItem('userInfo');
localStorage.removeItem('agentInfo');
const userStore = useUserStore(); const userStore = useUserStore();
const agentStore = useAgentStore(); const agentStore = useAgentStore();
userStore.resetUser() userStore.resetUser();
agentStore.resetAgent() agentStore.resetAgent();
location.reload() location.reload();
} else if (code === 100011) { } else if (codeNum === USER_DISABLED_CODE) {
// 封禁用户:弹出提示并清理登录状态 handleUserDisabled(msg);
showToast({ message: msg || '您已被封禁' }); return { data, response };
localStorage.removeItem('token') } else if (codeNum !== 200002 && codeNum !== 200003 && codeNum !== 200004) {
localStorage.removeItem('refreshAfter') if (typeof showToast === "function") {
localStorage.removeItem('accessExpire') showToast({ message: msg || '请求失败,请稍后重试' });
localStorage.removeItem('userInfo') }
localStorage.removeItem('agentInfo')
const userStore = useUserStore();
const agentStore = useAgentStore();
userStore.resetUser()
agentStore.resetAgent()
router.replace("/login");
} else if (code !== 200002 && code !== 200003 && code !== 200004) {
showToast({ message: msg || '请求失败,请稍后重试' });
} }
} }
return { data, response }; return { data, response };
}, },
async onFetchError({ error, response }) { async onFetchError({ data, error, response }) {
console.log("error", error); console.log("error", error);
closeToast(); closeToast();
// 尝试从响应 body 解析业务码(如封禁 100011与 afterFetch 一致处理
const code = data?.code ?? data?.errcode;
const msg = data?.msg ?? data?.errmsg ?? "";
const codeNum = code !== undefined ? Number(code) : null;
if (codeNum === USER_DISABLED_CODE) {
handleUserDisabled(msg);
return { error };
}
const errMsg = typeof error === "string" ? error : (error?.message || "网络异常,请稍后重试"); const errMsg = typeof error === "string" ? error : (error?.message || "网络异常,请稍后重试");
if (response && response.status === 401) { if (response && response.status === 401) {
showToast({ message: errMsg }); if (typeof showToast === "function") showToast({ message: msg || errMsg });
localStorage.removeItem("token"); localStorage.removeItem("token");
localStorage.removeItem('refreshAfter') localStorage.removeItem("refreshAfter");
localStorage.removeItem('accessExpire') localStorage.removeItem("accessExpire");
router.replace("/login"); if (typeof router !== "undefined" && router?.replace) router.replace("/login");
} else { } else {
showToast({ message: errMsg }); if (typeof showToast === "function") showToast({ message: errMsg });
} }
return { error }; return { error };
}, },

View File

@@ -15,8 +15,8 @@ export default defineConfig({
strictPort: true, // 如果端口被占用则抛出错误而不是使用下一个可用端口 strictPort: true, // 如果端口被占用则抛出错误而不是使用下一个可用端口
proxy: { proxy: {
"/api/v1": { "/api/v1": {
target: "http://127.0.0.1:8888", // 本地接口地址 // target: "http://127.0.0.1:8888", // 本地接口地址
// target: "https://www.xingfucha.cn", // 本地接口地址 target: "https://www.xingfucha.cn", // 本地接口地址
changeOrigin: true, changeOrigin: true,
}, },
}, },