index-shop.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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. // 'Content-Security-Policy': "frame-src 'self' https://*.qq.com webcompt:;"
  24. };
  25. return config;
  26. });
  27. let isRefreshing = false;
  28. let requests = [];
  29. shopHttp.interceptor.request(
  30. config => {
  31. if(config.isToken==false){
  32. }else{
  33. config.header['token'] = uni.getStorageSync('token');
  34. }
  35. /* 请求之前拦截器 */
  36. // config.header['client'] = 'applet';
  37. config.header['client'] = 'app';
  38. // 单商户
  39. // config.header['merchant-id'] = uni.getStorageSync('merchantId') || 1;
  40. return config;
  41. },
  42. error => {
  43. return Promise.reject(error);
  44. }
  45. );
  46. // 刷新refreshToken
  47. async function handleRefreshToken(refresh_token) {
  48. const params = {};
  49. params.group = mUtil.platformGroupFilter();
  50. params.refresh_token = refresh_token;
  51. await shopHttp.post(refreshToken, params).then(async r => {
  52. store.commit('login', r.data);
  53. isRefreshing = false;
  54. });
  55. }
  56. shopHttp.interceptor.response(
  57. async response => {
  58. /* 请求之后拦截器 */
  59. switch (response.data.code) {
  60. case 200:
  61. return response.data;
  62. case 400:
  63. mUtil.toast('错误的请求');
  64. return Promise.reject(response.data.message);
  65. break;
  66. case 50020:
  67. uni.removeStorageSync('token');
  68. uni.showModal({
  69. content: '会话已过期,是否跳转登录页面?',
  70. success: confirmRes => {
  71. if (confirmRes.confirm) {
  72. uni.reLaunch({
  73. url:'/pages/research/register/login'
  74. })
  75. }
  76. }
  77. });
  78. case 50000:
  79. isRefreshing = false;
  80. if (response.config.url === refreshToken) {
  81. uni.removeStorageSync('token');
  82. await store.commit('logout');
  83. uni.showModal({
  84. content: '会话已过期,是否跳转登录页面?',
  85. success: confirmRes => {
  86. if (confirmRes.confirm) {
  87. uni.reLaunch({
  88. url:'/pages/research/register/login'
  89. })
  90. }
  91. }
  92. });
  93. break;
  94. } else {
  95. // 如果refreshToken为空 则直接跳转登录
  96. if (!store.state.refreshToken) {
  97. uni.removeStorageSync('token');
  98. await store.commit('logout');
  99. uni.showModal({
  100. content: '会话已过期,是否跳转登录页面?',
  101. success: confirmRes => {
  102. if (confirmRes.confirm) {
  103. uni.reLaunch({
  104. url:'/pages/research/register/login'
  105. })
  106. }
  107. }
  108. });
  109. // throw response.data.message;
  110. } else {
  111. // isRefreshing同一个页面只执行一次
  112. if (!isRefreshing) {
  113. isRefreshing = true;
  114. // 刷新token
  115. await handleRefreshToken(store.state.refreshToken, response);
  116. requests.forEach(cb => cb());
  117. requests = [];
  118. isRefreshing = false;
  119. return shopHttp.request(response.config);
  120. } else {
  121. return new Promise(resolve => {
  122. // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
  123. requests.push(() => {
  124. resolve(shopHttp.request(response.config));
  125. });
  126. });
  127. }
  128. }
  129. }
  130. break;
  131. case 20041:
  132. mUtil.toast(response.data.msg);
  133. setTimeout(()=>{
  134. uni.navigateBack({
  135. delta:1
  136. })
  137. },1000)
  138. return
  139. case 20047:
  140. mUtil.toast(response.data.msg);
  141. setTimeout(()=>{
  142. uni.navigateBack({
  143. delta:1
  144. })
  145. },1000)
  146. return
  147. case 20049:
  148. mUtil.toast(response.data.msg);
  149. setTimeout(()=>{
  150. uni.navigateBack({
  151. delta:1
  152. })
  153. },1000)
  154. return
  155. case 20050:
  156. mUtil.toast(response.data.msg);
  157. setTimeout(()=>{
  158. uni.navigateBack({
  159. delta:1
  160. })
  161. },1000)
  162. return
  163. case 20022:
  164. mUtil.toast(response.data.msg);
  165. setTimeout(()=>{
  166. uni.navigateBack({
  167. delta:1
  168. })
  169. },1000)
  170. return
  171. case 20057:
  172. mUtil.toast(response.data.msg);
  173. setTimeout(()=>{
  174. uni.navigateBack({
  175. delta:1
  176. })
  177. },1000)
  178. return
  179. case 20058:
  180. mUtil.toast(response.data.msg);
  181. setTimeout(()=>{
  182. uni.navigateBack({
  183. delta:1
  184. })
  185. },1000)
  186. return
  187. case 405:
  188. mUtil.toast(response.data.msg);
  189. return Promise.reject(response.data.msg);
  190. case 404:
  191. mUtil.toast(response.data.msg);
  192. return Promise.reject(response.data.msg);
  193. case 429:
  194. mUtil.toast(response.data.msg);
  195. return Promise.reject(response.data.msg);
  196. case 500:
  197. mUtil.toast(response.data.msg);
  198. return Promise.reject(response.data.msg);
  199. default:
  200. mUtil.toast(response.data.msg);
  201. return Promise.reject(response.data.msg);
  202. }
  203. },
  204. error => {
  205. return Promise.reject(error);
  206. }
  207. );
  208. export { shopHttp };