request.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import axios from 'axios';
  2. import store from '@/store';
  3. import router from '@/router';
  4. import Vue from 'vue';
  5. import Qs from 'qs';
  6. import $ from 'jquery';
  7. import {
  8. getToken,
  9. getOpenId
  10. } from '@/utils/storage'
  11. axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
  12. //检测是否可以访问通
  13. var baseApiList = [process.env.VUE_APP_BACKEND_URL];
  14. var apiTypeIndex = 0;
  15. var checkApiGetBackendUrl = function(index) {
  16. $.ajax({
  17. url: baseApiList[index] + '/mobile/companyInfoApi/link',
  18. type: 'GET',
  19. async: false, //同步
  20. data: {},
  21. timeout: 3000,
  22. success: function(data, textStatus, jqXHR) {
  23. },
  24. error: function(xhr, textStatus) {
  25. console.log(index)
  26. console.log(baseApiList[index] + '异常');
  27. if (document.title.indexOf('-') > -1) {
  28. document.title = document.title.substring(0, document.title.indexOf('-')) + '-线路' + (index + 1);
  29. } else {
  30. document.title = document.title + '-线路' + (index + 1);
  31. }
  32. if (index == baseApiList.length - 1) {
  33. alert('接口无法访问,请联系开发者处理');
  34. } else {
  35. index++;
  36. apiTypeIndex = index;
  37. checkApiGetBackendUrl(index);
  38. }
  39. },
  40. complete: function() {
  41. console.log('接口通畅校验完成')
  42. }
  43. })
  44. }
  45. checkApiGetBackendUrl(apiTypeIndex);
  46. //只有当刷新的时候才会访问一次校验
  47. store.commit('SET_API_TYPE', baseApiList[apiTypeIndex]);
  48. var BACKEND_URL = baseApiList[apiTypeIndex];
  49. if (process.env.VUE_APP_NODE_NAME == 'devlopment') {
  50. //BACKEND_URL = 'http://192.168.77.162:8086/jp-housekeeper-server/'
  51. //baseApiList = ['http://127.0.0.1:8086/jp-housekeeper-server/']
  52. //BACKEND_URL="http://192.168.33.220:8086/gaoa-server/";
  53. }
  54. // 创建axios实例
  55. const service = axios.create({
  56. baseURL: BACKEND_URL,
  57. timeout: 20000,
  58. // 请求头信息
  59. headers: {
  60. 'Content-Type': 'application/x-www-form-urlencoded',
  61. 'X-Requested-With': 'XMLHttpRequest',
  62. },
  63. });
  64. //request拦截器
  65. service.interceptors.request.use(config => {
  66. let Authorization = getToken() ? getToken() : '';
  67. config.headers['Authorization'] = Authorization;
  68. return config;
  69. }, error => {
  70. //对请求错误处理
  71. return Promise.reject(error);
  72. });
  73. // response拦截器
  74. service.interceptors.response.use(
  75. response => {
  76. if (response.data.code === 200) {
  77. if (response.data.result) {
  78. return Promise.resolve(response.data.data);
  79. } else {
  80. return Promise.reject(response.data.message);
  81. }
  82. } else if (response.data.code === 415) {
  83. //这里不执行,token过期
  84. } else {
  85. //无code的情况
  86. if (response.data.result) {
  87. return Promise.resolve(response.data.data);
  88. } else {
  89. return Promise.reject(response.data.message);
  90. }
  91. // todo 根据返回值判定去向,比如token过期,未登录等等
  92. // 403 接口需要登录
  93. /* if (response.data.code === 403) {
  94. store.dispatch('clearToken');
  95. router.replace({
  96. name: 'Login',
  97. query: {
  98. redirect: router.currentRoute.fullPath
  99. }
  100. });
  101. } */
  102. return Promise.reject(response.data.message);
  103. }
  104. },
  105. error => {
  106. // alert('网络超时!请重新加载!');
  107. //console.error(error);
  108. // 判断请求异常信息中是否含有超时timeout字符串
  109. if (error.message.includes('timeout')) {
  110. return Promise.reject('请求超时,请稍后再试');
  111. } else if (error.message.includes('NetworkError')) {
  112. return Promise.reject('网络错误,请稍后再试');
  113. }
  114. return Promise.reject(error);
  115. }
  116. );
  117. export default service;