http.ts 2.9 KB

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