http.ts 2.5 KB

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