| | |
| | | namespace FlexJobApi.User.Application |
| | | { |
| | | /// <summary> |
| | | /// 查询所有菜单 |
| | | /// 查询菜单/页面/模态框列表 |
| | | /// </summary> |
| | | public class MenuListQueryHandler( |
| | | IRepository<Menu> menuRep) |
| | | IRepository<Menu> menuRep) |
| | | : IRequestHandler<MenuListQuery, MenuListCallback> |
| | | { |
| | | private readonly IRepository<Menu> menuRep = menuRep; |
| | |
| | | /// <inheritdoc/> |
| | | public async Task<MenuListCallback> Handle(MenuListQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var config = new TypeAdapterConfig(); |
| | | config.Default.MaxDepth(10); |
| | | var callback = new MenuListCallback(); |
| | | callback.Items = await menuRep.AsQueryable() |
| | | .Include(it => it.Childrens.Where(c => |
| | | c.Type == EnumMenuType.Menu |
| | | || c.Type == EnumMenuType.Page |
| | | || c.Type == EnumMenuType.Modal)) |
| | | .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime) |
| | | .Where(it => |
| | | it.Type == EnumMenuType.Menu |
| | | || it.Type == EnumMenuType.Page |
| | | || it.Type == EnumMenuType.Modal) |
| | | .ProjectToType<MenuListCallbackItem>(config) |
| | | .ToListAsync(cancellationToken); |
| | | var q = menuRep.AsQueryable().AsNoTracking() |
| | | .Where(it => it.Type == EnumMenuType.Menu || it.Type == EnumMenuType.Page || it.Type == EnumMenuType.Modal); |
| | | if (request.ParentId.HasValue) |
| | | { |
| | | q = q.Where(it => it.ParentId == request.ParentId); |
| | | } |
| | | if (!string.IsNullOrEmpty(request.Keywords)) |
| | | { |
| | | q = q.Where(it => |
| | | it.Name.Contains(request.Keywords) |
| | | || it.Code.Contains(request.Keywords) |
| | | || it.Path.Contains(request.Keywords) |
| | | || it.Remark.Contains(request.Keywords)); |
| | | } |
| | | callback.Items = await q.ProjectToType<MenuListCallbackItem>().ToListAsync(); |
| | | return callback; |
| | | } |
| | | } |