diff --git a/src/layouts/components/AppMain.vue b/src/layouts/components/AppMain.vue index 15500823..dbe8980f 100644 --- a/src/layouts/components/AppMain.vue +++ b/src/layouts/components/AppMain.vue @@ -1,5 +1,7 @@ @@ -12,6 +14,7 @@ const tagsViewStore = useTagsViewStore() + diff --git a/src/layout/components/comp-consumer.ts b/src/layouts/components/CompConsumer/index.ts similarity index 58% rename from src/layout/components/comp-consumer.ts rename to src/layouts/components/CompConsumer/index.ts index 60d2438e..7f71ec74 100644 --- a/src/layout/components/comp-consumer.ts +++ b/src/layouts/components/CompConsumer/index.ts @@ -1,34 +1,33 @@ -import { useTagsViewStore } from "@/store/modules/tags-view" -import type { VNode } from "vue" -import { h } from "vue" -import { KeepAlive, cloneVNode, createVNode, defineComponent } from "vue" +import { type VNode, cloneVNode, createVNode, defineComponent, h, KeepAlive } from "vue" import { useRoute } from "vue-router" +import { useTagsViewStore } from "@/store/modules/tags-view" + interface CompConsumerProps { - component?: VNode + component: VNode } + const compMap = new Map() + export const CompConsumer = defineComponent( (props: CompConsumerProps) => { const tagsViewStore = useTagsViewStore() const route = useRoute() return () => { const component = props.component - // 判断当前是否包含name,如果不包含name,那就直接处理掉name + // 判断当前是否包含 name,如果不包含name,那就直接处理掉 name if (!route.name) return component - // 获取当前组件的name - const compName = (component?.type as any)?.name + // 获取当前组件的 name + const compName = (component.type as any)?.name const routeName = route.name as string let Comp: VNode if (compMap.has(routeName)) { - // @ts-expect-error this is Node - Comp = compMap.get(routeName) + Comp = compMap.get(routeName)! } else { - const node = cloneVNode(component!) - if (compName && compName === routeName) - // @ts-expect-error this is obj - node.type.name = `__${compName}__` + "CUSTOM_NAME" + const node = cloneVNode(component) + if (compName && compName === routeName) { + ;(node.type as any).name = `__${compName}__CUSTOM_NAME` + } // @ts-expect-error this is VNode - // eslint-disable-next-line vue/one-component-per-file Comp = defineComponent({ name: routeName, setup() { @@ -47,7 +46,6 @@ export const CompConsumer = defineComponent( } ) } - // eslint-disable-next-line vue/one-component-per-file }, { name: "CompConsumer",