axiosKc.js 4.8 KB

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