fix 菜单获取递归处理
This commit is contained in:
@@ -78,7 +78,6 @@ public class MenuService : IMenuService
|
||||
Code = x,
|
||||
UniqueType = request.UniqueType,
|
||||
UniqueValue = request.UniqueValue
|
||||
|
||||
}).ToList();
|
||||
|
||||
await _dbContext.InsertAsync(permissions);
|
||||
@@ -96,39 +95,25 @@ public class MenuService : IMenuService
|
||||
|
||||
foreach (var menu in menus)
|
||||
{
|
||||
if (menu.Items.Any())
|
||||
{
|
||||
var codes = RecursionHandler(menu.Items, permissionCodes);
|
||||
permissionCodes.RemoveAll(x => codes.Contains(x));
|
||||
}
|
||||
RecursionHandler(menu, permissionCodes, permissionCodes.Contains(menu.Code));
|
||||
}
|
||||
|
||||
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>();
|
||||
foreach (var menu in menus)
|
||||
if (add) innerPermissions.Add(current.Code);
|
||||
|
||||
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);
|
||||
foreach (var item in innerPermissionCodes)
|
||||
{
|
||||
codes.Add(item);
|
||||
innerPermissions.Add(current.Code);
|
||||
}
|
||||
}
|
||||
|
||||
if (!innerPermissions.Contains(menu.Code))
|
||||
{
|
||||
foreach (var item in menu.Items.Select(x => x.Code))
|
||||
{
|
||||
codes.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return codes.ToList();
|
||||
return add;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,6 +135,7 @@ public class MenuService : IMenuService
|
||||
{
|
||||
return await GetListAsync(PlatformEnumType.PCAdmin);
|
||||
}
|
||||
|
||||
return new List<MenuResponse>();
|
||||
}
|
||||
|
||||
@@ -229,7 +215,6 @@ public class MenuService : IMenuService
|
||||
|
||||
private async Task CheckAsync(SaveMenuRequest request)
|
||||
{
|
||||
|
||||
//检查重复code
|
||||
var exists = await _dbContext.Queryable<MenuEntity>()
|
||||
.Where(x => x.Code == request.Code)
|
||||
|
||||
Reference in New Issue
Block a user