main.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import 'uno.css';
  2. import '@/design/index.less';
  3. import '@/components/VxeTable/src/css/index.scss';
  4. import 'ant-design-vue/dist/reset.css';
  5. // Register icon sprite
  6. import 'virtual:svg-icons-register';
  7. import { createApp } from 'vue';
  8. import { registerGlobComp } from '@/components/registerGlobComp';
  9. import { setupGlobDirectives } from '@/directives';
  10. import { setupI18n } from '@/locales/setupI18n';
  11. import { setupErrorHandle } from '@/logics/error-handle';
  12. import { initAppConfigStore } from '@/logics/initAppConfig';
  13. import { router, setupRouter } from '@/router';
  14. import { setupRouterGuard } from '@/router/guard';
  15. import { setupStore } from '@/store';
  16. import { renderWithQiankun, QiankunProps, qiankunWindow } from 'vite-plugin-qiankun/dist/helper';
  17. import { MicroAppStateActions } from 'qiankun';
  18. import { useUserStore } from '@/store/modules/user';
  19. import App from './App.vue';
  20. type AppProps = Partial<MicroAppStateActions & QiankunProps>;
  21. let app: any = null;
  22. async function bootstrap(props?: AppProps) {
  23. app = createApp(App);
  24. // Configure store
  25. // 配置 store
  26. setupStore(app);
  27. // Initialize internal system configuration
  28. // 初始化内部系统配置
  29. initAppConfigStore();
  30. // Register global components
  31. // 注册全局组件
  32. registerGlobComp(app);
  33. // Multilingual configuration
  34. // 多语言配置
  35. // Asynchronous case: language files may be obtained from the server side
  36. // 异步案例:语言文件可能从服务器端获取
  37. await setupI18n(app);
  38. // Configure routing
  39. // 配置路由
  40. setupRouter(app);
  41. // router-guard
  42. // 路由守卫
  43. setupRouterGuard(router);
  44. // Register global directive
  45. // 注册全局指令
  46. setupGlobDirectives(app);
  47. // Configure global error handling
  48. // 配置全局错误处理
  49. setupErrorHandle(app);
  50. // https://next.router.vuejs.org/api/#isready
  51. // await router.isReady();
  52. if (props) {
  53. const userStore = useUserStore();
  54. const { container, data } = props;
  55. if (container && props.onGlobalStateChange) {
  56. props.onGlobalStateChange((state, prev) => {
  57. //state: 变跟后的状态, prev:变跟前的状态
  58. console.log(state, prev);
  59. for (const key in state) {
  60. if (key === 'token') {
  61. const token = state.token;
  62. userStore.setToken(token);
  63. }
  64. if (key === 'store') {
  65. const store = state.store;
  66. const { userInfo, roleList } = store;
  67. userStore.setUserInfo(userInfo);
  68. userStore.setRoleList(roleList);
  69. }
  70. }
  71. });
  72. }
  73. if (data) {
  74. if (data.router) {
  75. const parentRouter = data.router;
  76. if (parentRouter) {
  77. app.provide('parentRouter', parentRouter);
  78. }
  79. }
  80. if (data.token) {
  81. userStore.setToken(data.token);
  82. }
  83. }
  84. app.mount(container ? <Element>container.querySelector('#app') : '#app');
  85. } else {
  86. app.mount('#app');
  87. }
  88. }
  89. if (qiankunWindow.__POWERED_BY_QIANKUN__) {
  90. renderWithQiankun({
  91. /**
  92. * 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法
  93. * @param props
  94. */
  95. mount(props: QiankunProps) {
  96. bootstrap(props);
  97. },
  98. /**
  99. * bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子
  100. */
  101. bootstrap() {
  102. // 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。
  103. },
  104. /**
  105. * 应用每次切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例
  106. */
  107. unmount(props: QiankunProps) {
  108. app.unmount();
  109. app._container.innerHTML = '';
  110. app = null;
  111. },
  112. update(props: QiankunProps) {},
  113. });
  114. } else {
  115. bootstrap();
  116. }