index-shop.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. /* eslint-disable */
  2. import Request from './request-shop';
  3. import { refreshToken } from '@/api/login';
  4. import indexConfig from '@/config/global.config.js';
  5. import mUtil from '@/common/util.js';
  6. import store from '@/store';
  7. const shopHttp = new Request();
  8. // request全局参数设置
  9. shopHttp.setConfig(config => {
  10. /* 设置全局配置 */
  11. config.baseUrl = indexConfig.baseShopUrl; /* 根域名不同 */
  12. const systemInfo = uni.getSystemInfoSync();
  13. const systemInfoHeaders = {
  14. 'device-name': systemInfo.brand, // 设备名称
  15. width: systemInfo.screenWidth, // 屏幕宽度
  16. height: systemInfo.screenHeight, // 屏幕高度
  17. os: systemInfo.platform, // 客户端平台
  18. 'os-version': systemInfo.system // 操作系统版本
  19. };
  20. config.header = {
  21. ...config.header,
  22. ...systemInfoHeaders,
  23. };
  24. return config;
  25. });
  26. let isRefreshing = false;
  27. let requests = [];
  28. shopHttp.interceptor.request(
  29. config => {
  30. if(config.isToken==false){
  31. }else{
  32. config.header['token'] = uni.getStorageSync('token');
  33. }
  34. /* 请求之前拦截器 */
  35. // config.header['client'] = 'applet';
  36. config.header['client'] = 'app';
  37. // 单商户
  38. // config.header['merchant-id'] = uni.getStorageSync('merchantId') || 1;
  39. return config;
  40. },
  41. error => {
  42. return Promise.reject(error);
  43. }
  44. );
  45. // 刷新refreshToken
  46. async function handleRefreshToken(refresh_token) {
  47. const params = {};
  48. params.group = mUtil.platformGroupFilter();
  49. params.refresh_token = refresh_token;
  50. await shopHttp.post(refreshToken, params).then(async r => {
  51. store.commit('login', r.data);
  52. isRefreshing = false;
  53. });
  54. }
  55. shopHttp.interceptor.response(
  56. async response => {
  57. /* 请求之后拦截器 */
  58. switch (response.data.code) {
  59. case 200:
  60. return response.data;
  61. case 400:
  62. mUtil.toast('错误的请求');
  63. return Promise.reject(response.data.message);
  64. break;
  65. case 50020:
  66. uni.removeStorageSync('token');
  67. uni.showModal({
  68. content: '会话已过期,是否跳转登录页面?',
  69. success: confirmRes => {
  70. if (confirmRes.confirm) {
  71. uni.reLaunch({
  72. url:'/pages/research/register/login'
  73. })
  74. }
  75. }
  76. });
  77. case 50000:
  78. isRefreshing = false;
  79. if (response.config.url === refreshToken) {
  80. uni.removeStorageSync('token');
  81. await store.commit('logout');
  82. uni.showModal({
  83. content: '会话已过期,是否跳转登录页面?',
  84. success: confirmRes => {
  85. if (confirmRes.confirm) {
  86. uni.reLaunch({
  87. url:'/pages/research/register/login'
  88. })
  89. }
  90. }
  91. });
  92. break;
  93. } else {
  94. // 如果refreshToken为空 则直接跳转登录
  95. if (!store.state.refreshToken) {
  96. uni.removeStorageSync('token');
  97. await store.commit('logout');
  98. uni.showModal({
  99. content: '会话已过期,是否跳转登录页面?',
  100. success: confirmRes => {
  101. if (confirmRes.confirm) {
  102. uni.reLaunch({
  103. url:'/pages/research/register/login'
  104. })
  105. }
  106. }
  107. });
  108. // throw response.data.message;
  109. } else {
  110. // isRefreshing同一个页面只执行一次
  111. if (!isRefreshing) {
  112. isRefreshing = true;
  113. // 刷新token
  114. await handleRefreshToken(store.state.refreshToken, response);
  115. requests.forEach(cb => cb());
  116. requests = [];
  117. isRefreshing = false;
  118. return shopHttp.request(response.config);
  119. } else {
  120. return new Promise(resolve => {
  121. // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
  122. requests.push(() => {
  123. resolve(shopHttp.request(response.config));
  124. });
  125. });
  126. }
  127. }
  128. }
  129. break;
  130. case 20041:
  131. mUtil.toast(response.data.msg);
  132. setTimeout(()=>{
  133. uni.navigateBack({
  134. delta:1
  135. })
  136. },1000)
  137. return
  138. case 20047:
  139. mUtil.toast(response.data.msg);
  140. setTimeout(()=>{
  141. uni.navigateBack({
  142. delta:1
  143. })
  144. },1000)
  145. return
  146. case 20049:
  147. mUtil.toast(response.data.msg);
  148. setTimeout(()=>{
  149. uni.navigateBack({
  150. delta:1
  151. })
  152. },1000)
  153. return
  154. case 20050:
  155. mUtil.toast(response.data.msg);
  156. setTimeout(()=>{
  157. uni.navigateBack({
  158. delta:1
  159. })
  160. },1000)
  161. return
  162. case 20022:
  163. mUtil.toast(response.data.msg);
  164. setTimeout(()=>{
  165. uni.navigateBack({
  166. delta:1
  167. })
  168. },1000)
  169. return
  170. case 20057:
  171. mUtil.toast(response.data.msg);
  172. setTimeout(()=>{
  173. uni.navigateBack({
  174. delta:1
  175. })
  176. },1000)
  177. return
  178. case 20058:
  179. mUtil.toast(response.data.msg);
  180. setTimeout(()=>{
  181. uni.navigateBack({
  182. delta:1
  183. })
  184. },1000)
  185. return
  186. case 405:
  187. mUtil.toast(response.data.msg);
  188. return Promise.reject(response.data.msg);
  189. case 404:
  190. mUtil.toast(response.data.msg);
  191. return Promise.reject(response.data.msg);
  192. case 429:
  193. mUtil.toast(response.data.msg);
  194. return Promise.reject(response.data.msg);
  195. case 500:
  196. mUtil.toast(response.data.msg);
  197. return Promise.reject(response.data.msg);
  198. default:
  199. mUtil.toast(response.data.msg);
  200. return Promise.reject(response.data.msg);
  201. }
  202. },
  203. error => {
  204. return Promise.reject(error);
  205. }
  206. );
  207. export { shopHttp };