request.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import axios, {InternalAxiosRequestConfig, AxiosResponse} from "axios";
  2. import {useUserStoreHook} from "@/store/modules/user";
  3. // 创建 axios 实例
  4. // @ts-ignore
  5. const service = axios.create({
  6. baseURL: import.meta.env.VITE_APP_BASE_API,
  7. timeout: 50000,
  8. headers: {"Content-Type": "application/json;charset=utf-8"},
  9. });
  10. // 请求拦截器
  11. service.interceptors.request.use(
  12. (config: InternalAxiosRequestConfig) => {
  13. const userStore = useUserStoreHook();
  14. if (userStore.token) {
  15. //config.headers.Authorization = userStore.token;
  16. config.headers["access-token"] = userStore.token;
  17. }
  18. return config;
  19. },
  20. (error: any) => {
  21. // @ts-ignore
  22. return Promise.reject(error);
  23. }
  24. );
  25. // 响应拦截器
  26. service.interceptors.response.use(
  27. (response: AxiosResponse) => {
  28. const {status, message} = response.data;
  29. if (status === 1) {
  30. return response.data;
  31. }
  32. // 响应数据为二进制流处理(Excel导出)
  33. if (response.data instanceof ArrayBuffer) {
  34. return response;
  35. }
  36. // ElMessage.error(message || "系统出错");
  37. console.log(message || "系统出错");
  38. return Promise.reject(new Error(message || "Error"));
  39. },
  40. (error: any) => {
  41. if (error.response.data) {
  42. const {status, message} = error.response.data;
  43. // token 过期,重新登录
  44. if (status === 10) {
  45. ElMessageBox.confirm("当前页面已失效,请重新登录", "提示", {
  46. confirmButtonText: "确定",
  47. type: "warning",
  48. }).then(() => {
  49. localStorage.clear();
  50. window.location.href = "/";
  51. });
  52. } else {
  53. //ElMessage.error(message || "系统出错");
  54. console.log(message || "系统出错");
  55. }
  56. }
  57. return Promise.reject(error.message);
  58. }
  59. );
  60. // 导出 axios 实例
  61. export default service;