axiosApp.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import axios from "axios";
  2. // @ts-ignore
  3. import { loadProgressBar } from "axios-progress-bar";
  4. import { notifyInvalidTokenThrottled } from "./axiosNotice";
  5. import axiosRetry from "axios-retry";
  6. import { message } from "ant-design-vue";
  7. import { store } from "@/store/store";
  8. const config = {
  9. // baseURL: process.env.baseURL || process.env.apiUrl || ""
  10. timeout: 1 * 60 * 1000, // Timeout
  11. withCredentials: true, // Check cross-site Access-Control
  12. };
  13. const _axiosApp = axios.create(config);
  14. axiosRetry(_axiosApp);
  15. _axiosApp.interceptors.request.use(
  16. function (config) {
  17. if (config.setGlobalMask) {
  18. store.globalMask = true;
  19. }
  20. return config;
  21. },
  22. function (error) {
  23. if (error.config.setGlobalMask) {
  24. store.globalMask = false;
  25. }
  26. void message.error({ content: error, duration: 10 });
  27. console.log(error);
  28. return Promise.reject(error);
  29. }
  30. );
  31. // Add a response interceptor
  32. _axiosApp.interceptors.response.use(
  33. (response) => {
  34. if (response.config.setGlobalMask) {
  35. store.globalMask = false;
  36. }
  37. return response;
  38. },
  39. (error) => {
  40. if (error.config?.setGlobalMask) {
  41. store.globalMask = false;
  42. }
  43. const showErrorMessage = !error.config?.noErrorMessage;
  44. if (!error.response) {
  45. if (showErrorMessage) {
  46. // "Network Error" 网络不通,直接返回
  47. void message.error({
  48. content: "网络连接异常,请检查网络设置。",
  49. duration: 10,
  50. });
  51. }
  52. return Promise.reject(error);
  53. }
  54. // 这里是返回状态码不为200时候的错误处理
  55. const status = error.response.status;
  56. // 登录失效 跳转登录页面
  57. if (status == 403 || status == 401) {
  58. notifyInvalidTokenThrottled();
  59. return Promise.reject(error);
  60. } else if (status == 405) {
  61. if (showErrorMessage) {
  62. void message.error({ content: "没有权限!", duration: 10 });
  63. }
  64. return Promise.reject(error);
  65. } else if (status == 502) {
  66. if (showErrorMessage) {
  67. void message.error({ content: "服务器异常(502)!", duration: 10 });
  68. }
  69. return Promise.reject(error);
  70. }
  71. if (status != 200) {
  72. const data = error.response.data;
  73. if (data && data.message) {
  74. if (showErrorMessage) {
  75. void message.error({ content: data.message, duration: 10 });
  76. }
  77. } else {
  78. if (showErrorMessage) {
  79. void message.error({
  80. content: "未定义异常: " + JSON.stringify(data, null, 2),
  81. duration: 10,
  82. });
  83. }
  84. }
  85. return Promise.reject(error);
  86. }
  87. }
  88. );
  89. // eslint-disable-next-line
  90. loadProgressBar(null, _axiosApp);
  91. export const httpApp = _axiosApp;