From 6808e68b5d97cdb39aac1793e7fe30dfbecd7de2 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 01 八月 2025 17:31:28 +0800 Subject: [PATCH] feat:文档优化结果显示 --- FlexJobApi.User.Application/FlexJobApi.User.Application.xml | 33 +++ FlexJobApi.Core/Models/User/Menus/Commands/MenuDeleteCommand.cs | 22 ++ FlexJobApi.Core/Models/User/Menus/Queries/MenuListQuery.cs | 0 FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs | 24 +++ FlexJobApi.Core/Models/User/Menus/Commands/MenuImportFieldCommand.cs | 20 ++ FlexJobApi.User.Application/Menus/Queries/MenuSubListQueryHandler.cs | 43 +++++ FlexJobApi.User.Application/Menus/Commands/MenuImportFieldCommandHandler.cs | 12 + FlexJobApi.Core/FlexJobApi.Core.xml | 147 +++++++++++++++++- FlexJobApi.User.Application/Menus/MenuAppService.cs | 11 + FlexJobApi.Core/Entities/Users/Menu.cs | 5 FlexJobApi.Core/Models/User/Menus/Commands/MenuSaveCommand.cs | 5 FlexJobApi.Core/Models/User/Menus/Queries/MenuSubListQuery.cs | 144 ++++++++++++++++++ 12 files changed, 452 insertions(+), 14 deletions(-) diff --git a/FlexJobApi.Core/Entities/Users/Menu.cs b/FlexJobApi.Core/Entities/Users/Menu.cs index cb18619..99e8876 100644 --- a/FlexJobApi.Core/Entities/Users/Menu.cs +++ b/FlexJobApi.Core/Entities/Users/Menu.cs @@ -79,6 +79,11 @@ public string Group { get; set; } /// <summary> + /// 浣嶇疆锛堢敤浜庢寜閽級 + /// </summary> + public string Location { get; set; } + + /// <summary> /// 鍒楀锛堢敤浜庢寜閽�/鍒�/鍏冪礌锛� /// </summary> public string Width { get; set; } diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 66d9d3e..2eef7e8 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -864,6 +864,11 @@ 鍒嗙粍鍚嶇О锛堢敤浜庢寜閽�/瀛楁锛� </summary> </member> + <member name="P:FlexJobApi.Core.Menu.Location"> + <summary> + 浣嶇疆锛堢敤浜庢寜閽級 + </summary> + </member> <member name="P:FlexJobApi.Core.Menu.Width"> <summary> 鍒楀锛堢敤浜庢寜閽�/鍒�/鍏冪礌锛� @@ -1694,7 +1699,7 @@ 妯℃�佹 </summary> </member> - <member name="F:FlexJobApi.Core.EnumMenuType.Buuton"> + <member name="F:FlexJobApi.Core.EnumMenuType.Button"> <summary> 鎸夐挳 </summary> @@ -1909,6 +1914,131 @@ 瀵嗙爜鐧诲綍缁撴灉 </summary> </member> + <member name="T:FlexJobApi.Core.MenuDeleteCommand"> + <summary> + 鍒犻櫎鑿滃崟 + </summary> + </member> + <member name="T:FlexJobApi.Core.Models.MenuImportFieldCommand"> + <summary> + 鑿滃崟瀵煎叆瀛楁 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuImportFieldCommand.Url"> + <summary> + 鎺ュ彛鍦板潃 + </summary> + </member> + <member name="T:FlexJobApi.Core.Models.MenuSubListQuery"> + <summary> + 鏌ヨ鎸夐挳/瀛楁鍒楄〃 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListQuery.ParentId"> + <summary> + 涓婄骇Id + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackGroup.Name"> + <summary> + 鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackGroup.Buttons"> + <summary> + 鎸夐挳 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackGroup.Fields"> + <summary> + 瀛楁 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Id"> + <summary> + Id + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.ParentId"> + <summary> + 涓婄骇Id + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Path"> + <summary> + 鑿滃崟璺緞 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Code"> + <summary> + 缂栧彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Name"> + <summary> + 鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Type"> + <summary> + 绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.VisitLevel"> + <summary> + 璁块棶绾у埆 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Icon"> + <summary> + 鍥炬爣 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Url"> + <summary> + 閾炬帴鍦板潃 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Group"> + <summary> + 鍒嗙粍鍚嶇О锛堢敤浜庢寜閽�/瀛楁锛� + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Location"> + <summary> + 浣嶇疆锛堢敤浜庢寜閽級 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Width"> + <summary> + 鍒楀锛堢敤浜庢寜閽�/鍒�/鍏冪礌锛� + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.IsDisabled"> + <summary> + 鏄惁绂佺敤 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.IsHidden"> + <summary> + 鏄惁闅愯棌 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.IsCache"> + <summary> + 鏄惁缂撳瓨 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Sort"> + <summary> + 鎺掑簭 + </summary> + </member> + <member name="P:FlexJobApi.Core.Models.MenuSubListCallbackItem.Remark"> + <summary> + 澶囨敞 + </summary> + </member> <member name="T:FlexJobApi.Core.MenuSaveCommand"> <summary> 淇濆瓨鑿滃崟 @@ -1959,6 +2089,11 @@ 鍒嗙粍鍚嶇О锛堢敤浜庢寜閽�/瀛楁锛� </summary> </member> + <member name="P:FlexJobApi.Core.MenuSaveCommand.Location"> + <summary> + 浣嶇疆锛堢敤浜庢寜閽級 + </summary> + </member> <member name="P:FlexJobApi.Core.MenuSaveCommand.Width"> <summary> 鍒楀锛堢敤浜庢寜閽�/鍒�/鍏冪礌锛� @@ -1994,11 +2129,6 @@ 鏌ヨ鎵�鏈夎彍鍗� </summary> </member> - <member name="P:FlexJobApi.Core.MenuListQuery.Types"> - <summary> - 绫诲瀷 - </summary> - </member> <member name="P:FlexJobApi.Core.MenuListQuery.ParentId"> <summary> 涓婄骇Id @@ -2027,11 +2157,6 @@ <member name="P:FlexJobApi.Core.MenuListCallbackItem.ParentId"> <summary> 涓婄骇Id - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuListCallbackItem.Childrens"> - <summary> - 涓嬬骇 </summary> </member> <member name="P:FlexJobApi.Core.MenuListCallbackItem.Path"> diff --git a/FlexJobApi.Core/Models/User/Menus/Commands/MenuDeleteCommand.cs b/FlexJobApi.Core/Models/User/Menus/Commands/MenuDeleteCommand.cs new file mode 100644 index 0000000..c74c2cf --- /dev/null +++ b/FlexJobApi.Core/Models/User/Menus/Commands/MenuDeleteCommand.cs @@ -0,0 +1,22 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍒犻櫎鑿滃崟 + /// </summary> + public class MenuDeleteCommand : IRequest + { + public MenuDeleteCommand() + { + Ids = []; + } + + public List<Guid> Ids { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/User/Menus/Commands/MenuImportFieldCommand.cs b/FlexJobApi.Core/Models/User/Menus/Commands/MenuImportFieldCommand.cs new file mode 100644 index 0000000..0a68638 --- /dev/null +++ b/FlexJobApi.Core/Models/User/Menus/Commands/MenuImportFieldCommand.cs @@ -0,0 +1,20 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core.Models +{ + /// <summary> + /// 鑿滃崟瀵煎叆瀛楁 + /// </summary> + public class MenuImportFieldCommand : IRequest + { + /// <summary> + /// 鎺ュ彛鍦板潃 + /// </summary> + public string Url { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/User/Menus/Commands/MenuSaveCommand.cs b/FlexJobApi.Core/Models/User/Menus/Commands/MenuSaveCommand.cs index a5987dd..cd0dbb7 100644 --- a/FlexJobApi.Core/Models/User/Menus/Commands/MenuSaveCommand.cs +++ b/FlexJobApi.Core/Models/User/Menus/Commands/MenuSaveCommand.cs @@ -62,6 +62,11 @@ public string Group { get; set; } /// <summary> + /// 浣嶇疆锛堢敤浜庢寜閽級 + /// </summary> + public string Location { get; set; } + + /// <summary> /// 鍒楀锛堢敤浜庢寜閽�/鍒�/鍏冪礌锛� /// </summary> public string Width { get; set; } diff --git a/FlexJobApi.Core/Models/User/Menus/Queries/MenuAllQuery.cs b/FlexJobApi.Core/Models/User/Menus/Queries/MenuListQuery.cs similarity index 100% rename from FlexJobApi.Core/Models/User/Menus/Queries/MenuAllQuery.cs rename to FlexJobApi.Core/Models/User/Menus/Queries/MenuListQuery.cs diff --git a/FlexJobApi.Core/Models/User/Menus/Queries/MenuSubListQuery.cs b/FlexJobApi.Core/Models/User/Menus/Queries/MenuSubListQuery.cs new file mode 100644 index 0000000..9697ba4 --- /dev/null +++ b/FlexJobApi.Core/Models/User/Menus/Queries/MenuSubListQuery.cs @@ -0,0 +1,144 @@ +锘縰sing MediatR; +using Swashbuckle.AspNetCore.SwaggerGen; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core.Models +{ + /// <summary> + /// 鏌ヨ鎸夐挳/瀛楁鍒楄〃 + /// </summary> + public class MenuSubListQuery : IRequest<MenuSubListCallback> + { + /// <summary> + /// 涓婄骇Id + /// </summary> + public Guid ParentId { get; set; } + } + + public class MenuSubListCallback + { + public MenuSubListCallback() + { + Groups = []; + } + + public List<MenuSubListCallbackGroup> Groups { get; set; } + } + + public class MenuSubListCallbackGroup + { + public MenuSubListCallbackGroup() + { + Buttons = []; + Fields = []; + } + + /// <summary> + /// 鍚嶇О + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 鎸夐挳 + /// </summary> + public List<MenuSubListCallbackItem> Buttons { get; set; } + + /// <summary> + /// 瀛楁 + /// </summary> + public List<MenuSubListCallbackItem> Fields { get; set; } + } + + + public class MenuSubListCallbackItem + { + /// <summary> + /// Id + /// </summary> + public Guid? Id { get; set; } + + /// <summary> + /// 涓婄骇Id + /// </summary> + public Guid? ParentId { get; set; } + + /// <summary> + /// 鑿滃崟璺緞 + /// </summary> + public string Path { get; set; } + + /// <summary> + /// 缂栧彿 + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 鍚嶇О + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 绫诲瀷 + /// </summary> + public EnumMenuType Type { get; set; } + + /// <summary> + /// 璁块棶绾у埆 + /// </summary> + public EnumMenuVisitLevel VisitLevel { get; set; } + + /// <summary> + /// 鍥炬爣 + /// </summary> + public string Icon { get; set; } + + /// <summary> + /// 閾炬帴鍦板潃 + /// </summary> + public string Url { get; set; } + + /// <summary> + /// 鍒嗙粍鍚嶇О锛堢敤浜庢寜閽�/瀛楁锛� + /// </summary> + public string Group { get; set; } + + /// <summary> + /// 浣嶇疆锛堢敤浜庢寜閽級 + /// </summary> + public string Location { get; set; } + + /// <summary> + /// 鍒楀锛堢敤浜庢寜閽�/鍒�/鍏冪礌锛� + /// </summary> + public string Width { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public bool IsDisabled { get; set; } + + /// <summary> + /// 鏄惁闅愯棌 + /// </summary> + public bool IsHidden { get; set; } + + /// <summary> + /// 鏄惁缂撳瓨 + /// </summary> + public bool IsCache { get; set; } + + /// <summary> + /// 鎺掑簭 + /// </summary> + public int Sort { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public string Remark { get; set; } + } +} diff --git a/FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs b/FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs index e6701e4..b1dd550 100644 --- a/FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs +++ b/FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs @@ -3,6 +3,7 @@ using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -23,6 +24,29 @@ // 璁剧疆鏈�缁堢殑 OperationId operation.OperationId = $"{controllerName}-{actionName}"; + + // 鑾峰彇鎺ュ彛鏂规硶鐨勮繑鍥炵被鍨嬶紙鍙兘鏄� Task<ApiResult<T>> 鎴� ApiResult<T>锛� + var returnType = context.MethodInfo.ReturnType; + + // 姝ラ 1锛氬鏋滄槸 Task 鎴� Task<ApiResult<T>>锛屾彁鍙栧唴閮ㄧ被鍨� + if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(Task<>)) + { + returnType = returnType.GetGenericArguments()[0]; // 鎻愬彇 Task<T> 涓殑 T + } + + // 姝ラ 3锛氭浛鎹� Swagger 鍝嶅簲绫诲瀷涓� Data 鐨勭被鍨� + operation.Responses.Clear(); + operation.Responses.Add("200", new OpenApiResponse + { + Description = "鎿嶄綔鎴愬姛", + Content = new Dictionary<string, OpenApiMediaType> + { + ["application/json"] = new OpenApiMediaType + { + Schema = context.SchemaGenerator.GenerateSchema(returnType, context.SchemaRepository) + } + } + }); } } } diff --git a/FlexJobApi.User.Application/FlexJobApi.User.Application.xml b/FlexJobApi.User.Application/FlexJobApi.User.Application.xml index 5442d20..ec7f02d 100644 --- a/FlexJobApi.User.Application/FlexJobApi.User.Application.xml +++ b/FlexJobApi.User.Application/FlexJobApi.User.Application.xml @@ -39,6 +39,11 @@ {0}涓嶅瓨鍦� </summary> </member> + <member name="F:FlexJobApi.User.Application.EnumUserErrorCodeType.s200"> + <summary> + 鍙傛暟閿欒锛歿0} + </summary> + </member> <member name="F:FlexJobApi.User.Application.EnumUserErrorCodeType.u1000"> <summary> 璐﹀彿鎴栧瘑鐮佷笉瀛樺湪 @@ -69,7 +74,14 @@ </member> <member name="M:FlexJobApi.User.Application.MenuAppService.ListQuery(FlexJobApi.Core.MenuListQuery)"> <summary> - 鏌ヨ鑿滃崟鍒楄〃 + 鏌ヨ鑿滃崟/椤甸潰/妯℃�佹鍒楄〃 + </summary> + <param name="query"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.User.Application.MenuAppService.SubListQuery(FlexJobApi.Core.Models.MenuSubListQuery)"> + <summary> + 鏌ヨ鎸夐挳/瀛楁鍒楄〃 </summary> <param name="query"></param> <returns></returns> @@ -83,16 +95,31 @@ </member> <member name="T:FlexJobApi.User.Application.MenuListQueryHandler"> <summary> - 鏌ヨ鎵�鏈夎彍鍗� + 鏌ヨ鑿滃崟/椤甸潰/妯℃�佹鍒楄〃 </summary> </member> <member name="M:FlexJobApi.User.Application.MenuListQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Menu})"> <summary> - 鏌ヨ鎵�鏈夎彍鍗� + 鏌ヨ鑿滃崟/椤甸潰/妯℃�佹鍒楄〃 </summary> </member> <member name="M:FlexJobApi.User.Application.MenuListQueryHandler.Handle(FlexJobApi.Core.MenuListQuery,System.Threading.CancellationToken)"> <inheritdoc/> </member> + <member name="T:FlexJobApi.User.Application.Menus.Queries.MenuSubListQueryHandler"> + <summary> + 鏌ヨ鎸夐挳/瀛楁鍒楄〃 + </summary> + <param name="menuRep"></param> + </member> + <member name="M:FlexJobApi.User.Application.Menus.Queries.MenuSubListQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Menu})"> + <summary> + 鏌ヨ鎸夐挳/瀛楁鍒楄〃 + </summary> + <param name="menuRep"></param> + </member> + <member name="M:FlexJobApi.User.Application.Menus.Queries.MenuSubListQueryHandler.Handle(FlexJobApi.Core.Models.MenuSubListQuery,System.Threading.CancellationToken)"> + <inheritdoc/> + </member> </members> </doc> diff --git a/FlexJobApi.User.Application/Menus/Commands/MenuImportFieldCommandHandler.cs b/FlexJobApi.User.Application/Menus/Commands/MenuImportFieldCommandHandler.cs new file mode 100644 index 0000000..bb5e615 --- /dev/null +++ b/FlexJobApi.User.Application/Menus/Commands/MenuImportFieldCommandHandler.cs @@ -0,0 +1,12 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.User.Application +{ + internal class MenuImportFieldCommandHandler + { + } +} diff --git a/FlexJobApi.User.Application/Menus/MenuAppService.cs b/FlexJobApi.User.Application/Menus/MenuAppService.cs index cb3fa63..00845e1 100644 --- a/FlexJobApi.User.Application/Menus/MenuAppService.cs +++ b/FlexJobApi.User.Application/Menus/MenuAppService.cs @@ -1,4 +1,5 @@ 锘縰sing FlexJobApi.Core; +using FlexJobApi.Core.Models; using Furion.DynamicApiController; using MediatR; using Microsoft.AspNetCore.Mvc; @@ -29,6 +30,16 @@ } /// <summary> + /// 鏌ヨ鎸夐挳/瀛楁鍒楄〃 + /// </summary> + /// <param name="query"></param> + /// <returns></returns> + public async Task<MenuSubListCallback> SubListQuery(MenuSubListQuery query) + { + return await mediator.Send(query); + } + + /// <summary> /// 淇濆瓨鑿滃崟 /// </summary> /// <param name="command"></param> diff --git a/FlexJobApi.User.Application/Menus/Queries/MenuSubListQueryHandler.cs b/FlexJobApi.User.Application/Menus/Queries/MenuSubListQueryHandler.cs new file mode 100644 index 0000000..b929019 --- /dev/null +++ b/FlexJobApi.User.Application/Menus/Queries/MenuSubListQueryHandler.cs @@ -0,0 +1,43 @@ +锘縰sing 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.Menus.Queries +{ + /// <summary> + /// 鏌ヨ鎸夐挳/瀛楁鍒楄〃 + /// </summary> + /// <param name="menuRep"></param> + public class MenuSubListQueryHandler(IRepository<Menu> menuRep) + : IRequestHandler<MenuSubListQuery, MenuSubListCallback> + { + private readonly IRepository<Menu> menuRep = menuRep; + + /// <inheritdoc/> + public async Task<MenuSubListCallback> Handle(MenuSubListQuery request, CancellationToken cancellationToken) + { + var callback = new MenuSubListCallback(); + var q = menuRep.AsQueryable().AsNoTracking() + .Where(it => it.ParentId == request.ParentId) + .Where(it => it.Type == EnumMenuType.Button || it.Type == EnumMenuType.Field); + var items = await q.ProjectToType<MenuSubListCallbackItem>().ToListAsync(cancellationToken); + callback.Groups = items.GroupBy(it => it.Group ?? "Default") + .Select(it => new MenuSubListCallbackGroup + { + Name = it.Key, + Buttons = it.Where(g => g.Type == EnumMenuType.Button).ToList(), + Fields = it.Where(g => g.Type == EnumMenuType.Field).ToList(), + }) + .ToList(); + return callback; + } + } +} -- Gitblit v1.9.1