api.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import axios from "axios";
  2. import { ElLoading, ElMessage } from "element-plus";
  3. let current = (localStorage && localStorage.getItem('language')) || 'zh'
  4. let token = (localStorage && localStorage.getItem('token')) || 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxNTkxNTgxNjA0MSIsImxvZ2luVHlwZSI6InVzZXIiLCJ1c2VyTmFtZSI6IjE1OTE1ODE2MDQxIiwiaWF0IjoxNjgxODAzNzY1LCJqdGkiOiJhMDU4M2EwZS01M2EzLTQ1YTUtOTI1ZS1kZDgzYzU5Y2Y5MGMifQ.bdu5jqbSxSlo9LH4w_uPEuP67DUJk6w5Yqnu633OtQI'
  5. // request是一个axios实例,每一个实例你都可以单独定制它的baseURL,超时时间,请求头和一些其他配置项。
  6. const baseUrl = import.meta.env.VITE_BASE_URL; //接口统一域名
  7. const instance = axios.create({
  8. baseURL: baseUrl,
  9. // timeout: 60 * 1000, //设置超时
  10. headers: {
  11. "Content-Type": "application/json;charset=UTF-8;",
  12. "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
  13. ".AspNetCore.Culture": "c=zh-Hans|uic=zh-Hans",
  14. token:token,
  15. current,
  16. lang:current,
  17. },
  18. });
  19. let loading;
  20. //正在请求的数量
  21. let requestCount = 0;
  22. //显示loading
  23. const showLoading = () => {
  24. if (requestCount === 0) {
  25. loading = ElLoading.service({
  26. fullscreen: true,
  27. text: "Loading ",
  28. background: "rgba(0, 0, 0, 0.7)",
  29. });
  30. }
  31. requestCount++;
  32. };
  33. //隐藏loading
  34. const hideLoading = () => {
  35. requestCount--;
  36. if (requestCount == 0) {
  37. loading.close();
  38. }
  39. };
  40. //请求拦截器
  41. instance.interceptors.request.use(
  42. (config) => {
  43. console.log('config',config.loading,'if',config.loading != true)
  44. if(!config.loading){
  45. showLoading();
  46. }
  47. // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
  48. //若请求方式为post,则将data参数转为JSON字符串
  49. if (config.method === "POST") {
  50. config.data = JSON.stringify(config.data);
  51. }
  52. return config;
  53. },
  54. (error) =>
  55. // 对请求错误做些什么
  56. Promise.reject(error)
  57. );
  58. //响应拦截器
  59. instance.interceptors.response.use(
  60. (response) => {
  61. hideLoading();
  62. if (response.data.code !== 200) {
  63. ElMessage.error(response.data.message);
  64. return Promise.reject(response.data)
  65. // router.push("/");
  66. }
  67. else return response.data?.data;
  68. },
  69. (error) => {
  70. hideLoading();
  71. //响应错误
  72. let message = "";
  73. if (error.response && error.response.status) {
  74. const status = error.response.status;
  75. console.log('Error',error.response)
  76. switch (status) {
  77. case 400:
  78. message = "请求错误";
  79. break;
  80. case 401:
  81. message = "请求错误";
  82. break;
  83. case 404:
  84. message = "请求地址出错";
  85. break;
  86. case 408:
  87. message = "请求超时";
  88. break;
  89. case 500:
  90. message = "服务器内部错误!";
  91. break;
  92. case 501:
  93. message = "服务未实现!";
  94. break;
  95. case 502:
  96. message = "网关错误!";
  97. break;
  98. case 503:
  99. message = "服务不可用!";
  100. break;
  101. case 504:
  102. message = "网关超时!";
  103. break;
  104. case 505:
  105. message = "HTTP版本不受支持";
  106. break;
  107. default:
  108. message = "请求失败";
  109. }
  110. ElMessage.error(message);
  111. return Promise.reject(error);
  112. }
  113. return Promise.reject(error);
  114. }
  115. );
  116. export default instance;