多租户商城-商户小程序端
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.

161 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 project = "";
  36. // #ifdef H5
  37. var fullUrl = window.location.search;
  38. if (fullUrl.indexOf("?") != -1) {
  39. fullUrl = fullUrl.substring(1);
  40. var paramStrs = fullUrl.split("&");
  41. for(let i=0;i<paramStrs.length;i++){
  42. const newStrs = paramStrs[i].split("=");
  43. if(newStrs[0] === 'project'){
  44. project = newStrs[1]
  45. break;
  46. }
  47. }
  48. }
  49. // #endif
  50. if(!project){
  51. project = uni.getStorageSync('project');
  52. }
  53. config.headers['project'] = project
  54. return config
  55. }, error => {
  56. return Promise.reject(error)
  57. })
  58. // 响应拦截器
  59. service.interceptors.response.use(
  60. (response) => {
  61. if (response.data.code && response.data.code !=='200' && response.data.message) {
  62. Vue.prototype.$message.error(response.data.message)
  63. }
  64. return response
  65. },
  66. err => {
  67. // 失败响应
  68. if (err && err.response) {
  69. switch (err.response.status) {
  70. case 400:
  71. err.message = '请求无效,请检查参数是否正确!'
  72. break
  73. case 401:
  74. err.message = '未经授权,访问被拒!'
  75. break
  76. case 403:
  77. err.message = '拒绝访问!'
  78. break
  79. case 404:
  80. err.message = `地址不存在!`
  81. break
  82. case 408:
  83. err.message = '请求超时!'
  84. break
  85. case 500:
  86. err.message = '系统错误!'
  87. break
  88. case 501:
  89. err.message = '该方法未实现!'
  90. break
  91. case 502:
  92. err.message = '网关出错!'
  93. break
  94. case 503:
  95. err.message = '服务不可用!'
  96. break
  97. case 504:
  98. err.message = '网关请求超时'
  99. break
  100. case 505:
  101. err.message = 'HTTP版本不受支持'
  102. break
  103. default:
  104. }
  105. if (err.response.data.error) {
  106. err.message = err.response.data.error
  107. }
  108. Vue.prototype.$message.closeAll()
  109. Vue.prototype.$message.error(err.message)
  110. // router.push({name: 'error', params: {message: err.message, status: err.response.status}})
  111. }
  112. }
  113. )
  114. //真机获取
  115. service.defaults.adapter = function (config) {
  116. return new Promise((resolve, reject) => {
  117. var settle = require('axios/lib/core/settle');
  118. var buildURL = require('axios/lib/helpers/buildURL');
  119. uni.request({
  120. method: config.method.toUpperCase(),
  121. url: buildURL(config.url, config.params, config.paramsSerializer),
  122. header: config.headers,
  123. data: config.data,
  124. dataType: config.dataType,
  125. responseType: config.responseType,
  126. sslVerify: config.sslVerify,
  127. complete:function complete(response){
  128. response = {
  129. data: response.data,
  130. status: response.statusCode,
  131. errMsg: response.errMsg,
  132. header: response.header,
  133. config: config
  134. };
  135. settle(resolve, reject, response);
  136. }
  137. })
  138. })
  139. }
  140. export default service