index.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import qs from 'qs'
  4. import { Message } from 'element-ui'
  5. import store from '../store/index'
  6. import { getToken } from '@/utils/auth'
  7. axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
  8. axios.defaults.baseURL = '/api/v1'
  9. axios.defaults.timeout = 20000
  10. axios.interceptors.request.use(
  11. config => {
  12. if (getToken()) {
  13. config.headers['apiToken'] = getToken()
  14. }
  15. if (config.method === 'post') {
  16. config.data = qs.stringify(config.data)
  17. config.params = undefined
  18. }
  19. return config
  20. },
  21. error => Promise.resolve(error.response || error)
  22. )
  23. axios.interceptors.response.use(
  24. response => {
  25. if (response.data && response.data.code != 200 && response.data.msg) {
  26. Message.error(response.data.msg)
  27. }
  28. if (response.data && response.data.msg && response.data.msg.indexOf('token过期') > -1) {
  29. store.dispatch('user/logout')
  30. // window.location.href = '/'
  31. }
  32. return response
  33. },
  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