fix 菜单获取递归处理

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

View File

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