http.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import axios from "axios";
  2. import history from "./history";
  3. import { getTokenInfo, removeTokenInfo } from "./storage";
  4. import store from "@/store";
  5. import { MessageFu } from "./message";
  6. import { domShowFu } from "./domShow";
  7. const envFlag = process.env.NODE_ENV === "development";
  8. const baseUrlTemp = "https://sit-shoubov2.4dage.com"; // 测试环境
  9. // const baseUrlTemp = "http://192.168.20.61:8070"; // 线下环境
  10. const baseFlag = baseUrlTemp.includes("https://");
  11. // 请求基地址
  12. export const baseURL = envFlag
  13. ? `${baseUrlTemp}${baseFlag ? "" : "/api/"}`
  14. : "";
  15. // 处理 类型“AxiosResponse<any, any>”上不存在属性“code”
  16. declare module "axios" {
  17. interface AxiosResponse {
  18. code: number;
  19. timestamp: string;
  20. // 这里追加你的参数
  21. }
  22. }
  23. // 创建 axios 实例
  24. const http = axios.create({
  25. baseURL: `${baseURL}${baseFlag ? "/api/" : ""}`,
  26. timeout: 10000,
  27. });
  28. let axajInd = 0;
  29. // 请求拦截器
  30. http.interceptors.request.use(
  31. function (config: any) {
  32. // 发请求前打开加载提示
  33. domShowFu("#AsyncSpinLoding", true);
  34. axajInd++;
  35. const { token } = getTokenInfo();
  36. if (token) config.headers.token = token;
  37. return config;
  38. },
  39. function (err) {
  40. return Promise.reject(err);
  41. }
  42. );
  43. let timeId = -1;
  44. // 响应拦截器
  45. http.interceptors.response.use(
  46. function (response) {
  47. // 请求回来的关闭加载提示
  48. axajInd--;
  49. if (axajInd === 0) {
  50. domShowFu("#AsyncSpinLoding", false);
  51. }
  52. if (response.data.code === 5001 || response.data.code === 5002) {
  53. removeTokenInfo();
  54. history.push("/login");
  55. clearTimeout(timeId);
  56. timeId = window.setTimeout(() => {
  57. MessageFu.warning("登录失效!");
  58. }, 200);
  59. } else if (response.data.code === 0) {
  60. // MessageFu.success(response.data.msg);
  61. } else if (response.data.code !== 3014)
  62. MessageFu.warning(response.data.msg);
  63. return response.data;
  64. },
  65. async function (err) {
  66. clearTimeout(timeId);
  67. timeId = window.setTimeout(() => {
  68. axajInd = 0;
  69. domShowFu("#AsyncSpinLoding", false);
  70. // 如果因为网络原因,response没有,给提示消息
  71. if (!err.response) {
  72. if (store.getState().A0Layout.closeUpFile.state)
  73. MessageFu.warning("取消上传!");
  74. else MessageFu.error("网络繁忙,请稍后重试!");
  75. } else {
  76. if (
  77. err.response &&
  78. err.response.data &&
  79. err.response.data.msg &&
  80. err.response.data.msg.length < 30
  81. ) {
  82. MessageFu.error(err.response.data.msg);
  83. // 没有权限
  84. if (err.response.data.code === 5003) {
  85. removeTokenInfo();
  86. history.push("/login");
  87. }
  88. } else MessageFu.error("响应错误,请联系管理员!");
  89. }
  90. }, 100);
  91. return Promise.reject(err);
  92. }
  93. );
  94. // 导出 axios 实例
  95. export default http;