axios.js 2.5 KB

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