request.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import { extend } from 'umi-request';
  2. import cleanDeep from 'clean-deep';
  3. import { browser } from '@/helpers/utils';
  4. import { setLogout, setLoginError, state } from '@/state';
  5. import { postMessage } from './native-message';
  6. import { showToast } from 'vant';
  7. // import baseEvent from '@/base-event'
  8. export interface SearchInitParams {
  9. rows?: string | number;
  10. page?: string | number;
  11. }
  12. const request = extend({
  13. // requestType: 'form',
  14. hideLoading: true, // 默认都不显示加载
  15. timeout: 20000,
  16. timeoutMessage: '请求超时'
  17. });
  18. // request.use(async (ctx, next) => {
  19. // const { url, options } = ctx.req
  20. // const prefix = options.prefix || '';
  21. // const baseUrl: string = url.replace(prefix, '') || '';
  22. // const linkUrl: string = (ApiRouter as any)[baseUrl];
  23. // if (linkUrl) {
  24. // ctx.req.url = prefix + linkUrl;
  25. // }
  26. // await next();
  27. // })
  28. // 是否是初始化接口
  29. let initRequest = false;
  30. let toast: ReturnType<typeof setTimeout>;
  31. request.interceptors.request.use(
  32. (url, options: any) => {
  33. // openLoading();
  34. // console.log(options, 'request')
  35. if (!options.hideLoading) {
  36. clearTimeout(toast);
  37. // baseEvent.emit('toastShow', 'center')
  38. // clearTimeout(toast)
  39. // showLoadingToast({
  40. // message: '加载中...',
  41. // forbidClick: true,
  42. // loadingType: 'spinner',
  43. // duration: 0
  44. // })
  45. }
  46. initRequest = options.initRequest || false;
  47. const Authorization = sessionStorage.getItem('Authorization') || '';
  48. const authHeaders: any = {};
  49. if (
  50. Authorization &&
  51. ![
  52. '/api-oauth/userlogin',
  53. // `${state.platformApi}/user/getUserInfo`,
  54. '/api-oauth/open/sendSms'
  55. ].includes(url)
  56. ) {
  57. authHeaders.Authorization = Authorization;
  58. }
  59. if (state?.user?.data?.schoolInfos) {
  60. const schoolId = (state.user.data.schoolInfos || [])
  61. .map((item: any) => {
  62. return item.id;
  63. })
  64. .join(',');
  65. if (schoolId) {
  66. // console.log('schoolId', schoolId)
  67. // options.data ? (options.data.schoolId = schoolId) : null
  68. // options.params ? (options.params.schoolId = schoolId) : null
  69. authHeaders.schoolId = schoolId;
  70. }
  71. }
  72. return {
  73. url,
  74. options: {
  75. ...options,
  76. params: cleanDeep(options.params),
  77. data: cleanDeep(options.data),
  78. headers: {
  79. ...options.headers,
  80. ...authHeaders
  81. }
  82. }
  83. };
  84. },
  85. { global: false }
  86. );
  87. request.interceptors.response.use(
  88. async res => {
  89. toast = setTimeout(() => {
  90. // baseEvent.emit('toastClose', 'center')
  91. // closeToast()
  92. }, 100);
  93. if (res.status > 299 || res.status < 200) {
  94. clearTimeout(toast);
  95. const msg = '服务器错误,状态码' + res.status;
  96. // baseEvent.emit('toastClose', 'center')
  97. showToast(msg);
  98. throw new Error(msg);
  99. }
  100. const data = await res.clone().json();
  101. // 999 为特殊code码
  102. if (data.code !== 200 && data.errCode !== 0 && data.code !== 999) {
  103. let msg = data.msg || data.message || '处理失败,请重试';
  104. if (initRequest) {
  105. if (data.code === 403 || data.code === 5000) {
  106. setLogout();
  107. } else {
  108. setLoginError();
  109. }
  110. }
  111. console.log(data.code, '5104');
  112. if (!(data.code === 403 || data.code === 5000)) {
  113. clearTimeout(toast);
  114. // baseEvent.emit('toastClose', 'center')
  115. showToast(msg);
  116. }
  117. const browserInfo = browser();
  118. if (data.code === 5000 || data.code === 403) {
  119. msg += '5000';
  120. if (browserInfo.isApp) {
  121. postMessage({
  122. api: 'login'
  123. });
  124. } else {
  125. setLogout();
  126. }
  127. }
  128. throw new Error(msg);
  129. }
  130. return res;
  131. },
  132. { global: false }
  133. );
  134. export default request;