index.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /* eslint-disable */
  2. import Request from './request';
  3. import {
  4. refreshToken
  5. } from '@/api/login';
  6. import indexConfig from '@/config/global.config.js';
  7. import mUtil from '@/common/util.js';
  8. import store from '@/store';
  9. const http = new Request();
  10. // request全局参数设置
  11. http.setConfig(config => {
  12. /* 设置全局配置 */
  13. config.baseUrl = indexConfig.baseShopUrl; /* 根域名不同 */
  14. const systemInfo = uni.getSystemInfoSync();
  15. const systemInfoHeaders = {
  16. 'device-name': systemInfo.brand, // 设备名称
  17. width: systemInfo.screenWidth, // 屏幕宽度
  18. height: systemInfo.screenHeight, // 屏幕高度
  19. os: systemInfo.platform, // 客户端平台
  20. 'os-version': systemInfo.system // 操作系统版本
  21. };
  22. config.header = {
  23. ...config.header,
  24. ...systemInfoHeaders
  25. };
  26. return config;
  27. });
  28. let isRefreshing = false;
  29. let requests = [];
  30. http.interceptor.request(
  31. config => {
  32. if (config.isToken == false) {
  33. } else {
  34. config.header['apiToken'] = uni.getStorageSync('apiToken');
  35. }
  36. /* 请求之前拦截器 */
  37. // config.header['client'] = 'applet';
  38. config.header['client'] = 'app';
  39. // 单商户
  40. // config.header['merchant-id'] = uni.getStorageSync('merchantId') || 1;
  41. return config;
  42. },
  43. error => {
  44. return Promise.reject(error);
  45. }
  46. );
  47. // 刷新refreshToken
  48. async function handleRefreshToken(refresh_token) {
  49. const params = {};
  50. params.group = mUtil.platformGroupFilter();
  51. params.refresh_token = refresh_token;
  52. await http.post(refreshToken, params).then(async r => {
  53. store.commit('login', r.data);
  54. isRefreshing = false;
  55. });
  56. }
  57. http.interceptor.response(
  58. async response => {
  59. if (response.header['refresh_token']) {
  60. store.commit('login', response.header.refresh_token);
  61. uni.setStorageSync('apiToken', response.header.refresh_token);
  62. }
  63. /* 请求之后拦截器 */
  64. switch (response.data.code) {
  65. case 200:
  66. return response.data;
  67. case 400:
  68. mUtil.toast('错误的请求');
  69. return Promise.reject(response.data.message);
  70. break;
  71. case 500:
  72. if (!response.config.hideToast) {
  73. mUtil.toast(response.data.msg);
  74. }
  75. return Promise.reject(response.data.msg);
  76. case 50000:
  77. isRefreshing = false;
  78. if (response.config.url === refreshToken) {
  79. uni.removeStorageSync('apiToken');
  80. await store.commit('logout');
  81. uni.showModal({
  82. content: '会话已过期,是否跳转登录页面?',
  83. success: confirmRes => {
  84. if (confirmRes.confirm) {
  85. // uni.removeStorageSync('shop')
  86. uni.navigateTo({
  87. url: '/pages/login/index'
  88. })
  89. }
  90. }
  91. });
  92. } else {
  93. let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
  94. let curRoute = routes[routes.length - 1].route // 获取当前页面路由,也就是最后一个打开的页面路由
  95. // 如果refreshToken为空 则直接跳转登录
  96. console.log('apiToken:' + store.state.refreshToken)
  97. if (!store.state.refreshToken) {
  98. uni.removeStorageSync('apiToken');
  99. // uni.removeStorageSync('shop')
  100. await store.commit('logout');
  101. // if (curRoute != 'pages/index/personal') {
  102. uni.navigateTo({
  103. url: "/pages/login/index"
  104. })
  105. // }
  106. throw response.data.message;
  107. break;
  108. } else {
  109. // isRefreshing同一个页面只执行一次
  110. if (!isRefreshing) {
  111. isRefreshing = true;
  112. // 刷新token
  113. await handleRefreshToken(store.state.refreshToken, response);
  114. requests.forEach(cb => cb());
  115. requests = [];
  116. isRefreshing = false;
  117. return http.request(response.config);
  118. } else {
  119. return new Promise(resolve => {
  120. // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
  121. requests.push(() => {
  122. resolve(http.request(response.config));
  123. });
  124. });
  125. }
  126. }
  127. }
  128. break;
  129. case 99999:
  130. mUtil.toast(response.data.msg);
  131. setTimeout(() => {
  132. mUtil.getCurrentPageFun('/pages/research/pay-password')
  133. }, 1000)
  134. return
  135. case 405:
  136. mUtil.toast(response.data.msg);
  137. return Promise.reject(response.data.msg);
  138. case 404:
  139. mUtil.toast(response.data.msg);
  140. return Promise.reject(response.data.msg);
  141. case 429:
  142. mUtil.toast(response.data.msg);
  143. return Promise.reject(response.data.msg);
  144. default:
  145. mUtil.toast(response.data.msg);
  146. return Promise.reject(response.data.msg);
  147. }
  148. },
  149. error => {
  150. return Promise.reject(error);
  151. }
  152. );
  153. export {
  154. http
  155. };