From 400207b419a898e09648a90e2940c861624d2434 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com>
Date: Tue, 2 Nov 2021 14:01:37 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E8=A3=85core?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SwaggerDoc.xml | 4 +-
.../Yi.Framework.Core/TreeMenuBuild.cs | 108 ++++++++++++++++++
.../Yi.Framework.Service/MenuService.cs | 24 +---
.../Yi.Framework.Service/UserService.cs | 65 +----------
.../Yi.Framework.Service.csproj | 1 +
Yi.Vue/src/store/modules/user.js | 2 +-
6 files changed, 121 insertions(+), 83 deletions(-)
create mode 100644 Yi.Framework/Yi.Framework.Core/TreeMenuBuild.cs
diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/SwaggerDoc.xml b/Yi.Framework/Yi.Framework.ApiMicroservice/SwaggerDoc.xml
index 33305d1d..9d315f5f 100644
--- a/Yi.Framework/Yi.Framework.ApiMicroservice/SwaggerDoc.xml
+++ b/Yi.Framework/Yi.Framework.ApiMicroservice/SwaggerDoc.xml
@@ -146,11 +146,11 @@
-
+
用于给角色设置菜单的时候,点击一个角色,显示这个角色拥有的并列的菜单
-
+
diff --git a/Yi.Framework/Yi.Framework.Core/TreeMenuBuild.cs b/Yi.Framework/Yi.Framework.Core/TreeMenuBuild.cs
new file mode 100644
index 00000000..14b0e6f8
--- /dev/null
+++ b/Yi.Framework/Yi.Framework.Core/TreeMenuBuild.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Yi.Framework.Model.Models;
+
+namespace Yi.Framework.Core
+{
+ public static class TreeMenuBuild
+ {
+ ///
+ /// 过滤所有已经删除的菜单
+ ///
+ ///
+ ///
+ public static menu Normal(menu menu_data)
+ {
+ for (int i = menu_data.children.Count() - 1; i >= 0; i--)
+ {
+ if (menu_data.children[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted)
+ {
+ menu_data.children.Remove(menu_data.children[i]);
+ }
+ else if (menu_data.children[i] != null)
+ {
+ Normal(menu_data.children[i]);
+ }
+ }
+ return menu_data;
+ }
+
+
+
+ public static menu ShowFormat(menu menu_data, List allMenuIds)
+ {
+ return Format(Show(menu_data, allMenuIds));
+ }
+
+
+
+ ///
+ /// 过滤用户不展示及已删除及未拥有的菜单
+ ///
+ ///
+ ///
+ ///
+ private static menu Show(menu menu_data, List allMenuIds)
+ {
+ for (int i = menu_data.children.Count() - 1; i >= 0; i--)
+ {
+ if (!allMenuIds.Contains(menu_data.children[i].id) || menu_data.children[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted || menu_data.children[i].is_show == (short)Common.Enum.ShowFlagEnum.NoShow)
+ {
+ menu_data.children.Remove(menu_data.children[i]);
+ }
+ else
+ {
+ Show(menu_data.children[i], allMenuIds);
+ }
+ }
+ return menu_data;
+ }
+
+ ///
+ /// 为了匹配前端格式,通常和show方法一起
+ ///
+ ///
+ ///
+ private static menu Format(menu menu_data)
+ {
+ for (int i = menu_data.children.Count() - 1; i >= 0; i--)
+ {
+ if (menu_data.children[i].icon == null)
+ {
+ menu_data.children[i].icon = "mdi-view-dashboard";
+ }
+ if (menu_data.children != null || menu_data.children.Count() != 0)
+ {
+ Format(menu_data.children[i]);
+ }
+ }
+ if (menu_data.children.Count() == 0)
+ {
+ menu_data.children = null;
+ }
+
+ return menu_data;
+ }
+
+ public static menu Sort(menu menu_data)
+ {
+ if (menu_data.children != null)
+ {
+ for (int i = menu_data.children.Count() - 1; i >= 0; i--)
+ {
+ menu_data.children = menu_data.children.AsEnumerable().OrderByDescending(u => u.sort).ToList();
+
+ if (menu_data.children != null || menu_data.children.Count() != 0)
+ {
+ Sort(menu_data.children[i]);
+ }
+ }
+ }
+ return menu_data;
+ }
+
+ }
+}
diff --git a/Yi.Framework/Yi.Framework.Service/MenuService.cs b/Yi.Framework/Yi.Framework.Service/MenuService.cs
index 8e1c5d19..3fba9f09 100644
--- a/Yi.Framework/Yi.Framework.Service/MenuService.cs
+++ b/Yi.Framework/Yi.Framework.Service/MenuService.cs
@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Yi.Framework.Core;
using Yi.Framework.Interface;
using Yi.Framework.Model.Models;
@@ -38,7 +39,7 @@ namespace Yi.Framework.Service
.Where(u =>u.is_delete == Normal && u.is_show == (short)Common.Enum.ShowFlagEnum.Show && u.is_top == (short)Common.Enum.TopFlagEnum.Top)
.OrderByDescending(u=>u.sort)
.FirstOrDefaultAsync();
- return TopMenuBuild(menu_data);
+ return TreeMenuBuild.Normal(menu_data);
}
public async Task> GetTopMenusByTopMenuIds(List menuIds)
@@ -55,26 +56,7 @@ namespace Yi.Framework.Service
return menu_data;
}
- ///
- /// 过滤已经被删除的(这个应该是别的地方有方法的,不应该写到service层里面的)
- ///
- ///
- ///
- private menu TopMenuBuild(menu menu_data)
- {
- for (int i = menu_data.children.Count() - 1; i >= 0; i--)
- {
- if (menu_data.children[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted)
- {
- menu_data.children.Remove(menu_data.children[i]);
- }
- else if (menu_data.children[i] != null)
- {
- TopMenuBuild(menu_data.children[i]);
- }
- }
- return menu_data;
- }
+
public async Task> GetTopMenuByUserId(int userId)
{
var user_data = await _DbRead.Set().Include(u => u.roles).ThenInclude(u => u.menus).FirstOrDefaultAsync();
diff --git a/Yi.Framework/Yi.Framework.Service/UserService.cs b/Yi.Framework/Yi.Framework.Service/UserService.cs
index 7abe95c3..9e4b54ad 100644
--- a/Yi.Framework/Yi.Framework.Service/UserService.cs
+++ b/Yi.Framework/Yi.Framework.Service/UserService.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
+using Yi.Framework.Core;
using Yi.Framework.Interface;
using Yi.Framework.Model;
using Yi.Framework.Model.ModelFactory;
@@ -64,70 +65,16 @@ namespace Yi.Framework.Service
menuList = menuList.Union(m).OrderByDescending(u => u.sort).ToList();
}
//menu_data为角色所有的菜单,不是一个递归的啊
-
var allMenuIds = menuList.Select(u => u.id).ToList();
- var topMenu = menuList.Where(u => u.is_top == (short)Common.Enum.ShowFlagEnum.Show);
+
+ var topMenu =await _DbRead.Set