dongyukun
2024-11-15 1d160a52bb6d146d6130e449af0f57ba92cbe015
提交 | 用户 | 时间
820397 1 // 引入unocss css
H 2 import '@/plugins/unocss'
3
4 // 导入全局的svg图标
5 import '@/plugins/svgIcon'
6
7 // 初始化多语言
8 import { setupI18n } from '@/plugins/vueI18n'
9
10 // 引入状态管理
11 import { setupStore } from '@/store'
12
13 // 全局组件
14 import { setupGlobCom } from '@/components'
15
16 // 引入 element-plus
17 import { setupElementPlus } from '@/plugins/elementPlus'
18
19 // 引入 form-create
20 import { setupFormCreate } from '@/plugins/formCreate'
21
22 // 引入全局样式
23 import '@/styles/index.scss'
24
25 // 引入动画
26 import '@/plugins/animate.css'
27
28 // 路由
29 import router, { setupRouter } from '@/router'
30
31 // 权限
32 import { setupAuth } from '@/directives'
33
34 import { createApp } from 'vue'
35
36 import App from './App.vue'
37
38 import './permission'
39
40 import '@/plugins/tongji' // 百度统计
41 import Logger from '@/utils/Logger'
42
43 import VueDOMPurifyHTML from 'vue-dompurify-html' // 解决v-html 的安全隐患
44
e7305d 45 import WujieVue from 'wujie-vue3'
H 46
47 const { setupApp } = WujieVue
48
effbd8 49 import hostMap from "@/utils/hostMap";
H 50
51 import { micros } from '@/utils/micors'
e7305d 52
H 53 import lifecycles from '@/utils/lifecycles' // 生命周期函数
effbd8 54
H 55 // import credentialsFetch from "@/utils/fetch";
56
57 const isProduction = process.env.NODE_ENV === "production";
e7305d 58
820397 59 // 创建实例
H 60 const setupAll = async () => {
61   const app = createApp(App)
62
63   await setupI18n(app)
64
65   setupStore(app)
66
67   setupGlobCom(app)
68
69   setupElementPlus(app)
70
71   setupFormCreate(app)
72
73   setupRouter(app)
74
75   setupAuth(app)
76
77   await router.isReady()
78
79   app.use(VueDOMPurifyHTML)
80
e7305d 81   app.use(WujieVue)
H 82
820397 83   app.mount('#app')
H 84 }
85
86 setupAll()
87
effbd8 88 const degrade = window.localStorage.getItem("degrade") === "true" || !window.Proxy || !window.CustomElementRegistry;
H 89 const props = {
90   jump: (name) => {
91     router.push({ name });
92   },
93 };
94
e7305d 95 // 模拟接口查询,实现动动态子应用加载与动态路由添加
H 96 const setMiro = () =>
97   new Promise((resolve) => {
98     for (const value of micros) {
99       const obj: any = {
100         path: `/${value.name}`,
101         name: value.name,
102         component: () => import(`@/views/micro/index.vue`)
103       }
104       router.addRoute('home', obj)
effbd8 105       const attrs = isProduction ? { src: hostMap("//localhost/") } : {};
e7305d 106       setupApp({
effbd8 107         name: "fast",
H 108         url: hostMap("//localhost:90/"),
109         attrs,
e7305d 110         exec: true,
effbd8 111         alive: true,
H 112         plugins: [{ cssExcludes: ["https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"] }],
113         props,
114         // 引入了的第三方样式不需要添加credentials
115         // fetch: (url, options) =>
116         //   url.includes(hostMap("//localhost:90/")) ? credentialsFetch(url, options) : window.fetch(url, options),
117         degrade,
118         ...lifecycles,
119       });
120       // setupApp({
121       //   name: value.name,
122       //   url: getUrl(value.name, micros),
123       //   exec: true,
124       //   ...lifecycles
125       // })
e7305d 126     }
H 127     resolve(true)
128   })
129 // eslint-disable-next-line require-await
130 router.beforeEach(async (to, _from, next) => {
131   if (router.getRoutes().length <= 3) {
132     // 如果路由个数为基础路由,则说明没有进行路由和子应用添加,需要动态添加,添加完成,根据路由地址进行跳转
133     await setMiro()
134     next({
135       path: to.path,
136       query: { ...to.query }
137     })
138   } else {
139     next()
140   }
141 })
142
820397 143 Logger.prettyPrimary(`欢迎使用`, import.meta.env.VITE_APP_TITLE)