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