using SqlSugar; using Volo.Abp; using Volo.Abp.Auditing; using Volo.Abp.Domain.Entities; using Yi.Framework.Core.Data; using Yi.Framework.Core.Helper; using Yi.Framework.Rbac.Domain.Shared.Dtos; using Yi.Framework.Rbac.Domain.Shared.Enums; namespace Yi.Framework.Rbac.Domain.Entities { /// /// 菜单表 /// [SugarTable("Menu")] public partial class MenuAggregateRoot : AggregateRoot, ISoftDelete, IAuditedObject, IOrderNum, IState { public MenuAggregateRoot() { } public MenuAggregateRoot(Guid id) { Id = id; ParentId = Guid.Empty; } public MenuAggregateRoot(Guid id, Guid parentId) { Id = id; ParentId = parentId; } /// /// 主键 /// [SugarColumn(IsPrimaryKey = true)] public override Guid Id { get; protected set; } /// /// 逻辑删除 /// public bool IsDeleted { get; set; } /// /// 创建时间 /// public DateTime CreationTime { get; set; } = DateTime.Now; /// /// 创建者 /// public Guid? CreatorId { get; set; } /// /// 最后修改者 /// public Guid? LastModifierId { get; set; } /// /// 最后修改时间 /// public DateTime? LastModificationTime { get; set; } /// /// 排序 /// public int OrderNum { get; set; } = 0; /// /// 状态 /// public bool State { get; set; } /// /// 菜单名 /// public string MenuName { get; set; } = string.Empty; /// /// /// [SugarColumn(ColumnName = "MenuType")] public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu; /// /// /// [SugarColumn(ColumnName = "PermissionCode")] public string? PermissionCode { get; set; } /// /// /// [SugarColumn(ColumnName = "ParentId")] public Guid ParentId { get; set; } /// /// 菜单图标 /// [SugarColumn(ColumnName = "MenuIcon")] public string? MenuIcon { get; set; } /// /// 菜单组件路由 /// [SugarColumn(ColumnName = "Router")] public string? Router { get; set; } /// /// 是否为外部链接 /// [SugarColumn(ColumnName = "IsLink")] public bool IsLink { get; set; } /// /// 是否缓存 /// [SugarColumn(ColumnName = "IsCache")] public bool IsCache { get; set; } /// /// 是否显示 /// [SugarColumn(ColumnName = "IsShow")] public bool IsShow { get; set; } = true; /// /// 描述 /// [SugarColumn(ColumnName = "Remark")] public string? Remark { get; set; } /// /// 组件路径 /// [SugarColumn(ColumnName = "Component")] public string? Component { get; set; } /// /// 路由参数 /// [SugarColumn(ColumnName = "Query")] public string? Query { get; set; } [SugarColumn(IsIgnore = true)] public List? Children { get; set; } } /// /// 实体扩展 /// public static class MenuEntityExtensions { /// /// 构建vue3路由 /// /// /// public static List Vue3RouterBuild(this List menus) { menus = menus.Where(m => m.MenuType != MenuTypeEnum.Component).ToList(); List routers = new(); foreach (var m in menus) { var r = new Vue3RouterDto(); r.OrderNum = m.OrderNum; var routerName = m.Router?.Split("/").LastOrDefault(); r.Id = m.Id; r.ParentId = m.ParentId; //开头大写 r.Name = routerName?.First().ToString().ToUpper() + routerName?.Substring(1); r.Path = m.Router!; r.Hidden = !m.IsShow; if (m.MenuType == MenuTypeEnum.Catalogue) { r.Redirect = "noRedirect"; r.AlwaysShow = true; //判断是否为最顶层的路由 if (Guid.Empty == m.ParentId) { r.Component = "Layout"; } else { r.Component = "ParentView"; } } if (m.MenuType == MenuTypeEnum.Menu) { r.Redirect = "noRedirect"; r.AlwaysShow = true; r.Component = m.Component!; r.AlwaysShow = false; } r.Meta = new Meta { Title = m.MenuName!, Icon = m.MenuIcon!, NoCache = !m.IsCache }; if (m.IsLink) { r.Meta.link = m.Router!; r.AlwaysShow = false; } routers.Add(r); } return TreeHelper.SetTree(routers); } } }