index.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import axios from 'axios'
  2. import qs from 'qs'
  3. import util from '@/js/util'
  4. import { TIME_OUT } from '@/config'
  5. import router from '@/router';
  6. import { Message } from 'element-ui'
  7. // 网络请求前拦截器
  8. axios.interceptors.request.use(resquest => {
  9. console.log(resquest)
  10. // if(resquest && resquest.data && typeof (resquest.data) === 'object'){
  11. // 若每个接口需要添加时间戳时
  12. // resquest.data.currentDateTime = util.getFormatDate('yyyy-mm-dd hh:mm:ss')
  13. // }
  14. return resquest
  15. }, error => {
  16. console.log(error)
  17. return Promise.reject(error)
  18. })
  19. // 网络响应后拦截器
  20. // 响应拦截器
  21. axios.interceptors.response.use(
  22. response => {
  23. if (response && response.status === 200 || response && response.status === 304) {
  24. return Promise.resolve(response);
  25. } else {
  26. return Promise.reject(response);
  27. }
  28. },
  29. // 服务器状态码不是200的情况
  30. error => {
  31. if (error.response.status) {
  32. switch (error.response.status) {
  33. // 401: 未登录
  34. // 未登录则跳转登录页面,并携带当前页面的路径
  35. // 在登录成功后返回当前页面,这一步需要在登录页操作。
  36. case 401:
  37. Message.error('登陆信息失效,请重新登录')
  38. localStorage.removeItem("accessToken")
  39. router.replace({
  40. path: '/',
  41. query: { redirect: router.currentRoute.fullPath }
  42. });
  43. break;
  44. // 403 token过期
  45. // 登录过期对用户进行提示
  46. // 清除本地token和清空vuex中token对象
  47. // 跳转登录页面
  48. case 403:
  49. Message.error('登陆失效,请重新登录')
  50. // 清除token
  51. localStorage.removeItem("accessToken")
  52. // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
  53. setTimeout(() => {
  54. router.replace({
  55. path: '/',
  56. query: {
  57. redirect: router.currentRoute.fullPath
  58. }
  59. });
  60. }, 1000);
  61. break;
  62. // 404请求不存在
  63. case 404:
  64. Message.error('404 Not Found')
  65. break;
  66. // 其他错误,直接抛出错误提示
  67. default:
  68. Message.error('网络错误')
  69. }
  70. return Promise.reject(error.response);
  71. }
  72. // else {
  73. // Message.error('登陆失效,请重新登录')
  74. // localStorage.removeItem("accessToken")
  75. // router.replace({
  76. // path: '/',
  77. // query: { redirect: router.currentRoute.fullPath }
  78. // });
  79. // }
  80. }
  81. );
  82. // 数据统一处理来自网络及服务器的错误
  83. function checkStatus (response) {
  84. if (response && response.status === 200 || response && response.status === 304){
  85. // Message.success('请求成功')
  86. return response.data
  87. }
  88. // if (response && response.status === 401){
  89. // localStorage.removeItem("accessToken")
  90. // router.replace({
  91. // path: '/' // 到登录页重新获取token
  92. // })
  93. // Message.error('登陆失效,请重新登录')
  94. // }
  95. // if (response && response.status === 404){
  96. // router.replace({
  97. // path: '*' // 到登录页重新获取token
  98. // })
  99. // Message.error('404 Not Found')
  100. // }
  101. // if (response && response.status === 500){
  102. // router.replace({
  103. // path: '*' // 到登录页重新获取token
  104. // })
  105. // Message.error('服务器问题')
  106. // } else {
  107. // Message.error('登陆失效,请重新登录')
  108. // localStorage.removeItem("accessToken")
  109. // router.replace({
  110. // path: '/' // 到登录页重新获取token
  111. // })
  112. // return response && response.statusText || '网络错误'
  113. // }
  114. }
  115. // 处理来自程序的异常
  116. function checkCode (response) {
  117. if (response.status && response.status !== 'ok'){
  118. response.error = response.error || '出错了!'
  119. }
  120. return response
  121. }
  122. let accessToken = localStorage.getItem("accessToken")
  123. // let accessToken = "evbOfyzBDlwwi2Tn8KTc5h3sWKsbrpbiazL7wYh7vyTs9KtJ1vANq6j3DmOwFjbL"
  124. // export default ({method = 'post', url = '', params = {}}) => {
  125. // return new Promise((resolve, reject) => {
  126. // axios[method.toLowerCase()](url, params).then(response => {
  127. // resolve(response)
  128. // }, err => {
  129. // reject(err)
  130. // }).catch(err => {
  131. // reject(err)
  132. // })
  133. // })
  134. // }
  135. export default {
  136. Tokenpost (url, data) {
  137. const params = data;
  138. return axios({
  139. method:'post',
  140. // url,
  141. url: `${url}?${qs.stringify(params)}`,
  142. timeout: TIME_OUT,
  143. data,
  144. // data: qs.stringify(data),
  145. headers:{
  146. 'Content-Type': 'application/json',
  147. // 'Content-Type':'application/x-www-form-urlencoded'
  148. }
  149. }).then(checkStatus).then(checkCode)
  150. },
  151. post (url, data) {
  152. if (!accessToken){
  153. accessToken = localStorage.getItem("accessToken");
  154. }
  155. const params = {accessToken};
  156. return axios({
  157. method:'post',
  158. // url,
  159. url: `${url}?${qs.stringify(params)}`,
  160. timeout: TIME_OUT,
  161. data,
  162. // data: qs.stringify(data),
  163. headers:{
  164. 'Content-Type': 'application/json',
  165. // 'Content-Type':'application/x-www-form-urlencoded'
  166. }
  167. }).then(checkStatus).then(checkCode)
  168. },
  169. get (url, params){
  170. return axios({
  171. method: 'get',
  172. url: `${url}?${qs.stringify(params)}`,
  173. timeout: TIME_OUT,
  174. headers:{
  175. 'Content-Type':'text/plain',
  176. },
  177. }).then(checkStatus).then(checkCode)
  178. },
  179. }