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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import type { MainAppProps } from "#/main";
import 'uno.css';
import '/@/design/index.less';
import 'ant-design-vue/dist/reset.css';
// 注册图标
import 'virtual:svg-icons-register';
import App from './App.vue';
import { createApp } from 'vue';
import { initAppConfigStore } from '/@/logics/initAppConfig';
import { setupErrorHandle } from '/@/logics/error-handle';
import { router, createRouter, setupRouter } from '/@/router';
import { setupRouterGuard } from '/@/router/guard';
import { setupStore } from '/@/store';
import { setupGlobDirectives } from '/@/directives';
import { setupI18n } from '/@/locales/setupI18n';
import { registerGlobComp } from '/@/components/registerGlobComp';
import { registerThirdComp } from '/@/settings/registerThirdComp';
import { useSso } from '/@/hooks/web/useSso';
import { checkIsQiankunMicro } from "/@/qiankun/micro";
import { autoUseQiankunMicro } from "/@/qiankun/micro/qiankunMicro";
import { useAppStoreWithOut } from "@/store/modules/app";
// 注册online模块lib
import { registerPackages } from '/@/utils/monorepo/registerPackages';
// 程序入口
async function main() {
if (checkIsQiankunMicro()) {
// 【JEECG作为乾坤子应用】以乾坤子应用模式启动
// await autoUseQiankunMicro(bootstrap)
await autoUseQiankunMicro(bootstrap)
} else {
// 获取参数
const props = getMainAppProps();
// 普通启动
await bootstrap(props)
}
}
main();
async function bootstrap(props?: MainAppProps) {
// 创建应用实例
const app = createApp(App);
// 【QQYUN-6329】
window['JAppRootInstance'] = app;
// 创建路由
createRouter();
// 配置存储
setupStore(app);
// 配置参数
setupProps(props);
// 多语言配置,异步情况:语言文件可以从服务器端获得
await setupI18n(app);
// 初始化内部系统配置
initAppConfigStore();
// 注册外部模块路由(注册online模块lib)
registerPackages(app);
// 注册全局组件
registerGlobComp(app);
//CAS单点登录
await useSso().ssoLogin();
// 配置路由
setupRouter(app);
// 路由保护
setupRouterGuard(router);
// 注册全局指令
setupGlobDirectives(app);
// 配置全局错误处理
setupErrorHandle(app);
// 注册第三方组件
await registerThirdComp(app);
// 当路由准备好时再执行挂载( https://next.router.vuejs.org/api/#isready)
await router.isReady();
// 挂载应用
app.mount(getMountContainer(props), true);
console.log(" vue3 app 加载完成!")
return app
}
// 获取应用挂载容器
function getMountContainer(props?: MainAppProps) {
const id = '#app';
if (!props?.container?.querySelector) {
return id;
}
return props.container.querySelector(id) ?? id;
}
// 获取主应用参数
function getMainAppProps(): MainAppProps {
// 从 queryString 中获取
const searchParams = new URLSearchParams(window.location.search);
// 隐藏侧边栏(菜单)
let hideSider = searchParams.get('hideSider') === 'true';
// 隐藏顶部
let hideHeader = searchParams.get('hideHeader') === 'true';
// 隐藏 多Tab 切换
let hideMultiTabs = searchParams.get('hideMultiTabs') === 'true';
return {
hideSider,
hideHeader,
hideMultiTabs
}
}
// 配置主应用参数
function setupProps(props?: MainAppProps) {
if (!props) {
return
}
const appStore = useAppStoreWithOut();
appStore.setMainAppProps(props);
}