http.ts 2.9 KB

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