axiosApp.ts 2.7 KB

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