index.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. import { envDomain } from '@/utils/.env.domain'
  7. // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
  8. axios.defaults.baseURL = (process.env.VUE_APP_ISPROXY * 1 ? '' : envDomain.API_DOMAIN) + '/api'
  9. axios.defaults.timeout = 20000
  10. axios.interceptors.request.use(config => {
  11. if (getToken()) {
  12. config.headers['token'] = getToken()
  13. }
  14. if (config.method === 'post') {
  15. config.params = undefined
  16. }
  17. return config
  18. }, error => Promise.resolve(error.response || error)
  19. )
  20. axios.interceptors.response.use(response => {
  21. if (response.data && response.data.code !== 200 && response.data.msg) {
  22. Message.error(response.data.msg)
  23. }
  24. if (response.data && response.data.code === 403) {
  25. store.dispatch('user/logout')
  26. setTimeout(() => {
  27. location.href = '/login'
  28. }, 200)
  29. }
  30. return response
  31. }, error => {
  32. if (error.response && error.response.data.msg) {
  33. Message.error(error.response.data.msg)
  34. } else if (error.message) {
  35. if (error.code && error.code === 'ECONNABORTED') {
  36. Message.error('连接超时')
  37. } else {
  38. Message.error(error.message)
  39. }
  40. }
  41. return Promise.resolve(error.response || error)
  42. }
  43. )
  44. export const fetch = (url, data = {}, method = 'post') => {
  45. return new Promise((resolve, reject) => {
  46. axios({
  47. url,
  48. data: method === 'post' ? data : {},
  49. params: method === 'post' ? {} : data,
  50. method
  51. }).then(res => resolve(res.data))
  52. })
  53. }
  54. Vue.prototype.$fetch = fetch