index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import { Message } from 'element-ui'
  4. import store from '../store/index'
  5. import { getToken } from '@/utils/auth'
  6. // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
  7. // axios.defaults.withCredentials = false
  8. axios.defaults.timeout = 20000
  9. axios.interceptors.request.use(config => {
  10. if (getToken()) {
  11. config.headers['token'] = getToken()
  12. }
  13. if (config.method === 'post') {
  14. config.params = undefined
  15. }
  16. // 临时打补丁
  17. if (/^\/v1\//.test(config.url)) {
  18. config.url = '/api/admin' + config.url
  19. }
  20. return config
  21. }, error => Promise.resolve(error.response || error)
  22. )
  23. axios.interceptors.response.use(response => {
  24. if (response.data && response.data.code !== 200 && response.data.msg) {
  25. Message.error(response.data.msg)
  26. }
  27. if (response.data && (response.data.code === 403 || response.data.code === 401)) {
  28. store.dispatch('user/logout')
  29. setTimeout(() => {
  30. location.href = '/login'
  31. }, 200)
  32. }
  33. return response
  34. }, error => {
  35. if (error.response && error.response.data.msg) {
  36. Message.error(error.response.data.msg)
  37. } else if (error.message) {
  38. if (error.code && error.code === 'ECONNABORTED') {
  39. Message.error('连接超时')
  40. } else {
  41. Message.error(error.message)
  42. }
  43. }
  44. return Promise.resolve(error.response || error)
  45. }
  46. )
  47. export const fetch = (url, data = {}, method = 'post') => {
  48. return new Promise((resolve, reject) => {
  49. axios({
  50. url,
  51. data: method === 'post' ? data : {},
  52. params: method === 'post' ? {} : data,
  53. method
  54. }).then(res => resolve(res.data))
  55. })
  56. }
  57. Vue.prototype.$fetch = fetch