82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { createApp, watchEffect } from 'vue';
 | ||
| import VueDOMPurifyHTML from 'vue-dompurify-html';
 | ||
| 
 | ||
| import { registerAccessDirective } from '@vben/access';
 | ||
| import { registerLoadingDirective } from '@vben/common-ui/es/loading';
 | ||
| import { preferences } from '@vben/preferences';
 | ||
| import { initStores } from '@vben/stores';
 | ||
| import '@vben/styles';
 | ||
| import '@vben/styles/antd';
 | ||
| 
 | ||
| import { useTitle } from '@vueuse/core';
 | ||
| 
 | ||
| import { $t, setupI18n } from '#/locales';
 | ||
| import { setupFormCreate } from '#/plugins/form-create';
 | ||
| 
 | ||
| import { initComponentAdapter } from './adapter/component';
 | ||
| import App from './app.vue';
 | ||
| import { router } from './router';
 | ||
| 
 | ||
| async function bootstrap(namespace: string) {
 | ||
|   // 初始化组件适配器
 | ||
|   await initComponentAdapter();
 | ||
| 
 | ||
|   // // 设置弹窗的默认配置
 | ||
|   // setDefaultModalProps({
 | ||
|   //   fullscreenButton: false,
 | ||
|   // });
 | ||
|   // // 设置抽屉的默认配置
 | ||
|   // setDefaultDrawerProps({
 | ||
|   //   zIndex: 1020,
 | ||
|   // });
 | ||
| 
 | ||
|   const app = createApp(App);
 | ||
| 
 | ||
|   // 注册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('@vben/common-ui/es/tippy');
 | ||
|   initTippy(app);
 | ||
| 
 | ||
|   // 配置路由及路由守卫
 | ||
|   app.use(router);
 | ||
| 
 | ||
|   // formCreate
 | ||
|   setupFormCreate(app);
 | ||
| 
 | ||
|   // vue-dompurify-html
 | ||
|   // TODO @dhb52:VueDOMPurifyHTML 是不是不用引入哈?
 | ||
|   app.use(VueDOMPurifyHTML);
 | ||
| 
 | ||
|   // 配置Motion插件
 | ||
|   const { MotionPlugin } = await import('@vben/plugins/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 };
 |