request.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
  2. import { useUserStoreHook } from "@/store/modules/user";
  3. // 创建 axios 实例
  4. const service = axios.create({
  5. baseURL: import.meta.env.VITE_APP_BASE_API,
  6. timeout: 50000,
  7. headers: { "Content-Type": "application/json;charset=utf-8" },
  8. });
  9. // 请求拦截器
  10. service.interceptors.request.use(
  11. (config: InternalAxiosRequestConfig) => {
  12. const accessToken = localStorage.getItem("token");
  13. if (accessToken) {
  14. config.headers.Authorization = accessToken;
  15. }
  16. return config;
  17. },
  18. (error: any) => {
  19. return Promise.reject(error);
  20. }
  21. );
  22. // 响应拦截器
  23. service.interceptors.response.use(
  24. (response: AxiosResponse) => {
  25. const { code, msg } = response.data;
  26. if (code === "200") {
  27. return response.data;
  28. }
  29. // 响应数据为二进制流处理(Excel导出)
  30. if (response.data instanceof ArrayBuffer) {
  31. return response;
  32. }
  33. // token 过期,重新登录
  34. if (code === "4106") {
  35. ElMessageBox.confirm("当前页面已失效,请重新登录", "提示", {
  36. confirmButtonText: "确定",
  37. cancelButtonText: "取消",
  38. type: "warning",
  39. }).then(() => {
  40. const userStore = useUserStoreHook();
  41. userStore.resetToken().then(() => {
  42. location.reload();
  43. });
  44. });
  45. } else {
  46. ElMessage.error(msg || "系统出错");
  47. }
  48. return Promise.reject(new Error(msg || "Error"));
  49. },
  50. (error: any) => {
  51. if (error.response.data) {
  52. const { code, msg } = error.response.data;
  53. }
  54. return Promise.reject(error.message);
  55. }
  56. );
  57. // 导出 axios 实例
  58. export default service;
  59. // code: "4104", msg: "账号不存在"enMsg: "accdunt
  60. // code: "4106", msg: "未登录",enMsg: "not login")
  61. // code: "4105", msg: "密码错误"enMsg: "password er
  62. // code: "9999", msg: "其它错误",enMsg: "business
  63. // code: "4107", msg: "用户名重复"enMsg: "repeat of