fix 菜单获取递归处理

This commit is contained in:
2024-04-24 22:16:20 +08:00
parent c03fd748a3
commit 62596ee61d

View File

@@ -78,7 +78,6 @@ public class MenuService : IMenuService
Code = x, Code = x,
UniqueType = request.UniqueType, UniqueType = request.UniqueType,
UniqueValue = request.UniqueValue UniqueValue = request.UniqueValue
}).ToList(); }).ToList();
await _dbContext.InsertAsync(permissions); await _dbContext.InsertAsync(permissions);
@@ -96,39 +95,25 @@ public class MenuService : IMenuService
foreach (var menu in menus) foreach (var menu in menus)
{ {
if (menu.Items.Any()) RecursionHandler(menu, permissionCodes, permissionCodes.Contains(menu.Code));
{
var codes = RecursionHandler(menu.Items, permissionCodes);
permissionCodes.RemoveAll(x => codes.Contains(x));
}
} }
return permissionCodes; return permissionCodes;
static List<string> RecursionHandler(List<MenuResponse> menus, List<string> innerPermissions) static bool RecursionHandler(MenuResponse current, List<string> innerPermissions, bool add)
{ {
var codes = new HashSet<string>(); if (add) innerPermissions.Add(current.Code);
foreach (var menu in menus)
foreach (var menu in current.Items)
{ {
if (menu.Items.Any()) var currentAdd = RecursionHandler(menu, innerPermissions, add || innerPermissions.Contains(menu.Code));
if (currentAdd && !innerPermissions.Contains(current.Code))
{ {
var innerPermissionCodes = RecursionHandler(menu.Items, innerPermissions); innerPermissions.Add(current.Code);
foreach (var item in innerPermissionCodes)
{
codes.Add(item);
} }
} }
if (!innerPermissions.Contains(menu.Code)) return add;
{
foreach (var item in menu.Items.Select(x => x.Code))
{
codes.Add(item);
}
}
}
return codes.ToList();
} }
} }
@@ -150,6 +135,7 @@ public class MenuService : IMenuService
{ {
return await GetListAsync(PlatformEnumType.PCAdmin); return await GetListAsync(PlatformEnumType.PCAdmin);
} }
return new List<MenuResponse>(); return new List<MenuResponse>();
} }
@@ -229,7 +215,6 @@ public class MenuService : IMenuService
private async Task CheckAsync(SaveMenuRequest request) private async Task CheckAsync(SaveMenuRequest request)
{ {
//检查重复code //检查重复code
var exists = await _dbContext.Queryable<MenuEntity>() var exists = await _dbContext.Queryable<MenuEntity>()
.Where(x => x.Code == request.Code) .Where(x => x.Code == request.Code)