From 356c47fb0ea1a642784e85c82833141d065bc4bc Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 05 八月 2025 09:22:25 +0800 Subject: [PATCH] feat:动态控制器开发 --- FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs b/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs index 323df8c..c19d457 100644 --- a/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs +++ b/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs @@ -1,5 +1,4 @@ 锘縰sing FlexJobApi.Core; -using FlexJobApi.Core.Models; using Furion.DatabaseAccessor; using Mapster; using MediatR; @@ -16,20 +15,25 @@ /// 鏌ヨ鑿滃崟鍒楄〃 /// </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() + .OrderBy(it => it.Sort) .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; } @@ -38,14 +42,16 @@ /// </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); } } } -- Gitblit v1.9.1