app.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // 运行时配置
  2. import type { RequestConfig } from 'umi';
  3. import { queryCurrent, queryAccess } from '@/Project/services/user';
  4. import { STORAGE_TYPE, LocalService } from './Frameworks/SysStorage';
  5. import { message } from 'antd';
  6. // 全局初始化数据配置,用于 Layout 用户信息和权限初始化
  7. // 更多信息见文档:https://next.umijs.org/docs/api/runtime-config#getinitialstate
  8. export async function getInitialState(): Promise<any> {
  9. let currentUser = {},
  10. access = {};
  11. let app = window.GT_APP;
  12. // 非登录页获取用户信息
  13. if (app?.isActive && !app.funcLogin.IsActive) {
  14. try {
  15. currentUser = (await queryCurrent()).data;
  16. } catch (error) {}
  17. try {
  18. access = await queryAccess(46);
  19. } catch (error) {}
  20. }
  21. return { currentUser, access, projectId: 46 };
  22. }
  23. // axios配置
  24. export const request: RequestConfig = {
  25. errorConfig: {
  26. errorThrower(res: Api.IResponseStructure) {
  27. // const { data, code, msg } = res;
  28. // if (code !== 200) {
  29. // const error: any = new Error(msg);
  30. // error.name = 'AjaxError';
  31. // error.info = { code, msg, data };
  32. // throw error;
  33. // }
  34. console.log('errorThrower', res);
  35. },
  36. errorHandler(error: any, opts: any) {
  37. if (opts?.skipErrorHandler) throw error;
  38. // 我们的 errorThrower 抛出的错误。
  39. if (error.name === 'AjaxError') {
  40. const errorInfo: Api.IResponseStructure | undefined = error.info;
  41. const inLoginPage = window.GT_APP.funcLogin.IsActive;
  42. if (!inLoginPage && errorInfo) {
  43. message.error(errorInfo.msg || errorInfo.data);
  44. }
  45. } else if (error.response) {
  46. // Axios 的错误
  47. // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
  48. message.error(`网络连接错误,请稍后重试(${error.response.status})`);
  49. } else if (error.request) {
  50. // 请求已经成功发起,但没有收到响应
  51. // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例,
  52. // 而在node.js中是 http.ClientRequest 的实例
  53. message.error('网络连接错误,请稍后重试(服务器未返回数据)。');
  54. } else {
  55. // 发送请求时出了点问题
  56. message.error('网络连接错误,请稍后重试(请求发送失败)。');
  57. }
  58. },
  59. },
  60. requestInterceptors: [
  61. (config: any) => {
  62. if (!config.headers) config.headers = {};
  63. config.headers['JWT-TOKEN'] = LocalService.getItem(STORAGE_TYPE.token);
  64. return config;
  65. },
  66. ],
  67. responseInterceptors: [
  68. (res) => {
  69. const resData = res.data as Api.IResponseStructure;
  70. const { code, msg, data } = resData;
  71. if (code !== 200) {
  72. const error: any = new Error(msg);
  73. error.name = 'AjaxError';
  74. error.info = { code, msg, data };
  75. throw error;
  76. }
  77. return res;
  78. },
  79. ],
  80. };