special_request.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import axios from 'axios';
  2. import { CACHE_KEY } from '@/constants';
  3. const api = axios.create({
  4. baseURL: import.meta.env.VITE_SCIENTIFIC_API_URL || import.meta.env.VITE_API_URL,
  5. timeout: 1000 * 60,
  6. responseType: 'json',
  7. paramsSerializer: {
  8. serialize: (params) => {
  9. // 简单的参数序列化,替代 qs
  10. return Object.keys(params)
  11. .map(key => {
  12. const val = params[key];
  13. if (val === undefined || val === null) return '';
  14. if (Array.isArray(val)) {
  15. return val.map(v => `${encodeURIComponent(key)}=${encodeURIComponent(v)}`).join('&');
  16. }
  17. return `${encodeURIComponent(key)}=${encodeURIComponent(val)}`;
  18. })
  19. .filter(p => p !== '')
  20. .join('&');
  21. },
  22. },
  23. });
  24. api.interceptors.request.use((request) => {
  25. // 设置请求头
  26. if (request.headers) {
  27. const token = uni.getStorageSync('SCITOKEN');
  28. if (token) {
  29. request.headers.Authorization = 'Bearer ' + token;
  30. }
  31. }
  32. return request;
  33. });
  34. api.interceptors.response.use(
  35. (response) => {
  36. // 如果是 blob 响应,直接返回
  37. if (response.config.responseType === 'blob') {
  38. return response;
  39. }
  40. if (response.data.code === 200) {
  41. return Promise.resolve(response.data);
  42. } else if (response.data.code === 401) {
  43. uni.showToast({ title: '登录状态失效,请重新登录', icon: 'none' });
  44. } else {
  45. const msg = response.data.msg || '系统错误';
  46. uni.showToast({ title: msg, icon: 'none' });
  47. return Promise.reject(response.data);
  48. }
  49. return Promise.resolve(response.data);
  50. },
  51. async (error) => {
  52. let message = error.message;
  53. if (message === 'Network Error') {
  54. message = '后端网络故障';
  55. } else if (message.includes('timeout')) {
  56. message = '接口请求超时';
  57. }
  58. uni.showToast({ title: message, icon: 'none' });
  59. return Promise.reject(error);
  60. }
  61. );
  62. export default api;