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/GetMenuQueryHandler.cs |   33 +++++++++++++++++++++++++--------
 1 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/FlexJobApi.User.Application/Menus/Queries/GetMenuQueryHandler.cs b/FlexJobApi.User.Application/Menus/Queries/GetMenuQueryHandler.cs
index 2f422db..7628ee9 100644
--- a/FlexJobApi.User.Application/Menus/Queries/GetMenuQueryHandler.cs
+++ b/FlexJobApi.User.Application/Menus/Queries/GetMenuQueryHandler.cs
@@ -1,5 +1,4 @@
 锘縰sing FlexJobApi.Core;
-using FlexJobApi.Core.Models;
 using Furion.DatabaseAccessor;
 using Furion.FriendlyException;
 using Mapster;
@@ -30,7 +29,13 @@
                 .ProjectToType<GetMenuQueryResult>()
                 .FirstOrDefaultAsync(cancellationToken);
             if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ヨ彍鍗�");
+            var roleMenuIds =
+                request.RoleId.HasValue
+                ? rep.Change<RoleMenu>().Where(it => it.RoleId == request.RoleId).DistinctSelect(it => it.MenuId)
+                : [];
+            model.IsChecked = roleMenuIds.Contains(model.Id);
             var items = await rep.AsQueryable().AsNoTracking()
+                .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
                 .Where(it => it.ParentId == model.Id)
                 .Where(it => it.Type == EnumMenuType.Button || it.Type == EnumMenuType.Field)
                 .ProjectToType<GetMenuQueryResultItem>()
@@ -40,16 +45,28 @@
                 {
                     Group = it.Key,
                     ButtonLocations = it
-                        .Where(it => it.Type == EnumMenuType.Button)
-                        .GroupBy(it => it.Location ?? "default")
-                        .Select(it => new GetMenuQueryResultButtonLocation
-                        { 
-                            Location = it.Key,
-                            Buttons = it.ToList().Adapt<List<GetMenuQueryResultButton>>()
+                        .Where(l => l.Type == EnumMenuType.Button)
+                        .GroupBy(l => l.Location ?? "default")
+                        .Select(l => new GetMenuQueryResultButtonLocation
+                        {
+                            Location = l.Key,
+                            Buttons = l
+                                .Select(b =>
+                                {
+                                    b.IsChecked = roleMenuIds.Contains(b.Id);
+                                    return b;
+                                })
+                                .ToList()
+                                .Adapt<List<GetMenuQueryResultButton>>()
                         })
                         .ToList(),
                     Fields = it
-                        .Where(it => it.Type == EnumMenuType.Field)
+                        .Where(f => f.Type == EnumMenuType.Field)
+                        .Select(f =>
+                        {
+                            f.IsChecked = roleMenuIds.Contains(f.Id);
+                            return f;
+                        })
                         .ToList()
                         .Adapt<List<GetMenuQueryResultField>>()
                 })

--
Gitblit v1.9.1