11<script setup lang="ts">
2+ import type { NgxModule } from ' @/api/ngx'
23import type { IconComponentProps } from ' @ant-design/icons-vue/es/components/Icon'
34import type { AntdIconType } from ' @ant-design/icons-vue/lib/components/AntdIcon'
45import type { Key } from ' ant-design-vue/es/_util/type'
5- import type { ComputedRef , Ref } from ' vue'
6- import EnvIndicator from ' @/components/EnvIndicator/EnvIndicator.vue'
7- import Logo from ' @/components/Logo/Logo.vue'
6+ import ngx from ' @/api/ngx'
7+ import EnvIndicator from ' @/components/EnvIndicator'
8+ import Logo from ' @/components/Logo'
9+ import { useGlobalStore } from ' @/pinia/moudule/global'
810import { routes } from ' @/routes'
911
1012const route = useRoute ()
@@ -47,6 +49,19 @@ interface Sidebar {
4749 children: Sidebar []
4850}
4951
52+ const globalStore = useGlobalStore ()
53+ const { modules, modulesMap } = storeToRefs (globalStore )
54+
55+ onMounted (() => {
56+ ngx .get_modules ().then (r => {
57+ modules .value = r
58+ modulesMap .value = r .reduce ((acc , m ) => {
59+ acc [m .name ] = m
60+ return acc
61+ }, {} as Record <string , NgxModule >)
62+ })
63+ })
64+
5065const visible: ComputedRef <Sidebar []> = computed (() => {
5166 const res: Sidebar [] = [];
5267
@@ -56,6 +71,11 @@ const visible: ComputedRef<Sidebar[]> = computed(() => {
5671 return
5772 }
5873
74+ if (s .meta && s .meta .modules && s .meta .modules ?.length > 0
75+ && ! s .meta .modules .every (m => modulesMap .value [m ]?.loaded )) {
76+ return
77+ }
78+
5979 const t: Sidebar = {
6080 path: s .path ,
6181 name: s .name as string ,
@@ -69,6 +89,11 @@ const visible: ComputedRef<Sidebar[]> = computed(() => {
6989 return
7090 }
7191
92+ if (c .meta && c .meta .modules && c .meta .modules ?.length > 0
93+ && ! c .meta .modules .every (m => modulesMap .value [m ]?.loaded )) {
94+ return
95+ }
96+
7297 t .children .push ((c as unknown as Sidebar ))
7398 })
7499 res .push (t )
0 commit comments