index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import Vue from 'vue'
  2. import Axios from 'axios'
  3. import store from '@/store'
  4. import Config from 'submodule/utils/config'
  5. const Base64 = require('js-base64').Base64
  6. const message = (msg) => {
  7. if (Vue.prototype.$toast) {
  8. Vue.prototype.$toast(msg)
  9. } else if (Vue.prototype.$message) {
  10. Vue.prototype.$message({
  11. message: msg,
  12. type: 'error',
  13. duration: 3 * 1000
  14. })
  15. }
  16. }
  17. const axios = Axios.create({
  18. timeout: 30000,
  19. baseURL: process.env.VUE_APP_BASE_URL
  20. })
  21. axios.interceptors.request.use(
  22. config => {
  23. if (config.url.includes('user/register/register_v2')) {
  24. // 默认微信公众号
  25. let service = 'mwxservice'
  26. if (store.state.app.inMiniprogram) {
  27. // 微信小程序
  28. service = 'miniprogram'
  29. }
  30. const headers = {
  31. Authorization: 'Basic ' + Base64.encode(service + ':123456'),
  32. Identifier: Base64.encode(service + ':org:user:role')
  33. }
  34. config.headers = headers
  35. } else {
  36. config.headers.Authorization = 'Bearer ' + (store.getters.mwxtoken || store.getters.woptoken)
  37. config.headers.Identifier = (store.getters.mwxidntf || store.getters.wopidntf)
  38. }
  39. store.getters.debug && console.log('axios.interceptors.request.use...', config)
  40. // 传给接口的版本号
  41. config.headers.var = Config.vers.cur
  42. return config
  43. },
  44. error => {
  45. return Promise.reject(error)
  46. }
  47. )
  48. axios.interceptors.response.use(
  49. response => {
  50. store.getters.debug && console.log('axios.interceptors.response.use...', response)
  51. if (response.config.responseType === 'blob') {
  52. if (response.status === 200) {
  53. return response.data
  54. } else {
  55. const msg = '文件导出失败!'
  56. message(msg)
  57. return Promise.reject(msg)
  58. }
  59. }
  60. // 登录已超时,请重新登录
  61. if (response.data.code === 2814) {
  62. message(response.data.message)
  63. store.dispatch('clear').then(() => {
  64. location.reload() // 为了重新实例化vue-router对象 避免bug
  65. })
  66. }
  67. if (response.data.code === 0) {
  68. if (response.config.url.includes('pay/member/upload_org_pic')) {
  69. message(response.data.message)
  70. }
  71. return Promise.resolve(response.data.data)
  72. } else {
  73. message(response.data.message)
  74. return Promise.reject(response.data)
  75. }
  76. },
  77. err => {
  78. if (err && err.response) {
  79. switch (err.response.status) {
  80. case 400: err.message = '请求错误(400)'; break
  81. case 401: err.message = '未授权,请重新登录(401)'; break
  82. case 403: err.message = '拒绝访问(403)'; break
  83. case 404: err.message = '请求出错(404)'; break
  84. case 408: err.message = '请求超时(408)'; break
  85. case 500: err.message = '服务器错误(500)'; break
  86. case 501: err.message = '服务未实现(501)'; break
  87. case 502: err.message = '网络错误(502)'; break
  88. case 503: err.message = '服务不可用(503)'; break
  89. case 504: err.message = '网络超时(504)'; break
  90. case 505: err.message = 'HTTP版本不受支持(505)'; break
  91. default: err.message = `连接出错(${err.response.status})!`
  92. }
  93. } else {
  94. err.message = '连接服务器失败!'
  95. }
  96. message(err.message)
  97. return Promise.reject(err.message)
  98. }
  99. )
  100. export default (urlObj, data = {}, method = 'POST', responseType = 'json') => {
  101. store.commit('webapi/set', { urlObj, value: Config.enums.request.before.storeValue })
  102. return axios({ url: urlObj.realUrl, method, data, responseType: urlObj.responseType || responseType }).then(res => {
  103. store.commit('webapi/set', { urlObj, value: Config.enums.request.sus.storeValue })
  104. return res
  105. }).catch(err => {
  106. store.commit('webapi/set', { urlObj, value: Config.enums.request.err.storeValue })
  107. return Promise.reject(err)
  108. })
  109. }