fix 菜单获取递归处理
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user