Files
tyc-webview-v2/src/composables/useApiFetch.js
2026-01-22 16:03:28 +08:00

96 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// src/plugins/fetch.js
import { createFetch } from "@vueuse/core";
import router from "@/router"; // 假设你使用 Vue Router
import { useUserStore } from "@/stores/userStore";
import { useAgentStore } from "@/stores/agentStore";
// 创建全局的 fetch 实例
const useApiFetch = createFetch({
baseUrl: "/api/v1", // 你的 API 基础路径
options: {
async beforeFetch({ url, options }) {
showLoadingToast({
message: "加载中...",
forbidClick: true,
duration: 0, // 设置为 0 表示不会自动关闭
loadingType: "spinner",
});
const timestamp = Date.now();
const separator = url.includes("?") ? "&" : "?"; // 判断是否已有参数
url += `${separator}t=${timestamp}`; // 追加时间戳
// 在请求前添加通用的 Header例如 Authorization
const token = localStorage.getItem("token");
let platform = "h5";
const userAgent = navigator.userAgent.toLowerCase();
const isWechat = /micromessenger/.test(userAgent);
if (isWechat) {
platform = "wxh5";
}
options.headers['X-Platform'] = platform
if (token) {
options.headers = {
...options.headers,
Authorization: `${token}`,
};
}
return { url, options };
},
async afterFetch({ data, response }) {
closeToast();
// 全局处理响应
if (response.status === 401) {
// 清除本地存储的 token
localStorage.removeItem("token");
localStorage.removeItem('refreshAfter')
localStorage.removeItem('accessExpire')
// 跳转到登录页
router.replace("/login");
}
if (data.code !== 200) {
if (data.code === 100009) {
// 改进的存储管理
localStorage.removeItem('token')
localStorage.removeItem('refreshAfter')
localStorage.removeItem('accessExpire')
localStorage.removeItem('userInfo')
localStorage.removeItem('agentInfo')
// 重置状态
const userStore = useUserStore();
const agentStore = useAgentStore();
userStore.resetUser()
agentStore.resetAgent()
location.reload()
}
if (data.code !== 200002 && data.code !== 200003 && data.code !== 200004 && data.code !== 100009) {
showToast({ message: data.msg });
}
}
return { data, response };
},
async onFetchError({ error, response }) {
console.log("error", error);
closeToast();
if (response.status === 401) {
// 清除本地存储的 token
localStorage.removeItem("token");
localStorage.removeItem('refreshAfter')
localStorage.removeItem('accessExpire')
// 跳转到登录页
router.replace("/login");
} else {
if (typeof error === "string") {
showToast({ message: error });
}
}
return { error };
},
},
});
export default useApiFetch;