import Request from '@/service/request/index.js' import {useAuth} from "@/store/auth"; const { token ,refreshToken,userInfo}=useAuth() let isRefreshing = false; let refreshSubscribers = []; const request = new Request({ baseURL: import.meta.env.VITE_BASEURL, timeout: 1000 * 60 * 5, interceptors: { //实例的请求拦截器 requestInterceptors: (config) => { config.headers['Content-Type'] = config.method === 'get' ? 'application/x-www-form-urlencoded' : 'application/json'; config.headers['Authorization'] = token.value if (config.isFormData) { config.headers['Content-Type'] = 'multipart/form-data'; } return config; }, //实例的响应拦截器 responseInterceptors: async (res) => { if(res.data.status===1){ message.warning(res.data.msg) } if (res.data.status === 401) { return getRefreshToken(res); // uni.navigateTo({ // url:'/pages/login/index' // }) } if ([200, 201, 204].includes(res.status)) { return res.config.responseType === 'blob' ? res : res; } else { /* message.error(res.data.msg || 'An error occurred.');*/ return Promise.reject(new Error(res.data.msg || 'An error occurred.')); } } } }) async function getRefreshToken(response) { if (!isRefreshing) { isRefreshing = true; const refreshTokenT = refreshToken.value; if (refreshTokenT) { try { const data = { refreshToken:refreshTokenT }; const res = await request.instance.post('/user/refresh/token', data); if (res.code === 200) { token.value = res.data.Token; refreshToken.value = res.data.RefreshToken; userInfo.value = res.data.AccountInfo response.config.headers['Authorization'] = res.data.Token; uni.navigateTo({ url:'/pages/index/index' }) return request.request(response.config); } else { message.error(res.message || res.msg); throw new Error(res.message || res.msg); } } catch (error) { uni.navigateTo({ url:'/pages/login/index' }) throw error } finally { isRefreshing = false; refreshSubscribers.forEach(callback => callback()); refreshSubscribers = []; } } else { uni.navigateTo({ url:'/pages/login/index' }) throw new Error('No refresh token available.'); } } else { return new Promise(resolve => { refreshSubscribers.push(() => resolve(request.request(response.config))); }); } } const fontRequest = (config) => { if (['get', 'GET'].includes(config.method)) { config.params = config.data; } return request.request(config); }; export default fontRequest;