houzhongjian
2024-12-04 bb203eb72ee4604be8c9272cc583ecb9e393aeb8
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// 引入unocss css
import '@/plugins/unocss'
 
// 导入全局的svg图标
import '@/plugins/svgIcon'
 
import Iconify from '@iconify/iconify'
import epJson from '@iconify/json/json/ep.json'
import faJson from '@iconify/json/json/fa.json'
import faSolidJson from '@iconify/json/json/fa-solid.json'
 
Iconify.addCollection(epJson)
Iconify.addCollection(faJson)
Iconify.addCollection(faSolidJson)
 
export * from '@iconify/iconify'
 
export default Iconify
 
// 初始化多语言
import { setupI18n } from '@/plugins/vueI18n'
 
// 引入状态管理
import { setupStore } from '@/store'
 
// 全局组件
import { setupGlobCom } from '@/components'
 
// 引入 element-plus
import { setupElementPlus } from '@/plugins/elementPlus'
 
// 引入 form-create
import { setupFormCreate } from '@/plugins/formCreate'
 
// 引入全局样式
import '@/styles/index.scss'
 
// 引入动画
import '@/plugins/animate.css'
 
// 路由
import router, { setupRouter } from '@/router'
 
// 权限
import { setupAuth } from '@/directives'
 
import { createApp } from 'vue'
 
import App from './App.vue'
 
import './permission'
 
import '@/plugins/tongji' // 百度统计
import Logger from '@/utils/Logger'
 
import VueDOMPurifyHTML from 'vue-dompurify-html' // 解决v-html 的安全隐患
 
import WujieVue from 'wujie-vue3'
 
const { setupApp } = WujieVue
 
import hostMap from "@/utils/hostMap";
 
import { micros } from '@/utils/micors'
 
import lifecycles from '@/utils/lifecycles' // 生命周期函数
 
// import credentialsFetch from "@/utils/fetch";
 
const isProduction = process.env.NODE_ENV === "production";
 
// 创建实例
const setupAll = async () => {
  const app = createApp(App)
 
  await setupI18n(app)
 
  setupStore(app)
 
  setupGlobCom(app)
 
  setupElementPlus(app)
 
  setupFormCreate(app)
 
  setupRouter(app)
 
  setupAuth(app)
 
  await router.isReady()
 
  app.use(VueDOMPurifyHTML)
 
  app.use(WujieVue)
 
  app.mount('#app')
}
 
setupAll()
 
const degrade = window.localStorage.getItem("degrade") === "true" || !window.Proxy || !window.CustomElementRegistry;
const props = {
  jump: (name) => {
    router.push({ name });
  },
};
 
// 模拟接口查询,实现动动态子应用加载与动态路由添加
const setMiro = () =>
  new Promise((resolve) => {
    for (const value of micros) {
      const obj: any = {
        path: `/${value.name}`,
        name: value.name,
        component: () => import(`@/views/micro/index.vue`)
      }
      router.addRoute('home', obj)
      const attrs = isProduction ? { src: hostMap("//localhost/") } : {};
      setupApp({
        name: "fast",
        url: hostMap("//localhost:90/"),
        attrs,
        exec: true,
        alive: true,
        plugins: [{ cssExcludes: ["https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"] }],
        props,
        // 引入了的第三方样式不需要添加credentials
        // fetch: (url, options) =>
        //   url.includes(hostMap("//localhost:90/")) ? credentialsFetch(url, options) : window.fetch(url, options),
        degrade,
        ...lifecycles,
      });
      // setupApp({
      //   name: value.name,
      //   url: getUrl(value.name, micros),
      //   exec: true,
      //   ...lifecycles
      // })
    }
    resolve(true)
  })
// eslint-disable-next-line require-await
router.beforeEach(async (to, _from, next) => {
  if (router.getRoutes().length <= 3) {
    // 如果路由个数为基础路由,则说明没有进行路由和子应用添加,需要动态添加,添加完成,根据路由地址进行跳转
    await setMiro()
    next({
      path: to.path,
      query: { ...to.query }
    })
  } else {
    next()
  }
})
 
Logger.prettyPrimary(`欢迎使用`, import.meta.env.VITE_APP_TITLE)