axios.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import axios from "axios";
  2. import Router from "@/router";
  3. import { Message, Notification } from "@arco-design/web-vue";
  4. import { useSystemStore } from "@/store/modules/systemStore";
  5. import { fn_logout } from "@/utils";
  6. const axiosInstance = axios.create({
  7. // baseURL: `${import.meta.env.PROD ? import.meta.env.VITE_PRO_PATH : ''}/api`,
  8. baseURL: import.meta.env.BASE_URL + "api",
  9. timeout: 300000,
  10. });
  11. const requestState = {
  12. // 得到正确响应
  13. success: [200],
  14. // token 跳转
  15. beOverdue: [886],
  16. // 没有访问权限
  17. NotAccessRight: [500],
  18. // 异常code
  19. exception: [400],
  20. };
  21. const pathArr = ["/api/admin/system/login", "/api/logout"];
  22. axiosInstance.interceptors.request.use(
  23. (config) => {
  24. const systemStore = useSystemStore();
  25. systemStore.localLoading(true);
  26. // 在发送请求之前做些什么
  27. if (!pathArr.includes(config.url)) {
  28. const token = localStorage.getItem("token");
  29. if (token && config.headers) {
  30. config.headers["Authorization"] = token;
  31. }
  32. }
  33. return config;
  34. },
  35. (err) => {
  36. const systemStore = useSystemStore();
  37. systemStore.localLoading();
  38. Promise.reject(err);
  39. }
  40. );
  41. // 响应拦截器
  42. axiosInstance.interceptors.response.use(
  43. (res) => {
  44. const systemStore = useSystemStore();
  45. systemStore.localLoading();
  46. const { code, data, message:msg } = res.data;
  47. // 成功
  48. if (code === 200) {
  49. return Promise.resolve(res.data);
  50. }
  51. // 服务端错误信息
  52. if (requestState.NotAccessRight.includes(code)) {
  53. Notification.warning({
  54. title: "系统信息",
  55. content: msg,
  56. });
  57. return Promise.reject(msg);
  58. }
  59. // 异常code
  60. if (requestState.exception.includes(code)) {
  61. Notification.warning({
  62. title: "系统提示",
  63. content: msg,
  64. });
  65. return Promise.reject(msg);
  66. }
  67. return Promise.resolve(data);
  68. },
  69. (err) => {
  70. const systemStore = useSystemStore();
  71. systemStore.localLoading();
  72. const res = err["response"];
  73. if (err.code === "ERR_CANCELED") {
  74. console.log("请求中断");
  75. return;
  76. }
  77. const msg = err.response.data ? err.response.data.message : ""
  78. Notification.warning({
  79. title: "系统信息",
  80. content: msg
  81. });
  82. //token失效
  83. if (requestState.beOverdue.includes(err.status)) {
  84. fn_logout(Router);
  85. // 直接终止请求
  86. return undefined;
  87. }
  88. Promise.reject(err);
  89. }
  90. );
  91. export default axiosInstance;