| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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;
|