index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. "use strict";
  2. import axios from "axios";
  3. import router from "@/router";
  4. import {useRequestLoading} from '@/hooks/useRequestLoading'
  5. import { MessagePlugin } from 'tdesign-vue-next';
  6. import CryptoJS from '@/utils/crypto'
  7. // Full config: https://github.com/axios/axios#request-config
  8. // axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || '';
  9. // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
  10. // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
  11. //loading动画白名单
  12. const LOADINGWHITELIST=[]
  13. // 请求数
  14. let LOADINGCOUNT = 0;
  15. let LOADING;
  16. // 这里搞这个hook是为了如果要全局设置接口loading 就用这个
  17. const {isLoading,startLoading,closeLoading}=useRequestLoading()
  18. let config = {
  19. baseURL: import.meta.env.VITE_APP_API_URL,
  20. timeout: 10*60 * 1000, // Timeout
  21. // withCredentials: true, // Check cross-site Access-Control
  22. };
  23. const _axios = axios.create(config);
  24. _axios.interceptors.request.use(
  25. function (config) {
  26. // Do something before request is sent
  27. if(!LOADINGWHITELIST.includes(config.url)){
  28. if (LOADINGCOUNT === 0) {
  29. startLoading()
  30. }
  31. LOADINGCOUNT++;
  32. }
  33. config.headers.Authorization=sessionStorage.getItem('token')||''
  34. return config;
  35. },
  36. function (error) {
  37. // Do something with request error
  38. return Promise.reject(error);
  39. }
  40. );
  41. // Add a response interceptor
  42. _axios.interceptors.response.use(
  43. function (response) {
  44. // Do something with response data
  45. let data
  46. if(import.meta.env.MODE==='production'){
  47. data=JSON.parse(CryptoJS.Des3Decrypt(response.data,import.meta.env.VITE_APP_RESPONSE_DES_KEY));//解密
  48. }else{
  49. data=response.data
  50. }
  51. //关闭loading
  52. if(!LOADINGWHITELIST.includes(response.config.url)){
  53. LOADINGCOUNT--;
  54. if (LOADINGCOUNT === 0) {
  55. closeLoading()
  56. }
  57. }
  58. if(response.status!==200){
  59. setTimeout(() => {
  60. MessagePlugin.error('网络异常')
  61. }, 100);
  62. }
  63. if(!data){
  64. setTimeout(() => {
  65. MessagePlugin.error('服务器开了个小差')
  66. }, 100);
  67. }
  68. if(data.Ret===408){//token失效
  69. MessagePlugin.error(data.Msg)
  70. }
  71. if(data.Ret===403){
  72. setTimeout(() => {
  73. MessagePlugin.error(data.Msg||'网络异常')
  74. }, 100);
  75. }
  76. return data;
  77. },
  78. function (error) {
  79. //关闭loading
  80. LOADINGCOUNT--;
  81. if (LOADINGCOUNT === 0) {
  82. closeLoading()
  83. }
  84. console.log(error);
  85. setTimeout(() => {
  86. MessagePlugin.error(error.message)
  87. }, 300);
  88. // Do something with response error
  89. return Promise.reject(error);
  90. }
  91. );
  92. /**
  93. * 导出get请求方法
  94. * @url 请求地址
  95. * @params get请求参数
  96. */
  97. export const get = (url, params) => {
  98. return _axios.get(url, { params });
  99. };
  100. /**
  101. * 导出post请求方法
  102. * @url 请求地址
  103. * @params post请求参数
  104. */
  105. export const post = (url, params) => {
  106. return _axios.post(url, params);
  107. };