request.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { extend } from "umi-request";
  2. import { closeToast, showToast } from "vant";
  3. import cleanDeep from "clean-deep";
  4. import whiteUrl from "../constant/whiteUrl";
  5. import { storeData } from "../store";
  6. import { browser, getToken } from ".";
  7. import { postMessage } from "./native-message";
  8. import { eventGlobal } from "../pc/component/upload-to-tasks/state";
  9. const apiRouter = whiteUrl();
  10. const browserInfo = browser();
  11. const request = extend({
  12. requestType: "form",
  13. timeout: 30000,
  14. });
  15. request.interceptors.request.use(
  16. (url, options) => {
  17. const _prefix = storeData.proxy + storeData.platformApi;
  18. // 只有后台才去设置
  19. if (storeData.platformType === "WEB" && (apiRouter as any)[url]) {
  20. url = (apiRouter as any)[url];
  21. }
  22. const Authorization = getToken();
  23. const authHeaders: any = {};
  24. if (Authorization) {
  25. authHeaders.Authorization = Authorization;
  26. }
  27. return {
  28. url: _prefix + url,
  29. options: {
  30. ...options,
  31. params: options.params,
  32. data: options.data,
  33. headers: {
  34. ...options.headers,
  35. ...authHeaders,
  36. },
  37. },
  38. };
  39. },
  40. { global: false }
  41. );
  42. request.interceptors.response.use(
  43. async (res, options) => {
  44. if (res.status > 299 || res.status < 200) {
  45. // 判断是否有资源需要证书,不提示错误信息
  46. if (res.status === 511) {
  47. eventGlobal.emit('auth-not-installed');
  48. closeToast()
  49. } else {
  50. const msg = res.statusText + ", 状态码" + res.status;
  51. showToast(msg);
  52. throw new Error(msg);
  53. }
  54. }
  55. const data = await res.clone().json();
  56. if (data.code === 5000) {
  57. // 判断是否在应用中
  58. window.parent.postMessage(
  59. {
  60. api: "onLogin",
  61. },
  62. "*"
  63. );
  64. setTimeout(() => {
  65. window.location.href = `${/(192|localhost)/.test(location.origin) ? "https://test.lexiaoya.cn" : location.origin}/classroom`;
  66. }, 500);
  67. return;
  68. }
  69. if (data.code !== 200 && data.errCode !== 0) {
  70. const msg = data.msg || data.message || "处理失败,请重试";
  71. if (data.code === 5000) {
  72. return data;
  73. }
  74. if (!(data.code === 403 || data.code === 401)) {
  75. showToast(msg);
  76. }
  77. throw new Error(msg);
  78. }
  79. return data;
  80. },
  81. { global: false }
  82. );
  83. export default request;