f
This commit is contained in:
@@ -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 };
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user