FlexJobApi.Application/Dictionaries/DictionaryAppService.cs
@@ -6,7 +6,7 @@ namespace FlexJobApi.Application { /// <summary> /// 资源 /// 数据字典 /// </summary> [Route("api/main/[controller]")] public class DictionaryAppService(IMediator mediator) : IDynamicApiController FlexJobApi.Application/FlexJobApi.Application.xml
@@ -6,12 +6,12 @@ <members> <member name="T:FlexJobApi.Application.DictionaryAppService"> <summary> 资源 数据字典 </summary> </member> <member name="M:FlexJobApi.Application.DictionaryAppService.#ctor(MediatR.IMediator)"> <summary> 资源 数据字典 </summary> </member> <member name="M:FlexJobApi.Application.DictionaryAppService.GetDictionaryDatas(FlexJobApi.Core.GetDictionaryDatasQuery)"> FlexJobApi.Core/FlexJobApi.Core.xml
@@ -2184,6 +2184,11 @@ Id </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQuery.RoleId"> <summary> 角色Id </summary> </member> <member name="T:FlexJobApi.Core.Models.GetMenuQueryResult"> <summary> 查询菜单详情-结果 @@ -2192,6 +2197,11 @@ <member name="P:FlexJobApi.Core.Models.GetMenuQueryResult.Id"> <summary> Id </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResult.IsChecked"> <summary> 是否选择(用户角色授权) </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResult.UserType"> @@ -2314,6 +2324,11 @@ Id </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResultButton.IsChecked"> <summary> 是否选择(用户角色授权) </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResultButton.Code"> <summary> 编号 @@ -2354,6 +2369,11 @@ Id </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResultField.IsChecked"> <summary> 是否选择(用户角色授权) </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResultField.Code"> <summary> 编号 @@ -2387,6 +2407,11 @@ <member name="P:FlexJobApi.Core.Models.GetMenuQueryResultItem.Id"> <summary> Id </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResultItem.IsChecked"> <summary> 是否选择(用户角色授权) </summary> </member> <member name="P:FlexJobApi.Core.Models.GetMenuQueryResultItem.Code"> @@ -2449,6 +2474,11 @@ 客户端类型 </summary> </member> <member name="P:FlexJobApi.Core.GetMenusQuery.RoleId"> <summary> 角色Id </summary> </member> <member name="T:FlexJobApi.Core.GetMenusQueryResultItem"> <summary> 查询所有菜单-结果-项 @@ -2457,6 +2487,11 @@ <member name="P:FlexJobApi.Core.GetMenusQueryResultItem.Id"> <summary> Id </summary> </member> <member name="P:FlexJobApi.Core.GetMenusQueryResultItem.IsChecked"> <summary> 是否选择(用户角色授权) </summary> </member> <member name="P:FlexJobApi.Core.GetMenusQueryResultItem.ParentId"> @@ -2569,6 +2604,11 @@ 关键字 </summary> </member> <member name="P:FlexJobApi.Core.GetResourcesQuery.RoleId"> <summary> 角色Id </summary> </member> <member name="T:FlexJobApi.Core.GetResourcesQueryResultItem"> <summary> 获取资源列表-结果-项 @@ -2579,6 +2619,11 @@ Id </summary> </member> <member name="P:FlexJobApi.Core.GetResourcesQueryResultItem.IsChecked"> <summary> 是否选中(用于角色授权) </summary> </member> <member name="P:FlexJobApi.Core.GetResourcesQueryResultItem.Service"> <summary> 微服务 FlexJobApi.Core/Models/User/Menus/Queries/GetMenuQuery.cs
@@ -17,6 +17,11 @@ /// Id /// </summary> public Guid Id { get; set; } /// <summary> /// 角色Id /// </summary> public Guid? RoleId { get; set; } } /// <summary> @@ -33,6 +38,11 @@ /// Id /// </summary> public Guid Id { get; set; } /// <summary> /// 是否选择(用户角色授权) /// </summary> public bool IsChecked { get; set; } /// <summary> /// 用户类型 @@ -169,6 +179,11 @@ public Guid Id { get; set; } /// <summary> /// 是否选择(用户角色授权) /// </summary> public bool IsChecked { get; set; } /// <summary> /// 编号 /// </summary> public string Code { get; set; } @@ -210,6 +225,11 @@ public Guid Id { get; set; } /// <summary> /// 是否选择(用户角色授权) /// </summary> public bool IsChecked { get; set; } /// <summary> /// 编号 /// </summary> public string Code { get; set; } @@ -246,6 +266,11 @@ public Guid Id { get; set; } /// <summary> /// 是否选择(用户角色授权) /// </summary> public bool IsChecked { get; set; } /// <summary> /// 编号 /// </summary> public string Code { get; set; } FlexJobApi.Core/Models/User/Menus/Queries/GetMenusQuery.cs
@@ -28,6 +28,11 @@ /// 客户端类型 /// </summary> public EnumClientType ClientType { get; set; } /// <summary> /// 角色Id /// </summary> public Guid? RoleId { get; set; } } /// <summary> @@ -43,7 +48,12 @@ /// <summary> /// Id /// </summary> public Guid? Id { get; set; } public Guid Id { get; set; } /// <summary> /// 是否选择(用户角色授权) /// </summary> public bool IsChecked { get; set; } /// <summary> /// 上级Id FlexJobApi.Core/Models/User/Resources/Queries/GetResourcesQuery.cs
@@ -27,6 +27,11 @@ /// 关键字 /// </summary> public string Keywords { get; set; } /// <summary> /// 角色Id /// </summary> public Guid? RoleId { get; set; } } /// <summary> @@ -40,6 +45,11 @@ public Guid Id { get; set; } /// <summary> /// 是否选中(用于角色授权) /// </summary> public bool IsChecked { get; set; } /// <summary> /// 微服务 /// </summary> public string Service { get; set; } FlexJobApi.Core/Utils/PagedListUtils/PagedListUtils.cs
@@ -51,12 +51,13 @@ var entityType = typeof(T); int index = 0; var props = entityType.GetProperties(); foreach (var order in orders) { if (string.IsNullOrEmpty(order.Property)) continue; // 获取排序字段的属性信息 var propertyInfo = entityType.GetProperty(order.Property); var propertyInfo = props.FirstOrDefault(it => it.Name.Equals(order.Property, StringComparison.OrdinalIgnoreCase)); if (propertyInfo == null) throw Oops.Oh(EnumErrorCodeType.s404, $"该排序字段{order.Property}"); // 创建表达式树 @@ -68,15 +69,15 @@ if (index == 0) { // 首次排序 methodName = order.Order == EnumPagedListOrder.Ascending ? "OrderBy" methodName = order.Order == EnumPagedListOrder.Ascending ? "OrderBy" : "OrderByDescending"; } else { // 二次及以后排序 methodName = order.Order == EnumPagedListOrder.Ascending ? "ThenBy" methodName = order.Order == EnumPagedListOrder.Ascending ? "ThenBy" : "ThenByDescending"; } FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs
@@ -23,7 +23,7 @@ var actionName = actionDescriptor.ActionName; // 设置最终的 OperationId operation.OperationId = $"{controllerName}-{actionName}"; operation.OperationId = $"{actionName}"; var returnType = context.MethodInfo.ReturnType; FlexJobApi.User.Application/FlexJobApi.User.Application.xml
@@ -194,12 +194,13 @@ <member name="M:FlexJobApi.User.Application.GetMenusQueryHandler.Handle(FlexJobApi.Core.GetMenusQuery,System.Threading.CancellationToken)"> <inheritdoc/> </member> <member name="M:FlexJobApi.User.Application.GetMenusQueryHandler.LoopChildrens(System.Collections.Generic.List{FlexJobApi.Core.GetMenusQueryResultItem},System.Collections.Generic.List{FlexJobApi.Core.GetMenusQueryResultItem})"> <member name="M:FlexJobApi.User.Application.GetMenusQueryHandler.LoopChildrens(System.Collections.Generic.List{FlexJobApi.Core.GetMenusQueryResultItem},System.Collections.Generic.List{FlexJobApi.Core.GetMenusQueryResultItem},System.Collections.Generic.List{System.Guid})"> <summary> 递归赋值下级菜单 </summary> <param name="models"></param> <param name="all"></param> <param name="roleMenuIds"></param> </member> <member name="T:FlexJobApi.User.Application.GetResourceFieldsQueryHandler"> <summary> FlexJobApi.User.Application/Menus/Queries/GetMenuQueryHandler.cs
@@ -30,6 +30,11 @@ .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() .Where(it => it.ParentId == model.Id) .Where(it => it.Type == EnumMenuType.Button || it.Type == EnumMenuType.Field) @@ -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>>() }) FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs
@@ -16,20 +16,24 @@ /// 查询菜单列表 /// </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() .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.IsChecked = roleMenuIds.Contains(item.Id); item.Childrens = all.Where(it => it.ParentId == item.Id).ToList(); if (item.Childrens.IsNotNull()) { LoopChildrens(item.Childrens, all); LoopChildrens(item.Childrens, all, roleMenuIds); } } } FlexJobApi.User.Application/Resources/Queries/GetResourcesQueryHandler.cs
@@ -39,6 +39,16 @@ || it.RequestTypeName.Contains(request.Keywords) || it.ResponseTypeName.Contains(request.Keywords)); var items = await q.ProjectToType<GetResourcesQueryResultItem>().ToListAsync(); if (request.RoleId.HasValue) { var roleResourceIds = rep.Change<RoleResource>().Where(it => it.RoleId == request.RoleId).DistinctSelect(it => it.ResourceId); foreach (var item in items) { item.IsChecked = roleResourceIds.Contains(item.Id); } } return items; } }