axiosKc.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import router from '@/router'
  2. import axios from 'axios'
  3. import qs from 'qs'
  4. import Vue from 'vue'
  5. import {getWxToken,setWxToken,openError} from '@/utils/auth'
  6. import {Dialog,Notify} from 'vant'
  7. Vue.use(Dialog).use(Notify)
  8. let pl = 'a'
  9. if (window.plus) {
  10. if (navigator.userAgent.indexOf('Android') > 0) {
  11. pl = 'a'
  12. } else {
  13. pl = 'i'
  14. }
  15. } else {
  16. pl = 'b'
  17. }
  18. let url = '';
  19. const request = axios.create({
  20. // baseURL: process.env.BASE_API,
  21. baseURL: 'https://oa.g107.com',
  22. // baseURL:'http://192.168.0.66:8081',
  23. timeout: 20000,
  24. headers: {
  25. 'Content-Type': 'application/x-www-form-urlencoded',
  26. 'pl': pl
  27. },
  28. // transformRequest: [function(data) {
  29. // return qs.stringify(data)
  30. // }]
  31. })
  32. request.interceptors.request.use(
  33. config => {
  34. // url = config.url;
  35. // if (getWxToken()) {
  36. // config.headers['A-Token'] = getWxToken()
  37. // }
  38. return config
  39. },
  40. error => {
  41. Promise.reject(error)
  42. }
  43. )
  44. request.interceptors.response.use(
  45. response => {
  46. if (response.data.code === 1) {
  47. if (response.data.data&&response.data.data.utoken) {
  48. if (response.data.data.utoken != getWxToken()) {
  49. setWxToken(response.data.data.utoken)
  50. }
  51. }
  52. return response
  53. } else if (response.data.code === 401) {
  54. openError({
  55. url: url,
  56. token: getWxToken(),
  57. error: JSON.stringify(response),
  58. message: '微信账号的接口'
  59. });
  60. Dialog.alert({
  61. message: '您已登录超时,请重新登录',
  62. }).then(() => {
  63. if (window.plus) {
  64. plus.storage.clear()
  65. } else {
  66. window.localStorage.clear()
  67. }
  68. router.replace({
  69. name: 'courseHome'
  70. })
  71. });
  72. } else if (response.data.code === 0) {
  73. Notify({
  74. message: response.data.message,
  75. color: '#ad0000',
  76. background: '#d1d1d1',
  77. });
  78. return Promise.reject('error')
  79. } else if (response.data.code === 2) {
  80. Notify({
  81. message: response.data.message,
  82. color: '#ad0000',
  83. background: '#ffe1e1',
  84. });
  85. return Promise.reject('error')
  86. } else if (response.data.code === 999) {
  87. Notify({
  88. message: response.data.message,
  89. color: '#ad0000',
  90. background: '#ffe1e1',
  91. });
  92. return Promise.reject('error')
  93. } else if (response.data.code === 3) {
  94. Notify({
  95. message: response.data.message,
  96. color: '#ad0000',
  97. background: '#ffe1e1',
  98. });
  99. return Promise.reject('error')
  100. } else if (response.data.code === 0) { //系统过期
  101. Notify({
  102. message: response.data.message,
  103. color: '#ad0000',
  104. background: '#ffe1e1',
  105. });
  106. return Promise.reject('error')
  107. } else {
  108. return response
  109. }
  110. },
  111. error => {
  112. if (error.message == 'interrupt') {
  113. return Promise.reject(error.message)
  114. }
  115. return Promise.reject(error)
  116. }
  117. )
  118. // 接口再次封装
  119. var CancelToken = axios.CancelToken;
  120. Vue.$httpRequestList = [];
  121. //isToken 是微信的TOKEN 用来绑定
  122. export default (type, url, data, heaStr, isToken,Content_Type) => {
  123. var Accept,ContentType
  124. var Token = ''
  125. switch (heaStr) {
  126. case undefined:
  127. Accept = 'application/json, text/plain, */*'
  128. break
  129. case '':
  130. Accept = 'application/json, text/plain, */*'
  131. break
  132. case 'v2':
  133. Accept = 'application/vnd.test.v2+json'
  134. break;
  135. case 'v3':
  136. Accept = 'application/vnd.test.v3+json'
  137. break;
  138. }
  139. if (getWxToken()) {
  140. Token = getWxToken();
  141. }
  142. if (isToken) {
  143. Token = isToken
  144. }
  145. if (Content_Type == '' || Content_Type == undefined) {
  146. // ContentType = 'application/x-www-form-urlencoded'
  147. ContentType = 'application/json'
  148. }else{
  149. ContentType = Content_Type
  150. }
  151. return new Promise((resolve, reject) => { //封装ajax
  152. var aa = {
  153. method: type,
  154. url: url,
  155. headers: {
  156. 'Accept': Accept,
  157. 'A-Token': Token,
  158. 'Content-Type': ContentType
  159. },
  160. cancelToken: new CancelToken(c => { //强行中断请求要用到的
  161. Vue.$httpRequestList.push(c);
  162. })
  163. }
  164. var json = (type == 'get') ? Object.assign(aa, {
  165. params: data
  166. }) : Object.assign(aa, {
  167. data: data
  168. });
  169. var ajax = request(json).then(res => {
  170. resolve(res);
  171. }).catch(error => { //中断请求和请求出错的处理
  172. if (error == "interrupt") {
  173. return;
  174. } else {
  175. reject(error);
  176. }
  177. })
  178. return ajax;
  179. })
  180. };