From 9fd157a63dfbb8ee9f32fff7540c97eb4a3d3cce Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 01 八月 2025 17:00:30 +0800 Subject: [PATCH] feat:菜单开发 --- FlexJobApi.User.Application/FlexJobApi.User.Application.xml | 10 +- FlexJobApi.User.Application/Menus/Queries/MenuListQueryHandler.cs | 33 ++++---- FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs | 24 +++++ FlexJobApi.Core/Models/User/Menus/Queries/MenuAllQuery.cs | 23 ++++- FlexJobApi.Core/FlexJobApi.Core.xml | 115 ++++++++++++++++------------ FlexJobApi.User.Application/Menus/MenuAppService.cs | 2 FlexJobApi.Core/Enums/Users/EnumMenuType.cs | 2 FlexJobApi.User.Application/EnumUserErrorCodeType.cs | 5 + 8 files changed, 132 insertions(+), 82 deletions(-) diff --git a/FlexJobApi.Core/Enums/Users/EnumMenuType.cs b/FlexJobApi.Core/Enums/Users/EnumMenuType.cs index 7879ce6..f888961 100644 --- a/FlexJobApi.Core/Enums/Users/EnumMenuType.cs +++ b/FlexJobApi.Core/Enums/Users/EnumMenuType.cs @@ -26,7 +26,7 @@ /// <summary> /// 鎸夐挳 /// </summary> - Buuton = 40, + Button = 40, /// <summary> /// 瀛楁 /// </summary> diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index d88b550..66d9d3e 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -1989,92 +1989,107 @@ 澶囨敞 </summary> </member> - <member name="T:FlexJobApi.Core.MenuAllQuery"> + <member name="T:FlexJobApi.Core.MenuListQuery"> <summary> 鏌ヨ鎵�鏈夎彍鍗� </summary> </member> - <member name="T:FlexJobApi.Core.MenuAllCallback"> - <summary> - 鏌ヨ鎵�鏈夎彍鍗�-缁撴灉 - </summary> - </member> - <member name="T:FlexJobApi.Core.MenuAllCallbackItem"> - <summary> - 鏌ヨ鎵�鏈夎彍鍗�-缁撴灉-椤� - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Id"> - <summary> - Id - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.ParentId"> - <summary> - 涓婄骇Id - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Childrens"> - <summary> - 涓嬬骇 - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Path"> - <summary> - 鑿滃崟璺緞 - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Code"> - <summary> - 缂栧彿 - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Name"> - <summary> - 鍚嶇О - </summary> - </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Type"> + <member name="P:FlexJobApi.Core.MenuListQuery.Types"> <summary> 绫诲瀷 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.VisitLevel"> + <member name="P:FlexJobApi.Core.MenuListQuery.ParentId"> + <summary> + 涓婄骇Id + </summary> + </member> + <member name="P:FlexJobApi.Core.MenuListQuery.Keywords"> + <summary> + 鍏抽敭瀛� + </summary> + </member> + <member name="T:FlexJobApi.Core.MenuListCallback"> + <summary> + 鏌ヨ鎵�鏈夎彍鍗�-缁撴灉 + </summary> + </member> + <member name="T:FlexJobApi.Core.MenuListCallbackItem"> + <summary> + 鏌ヨ鎵�鏈夎彍鍗�-缁撴灉-椤� + </summary> + </member> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Id"> + <summary> + Id + </summary> + </member> + <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"> + <summary> + 鑿滃崟璺緞 + </summary> + </member> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Code"> + <summary> + 缂栧彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Name"> + <summary> + 鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Type"> + <summary> + 绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.VisitLevel"> <summary> 璁块棶绾у埆 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Icon"> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Icon"> <summary> 鍥炬爣 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Url"> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Url"> <summary> 閾炬帴鍦板潃 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.IsDisabled"> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.IsDisabled"> <summary> 鏄惁绂佺敤 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.IsHidden"> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.IsHidden"> <summary> 鏄惁闅愯棌 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.IsCache"> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.IsCache"> <summary> 鏄惁缂撳瓨 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Sort"> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Sort"> <summary> 鎺掑簭 </summary> </member> - <member name="P:FlexJobApi.Core.MenuAllCallbackItem.Remark"> + <member name="P:FlexJobApi.Core.MenuListCallbackItem.Remark"> <summary> 澶囨敞 </summary> diff --git a/FlexJobApi.Core/Models/User/Menus/Queries/MenuAllQuery.cs b/FlexJobApi.Core/Models/User/Menus/Queries/MenuAllQuery.cs index 3af7609..e4a35fd 100644 --- a/FlexJobApi.Core/Models/User/Menus/Queries/MenuAllQuery.cs +++ b/FlexJobApi.Core/Models/User/Menus/Queries/MenuAllQuery.cs @@ -1,4 +1,5 @@ -锘縰sing MediatR; +锘縰sing Mapster; +using MediatR; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -13,6 +14,20 @@ /// </summary> public class MenuListQuery : IRequest<MenuListCallback> { + public MenuListQuery() + { + + } + + /// <summary> + /// 涓婄骇Id + /// </summary> + public Guid? ParentId { get; set; } + + /// <summary> + /// 鍏抽敭瀛� + /// </summary> + public string Keywords { get; set; } } /// <summary> @@ -35,7 +50,6 @@ { public MenuListCallbackItem() { - Childrens = []; } /// <summary> @@ -47,11 +61,6 @@ /// 涓婄骇Id /// </summary> public Guid? ParentId { get; set; } - - /// <summary> - /// 涓嬬骇 - /// </summary> - public List<MenuListCallbackItem> Childrens { get; set; } /// <summary> /// 鑿滃崟璺緞 diff --git a/FlexJobApi.User.Application/EnumUserErrorCodeType.cs b/FlexJobApi.User.Application/EnumUserErrorCodeType.cs index e0fe456..ef102ad 100644 --- a/FlexJobApi.User.Application/EnumUserErrorCodeType.cs +++ b/FlexJobApi.User.Application/EnumUserErrorCodeType.cs @@ -16,6 +16,11 @@ [ErrorCodeItemMetadata("{0}涓嶅瓨鍦�")] s100 = 100, /// <summary> + /// 鍙傛暟閿欒锛歿0} + /// </summary> + [ErrorCodeItemMetadata("鍙傛暟閿欒锛歿0}")] + s200 = 200, + /// <summary> /// 璐﹀彿鎴栧瘑鐮佷笉瀛樺湪 /// </summary> [ErrorCodeItemMetadata("璐﹀彿鎴栧瘑鐮佷笉瀛樺湪")] diff --git a/FlexJobApi.User.Application/FlexJobApi.User.Application.xml b/FlexJobApi.User.Application/FlexJobApi.User.Application.xml index be1b05f..5442d20 100644 --- a/FlexJobApi.User.Application/FlexJobApi.User.Application.xml +++ b/FlexJobApi.User.Application/FlexJobApi.User.Application.xml @@ -67,9 +67,9 @@ 鑿滃崟 </summary> </member> - <member name="M:FlexJobApi.User.Application.MenuAppService.AllQuery(FlexJobApi.Core.MenuAllQuery)"> + <member name="M:FlexJobApi.User.Application.MenuAppService.ListQuery(FlexJobApi.Core.MenuListQuery)"> <summary> - 鏌ヨ鎵�鏈夎彍鍗� + 鏌ヨ鑿滃崟鍒楄〃 </summary> <param name="query"></param> <returns></returns> @@ -81,17 +81,17 @@ <param name="command"></param> <returns></returns> </member> - <member name="T:FlexJobApi.User.Application.MenuAllQueryHandler"> + <member name="T:FlexJobApi.User.Application.MenuListQueryHandler"> <summary> 鏌ヨ鎵�鏈夎彍鍗� </summary> </member> - <member name="M:FlexJobApi.User.Application.MenuAllQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Menu})"> + <member name="M:FlexJobApi.User.Application.MenuListQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Menu})"> <summary> 鏌ヨ鎵�鏈夎彍鍗� </summary> </member> - <member name="M:FlexJobApi.User.Application.MenuAllQueryHandler.Handle(FlexJobApi.Core.MenuAllQuery,System.Threading.CancellationToken)"> + <member name="M:FlexJobApi.User.Application.MenuListQueryHandler.Handle(FlexJobApi.Core.MenuListQuery,System.Threading.CancellationToken)"> <inheritdoc/> </member> </members> diff --git a/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs b/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs index 4ab1616..f7d5f52 100644 --- a/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs +++ b/FlexJobApi.User.Application/Menus/Commands/MenuSaveCommandHandler.cs @@ -29,10 +29,30 @@ ? await menuRep.AsQueryable().FirstOrDefaultAsync(it => it.Id == request.Id, cancellationToken) : new Menu(); if (menu == null) throw Oops.Oh(EnumUserErrorCodeType.s100, "鑿滃崟"); + + if (request.Id.HasValue && menu.Code != request.Code) + { + throw Oops.Oh(EnumUserErrorCodeType.s200, "缂栧彿涓嶅彲淇敼"); + } + request.Adapt(menu); + + if (menu.ParentId.HasValue) + { + menu.Path = await menuRep.AsQueryable().AsNoTracking().Where(it => it.Id == menu.ParentId).Select(it => it.Path).FirstOrDefaultAsync(); + menu.Path = $"{menu.Path}/{menu.Code}"; + } + else + { + menu.Path = "/"; + } + var result = request.Id == null - ? await menuRep.InsertNowAsync(menu, cancellationToken: cancellationToken) - : await menuRep.UpdateNowAsync(menu, cancellationToken: cancellationToken); + ? await menuRep.InsertAsync(menu, cancellationToken: cancellationToken) + : await menuRep.UpdateAsync(menu); + + await menuRep.SaveNowAsync(cancellationToken); + return menu.Id; } } diff --git a/FlexJobApi.User.Application/Menus/MenuAppService.cs b/FlexJobApi.User.Application/Menus/MenuAppService.cs index c03c4eb..cb3fa63 100644 --- a/FlexJobApi.User.Application/Menus/MenuAppService.cs +++ b/FlexJobApi.User.Application/Menus/MenuAppService.cs @@ -19,7 +19,7 @@ private readonly IMediator mediator = mediator; /// <summary> - /// 鏌ヨ鑿滃崟鍒楄〃 + /// 鏌ヨ鑿滃崟/椤甸潰/妯℃�佹鍒楄〃 /// </summary> /// <param name="query"></param> /// <returns></returns> diff --git a/FlexJobApi.User.Application/Menus/Queries/MenuListQueryHandler.cs b/FlexJobApi.User.Application/Menus/Queries/MenuListQueryHandler.cs index 6cfd83b..9f50732 100644 --- a/FlexJobApi.User.Application/Menus/Queries/MenuListQueryHandler.cs +++ b/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; } } -- Gitblit v1.9.1