index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // 请求
  2. import axios from 'axios';
  3. import $store from '@/sheep/store';
  4. import $storage from '@/sheep/utils/storage';
  5. import { ElMessage, ElMessageBox } from 'element-plus';
  6. import { isNil } from 'lodash';
  7. import { baseURL } from '@/sheep/config';
  8. const options = {
  9. // 显示操作成功消息 默认不显示
  10. showSuccessMessage: false,
  11. // 显示失败消息 默认显示
  12. showErrorMessage: true,
  13. // 显示请求Loading 默认不显示
  14. showLoading: false,
  15. // ...
  16. };
  17. /**
  18. * @description axios请求基础配置 可直接使用访问自定义请求
  19. */
  20. export const request = axios.create({
  21. baseURL,
  22. timeout: 8000,
  23. method: 'GET',
  24. headers: {
  25. // "Accept": "*/*",
  26. 'Content-Type': 'application/json;charset=UTF-8',
  27. },
  28. options,
  29. });
  30. /**
  31. * @description axios请求拦截器
  32. */
  33. request.interceptors.request.use(
  34. (config) => {
  35. $store('app').setRequestCounter(1);
  36. // 测试token
  37. const token = `Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoiYWRtaW4iLCJ1aWQiOjEsImF1ZCI6IiIsImV4cCI6MTc1MTk0NDQ3MiwiaWF0IjoxNzUxODU4MDcyLCJpc3MiOiIiLCJqdGkiOiI2YTIxMzk4NzYzOTliYzY5NTViY2Y5ZTcxOGQ5ODZjYyIsIm5iZiI6MTc1MTg1ODA3Miwic3ViIjoiIn0.-1wdpM_1uZq33YpaDUamtF-MY4c5FhZOItMp5CUTPvg`;
  38. // const token = $storage.get('token');
  39. if (token) config.headers['Authorization'] = token;
  40. return config;
  41. },
  42. (error) => {
  43. $store('app').setRequestCounter(-1);
  44. return Promise.reject(error);
  45. },
  46. );
  47. /**
  48. * @description axios响应拦截器
  49. */
  50. request.interceptors.response.use(
  51. (response) => {
  52. $store('app').setRequestCounter(-1);
  53. // 自动刷新令牌
  54. if (response.headers.authorization) {
  55. $store('account').setToken(response.headers.authorization);
  56. }
  57. // 导出&下载文件
  58. if (response.config.responseType === 'blob' && response.data.size > 0) {
  59. return Promise.resolve(response);
  60. }
  61. if (response.data.code !== '200') {
  62. if (response.config.options.showErrorMessage)
  63. ElMessage.error(response.data.msg || '操作失败');
  64. } else {
  65. response.config.options.showSuccessMessage &&
  66. ElMessage.success(response.data.msg || '操作成功');
  67. }
  68. return Promise.resolve(response.data);
  69. },
  70. (error) => {
  71. $store('app').setRequestCounter(-1);
  72. let errorMessage = '未知错误';
  73. if (!isNil(error.response)) {
  74. switch (error.response?.status) {
  75. case 400:
  76. errorMessage = '请求错误';
  77. break;
  78. case 401:
  79. errorMessage = '未授权,请重新登录';
  80. if (document.getElementsByClassName('el-message-box').length === 0) {
  81. ElMessageBox.alert(error.response.data.msg || errorMessage, '认证失败', {
  82. confirmButtonText: '重新登陆',
  83. }).then(() => {
  84. $store('account').logout(true);
  85. });
  86. }
  87. return Promise.reject(error.response);
  88. break;
  89. case 403:
  90. errorMessage = '拒绝访问';
  91. break;
  92. case 404:
  93. errorMessage = '请求出错';
  94. break;
  95. case 408:
  96. errorMessage = '请求超时';
  97. break;
  98. case 429:
  99. errorMessage = '请求频繁, 请稍后再访问';
  100. break;
  101. case 500:
  102. errorMessage = '服务器开小差了,请稍后再试~';
  103. break;
  104. case 501:
  105. errorMessage = '服务未实现';
  106. break;
  107. case 502:
  108. errorMessage = '网络错误';
  109. break;
  110. case 503:
  111. errorMessage = '服务不可用';
  112. break;
  113. case 504:
  114. errorMessage = '网络超时';
  115. break;
  116. case 505:
  117. errorMessage = 'HTTP版本不受支持';
  118. break;
  119. }
  120. ElMessage.error(error.response.data.msg || errorMessage);
  121. } else {
  122. ElMessage.error(errorMessage);
  123. }
  124. return false;
  125. },
  126. );