configure.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { compose, initial } from "@dage/service";
  2. import { getTokenInfo, removeTokenInfo } from "@dage/pc-components";
  3. import { message } from "antd";
  4. import { NoticeType } from "antd/es/message/interface";
  5. import { ResponseStatusCode } from "./types";
  6. /**
  7. * 定义请求元数据
  8. */
  9. declare global {
  10. interface DageRequestMeta {
  11. /**
  12. * 显示全局 错误信息, 默认为 false
  13. */
  14. showError?: boolean;
  15. }
  16. }
  17. const showMessage = (msg: string, type: NoticeType = "error") => {
  18. message.open({
  19. type,
  20. content: msg,
  21. duration: 4,
  22. });
  23. };
  24. initial({
  25. fetch: window.fetch.bind(window),
  26. baseURL: process.env.REACT_APP_API_URL as string,
  27. interceptor: compose(
  28. (request, next) => {
  29. const { token } = getTokenInfo();
  30. if (token) {
  31. request.headers["token"] = token;
  32. }
  33. return next();
  34. },
  35. // 登陆失效
  36. async (request, next) => {
  37. const response = await next();
  38. const { showError = true } = request.meta;
  39. if (
  40. [
  41. ResponseStatusCode.TOKEN_INVALID,
  42. ResponseStatusCode.TOKEN_INVALID2,
  43. ].includes(response.code)
  44. ) {
  45. showMessage("登录失效!");
  46. removeTokenInfo();
  47. globalThis.location.href = "#/login";
  48. } else if (response.code !== ResponseStatusCode.SUCCESS) {
  49. const message = response.__raw__.data.msg ?? "系统出差中";
  50. // 错误信息映射
  51. response.errorMessage = message;
  52. if (showError) {
  53. showMessage(message);
  54. }
  55. }
  56. return response;
  57. }
  58. ),
  59. });