import axios from 'axios'; import { UniAdapter } from 'uniapp-axios-adapter'; import store from '@/store'; import { getAccessToken, setAccessToken, setRefreshToken, refreshToken, isRefreshRequest, } from './auth'; // 每次请求都创建一个新的实例 const instance = axios.create({ // baseURL: 'https://test.api.chelvc.com', // baseURL: "http://192.168.68.77:11000", // baseURL: "https://358175z5l5.yicp.fun", baseURL: "http://localhost:11000", timeout: 10000, adapter: UniAdapter, }); instance.interceptors.request.use(config => { uni.showLoading({ title: '加载中', }); // 带上token 和其他请求头信息 if (store.getters.accessToken) { config.headers['Authorization'] = `Bearer ${getAccessToken()}`; } // console.log('@@@@config', config); // console.log('@@@@store.getters.app.system', store.getters.app.system); config.headers = { ...config.headers, platform: store.getters.app.system.osName.toUpperCase(), terminal: 'APPLET', // TODO: version: store.getters.app.system.appVersion.toUpperCase(), // scope: store.getters.scope, device: store.getters.app.system.deviceId, timestamp: new Date().getTime(), }; return config; }); instance.interceptors.response.use( async res => { uni.hideLoading(); const { code, data, message } = res.data; if (data && data.accessToken) { setAccessToken(data.accessToken); } if (data && data.refreshToken) { setRefreshToken(data.refreshToken); } // 未知错误 if (code === 'ERROR') { uni.showToast({ title: `${message ? message : '未知错误'}`, icon: 'none', }); return res.data; } // 请求错误 if (code === 'BAD_REQUEST') { uni.showToast({ title: `${message ? message : '请求异常'}`, icon: 'none', }); return res.data; } // 拒绝访问 if (code === 'FORBIDDEN') { uni.showToast({ title: `${message ? message : '拒绝访问'}`, icon: 'none', }); return; } // 请求参数异常 if (code === 'PARAMETER_INVALID') { const errorTextList = Object.keys(res.data.data).map(key => { return res.data.data[key]; }); uni.showToast({ title: errorTextList.join(','), icon: 'none', }); return res.data; } // 访问资源异常 if (code === 'UNAVAILABLE') { uni.showToast({ title: `${message ? message : '访问资源不可用'}`, icon: 'none', }); return; } // 未登录 if (code === 'UNAUTHORIZED') { uni.navigateTo({ url: '/pages/login/login', }); return res.data; } // 身份切换 if (code === 'SCOPE_CHANGED') { uni.reLaunch({ url: '/pages/login/login', }); uni.showToast({ title: '您的身份信息已切换', icon: 'none', }); return res.data; } if (code === 'TOKEN_CHANGED') { uni.showModal({ title: '提示', content: res.data.messsage, showCancel: false, success: res => { if (res.confirm) { // 小程序用户跳转到我的页面 , 登录状态为未登录 } }, }); return res.data; } // token过期处理 if (code === 'TOKEN_EXPIRED' && !isRefreshRequest(res.config)) { // 刷新token const isSuccess = await refreshToken(); if (isSuccess) { // 重新请求 instance.config.headers.authorization = `Bearer ${getAccessToken()}`; const resp = await instance.request(res.config); return resp; } else { // 无权限 store.commit('SET_ACCESS_TOKEN', ''); store.commit('SET_REFRESH_TOKEN', ''); uni.showModal({ title: '提示', content: '您的登录信息已过期,请重新登录', showCancel: false, success: res => { uni.navigateTo({ url: '/pages/login/login', }); }, }); return res.data; } } return res.data; }, err => { console.log('->', err); uni.hideLoading(); }, ); export default instance;