FlexJobApi.Core/Models/User/Menus/Commands/SaveMenuButtonCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Models/User/Menus/Commands/SaveMenuFieldCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Models/User/Menus/Commands/SetMenuSwitchCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.User.Application/Menus/Commands/SaveMenuButtonCommandHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.User.Application/Menus/Commands/SaveMenuFieldCommandHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.User.Application/Menus/Commands/SetMenuSwitchCommandHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.User.Application/Menus/MenuAppService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
FlexJobApi.Core/Models/User/Menus/Commands/SaveMenuButtonCommand.cs
New file @@ -0,0 +1,65 @@ using MediatR; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 保存菜单按钮 /// </summary> public class SaveMenuButtonCommand : IRequest<Guid> { /// <summary> /// Id /// </summary> public Guid? Id { get; set; } /// <summary> /// 菜单Id /// </summary> public Guid ParentId { get; set; } /// <summary> /// 编号 /// </summary> public string Code { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// 分组名称(用于按钮/字段) /// </summary> public string Group { get; set; } /// <summary> /// 位置(用于按钮) /// </summary> public string Location { get; set; } /// <summary> /// 图标 /// </summary> public string Icon { get; set; } /// <summary> /// 宽度(用于按钮/列/元素) /// </summary> public string Width { get; set; } /// <summary> /// 排序 /// </summary> public int Sort { get; set; } /// <summary> /// 备注 /// </summary> public string Remark { get; set; } } } FlexJobApi.Core/Models/User/Menus/Commands/SaveMenuFieldCommand.cs
New file @@ -0,0 +1,65 @@ using MediatR; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 保存菜单字段 /// </summary> public class SaveMenuFieldCommand : IRequest<Guid> { /// <summary> /// Id /// </summary> public Guid? Id { get; set; } /// <summary> /// 菜单Id /// </summary> public Guid ParentId { get; set; } /// <summary> /// 编号 /// </summary> public string Code { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// 分组名称(用于按钮/字段) /// </summary> public string Group { get; set; } /// <summary> /// 位置(用于按钮) /// </summary> public string Location { get; set; } /// <summary> /// 图标 /// </summary> public string Icon { get; set; } /// <summary> /// 宽度(用于按钮/列/元素) /// </summary> public string Width { get; set; } /// <summary> /// 排序 /// </summary> public int Sort { get; set; } /// <summary> /// 备注 /// </summary> public string Remark { get; set; } } } FlexJobApi.Core/Models/User/Menus/Commands/SetMenuSwitchCommand.cs
New file @@ -0,0 +1,40 @@ using MediatR; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 设置菜单切换信息 /// </summary> public class SetMenuSwitchCommand : IRequest<int> { public SetMenuSwitchCommand() { Ids = []; } /// <summary> /// Id /// </summary> public List<Guid> Ids { get; set; } /// <summary> /// 类型(null时不更新) /// </summary> public EnumMenuType? Type { get; set; } /// <summary> /// 是否禁用(null时不更新) /// </summary> public bool? IsDisabled { get; set; } /// <summary> /// 是否缓存(null时不更新) /// </summary> public bool? IsCache { get; set; } } } FlexJobApi.User.Application/Menus/Commands/SaveMenuButtonCommandHandler.cs
New file @@ -0,0 +1,62 @@ using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; 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 { /// <summary> /// 保存菜单按钮 /// </summary> public class SaveMenuButtonCommandHandler( IRepository<Menu> rep ) : IRequestHandler<SaveMenuButtonCommand, Guid> { private readonly IRepository<Menu> rep = rep; /// <inheritdoc/> public async Task<Guid> Handle(SaveMenuButtonCommand request, CancellationToken cancellationToken) { if (request.Id.HasValue) { var entity = await rep.FirstOrDefaultAsync(it => it.Id == it.Id); if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s410, "上级Id"); request.Adapt(entity); if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s405, "菜单编号"); await rep.UpdateAsync(entity); return entity.Id; } else { var entity = new Menu(); request.Adapt(entity); if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s405, "菜单编号"); await rep.InsertAsync(entity); return entity.Id; } } /// <summary> /// 校验菜单是否重复 /// </summary> /// <param name="entity"></param> /// <returns></returns> private async Task<bool> CheckExist(Menu entity) { return await rep.AsQueryable().AsNoTracking() .AnyAsync(it => it.ParentId == entity.ParentId && it.Group == entity.Group && it.Location == entity.Location && it.Code == entity.Code && it.Id != entity.Id); } } } FlexJobApi.User.Application/Menus/Commands/SaveMenuFieldCommandHandler.cs
New file @@ -0,0 +1,62 @@ using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; 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 { /// <summary> /// /// </summary> public class SaveMenuFieldCommandHandler( IRepository<Menu> rep ) : IRequestHandler<SaveMenuFieldCommand, Guid> { private readonly IRepository<Menu> rep = rep; /// <inheritdoc/> public async Task<Guid> Handle(SaveMenuFieldCommand request, CancellationToken cancellationToken) { if (request.Id.HasValue) { var entity = await rep.FirstOrDefaultAsync(it => it.Id == it.Id); if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s410, "上级Id"); request.Adapt(entity); if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s405, "菜单编号"); await rep.UpdateAsync(entity); return entity.Id; } else { var entity = new Menu(); request.Adapt(entity); if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s405, "菜单编号"); await rep.InsertAsync(entity); return entity.Id; } } /// <summary> /// 校验菜单是否重复 /// </summary> /// <param name="entity"></param> /// <returns></returns> private async Task<bool> CheckExist(Menu entity) { return await rep.AsQueryable().AsNoTracking() .AnyAsync(it => it.ParentId == entity.ParentId && it.Group == entity.Group && it.Code == entity.Code && it.Id != entity.Id); } } } FlexJobApi.User.Application/Menus/Commands/SetMenuSwitchCommandHandler.cs
New file @@ -0,0 +1,53 @@ using FlexJobApi.Core; using Furion.DatabaseAccessor; 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 { /// <summary> /// 设置菜单切换信息 /// </summary> public class SetMenuSwitchCommandHandler( IRepository<Menu> rep ) : IRequestHandler<SetMenuSwitchCommand, int> { private readonly IRepository<Menu> rep = rep; /// <inheritdoc/> public async Task<int> Handle(SetMenuSwitchCommand request, CancellationToken cancellationToken) { var entities = await rep.AsQueryable() .Where(it => request.Ids.Contains(it.Id)) .ToListAsync(cancellationToken); foreach (var entity in entities) { if (request.Type.HasValue) { entity.Type = request.Type.Value; } if (request.IsDisabled.HasValue) { entity.IsDisabled = request.IsDisabled.Value; } if (request.IsCache.HasValue) { entity.IsCache = request.IsCache.Value; } } if (entities.Any()) { await rep.UpdateAsync(entities); return entities.Count; } return 0; } } } FlexJobApi.User.Application/Menus/MenuAppService.cs
@@ -56,6 +56,36 @@ } /// <summary> /// 保存菜单按钮 /// </summary> /// <param name="command"></param> /// <returns></returns> public Task<Guid> SaveMenuButton(SaveMenuButtonCommand command) { return mediator.Send(command); } /// <summary> /// 保存菜单字段 /// </summary> /// <param name="command"></param> /// <returns></returns> public Task<Guid> SaveMenuField(SaveMenuFieldCommand command) { return mediator.Send(command); } /// <summary> /// 设置菜单切换信息 /// </summary> /// <param name="command"></param> /// <returns></returns> public Task<int> SetMenuSwitch(SetMenuSwitchCommand command) { return mediator.Send(command); } /// <summary> /// 删除菜单 /// </summary> /// <param name="command"></param> FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs
@@ -25,6 +25,7 @@ public async Task<List<GetMenusQueryResultItem>> Handle(GetMenusQuery request, CancellationToken cancellationToken) { var q = rep.AsQueryable().AsNoTracking() .OrderBy(it => it.Sort) .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();