request.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /**** request.js ****/
  2. // 导入axios
  3. import axios from 'axios'
  4. import { useAuthStore } from '@/stores/modules/auth'
  5. import { useBaseStore } from '@/stores/modules/base'
  6. import { message } from 'ant-design-vue';
  7. import utils from '@/utils/utils'
  8. import router from '@/router'
  9. let CancelToken = axios.CancelToken;
  10. let source = CancelToken.source();
  11. // 根据浏览器地址动态获取接口地址
  12. const DynamicAcquisitionURL = ()=> {
  13. var str = window.location.href;
  14. var index = str.indexOf('/');
  15. var num = 0;
  16. while(index !== -1) {
  17. num++;
  18. index = str.indexOf('/',index + 1);
  19. if (num++ === 3) {
  20. return str.slice(0, index);
  21. }
  22. }
  23. }
  24. const geolocation = ()=>{
  25. if (navigator.geolocation) {
  26. navigator.geolocation.getCurrentPosition(function(position) {
  27. let lat = position.coords.latitude;
  28. let lon = position.coords.longitude;
  29. console.log("Latitude: " + lat + " Longitude: " + lon);
  30. }, function(error) {
  31. });
  32. } else {
  33. console.log("Geolocation is not supported by this browser.");
  34. }
  35. if (navigator.connection) {
  36. // message.error({content:'当前网络速度过慢,请检查网络状态!',key:1})
  37. useBaseStore().connection = navigator.connection.downlink
  38. } else {
  39. console.log("浏览器不支持 navigator.connection API");
  40. }
  41. }
  42. //1. 创建新的axios实例,
  43. const service = axios.create({
  44. // 公共接口--这里注意后面会讲
  45. baseURL:process.env.NODE_ENV === 'production' ? DynamicAcquisitionURL():'/api',
  46. // 超时时间 单位是ms,这里设置了3s的超时时间
  47. timeout: 1000 * 60 * 5
  48. })
  49. // 2.请求拦截器
  50. service.interceptors.request.use(async config => {
  51. const token = sessionStorage.getItem('token')?sessionStorage.getItem('token'):''
  52. const appid = useAuthStore().app ? useAuthStore().app.systemappid :''
  53. //发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
  54. config.data['accesstoken'] = token
  55. config.data['systemappid'] = appid
  56. if (!config.headers) {
  57. config.headers = {}
  58. }
  59. if (!config.headers['Content-Type']) {
  60. config
  61. .headers['Content-Type'] = 'application/json;charset=UTF-8';
  62. }
  63. utils.anti_shake(config, axios);
  64. // useBaseStore().checkNeedSaveData(config, axios)
  65. geolocation()
  66. return config
  67. }, error => {
  68. Promise.reject(error)
  69. })
  70. // 3.响应拦截器
  71. service.interceptors.response.use(response => {
  72. if (response.data.code == -1) {
  73. message.error({content:response.data.msg,key:1})
  74. router.push({name:'login'})
  75. setTimeout(() => {
  76. window.location.reload();
  77. }, 500);
  78. } else {
  79. useBaseStore().canPointer = true
  80. return response.data;
  81. }
  82. }, error => {
  83. // console.log(error)
  84. // 接收到异常响应的处理开始
  85. if (error && error.response) {
  86. // 1.公共错误处理
  87. // 2.根据响应码具体处理
  88. switch (error.response.status) {
  89. case 400:
  90. message.error('错误请求')
  91. break;
  92. case 401:
  93. message.error('未授权,请重新登录')
  94. break;
  95. case 403:
  96. message.error('拒绝访问')
  97. break;
  98. case 404:
  99. message.error('请求错误,未找到该资源')
  100. break;
  101. case 405:
  102. message.error('请求方法未允许')
  103. break;
  104. case 408:
  105. message.error('请求超时')
  106. break;
  107. case 500:
  108. message.error({content:'服务器端出错',key:'服务器端出错'})
  109. break;
  110. case 501:
  111. message.error('网络未实现')
  112. break;
  113. case 502:
  114. message.error('网络错误')
  115. break;
  116. case 503:
  117. message.error('服务不可用')
  118. break;
  119. case 504:
  120. message.error('网络超时')
  121. break;
  122. case 505:
  123. message.error('http版本不支持该请求')
  124. break;
  125. default:
  126. message.error = `连接错误${error.response.status}`
  127. }
  128. } else {
  129. source.cancel('停止请求');
  130. }
  131. return Promise.resolve(error.response)
  132. })
  133. //4.导入文件
  134. export default service