修复了查不到子菜单的问题(其实感觉也没改啥)

This commit is contained in:
王炜翔 2025-07-16 15:19:17 +08:00
parent 3fce35c51b
commit 0ddc553ce4

View File

@ -266,9 +266,10 @@ public class MenuService
/// </summary>
private List<MenuResponse> BuildMenuTree(List<MenuModel> allMenus)
{
var menuDict = allMenus.ToDictionary(m => m.Uuid);
var menuResponseDict = new Dictionary<string, MenuResponse>();
var rootMenus = new List<MenuResponse>();
// 第一步:创建所有菜单的响应对象
foreach (var menu in allMenus)
{
var menuResponse = new MenuResponse
@ -289,6 +290,14 @@ public class MenuService
UpdateTime = menu.UpdateTime
};
menuResponseDict[menu.Uuid] = menuResponse;
}
// 第二步:构建树形结构
foreach (var menu in allMenus)
{
var menuResponse = menuResponseDict[menu.Uuid];
if (string.IsNullOrEmpty(menu.ParentId))
{
// 根菜单
@ -297,39 +306,15 @@ public class MenuService
else
{
// 子菜单
if (menuDict.TryGetValue(menu.ParentId, out var parentMenu))
{
var parentResponse = FindMenuResponse(rootMenus, menu.ParentId);
if (parentResponse != null)
if (menuResponseDict.TryGetValue(menu.ParentId, out var parentResponse))
{
parentResponse.Children.Add(menuResponse);
}
}
}
}
return rootMenus;
}
/// <summary>
/// 在菜单树中查找指定UUID的菜单响应对象
/// </summary>
private MenuResponse? FindMenuResponse(List<MenuResponse> menus, string uuid)
{
foreach (var menu in menus)
{
if (menu.Uuid == uuid)
{
return menu;
}
var found = FindMenuResponse(menu.Children, uuid);
if (found != null)
{
return found;
}
}
return null;
}
}