feat: add admin menu management crud

This commit is contained in:
2025-12-05 21:16:07 +08:00
parent 02e33de5c8
commit a1499fc1a1
22 changed files with 1747 additions and 2 deletions

View File

@@ -0,0 +1,79 @@
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Identity.Entities;
/// <summary>
/// 管理端菜单定义。
/// </summary>
public sealed class MenuDefinition : MultiTenantEntityBase
{
/// <summary>
/// 父级菜单 ID根节点为 0。
/// </summary>
public long ParentId { get; set; }
/// <summary>
/// 菜单名称(前端路由 name
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 路由路径。
/// </summary>
public string Path { get; set; } = string.Empty;
/// <summary>
/// 组件路径(不含 .vue
/// </summary>
public string Component { get; set; } = string.Empty;
/// <summary>
/// 标题。
/// </summary>
public string Title { get; set; } = string.Empty;
/// <summary>
/// 图标标识。
/// </summary>
public string? Icon { get; set; }
/// <summary>
/// 是否 iframe。
/// </summary>
public bool IsIframe { get; set; }
/// <summary>
/// 外链或 iframe 地址。
/// </summary>
public string? Link { get; set; }
/// <summary>
/// 是否缓存。
/// </summary>
public bool KeepAlive { get; set; }
/// <summary>
/// 排序。
/// </summary>
public int SortOrder { get; set; }
/// <summary>
/// 访问该菜单所需的权限集合(逗号分隔)。
/// </summary>
public string RequiredPermissions { get; set; } = string.Empty;
/// <summary>
/// Meta.permissions逗号分隔
/// </summary>
public string MetaPermissions { get; set; } = string.Empty;
/// <summary>
/// Meta.roles逗号分隔
/// </summary>
public string MetaRoles { get; set; } = string.Empty;
/// <summary>
/// 按钮权限列表 JSON存储 MenuAuthItemDto 数组)。
/// </summary>
public string? AuthListJson { get; set; }
}

View File

@@ -0,0 +1,39 @@
using TakeoutSaaS.Domain.Identity.Entities;
namespace TakeoutSaaS.Domain.Identity.Repositories;
/// <summary>
/// 菜单仓储。
/// </summary>
public interface IMenuRepository
{
/// <summary>
/// 按租户获取菜单列表。
/// </summary>
Task<IReadOnlyList<MenuDefinition>> GetByTenantAsync(long tenantId, CancellationToken cancellationToken = default);
/// <summary>
/// 根据 ID 查询菜单。
/// </summary>
Task<MenuDefinition?> FindByIdAsync(long id, long tenantId, CancellationToken cancellationToken = default);
/// <summary>
/// 新增菜单。
/// </summary>
Task AddAsync(MenuDefinition menu, CancellationToken cancellationToken = default);
/// <summary>
/// 更新菜单。
/// </summary>
Task UpdateAsync(MenuDefinition menu, CancellationToken cancellationToken = default);
/// <summary>
/// 删除菜单。
/// </summary>
Task DeleteAsync(long id, long tenantId, CancellationToken cancellationToken = default);
/// <summary>
/// 持久化变更。
/// </summary>
Task SaveChangesAsync(CancellationToken cancellationToken = default);
}