import axios from 'axios'; import { CACHE_KEY } from '@/constants'; import { Local, Session } from '@/utils/storage'; const api = axios.create({ baseURL: import.meta.env.VITE_SCIENTIFIC_API_URL || import.meta.env.VITE_API_URL, timeout: 1000 * 60, responseType: 'json', paramsSerializer: { serialize: (params) => { // 简单的参数序列化,替代 qs return Object.keys(params) .map(key => { const val = params[key]; if (val === undefined || val === null) return ''; if (Array.isArray(val)) { return val.map(v => `${encodeURIComponent(key)}=${encodeURIComponent(v)}`).join('&'); } return `${encodeURIComponent(key)}=${encodeURIComponent(val)}`; }) .filter(p => p !== '') .join('&'); }, }, }); api.interceptors.request.use((request) => { // 设置请求头 if (request.headers) { const token = uni.getStorageSync('SCITOKEN'); if (token) { request.headers.Authorization = 'Bearer ' + token; } } return request; }); api.interceptors.response.use( (response) => { // 如果是 blob 响应,直接返回 if (response.config.responseType === 'blob') { return response; } if (response.data.code === 200) { return Promise.resolve(response.data); } else if (response.data.code === 401) { uni.showModal({ title: '系统提示', content: '登录状态已过期,您可以继续留在该页面,或者重新登录', confirmText: '重新登录', cancelText: '取消', success: function (modalRes) { if (modalRes.confirm) { Session.clear(); Local.remove(CACHE_KEY.TOKEN); uni.reLaunch({ url: '/pages/login/index' }); } } }); return Promise.reject(response.data); } else { const msg = response.data.msg || '系统错误'; uni.showToast({ title: msg, icon: 'none' }); return Promise.reject(response.data); } return Promise.resolve(response.data); }, async (error) => { let message = error.message; if (message === 'Network Error') { message = '后端网络故障'; } else if (message.includes('timeout')) { message = '接口请求超时'; } uni.showToast({ title: message, icon: 'none' }); return Promise.reject(error); } ); export default api;