| | |
| | | /// 查询菜单列表 |
| | | /// </summary> |
| | | public class GetMenusQueryHandler( |
| | | IRepository<Menu> menuRep) |
| | | IRepository<Menu> rep) |
| | | : IRequestHandler<GetMenusQuery, List<GetMenusQueryResultItem>> |
| | | { |
| | | private readonly IRepository<Menu> menuRep = menuRep; |
| | | private readonly IRepository<Menu> rep = rep; |
| | | |
| | | /// <inheritdoc/> |
| | | public async Task<List<GetMenusQueryResultItem>> Handle(GetMenusQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var q = menuRep.AsQueryable().AsNoTracking() |
| | | var q = rep.AsQueryable().AsNoTracking() |
| | | .Where(it => it.UserType == request.UserType && it.ClientType == request.ClientType) |
| | | .Where(it => it.Type == EnumMenuType.Menu || it.Type == EnumMenuType.Page || it.Type == EnumMenuType.Modal); |
| | | var all = await q.ProjectToType<GetMenusQueryResultItem>().ToListAsync(); |
| | | var models = all.Where(it => it.ParentId == null).ToList(); |
| | | LoopChildrens(models, all); |
| | | var roleMenuIds = |
| | | request.RoleId.HasValue |
| | | ? rep.Change<RoleMenu>().Where(it => it.RoleId == request.RoleId).DistinctSelect(it => it.MenuId) |
| | | : []; |
| | | LoopChildrens(models, all, roleMenuIds); |
| | | return models; |
| | | } |
| | | |
| | |
| | | /// </summary> |
| | | /// <param name="models"></param> |
| | | /// <param name="all"></param> |
| | | private void LoopChildrens(List<GetMenusQueryResultItem> models, List<GetMenusQueryResultItem> all) |
| | | /// <param name="roleMenuIds"></param> |
| | | private void LoopChildrens(List<GetMenusQueryResultItem> models, List<GetMenusQueryResultItem> all, List<Guid> roleMenuIds) |
| | | { |
| | | foreach (var item in models) |
| | | { |
| | | item.Childrens = all.Where(it => it.ParentId == item.Id).ToList(); |
| | | if (item.Childrens.IsNotNull()) |
| | | item.IsChecked = roleMenuIds.Contains(item.Id); |
| | | item.Children = all.Where(it => it.ParentId == item.Id).ToList(); |
| | | if (item.Children.IsNotNull()) |
| | | { |
| | | LoopChildrens(item.Childrens, all); |
| | | LoopChildrens(item.Children, all, roleMenuIds); |
| | | } |
| | | } |
| | | } |