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