fix: correct menu activation status display

This commit is contained in:
duanshuwen committed 2026-08-27 10:26:12 +08:00
1 parent 1efd0d1857
commit 041d65566e
3 files changed
+41 -5

No files matched your search

@@ -1,6 +1,6 @@
import { ref, watch, type Ref } from "vue";
import { getSystemResource } from "@/api/client";
import type { SystemRoleItem } from "@/types";
import type { SystemMenuItem, SystemMenuTreeItem, SystemRoleItem } from "@/types";
export type SystemResourceResponse = { items: unknown[] };
export type SystemResourceFetcher = (resource: string) => Promise<SystemResourceResponse>;
@@ -25,6 +25,18 @@ export function buildSystemTree<T extends TreeSource>(items: T[]): Array<SystemT
return roots;
}
export function hydrateMenuTree(tree: SystemMenuTreeItem[], items: readonly SystemMenuItem[]): SystemMenuTreeItem[] {
const itemMap = new Map(items.map((item) => [item.id, item]));
const hydrate = (nodes: SystemMenuTreeItem[]): SystemMenuTreeItem[] => nodes.map((node) => {
const item = itemMap.get(node.id);
return {
...(item ? { ...item, ...node } : node),
children: hydrate(node.children ?? []),
};
});
return hydrate(tree);
}
export function filterSystemTree<T extends TreeSource>(nodes: Array<SystemTreeNode<T>>, keyword: string): Array<SystemTreeNode<T>> {
const normalized = keyword.trim().toLowerCase();
if (!normalized) return nodes;