axiosUser.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import axios from 'axios'
  2. import qs from 'qs'
  3. import Vue from 'vue'
  4. import store from '@/store'
  5. import Router from '@/router'
  6. import {
  7. Message,
  8. MessageBox
  9. } from 'element-ui'
  10. import {
  11. getToken,
  12. removeAllToken
  13. } from '@/utils/auth'
  14. const service = axios.create({
  15. baseURL: process.env.BASE_API,
  16. // baseURL:'https://oa.g107.com',
  17. timeout: 20000, //
  18. headers: {
  19. 'Content-Type': 'application/x-www-form-urlencoded',
  20. "Cache-Control": 'no-cache',
  21. 'pl': 'b'
  22. },
  23. transformRequest: [function (data) {
  24. return qs.stringify(data)
  25. }]
  26. })
  27. service.interceptors.request.use(
  28. config => {
  29. if (getToken()) {
  30. config.headers['A-TOKEN'] = getToken()
  31. }
  32. return config
  33. },
  34. error => {
  35. Promise.reject(error)
  36. }
  37. )
  38. // 50008:非法的token; 50012:其他客户端登录了; 401:Token 过期了; 2000 考勤系统的token过期
  39. var bool = true // 五秒执行一次变量
  40. service.interceptors.response.use(
  41. response => {
  42. const res = response.data
  43. if (res.code === 401) {
  44. MessageBox.confirm('你已被登出,请重新登录', '确定登出', {
  45. confirmButtonText: '重新登录',
  46. showClose: false,
  47. closeOnClickModal: false,
  48. closeOnPressEscape: false,
  49. showCancelButton: false,
  50. type: 'warning'
  51. }).then(() => {
  52. store.dispatch('LogOut')
  53. }).catch(() => {
  54. store.dispatch('LogOut')
  55. })
  56. return Promise.reject(response)
  57. } else if (res.code === 0) {
  58. if (res.msg == '') {
  59. return
  60. }
  61. if (bool) {
  62. Message({
  63. message: res.msg,
  64. duration: 1 * 3000
  65. })
  66. bool = false
  67. setTimeout(() => {
  68. bool = true
  69. }, 5000)
  70. } else { }
  71. return Promise.reject(response)
  72. } else if (res.code === 2001) {
  73. Message({
  74. message: res.msg
  75. })
  76. return Promise.reject(response)
  77. } else if (res.code === 999) {
  78. Message({
  79. message: res.msg
  80. })
  81. return Promise.reject(response)
  82. } else if (res.code === 3000) {
  83. Message({
  84. message: res.msg
  85. })
  86. return Promise.reject(response)
  87. } else if (res.code === 4444) {
  88. Message({
  89. message: res.msg
  90. })
  91. return Promise.reject(response)
  92. } else {
  93. return response
  94. }
  95. },
  96. error => {
  97. if (error.message == 'interrupt') { // 是强制中断请求就拦截报错
  98. return Promise.reject(error)
  99. }
  100. // 五秒内只执行一次
  101. if (bool) {
  102. Message({
  103. message: error.message == 'timeout of 20000ms exceeded' ? '请求服务器超时,请稍后重试' : '请求网络错误,请稍后重试',
  104. duration: 1 * 2000,
  105. type: 'error'
  106. })
  107. bool = false
  108. setTimeout(() => {
  109. bool = true
  110. }, 5000)
  111. } else {
  112. console.log('不执行')
  113. }
  114. return Promise.reject(error)
  115. }
  116. )
  117. // 接口再次封装
  118. var CancelToken = axios.CancelToken // 中断请求
  119. Vue.$axiosUserRequestList = []
  120. export default (type, url, data, versions, Content_Type, transform) => {
  121. var Accept, Token, ContentType, transformRequest = ''
  122. switch (versions) {
  123. case '':
  124. Accept = 'application/json, text/plain, */*'
  125. break
  126. case undefined:
  127. Accept = 'application/json, text/plain, */*'
  128. break
  129. case 'v2':
  130. Accept = 'application/vnd.test.v2+json'
  131. break
  132. case 'v3':
  133. Accept = 'application/vnd.test.v3+json'
  134. break
  135. case 'v4':
  136. Accept = 'application/vnd.test.v4+json'
  137. break
  138. }
  139. if (Content_Type == '' || Content_Type == undefined) {
  140. ContentType = 'application/x-www-form-urlencoded'
  141. } else {
  142. ContentType = Content_Type
  143. }
  144. if (transform) {
  145. transformRequest = transform
  146. }
  147. return new Promise((resolve, reject) => { // 封装ajax
  148. var aa = {
  149. method: type,
  150. url: url,
  151. headers: {
  152. 'Accept': Accept,
  153. 'Content-Type': ContentType,
  154. },
  155. cancelToken: new CancelToken(c => { // 强行中断请求要用到的
  156. Vue.$axiosUserRequestList.push(c)
  157. })
  158. }
  159. var json = (type == 'get') ? Object.assign(aa, {
  160. params: data
  161. }, transformRequest) : Object.assign(aa, {
  162. data: data
  163. }, transformRequest)
  164. var ajax = service(json).then(res => {
  165. resolve(res)
  166. }).catch(error => { // 中断请求和请求出错的处理
  167. if (error.message == 'interrupt') {
  168. return
  169. } else {
  170. reject(error)
  171. }
  172. })
  173. return ajax
  174. })
  175. }