From a7287db2ada9ef606db5fe81cc8b66e2da44d345 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期四, 07 八月 2025 10:56:22 +0800 Subject: [PATCH] pref:菜单排序 --- 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..b5c4240 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).ThenBy(it => it.CreatedTime) .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