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);
@@ -87,48 +86,34 @@ public class MenuService : IMenuService
public async Task<List<string>> GetAssignmentCodesAsync(AssignTypeEnumType uniqueType, string uniqueData) public async Task<List<string>> GetAssignmentCodesAsync(AssignTypeEnumType uniqueType, string uniqueData)
{ {
var permissionCodes = await _dbContext.Queryable<MenuPermissionEntity>() var permissionCodes = await _dbContext.Queryable<MenuPermissionEntity>()
.Where(x => x.UniqueType == uniqueType) .Where(x => x.UniqueType == uniqueType)
.Where(x => x.UniqueValue == uniqueData) .Where(x => x.UniqueValue == uniqueData)
.Select(x => x.Code) .Select(x => x.Code)
.ToListAsync(); .ToListAsync();
var menus = await GetListAsync(PlatformEnumType.PCAdmin); var menus = await GetListAsync(PlatformEnumType.PCAdmin);
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)
{
if (menu.Items.Any())
{
var innerPermissionCodes = RecursionHandler(menu.Items, innerPermissions);
foreach (var item in innerPermissionCodes)
{
codes.Add(item);
}
}
if (!innerPermissions.Contains(menu.Code)) foreach (var menu in current.Items)
{
var currentAdd = RecursionHandler(menu, innerPermissions, add || innerPermissions.Contains(menu.Code));
if (currentAdd && !innerPermissions.Contains(current.Code))
{ {
foreach (var item in menu.Items.Select(x => x.Code)) innerPermissions.Add(current.Code);
{
codes.Add(item);
}
} }
} }
return codes.ToList(); return add;
} }
} }
@@ -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)