gaoluyang
2026-06-24 c0cb161bb52ce0fbdce5c66ec391d107c75e2452
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import { createApp, watchEffect } from 'vue';
import VueDOMPurifyHTML from 'vue-dompurify-html';
 
import { registerAccessDirective } from './packages\effects\access\src';
import { registerLoadingDirective } from './packages\effects\common-ui\src\loading';
import { preferences } from './packages\preferences\src';
import { initStores } from './packages\stores\src';
import './packages/styles/src';
import './packages/styles/src/antd';
 
import { useTitle } from '@vueuse/core';
 
import { $t, setupI18n } from '#/locales';
import { setupFormCreate } from '#/plugins/form-create';
 
import { initComponentAdapter } from './adapter/component';
import { initSetupVbenForm } from './adapter/form';
import App from './app.vue';
import { router } from './router';
 
async function bootstrap(namespace: string) {
  // 初始化组件适配器
  await initComponentAdapter();
 
  // 初始化表单组件
  await initSetupVbenForm();
 
  // // 设置弹窗的默认配置
  // setDefaultModalProps({
  //   fullscreenButton: false,
  // });
  // // 设置抽屉的默认配置
  // setDefaultDrawerProps({
  //   zIndex: 1020,
  // });
 
  const app = createApp(App);
  app.use(VueDOMPurifyHTML);
 
  // 注册v-loading指令
  registerLoadingDirective(app, {
    loading: 'loading', // 在这里可以自定义指令名称,也可以明确提供false表示不注册这个指令
    spinning: 'spinning',
  });
 
  // 国际化 i18n 配置
  await setupI18n(app);
 
  // 配置 pinia-store
  await initStores(app, { namespace });
 
  // 安装权限指令
  registerAccessDirective(app);
 
  // 初始化 tippy
  const { initTippy } = await import('./packages\effects\common-ui\src\tippy');
  initTippy(app);
 
  // 配置路由及路由守卫
  app.use(router);
 
  // formCreate
  setupFormCreate(app);
 
  // 配置Motion插件
  const { MotionPlugin } = await import('./packages\effects\plugins\src\motion');
  app.use(MotionPlugin);
 
  // 动态更新标题
  watchEffect(() => {
    if (preferences.app.dynamicTitle) {
      const routeTitle = router.currentRoute.value.meta?.title;
      const pageTitle =
        (routeTitle ? `${$t(routeTitle)} - ` : '') + preferences.app.name;
      useTitle(pageTitle);
    }
  });
 
  app.mount('#app');
}
 
export { bootstrap };