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