axios.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. "use strict";
  2. import Vue from 'vue';
  3. import axios from "axios";
  4. import constants from "@/utils/constants";
  5. import storage from "@/utils/storage";
  6. import { Notification, Loading } from 'element-ui'
  7. import Store from '@/store'
  8. import Api from '@/api'
  9. import Config from '@/config'
  10. import Router from '@/router'
  11. // Full config: https://github.com/axios/axios#request-config
  12. // axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || '';
  13. // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
  14. // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
  15. // 是否正在刷新的标记
  16. let isRefreshing = false
  17. // 重试队列,每一项将是一个待执行的函数形式
  18. let retryRequests = []
  19. let loadingInstance = {}
  20. let config = {
  21. baseURL: Config.baseURL
  22. // timeout: 60 * 1000, // Timeout
  23. // withCredentials: true, // Check cross-site Access-Control
  24. };
  25. const _axios = axios.create(config);
  26. async function getLocalIPAddress() {
  27. try {
  28. var data = storage.getCookie('X-Forwarded-For')
  29. if(data){
  30. return data
  31. }
  32. const response = await axios.get('https://api.ipify.org');
  33. storage.setCookie('X-Forwarded-For',response.data)
  34. return response.data; // 提取并返回 IP 地址
  35. } catch (error) {
  36. return null; // 如果获取失败,返回null或其他错误处理
  37. }
  38. }
  39. _axios.interceptors.request.use(
  40. async function (config) {
  41. // Do something before request is sent
  42. const token = storage.getStr(constants.token)
  43. if (token) {
  44. // config.headers[constants.tokenHeader] = token
  45. }
  46. config.headers['x-project-id'] = Store.getters.projectId || ''
  47. // config.headers['X-Forwarded-For'] = await getLocalIPAddress()
  48. if (config.loading) {
  49. loadingInstance = Loading.service({})
  50. }
  51. // console.log(config)
  52. return config;
  53. },
  54. function (error) {
  55. // Do something with request error
  56. return Promise.reject(error);
  57. }
  58. );
  59. // Add a response interceptor
  60. _axios.interceptors.response.use(
  61. function (response) {
  62. const config = response.config
  63. if (config.loading) {
  64. loadingInstance.close()
  65. }
  66. let { code, message } = response.data
  67. if (code === 200 || config.responseType === 'blob') {
  68. isRefreshing = false
  69. return response.data
  70. }
  71. if (code === 401) {
  72. // var redirectUrl = Router.app._route
  73. // if(redirectUrl.path!='/login'){
  74. // var route1 = {
  75. // userName:localStorage.getItem('username'),
  76. // path:redirectUrl.path,
  77. // query:redirectUrl.query,
  78. // params:redirectUrl.params
  79. // }
  80. // storage.setObj('redirectUrl',route1)
  81. // }
  82. Router.push({
  83. path: `/login`
  84. }).then(r => {})
  85. return Promise.reject(response.data)
  86. }
  87. if (code === 402 || code===201) {
  88. Notification.error({
  89. title: '权限不足',
  90. message: message
  91. })
  92. return Promise.reject(response.data)
  93. }
  94. if(code == 806){
  95. Notification.error({
  96. title: '账号未启用',
  97. message: message
  98. })
  99. return Promise.reject(response.data)
  100. }
  101. if (code === 500) {
  102. // TODO
  103. if(response.data == '未登录'){
  104. Router.push({
  105. path: `/login`
  106. }).then(r => {})
  107. }
  108. return Promise.reject(response.data)
  109. } else if (code === 0) {
  110. isRefreshing = false
  111. Notification.error({
  112. title: '请求错误',
  113. message: message
  114. })
  115. return Promise.reject(response.data)
  116. } else {
  117. isRefreshing = false
  118. return response.data
  119. }
  120. // Do something with response data
  121. // return response;
  122. },
  123. function (error) {
  124. if(error.response.status == 404){
  125. Notification.error({
  126. title: '接口不存在',
  127. message: error.response.data.message
  128. })
  129. }else{
  130. // Do something with response error
  131. Notification.error({
  132. title: '系统错误',
  133. message: error.response.data.message
  134. })
  135. }
  136. isRefreshing = false
  137. return Promise.reject(error);
  138. }
  139. );
  140. Plugin.install = function (Vue) {
  141. Vue.axios = _axios;
  142. window.axios = _axios;
  143. Object.defineProperties(Vue.prototype, {
  144. axios: {
  145. get() {
  146. return _axios;
  147. }
  148. },
  149. $axios: {
  150. get() {
  151. return _axios;
  152. }
  153. },
  154. });
  155. };
  156. Vue.use(Plugin)
  157. export default _axios;