Files
tyc-webview-v2/src/composables/useApiFetch.js

96 lines
3.5 KiB
JavaScript
Raw Normal View History

2026-01-22 16:03:28 +08:00
// 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;