using FlexJobApi.Core; using Furion; using Furion.DatabaseAccessor; using Mapster; using MediatR; using Microsoft.AspNetCore.Http; 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 GetCurrentLogierMenusQueryHandler( IRepository repMenu, IRepository repRoleMenu, IRepository repUserInfoRole ) : IRequestHandler> { private readonly IRepository repMenu = repMenu; private readonly IRepository repRoleMenu = repRoleMenu; private readonly IRepository repUserInfoRole = repUserInfoRole; /// public async Task> Handle(GetCurrentLogierMenusQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var all = await (from m in repMenu.AsQueryable().AsNoTracking() join rm in repRoleMenu.AsQueryable().AsNoTracking() on m.Id equals rm.MenuId join ur in repUserInfoRole.AsQueryable().AsNoTracking() on rm.RoleId equals ur.RoleId where ur.UserInfoId == logier.UserInfoId && !m.IsDisabled && (m.Type == EnumMenuType.Menu || m.Type == EnumMenuType.Page || m.Type == EnumMenuType.Modal) select m).ProjectToType().ToListAsync(); var models = all.Where(it => it.ParentId == null).ToList(); LoopChildrens(models, all, []); return models; } /// /// 递归赋值下级菜单 /// /// /// /// private void LoopChildrens(List models, List all, List roleMenuIds) { foreach (var item in models) { item.IsChecked = roleMenuIds.Contains(item.Id); item.Children = all.Where(it => it.ParentId == item.Id).ToList(); if (item.Children.IsNotNull()) { LoopChildrens(item.Children, all, roleMenuIds); } } } } }