using System; using System.Collections.Generic; using System.Linq; using SqlSugar; using Yi.Framework.Infrastructure.Data.Auditing; using Yi.Framework.Infrastructure.Data.Entities; using Yi.Framework.Infrastructure.Ddd.Entities; using Yi.Framework.Infrastructure.Helper; using Yi.Furion.Core.Rbac.Dtos; using Yi.Furion.Core.Rbac.Enums; namespace Yi.Furion.Core.Rbac.Entities { /// /// 菜单表 /// [SugarTable("Menu")] public partial class MenuEntity : IEntity, ISoftDelete, IAuditedObject, IOrderNum, IState { /// /// 主键 /// [SugarColumn(IsPrimaryKey = true)] public long Id { get; set; } /// /// 逻辑删除 /// public bool IsDeleted { get; set; } /// /// 创建时间 /// public DateTime CreationTime { get; set; } = DateTime.Now; /// /// 创建者 /// public long? CreatorId { get; set; } /// /// 最后修改者 /// public long? 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 long 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 (0 == 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); } } }