using FlexJobApi.Core; using FlexJobApi.Core.Models; using Furion.DatabaseAccessor; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.User.Application { /// /// 查询菜单列表 /// public class GetMenusQueryHandler( IRepository menuRep) : IRequestHandler> { private readonly IRepository menuRep = menuRep; /// public async Task> Handle(GetMenusQuery request, CancellationToken cancellationToken) { var q = menuRep.AsQueryable().AsNoTracking() .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().ToListAsync(); var models = all.Where(it => it.ParentId == null).ToList(); LoopChildrens(models, all); return models; } /// /// 递归赋值下级菜单 /// /// /// private void LoopChildrens(List models, List all) { foreach (var item in models) { item.Children = all.Where(it => it.ParentId == item.Id).ToList(); if (item.Children.IsNotNull()) { LoopChildrens(item.Children, all); } } } } }