From 48c25e01c079c45b26fd28958bf5412b29962e28 Mon Sep 17 00:00:00 2001
From: houzhongjian <houzhongyi@126.com>
Date: 星期二, 06 五月 2025 15:23:03 +0800
Subject: [PATCH] onMounted方法执行顺序修改

---
 src/main.ts |   95 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 93 insertions(+), 2 deletions(-)

diff --git a/src/main.ts b/src/main.ts
index 76c7247..b056fbd 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -4,6 +4,19 @@
 // 导入全局的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'
 
@@ -29,7 +42,7 @@
 import router, { setupRouter } from '@/router'
 
 // 权限
-import { setupAuth } from '@/directives'
+import { setupAuth, setupMountedFocus } from '@/directives'
 
 import { createApp } from 'vue'
 
@@ -37,14 +50,33 @@
 
 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 * as ElementPlusIconsVue from '@element-plus/icons-vue'
+
+// import credentialsFetch from "@/utils/fetch";
+
+const isProduction = process.env.NODE_ENV === "production";
+
 // 创建实例
 const setupAll = async () => {
   const app = createApp(App)
+
+  for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+    app.component(key, component)
+  }
 
   await setupI18n(app)
 
@@ -60,13 +92,72 @@
 
   setupAuth(app)
 
+  setupMountedFocus(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)

--
Gitblit v1.9.3