axiosKc.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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 ,Toast } 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. timeout: 20000,
  23. headers: {
  24. 'Content-Type': 'application/x-www-form-urlencoded',
  25. 'pl': pl
  26. },
  27. })
  28. var bool = true; //五秒执行一次变量
  29. request.interceptors.request.use(
  30. config => {
  31. // url = config.url;
  32. // if (getWxToken()) {
  33. // config.headers['A-Token'] = getWxToken()
  34. // }
  35. return config
  36. },
  37. error => {
  38. Promise.reject(error)
  39. }
  40. )
  41. request.interceptors.response.use(
  42. response => {
  43. if (response.data.code === 0) {//请求失败
  44. Notify({
  45. message: response.data.message,
  46. color: '#ad0000',
  47. background: '#d1d1d1',
  48. });
  49. return Promise.reject('error')
  50. } else if (response.data.code === 2) {//未登录
  51. localStorage.removeItem('Wx-Token')
  52. localStorage.removeItem('wx_user_info')
  53. router.replace({
  54. name: 'courseAuth'
  55. })
  56. // return Promise.reject('error')
  57. } else if (response.data.code === 3) {//无权限
  58. router.replace({
  59. name: 'courseHome'
  60. })
  61. // return Promise.reject('error')
  62. } else if (response.data.code === 999) {//系统异常
  63. localStorage.removeItem('Wx-Token')
  64. localStorage.removeItem('wx_user_info')
  65. router.replace({
  66. name: 'courseAuth'
  67. })
  68. // return Promise.reject('error')
  69. } else {
  70. return response
  71. }
  72. },
  73. error => {
  74. if (error.message == 'interrupt') {
  75. return Promise.reject(error.message)
  76. }
  77. //五秒内只执行一次
  78. if (bool) {
  79. if (error.message == 'timeout of 10000ms exceeded') {
  80. Notify({
  81. type: 'warning',
  82. message: "网络连接超时,请稍后重试",
  83. duration: 3000,
  84. });
  85. }
  86. if (error.message == 'Network Error') {
  87. Notify({
  88. type: 'danger',
  89. message: "网络连接失败,请检查您的网络",
  90. duration: 3000,
  91. });
  92. }
  93. bool = false
  94. setTimeout(() => {
  95. bool = true
  96. }, 5000)
  97. }
  98. return Promise.reject(error)
  99. }
  100. )
  101. // 接口再次封装
  102. var CancelToken = axios.CancelToken;
  103. Vue.$httpRequestList = [];
  104. //isToken 是微信的TOKEN 用来绑定
  105. export default (type, url, data, heaStr, isToken, Content_Type) => {
  106. var Accept, ContentType
  107. var Token = ''
  108. switch (heaStr) {
  109. case undefined:
  110. Accept = 'application/json, text/plain, */*'
  111. break
  112. case '':
  113. Accept = 'application/json, text/plain, */*'
  114. break
  115. case 'v2':
  116. Accept = 'application/vnd.test.v2+json'
  117. break;
  118. case 'v3':
  119. Accept = 'application/vnd.test.v3+json'
  120. break;
  121. }
  122. if (getWxToken()) {
  123. Token = getWxToken();
  124. }else{
  125. return Promise.reject(new Error('No token, request aborted.'));
  126. }
  127. if (isToken) {
  128. Token = isToken
  129. }
  130. if (Content_Type == '' || Content_Type == undefined) {
  131. // ContentType = 'application/x-www-form-urlencoded'
  132. ContentType = 'application/json'
  133. } else {
  134. ContentType = Content_Type
  135. }
  136. return new Promise((resolve, reject) => { //封装ajax
  137. var aa = {
  138. method: type,
  139. url: url,
  140. headers: {
  141. 'Accept': Accept,
  142. 'A-Token': Token,
  143. 'Content-Type': ContentType
  144. },
  145. cancelToken: new CancelToken(c => { //强行中断请求要用到的
  146. Vue.$httpRequestList.push(c);
  147. })
  148. }
  149. var json = (type == 'get') ? Object.assign(aa, {
  150. params: data
  151. }) : Object.assign(aa, {
  152. data: data
  153. });
  154. var ajax = request(json).then(res => {
  155. resolve(res);
  156. }).catch(error => { //中断请求和请求出错的处理
  157. if (error == "interrupt") {
  158. return;
  159. } else {
  160. reject(error);
  161. }
  162. })
  163. return ajax;
  164. })
  165. };