// @ts-ignore import Fly from "flyio/dist/npm/wx" import config from "@/config"; import { useUserStore } from '@/store/userStore'; const { serverBaseUrl } = config; const requestConfig = { baseURL: serverBaseUrl, timeout: 30000, headers: { "Content-Type": "application/json", }, withCredentials: false, }; const fly = new Fly(); fly.config = requestConfig; const refreshFly = new Fly(); refreshFly.config = requestConfig; const cleanParams = (obj: any) => { if (!obj || typeof obj !== 'object') return obj Object.keys(obj).forEach(k => { const v = obj[k] if (v === undefined || v === null) { delete obj[k] } else if (typeof v === 'object') { cleanParams(v) } }) return obj } fly.interceptors.request.use((request: any) => { const userStore = useUserStore(); const token = userStore.accessToken; if (request.headers['TempToken']) { request.headers['Authorization'] = `Bearer ${request.headers['TempToken']}`; } else if (token) { request.headers['Authorization'] = 'Bearer ' + token; } const examType = userStore.getExamType; const location = userStore.getLocation; if (examType) { request.headers['examType'] = examType; } if (location) { request.headers['location'] = encodeURIComponent(location); } if (request.params) { request.params = cleanParams(request.params) } if (request.body) { request.body = cleanParams(request.body) } return request; }); fly.interceptors.response.use( function (this: { lock: () => void; unlock: () => void }, response: any) { // 不要使用箭头函数,否则调用this.lock时this指向不对 const result = response.data; try { const { code, msg } = result; if (code === 401) { logout(); return Promise.reject({ code: 401, msg: '未授权,请重新登录', result }); } else { if (code !== 200) { uni.$ie.showToast(msg); return Promise.reject(result); } else { return Promise.resolve(result); } } } catch (err) { // 响应数据格式异常,reject 错误对象而不是 result return Promise.reject(err); } }, function (err: Error, promise: Promise) { return Promise.reject(err); } ); function logout() { const userStore = useUserStore(); userStore.logout(); uni.reLaunch({ url: '/pagesSystem/pages/login/login' }); } export default fly;