axios.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import axios from 'axios'
  2. import store from './store'
  3. import { Notification, Message } from 'element-ui'
  4. export const BASE_URL = process.env.BASE_URL //测试-外网
  5. // export const BASE_URL = "https://api.xyyxt.net" //测试-外网
  6. export const BASE_IMG_URL = process.env.BASE_IMG_URL
  7. // export const BASE_IMG_URL = "https://file.xyyxt.net/"
  8. export const tenantId = process.env.TENANT_ID
  9. import tools from './common/tools'
  10. import router from './router'
  11. // 创建 axios 实例
  12. const request = axios.create({
  13. baseURL: BASE_URL,
  14. timeout: 30000 // 请求超时时间
  15. })
  16. // 错误处理函数
  17. const err = (error) => {
  18. let { message } = error;
  19. if (axios.isCancel(error)) {
  20. console.log('Request canceled', error.message);
  21. } else {
  22. // 处理错误
  23. if (error.response) {
  24. const data = error.response.data
  25. // const token = Vue.ls.get(ACCESS_TOKEN)
  26. if (error.response.status === 403) {
  27. }
  28. if (error.response.status === 401) {
  29. }
  30. } else if (message == "Network Error") {
  31. message = "后端接口连接异常";
  32. Message({
  33. message: message,
  34. type: 'error',
  35. duration: 5 * 1000
  36. })
  37. }
  38. else if (message.includes("timeout")) {
  39. message = "系统接口请求超时";
  40. Message({
  41. message: message,
  42. type: 'error',
  43. duration: 5 * 1000
  44. })
  45. }
  46. return Promise.reject(error)
  47. }
  48. }
  49. // request interceptor(请求拦截器)
  50. request.interceptors.request.use(config => {
  51. const token = tools.getToken()
  52. if (token && !config.noToken) {
  53. config.headers['AuthorizationToken'] = 'WX ' + token // 让每个请求携带自定义 token 请根据实际情况自行修改
  54. }
  55. config.headers['TenantId'] = store.state && store.state.TENANT_NANE ? store.state.TENANT_NANE : ""
  56. return config
  57. }, err)
  58. // response interceptor(接收拦截器)
  59. request.interceptors.response.use(async (response) => {
  60. const res = response.data
  61. const code = res.code || 200;
  62. if (code !== 200) {
  63. if (code == 401) {
  64. let userAccount = tools.getUserAccount();
  65. if (!userAccount) {
  66. // Message({
  67. // message: `登录失效,重新登录`,
  68. // type: "error",
  69. // });
  70. // setTimeout(() => {
  71. console.log('1231231')
  72. store.commit('setCurrentRouter', router.currentRoute)
  73. localStorage.removeItem('user_account')
  74. localStorage.removeItem('token')
  75. router.push({
  76. path: '/login'
  77. })
  78. return Promise.reject(res)
  79. // }, 1000);
  80. } else {
  81. let res = await refreshToken(response.config)
  82. return res
  83. }
  84. } else if (code == 409) {
  85. Notification.error({
  86. title: "您已被强制下线"
  87. })
  88. store.commit('setCurrentRouter', router.currentRoute)
  89. store.commit('setUserInfo', null)
  90. localStorage.removeItem('user_account')
  91. localStorage.removeItem('token')
  92. router.push({
  93. path: '/login'
  94. })
  95. } else if (code == 699) {
  96. window.open(res.msg)
  97. return Promise.reject("自动跳转前往祥粤云学堂")
  98. } else if (code == 500) {
  99. if (res.msg !== '无其他端在操作') {
  100. // Message({
  101. // message: res.msg,
  102. // type: "error",
  103. // });
  104. }
  105. // localStorage.removeItem('user_account')
  106. // localStorage.removeItem('token')
  107. // console.log('222222')
  108. // router.push({
  109. // path: '/login'
  110. // })
  111. return Promise.reject(res)
  112. } else {
  113. return Promise.reject(res)
  114. }
  115. } else {
  116. return res
  117. }
  118. }, err)
  119. async function refreshToken(response) {
  120. let userAccount = tools.getUserAccount();
  121. var datas = {
  122. url: '/refreshToken/' + userAccount,
  123. method: 'get',
  124. noToken: true
  125. }
  126. const res = await request(datas)
  127. if (res.code === 200) {
  128. localStorage.setItem('token', res.data.token)
  129. var userInfo = {
  130. url: '/app/user/getInfo',
  131. method: 'get',
  132. params: { fromPlat: 2 }, // 来源平台 1小程序 2PC网站
  133. }
  134. const resUser = await request(userInfo)
  135. if (resUser.data.code === 200) {
  136. store.state.userInfo = resUser.data
  137. localStorage.setItem('user_account', userAccount)
  138. num = 1;
  139. }
  140. let onset = await request(response)
  141. return onset
  142. } else {
  143. // Message({
  144. // message: `登录失效,重新登录`,
  145. // type: "error",
  146. // });
  147. // setTimeout(() => {
  148. localStorage.removeItem('user_account')
  149. localStorage.removeItem('token')
  150. console.log('33333')
  151. store.commit('setCurrentRouter', router.currentRoute)
  152. router.push({
  153. path: '/login'
  154. })
  155. // }, 1000);
  156. }
  157. }
  158. export default request