request.js 4.8 KB

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