feat: 完成ruoyi、pure菜单兼容

This commit is contained in:
橙子
2024-09-07 02:17:07 +08:00
parent 9fc5b521e5
commit 978a7fab4c
16 changed files with 1052 additions and 437 deletions

View File

@@ -1,4 +1,5 @@
using SqlSugar;
using NUglify.Helpers;
using SqlSugar;
using Volo.Abp;
using Volo.Abp.Auditing;
using Volo.Abp.Domain.Entities;
@@ -75,7 +76,12 @@ namespace Yi.Framework.Rbac.Domain.Entities
/// <summary>
/// 菜单名
/// </summary>
public string MenuName { get; set; } = string.Empty;
public string MenuName { get; set; }
/// <summary>
/// 路由名称
/// </summary>
public string? RouterName { get; set; }
/// <summary>
///
@@ -137,6 +143,11 @@ namespace Yi.Framework.Rbac.Domain.Entities
[SugarColumn(ColumnName = "Component")]
public string? Component { get; set; }
/// <summary>
/// 菜单来源
/// </summary>
public MenuSourceEnum MenuSource { get; set; } = MenuSourceEnum.Ruoyi;
/// <summary>
/// 路由参数
///</summary>
@@ -156,9 +167,13 @@ namespace Yi.Framework.Rbac.Domain.Entities
/// </summary>
/// <param name="menus"></param>
/// <returns></returns>
public static List<Vue3RouterDto> Vue3RouterBuild(this List<MenuAggregateRoot> menus)
public static List<Vue3RouterDto> Vue3RuoYiRouterBuild(this List<MenuAggregateRoot> menus)
{
menus = menus.Where(m => m.MenuType != MenuTypeEnum.Component).ToList();
menus = menus
.Where(m => m.State == true)
.Where(m => m.MenuType != MenuTypeEnum.Component)
.Where(m => m.MenuSource == MenuSourceEnum.Ruoyi)
.ToList();
List<Vue3RouterDto> routers = new();
foreach (var m in menus)
{
@@ -216,16 +231,58 @@ namespace Yi.Framework.Rbac.Domain.Entities
return TreeHelper.SetTree(routers);
}
/// <summary>
/// 构建vue3 pure路由
/// </summary>
/// <param name="menus"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public static List<Vue3PureRouterDto> Vue3PureRouterBuild(this List<MenuAggregateRoot> menus)
{
throw new NotImplementedException();
//pure的菜单为树形
var allRouters = menus
.Where(m => m.State == true)
.Where(m => m.MenuType != MenuTypeEnum.Component)
.Where(m => m.MenuSource == MenuSourceEnum.Pure)
.Select(m => new Vue3PureRouterDto
{
Path = m.Router.StartsWith("/")?m.Router:"/"+m.Router,
Name = m.RouterName,
component = m.Component,
Meta = new MetaPureRouterDto()
{
showLink = m.IsShow,
FrameSrc = m.IsLink == true ? m.Router : null,
Auths = new List<string>() { m.PermissionCode },
Icon = m.MenuIcon,
Title = m.MenuName,
},
Children =null,
Id = m.Id,
ParentId = m.ParentId
})
.ToList();
var routerDic = allRouters.GroupBy(x => x.ParentId).ToDictionary(x => x.Key,y=>y.ToList());
//根路由
if (!routerDic.TryGetValue(Guid.Empty, out var rootRouters))
{
return new List<Vue3PureRouterDto>();
}
Stack<Vue3PureRouterDto> stack = new Stack<Vue3PureRouterDto>(rootRouters);
while (stack.Count > 0)
{
var currentRouter = stack.Pop();
if (routerDic.TryGetValue(currentRouter.Id, out var items))
{
currentRouter.Children = items;
items?.ForEach(x => stack.Push(x));
}
}
return rootRouters;
}
}
}