index.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import Axios from 'axios'
  2. import store from '@/store'
  3. import { Toast, Dialog } from 'vant'
  4. import { getLocalStorage } from '@/utils/storage'
  5. import { webParamsTransmit } from '@/utils/tools'
  6. import * as list from '@/utils/list'
  7. import Config from 'submodule/utils/config'
  8. const Base64 = require('js-base64').Base64
  9. const axios = Axios.create({
  10. timeout: 30000,
  11. baseURL: process.env.VUE_APP_BASE_URL
  12. })
  13. axios.interceptors.request.use(
  14. config => {
  15. if (config.url.includes('user/register/register_v2')) {
  16. // 默认微信公众号
  17. let service = 'mwxservice'
  18. if (store.state.app.inMiniprogram) {
  19. // 微信小程序
  20. service = 'miniprogram'
  21. }
  22. const headers = {
  23. Authorization: 'Basic ' + Base64.encode(service + ':123456'),
  24. Identifier: Base64.encode(service + ':org:user:role')
  25. }
  26. config.headers = headers
  27. } else {
  28. config.headers.Authorization = 'Bearer ' + store.getters.mwxtoken
  29. config.headers.Identifier = store.getters.mwxidntf
  30. }
  31. store.getters.debug && console.log('axios.interceptors.request.use...', config)
  32. // 传给接口的版本号
  33. config.headers.var = Config.vers.cur
  34. return config
  35. },
  36. error => {
  37. return Promise.reject(error)
  38. }
  39. )
  40. axios.interceptors.response.use(
  41. response => {
  42. store.getters.debug && console.log('axios.interceptors.response.use...', response)
  43. if (response.config.responseType === 'blob') {
  44. return response.data
  45. }
  46. if (response.data.code === 0) {
  47. if (response.config.url.includes('pay/member/upload_org_pic')) {
  48. Toast(response.data.message)
  49. }
  50. return Promise.resolve(response.data.data)
  51. } else if (response.data.code === 2814) {
  52. if (getLocalStorage('appType') == 1) {
  53. Toast(response.data.message)
  54. webParamsTransmit(1)
  55. } else {
  56. Toast(response.data.message)
  57. store.dispatch('clear').then(() => {
  58. location.reload() // 为了重新实例化vue-router对象 避免bug
  59. })
  60. }
  61. } else if ((response.data.code === 3012 && response.data.message.includes('校验码错误')) || response.data.code == 2223) {
  62. Toast(response.data.message)
  63. return Promise.resolve(response.data)
  64. } else if (response.data.code === 8901 && !response.config.url.includes('truck_by_platform_driver')) {
  65. if (response.data.data && response.data.data.type == null) {
  66. Toast(response.data.message)
  67. return Promise.reject(response.data.message)
  68. } else {
  69. return Promise.resolve(response.data.data)
  70. }
  71. } else {
  72. if (response.config.url.includes('pay/pay/wxpay')) {
  73. Toast(response.data.message)
  74. this.$router.replace('perpayOrder')
  75. } else if (response.config.url.includes('user/truck_driver_remove/remove')) {
  76. setTimeout(() => {
  77. Dialog.alert({
  78. title: '温馨提示',
  79. message: response.data.message
  80. }).then(() => { })
  81. }, 0)
  82. } else if (list.notMsgArrayInterface.some(item => response.config.url.includes(item))) {
  83. // 返回报错接口里所有信息,方便根据错误码定制化显示弹窗提示
  84. return Promise.reject(response.data)
  85. } else {
  86. Toast(response.data.message)
  87. }
  88. return Promise.reject(response.data.message)
  89. }
  90. },
  91. err => {
  92. if (err && err.response) {
  93. switch (err.response.status) {
  94. case 400: err.message = '请求错误(400)'; break
  95. case 401: err.message = '未授权,请重新登录(401)'; break
  96. case 403: err.message = '拒绝访问(403)'; break
  97. case 404: err.message = '请求出错(404)'; break
  98. case 408: err.message = '请求超时(408)'; break
  99. case 500: err.message = '服务器错误(500)'; break
  100. case 501: err.message = '服务未实现(501)'; break
  101. case 502: err.message = '网络错误(502)'; break
  102. case 503: err.message = '服务不可用(503)'; break
  103. case 504: err.message = '网络超时(504)'; break
  104. case 505: err.message = 'HTTP版本不受支持(505)'; break
  105. default: err.message = `连接出错(${err.response.status})!`
  106. }
  107. } else {
  108. err.message = '连接服务器失败!'
  109. }
  110. Toast(err.message)
  111. return Promise.reject(err.message)
  112. }
  113. )
  114. export default (urlObj, data = {}, method = 'POST', responseType = 'json') => {
  115. store.commit('webapi/set', { urlObj, value: Config.enums.request.before.storeValue })
  116. return axios({ url: urlObj.realUrl, method, data, responseType }).then(res => {
  117. store.commit('webapi/set', { urlObj, value: Config.enums.request.sus.storeValue })
  118. return res
  119. }).catch(err => {
  120. store.commit('webapi/set', { urlObj, value: Config.enums.request.err.storeValue })
  121. return Promise.reject(err.message)
  122. })
  123. }