sunpengfei
2025-08-01 6808e68b5d97cdb39aac1793e7fe30dfbecd7de2
FlexJobApi.User.Application/Menus/Queries/MenuListQueryHandler.cs
@@ -12,10 +12,10 @@
namespace FlexJobApi.User.Application
{
    /// <summary>
    /// 查询所有菜单
    /// 查询菜单/页面/模态框列表
    /// </summary>
    public class MenuListQueryHandler(
        IRepository<Menu> menuRep)
        IRepository<Menu> menuRep)
        : IRequestHandler<MenuListQuery, MenuListCallback>
    {
        private readonly IRepository<Menu> menuRep = menuRep;
@@ -23,21 +23,22 @@
        /// <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;
        }
    }