index.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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.baseURL = (process.env.VUE_APP_ISPROXY * 1 ? '' : '') + '/api'
  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. return config
  17. }, error => Promise.resolve(error.response || error)
  18. )
  19. axios.interceptors.response.use(response => {
  20. if (response.data && response.data.code !== 200 && response.data.msg) {
  21. Message.error(response.data.msg)
  22. }
  23. if (response.data && response.data.code === 403) {
  24. store.dispatch('user/logout')
  25. setTimeout(() => {
  26. location.href = '/login'
  27. }, 200)
  28. }
  29. return response
  30. }, error => {
  31. if (error.response && error.response.data.msg) {
  32. Message.error(error.response.data.msg)
  33. } else if (error.message) {
  34. if (error.code && error.code === 'ECONNABORTED') {
  35. Message.error('连接超时')
  36. } else {
  37. Message.error(error.message)
  38. }
  39. }
  40. return Promise.resolve(error.response || error)
  41. }
  42. )
  43. export const fetch = (url, data = {}, method = 'post') => {
  44. return new Promise((resolve, reject) => {
  45. axios({
  46. url,
  47. data: method === 'post' ? data : {},
  48. params: method === 'post' ? {} : data,
  49. method
  50. }).then(res => resolve(res.data))
  51. })
  52. }
  53. Vue.prototype.$fetch = fetch