多租户商城-商户小程序端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
3.9 KiB

2 years ago
2 years ago
  1. // 引入axios
  2. // import router from './../../router'
  3. import Vue from 'vue'
  4. // import promise from 'es6-promise'
  5. import axios from 'axios'
  6. import canvasConfig from '../config'
  7. // import Cookies from 'js-cookie'
  8. // import localStorage from '../storage/localStorage'
  9. // promise.polyfill()
  10. const service = axios.create({
  11. headers: {
  12. 'X-Requested-With': 'XMLHttpRequest'
  13. },
  14. withCredentials: true,
  15. timeout: 20000 // 请求超时 20s
  16. })
  17. // 请求拦截器
  18. service.interceptors.request.use(config => {
  19. // 是否为当前的请求加上请求头 token
  20. const token = canvasConfig.getToken()
  21. if (token) {
  22. if(canvasConfig.typeId === 1){
  23. config.headers['Authorization-admin'] = token
  24. } else if(canvasConfig.typeId === 3){
  25. config.headers['Authorization-business'] = token
  26. } else {
  27. config.headers['Authorization'] = token
  28. }
  29. }
  30. var locale = uni.getLocale() || 'zh'
  31. if(locale == 'zh-Hans'){
  32. locale = 'zh'
  33. }
  34. config.headers['language'] = locale
  35. var fullUrl = window.location.search;
  36. if (fullUrl.indexOf("?") != -1) {
  37. fullUrl = fullUrl.substring(1);
  38. var paramStrs = fullUrl.split("&");
  39. for(let i=0;i<paramStrs.length;i++){
  40. const newStrs = paramStrs[i].split("=");
  41. if(newStrs[0] === 'project'){
  42. config.headers['project'] = newStrs[1]
  43. break;
  44. }
  45. }
  46. }
  47. if(config.headers['project'] == undefined || config.headers['project']== ''){
  48. config.headers['project'] = '0'
  49. }
  50. return config
  51. }, error => {
  52. return Promise.reject(error)
  53. })
  54. // 响应拦截器
  55. service.interceptors.response.use(
  56. (response) => {
  57. if (response.data.code && response.data.code !=='200' && response.data.message) {
  58. Vue.prototype.$message.error(response.data.message)
  59. }
  60. return response
  61. },
  62. err => {
  63. // 失败响应
  64. if (err && err.response) {
  65. switch (err.response.status) {
  66. case 400:
  67. err.message = '请求无效,请检查参数是否正确!'
  68. break
  69. case 401:
  70. err.message = '未经授权,访问被拒!'
  71. break
  72. case 403:
  73. err.message = '拒绝访问!'
  74. break
  75. case 404:
  76. err.message = `地址不存在!`
  77. break
  78. case 408:
  79. err.message = '请求超时!'
  80. break
  81. case 500:
  82. err.message = '系统错误!'
  83. break
  84. case 501:
  85. err.message = '该方法未实现!'
  86. break
  87. case 502:
  88. err.message = '网关出错!'
  89. break
  90. case 503:
  91. err.message = '服务不可用!'
  92. break
  93. case 504:
  94. err.message = '网关请求超时'
  95. break
  96. case 505:
  97. err.message = 'HTTP版本不受支持'
  98. break
  99. default:
  100. }
  101. if (err.response.data.error) {
  102. err.message = err.response.data.error
  103. }
  104. Vue.prototype.$message.closeAll()
  105. Vue.prototype.$message.error(err.message)
  106. // router.push({name: 'error', params: {message: err.message, status: err.response.status}})
  107. }
  108. }
  109. )
  110. //真机获取
  111. service.defaults.adapter = function (config) {
  112. return new Promise((resolve, reject) => {
  113. var settle = require('axios/lib/core/settle');
  114. var buildURL = require('axios/lib/helpers/buildURL');
  115. uni.request({
  116. method: config.method.toUpperCase(),
  117. url: buildURL(config.url, config.params, config.paramsSerializer),
  118. header: config.headers,
  119. data: config.data,
  120. dataType: config.dataType,
  121. responseType: config.responseType,
  122. sslVerify: config.sslVerify,
  123. complete:function complete(response){
  124. response = {
  125. data: response.data,
  126. status: response.statusCode,
  127. errMsg: response.errMsg,
  128. header: response.header,
  129. config: config
  130. };
  131. settle(resolve, reject, response);
  132. }
  133. })
  134. })
  135. }
  136. export default service