feat(menu): 添加菜单树构建功能和相关接口

This commit is contained in:
wcg
2026-01-04 11:02:13 +08:00
parent f77c775229
commit 80d8ac2bc8
4 changed files with 71 additions and 2 deletions

View File

@@ -15,8 +15,8 @@ namespace Yi.Framework.Rbac.Application.Contracts.Dtos.Role
public int OrderNum { get; set; } public int OrderNum { get; set; }
public List<Guid> DeptIds { get; set; } public List<Guid>? DeptIds { get; set; }
public List<Guid> MenuIds { get; set; } public List<Guid>? MenuIds { get; set; }
} }
} }

View File

@@ -1,3 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using SqlSugar; using SqlSugar;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Yi.Framework.Ddd.Application; using Yi.Framework.Ddd.Application;
@@ -5,6 +6,7 @@ using Yi.Framework.Rbac.Application.Contracts.Dtos.Menu;
using Yi.Framework.Rbac.Application.Contracts.IServices; using Yi.Framework.Rbac.Application.Contracts.IServices;
using Yi.Framework.Rbac.Domain.Entities; using Yi.Framework.Rbac.Domain.Entities;
using Yi.Framework.Rbac.Domain.Shared.Consts; using Yi.Framework.Rbac.Domain.Shared.Consts;
using Yi.Framework.Rbac.Domain.Shared.Dtos;
using Yi.Framework.SqlSugarCore.Abstractions; using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.Rbac.Application.Services.System namespace Yi.Framework.Rbac.Application.Services.System
@@ -43,5 +45,31 @@ namespace Yi.Framework.Rbac.Application.Services.System
return await MapToGetListOutputDtosAsync(entities); return await MapToGetListOutputDtosAsync(entities);
} }
/// <summary>
/// 获取所有菜单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Route("menu/list")]
public async Task<List<MenuGetListOutputDto>> GetAllListAsync(MenuGetListInputVo input)
{
var entities = await _repository._DbQueryable.WhereIF(!string.IsNullOrEmpty(input.MenuName), x => x.MenuName.Contains(input.MenuName!))
.WhereIF(input.State is not null, x => x.State == input.State)
.Where(x=>x.MenuSource==input.MenuSource)
.OrderByDescending(x => x.OrderNum)
.ToListAsync();
return await MapToGetListOutputDtosAsync(entities);
}
/// <summary>
/// 获取菜单树
/// </summary>
/// <returns></returns>
public async Task<List<MenuTreeDto>> GetTreeAsync()
{
var menuList = await _repository._DbQueryable.ToListAsync();
return menuList.TreeDtoBuild();
}
} }
} }

View File

@@ -0,0 +1,16 @@
using Yi.Framework.Core.Helper;
using Yi.Framework.Rbac.Domain.Shared.Enums;
namespace Yi.Framework.Rbac.Domain.Shared.Dtos;
public class MenuTreeDto: TreeHelper.ITreeModel<MenuTreeDto>
{
public Guid Id { get; set; }
public Guid ParentId { get; set; }
public int OrderNum { get; set; }
public string MenuName { get; set; } = string.Empty;
public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu;
public string? MenuIcon { get; set; }
public List<MenuTreeDto>? Children { get; set; }
}

View File

@@ -285,5 +285,30 @@ namespace Yi.Framework.Rbac.Domain.Entities
return rootRouters; return rootRouters;
} }
/// <summary>
/// 构建菜单树表
/// </summary>
/// <param name="menus"></param>
/// <returns></returns>
public static List<MenuTreeDto> TreeDtoBuild(this List<MenuAggregateRoot> menus)
{
List<MenuTreeDto> treeDtos = new();
foreach (var m in menus)
{
var treeDto = new MenuTreeDto
{
Id = m.Id,
ParentId = m.ParentId,
OrderNum = m.OrderNum,
MenuName = m.MenuName,
MenuType = m.MenuType,
MenuIcon = m.MenuIcon
};
treeDtos.Add(treeDto);
}
return TreeHelper.SetTree(treeDtos);
}
} }
} }