diff --git a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs
index 60666c6..10e2f16 100644
--- a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs
+++ b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs
@@ -8,6 +8,7 @@ using ZR.Admin.WebApi.Filters;
using ZR.Model.System.Dto;
using ZR.Model.System;
using ZR.Service.System.IService;
+using ZR.Model;
namespace ZR.Admin.WebApi.Controllers.System
{
@@ -32,10 +33,10 @@ namespace ZR.Admin.WebApi.Controllers.System
///
[ActionPermissionFilter(Permission = "system:menu:list")]
[HttpGet("list")]
- public IActionResult MenuList([FromQuery] SysMenu menu)
+ public IActionResult TreeMenuList([FromQuery] SysMenu menu)
{
long userId = HttpContext.GetUId();
- return SUCCESS(sysMenuService.SelectMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss");
+ return SUCCESS(sysMenuService.SelectTreeMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss");
}
///
@@ -74,7 +75,7 @@ namespace ZR.Admin.WebApi.Controllers.System
public IActionResult RoleMenuTreeselect(int roleId)
{
long userId = HttpContext.GetUId();
- var menus = sysMenuService.SelectMenuList(userId);
+ var menus = sysMenuService.SelectMenuList(new SysMenu(), userId);
var checkedKeys = sysRoleService.SelectUserRoleMenus(roleId);
return SUCCESS(new
{
diff --git a/ZR.Model/System/SysMenu.cs b/ZR.Model/System/SysMenu.cs
index ca0c3f9..d82e380 100644
--- a/ZR.Model/System/SysMenu.cs
+++ b/ZR.Model/System/SysMenu.cs
@@ -8,7 +8,7 @@ namespace ZR.Model.System
///
[SugarTable("sys_menu")]
[Tenant("0")]
- public class SysMenu: SysBase
+ public class SysMenu : SysBase
{
///
/// 菜单ID
@@ -84,6 +84,7 @@ namespace ZR.Model.System
///
/// 子菜单
///
- public List children = new List();
+ [SugarColumn(IsIgnore = true)]
+ public List children { get; set; } = new List();
}
}
diff --git a/ZR.Repository/System/SysMenuRepository.cs b/ZR.Repository/System/SysMenuRepository.cs
index 8086698..cb03a0f 100644
--- a/ZR.Repository/System/SysMenuRepository.cs
+++ b/ZR.Repository/System/SysMenuRepository.cs
@@ -18,6 +18,41 @@ namespace ZR.Repository.System
/// 获取所有菜单(菜单管理)
///
///
+ public List SelectTreeMenuList(SysMenu menu)
+ {
+ return Context.Queryable()
+ .WhereIF(!string.IsNullOrEmpty(menu.menuName), it => it.menuName.Contains(menu.menuName))
+ .WhereIF(!string.IsNullOrEmpty(menu.visible), it => it.visible == menu.visible)
+ .WhereIF(!string.IsNullOrEmpty(menu.status), it => it.status == menu.status)
+ .OrderBy(it => new { it.parentId, it.orderNum })
+ .ToTree(it => it.children, it => it.parentId, 0);
+ }
+
+ ///
+ /// 根据用户查询系统菜单列表(菜单管理)
+ ///
+ ///
+ /// 用户角色集合
+ ///
+ public List SelectTreeMenuListByUserId(SysMenu sysMenu, List roles)
+ {
+ var roleMenus = Context.Queryable()
+ .Where(r => roles.Contains(r.Role_id));
+
+ return Context.Queryable()
+ .InnerJoin(roleMenus, (c, j) => c.menuId == j.Menu_id)
+ .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (c, j) => c.menuName.Contains(sysMenu.menuName))
+ .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible)
+ .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (c, j) => c.status == sysMenu.status)
+ .OrderBy((c, j) => new { c.parentId, c.orderNum })
+ .Select(c => c)
+ .ToTree(it => it.children, it => it.parentId, 0);
+ }
+
+ ///
+ /// 获取所有菜单
+ ///
+ ///
public List SelectMenuList(SysMenu menu)
{
return Context.Queryable()
@@ -32,22 +67,21 @@ namespace ZR.Repository.System
/// 根据用户查询系统菜单列表
///
///
- /// 用户id
+ /// 用户角色集合
///
- public List SelectMenuListByUserId(SysMenu sysMenu, long userId)
+ public List SelectMenuListByRoles(SysMenu sysMenu, List roles)
{
- return Context.Queryable((menu, roleMenu, userRole, role) => new JoinQueryInfos(
- JoinType.Left, menu.menuId == roleMenu.Menu_id,
- JoinType.Left, roleMenu.Role_id == userRole.RoleId,
- JoinType.Left, userRole.RoleId == role.RoleId
- ))
- .Where((menu, roleMenu, userRole, role) => userRole.UserId == userId)
- .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (menu, roleMenu, userRole, role) => menu.menuName.Contains(sysMenu.menuName))
- .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (menu, roleMenu, userRole, role) => menu.visible == sysMenu.visible)
- .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (menu, roleMenu, userRole, role) => menu.status == sysMenu.status)
- .OrderBy((menu, roleMenu, userRole, role) => new { menu.parentId, menu.orderNum })
- //.Distinct()
- .Select((menu, roleMenu, userRole, role) => menu).ToList();
+ var roleMenus = Context.Queryable()
+ .Where(r => roles.Contains(r.Role_id));
+
+ return Context.Queryable()
+ .InnerJoin(roleMenus, (c, j) => c.menuId == j.Menu_id)
+ .Where((c, j) => c.status == "0")
+ .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (c, j) => c.menuName.Contains(sysMenu.menuName))
+ .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible)
+ .OrderBy((c, j) => new { c.parentId, c.orderNum })
+ .Select(c => c)
+ .ToList();
}
#region 左侧菜单树
@@ -68,11 +102,11 @@ namespace ZR.Repository.System
///
/// 根据用户角色获取左侧菜单树
///
- ///
+ ///
///
public List SelectMenuTreeByRoleIds(List roleIds)
{
- var menuTypes = new string[] { "M", "C"};
+ var menuTypes = new string[] { "M", "C" };
return Context.Queryable((menu, roleMenu) => new JoinQueryInfos(
JoinType.Left, menu.menuId == roleMenu.Menu_id
))
diff --git a/ZR.Repository/System/SysRoleRepository.cs b/ZR.Repository/System/SysRoleRepository.cs
index 7afb00c..861d340 100644
--- a/ZR.Repository/System/SysRoleRepository.cs
+++ b/ZR.Repository/System/SysRoleRepository.cs
@@ -2,6 +2,7 @@
using Infrastructure.Model;
using SqlSugar;
using System.Collections.Generic;
+using System.Linq;
using ZR.Model;
using ZR.Model.System;
@@ -110,6 +111,16 @@ namespace ZR.Repository.System
return Context.Queryable().Where(it => it.Role_id == roleId).ToList();
}
+ ///
+ /// 根据用户所有角色获取菜单
+ ///
+ ///
+ ///
+ public List SelectRoleMenuByRoleIds(long[] roleIds)
+ {
+ return Context.Queryable().Where(it => roleIds.Contains(it.Role_id)).ToList();
+ }
+
///
/// 批量插入用户菜单
///
diff --git a/ZR.Service/System/IService/ISysMenuService.cs b/ZR.Service/System/IService/ISysMenuService.cs
index 90aea34..a8bd620 100644
--- a/ZR.Service/System/IService/ISysMenuService.cs
+++ b/ZR.Service/System/IService/ISysMenuService.cs
@@ -8,34 +8,34 @@ namespace ZR.Service.System.IService
{
public interface ISysMenuService
{
- public List SelectMenuList(long userId);
+ //List SelectMenuList(long userId);
- public List SelectMenuList(SysMenu menu, long userId);
+ List SelectMenuList(SysMenu menu, long userId);
+ List SelectTreeMenuList(SysMenu menu, long userId);
- public SysMenu GetMenuByMenuId(int menuId);
+ SysMenu GetMenuByMenuId(int menuId);
+ int AddMenu(SysMenu menu);
- public int AddMenu(SysMenu menu);
+ int EditMenu(SysMenu menu);
- public int EditMenu(SysMenu menu);
+ int DeleteMenuById(int menuId);
- public int DeleteMenuById(int menuId);
+ string CheckMenuNameUnique(SysMenu menu);
- public string CheckMenuNameUnique(SysMenu menu);
+ int ChangeSortMenu(MenuDto menuDto);
- public int ChangeSortMenu(MenuDto menuDto);
+ bool HasChildByMenuId(long menuId);
- public bool HasChildByMenuId(long menuId);
+ List SelectMenuTreeByUserId(long userId);
- public List SelectMenuTreeByUserId(long userId);
+ List SelectMenuPermsListByUserId(long userId);
- public List SelectMenuPermsListByUserId(long userId);
+ List SelectMenuPermsByUserId(long userId);
- public List SelectMenuPermsByUserId(long userId);
+ bool CheckMenuExistRole(long menuId);
- public bool CheckMenuExistRole(long menuId);
+ List BuildMenus(List menus);
- public List BuildMenus(List menus);
-
- public List BuildMenuTreeSelect(List menus);
+ List BuildMenuTreeSelect(List menus);
}
}
diff --git a/ZR.Service/System/IService/ISysRoleService.cs b/ZR.Service/System/IService/ISysRoleService.cs
index e2517b8..a0dd959 100644
--- a/ZR.Service/System/IService/ISysRoleService.cs
+++ b/ZR.Service/System/IService/ISysRoleService.cs
@@ -105,7 +105,7 @@ namespace ZR.Service.System.IService
///
///
public List SelectUserRoleMenus(long roleId);
-
+ List SelectRoleMenuByRoleIds(long[] roleIds);
///
/// 获取用户角色列表
///
diff --git a/ZR.Service/System/SysMenuService.cs b/ZR.Service/System/SysMenuService.cs
index e2ec077..5225e66 100644
--- a/ZR.Service/System/SysMenuService.cs
+++ b/ZR.Service/System/SysMenuService.cs
@@ -4,7 +4,6 @@ using System.Linq;
using ZR.Model.System.Dto;
using ZR.Model.System;
using ZR.Model.System.Vo;
-using ZR.Model.Vo;
using ZR.Model.Vo.System;
using ZR.Repository.System;
using ZR.Service.System.IService;
@@ -30,31 +29,39 @@ namespace ZR.Service
}
///
- /// 根据用户查询系统菜单列表
+ /// 获取所有菜单数(菜单管理)
///
- ///
- ///
///
- public List SelectMenuList(long userId)
+ public List SelectTreeMenuList(SysMenu menu, long userId)
{
- return SelectMenuList(new SysMenu(), userId);
+ List menuList;
+ if (SysRoleService.IsAdmin(userId))
+ {
+ menuList = MenuRepository.SelectTreeMenuList(menu);
+ }
+ else
+ {
+ var userRoles = SysRoleService.SelectUserRoles(userId);
+ menuList = MenuRepository.SelectTreeMenuListByUserId(menu, userRoles);
+ }
+ return menuList;
}
///
- /// 获取所有菜单(菜单管理)
+ /// 获取所有菜单列表
///
///
public List SelectMenuList(SysMenu menu, long userId)
{
List menuList;
- //if (SysUser.IsAdmin(userId))
if (SysRoleService.IsAdmin(userId))
{
menuList = MenuRepository.SelectMenuList(menu);
}
else
{
- menuList = MenuRepository.SelectMenuListByUserId(menu, userId);
+ var userRoles = SysRoleService.SelectUserRoles(userId);
+ menuList = MenuRepository.SelectMenuListByRoles(menu, userRoles);
}
return menuList;
}
diff --git a/ZR.Service/System/SysRoleService.cs b/ZR.Service/System/SysRoleService.cs
index 02ce07c..cabc102 100644
--- a/ZR.Service/System/SysRoleService.cs
+++ b/ZR.Service/System/SysRoleService.cs
@@ -216,7 +216,7 @@ namespace ZR.Service
///
/// 判断是否是管理员
///
- ///
+ ///
///
public bool IsRoleAdmin(long roleid)
{
@@ -228,13 +228,25 @@ namespace ZR.Service
///
/// 获取角色菜单id集合
///
- ///
+ ///
///
public List SelectUserRoleMenus(long roleId)
{
var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId);
- return list.Select(x => x.Menu_id).ToList();
+ return list.Select(x => x.Menu_id).Distinct().ToList();
+ }
+
+ ///
+ /// 根据用户所有角色获取菜单
+ ///
+ ///
+ ///
+ public List SelectRoleMenuByRoleIds(long[] roleIds)
+ {
+ return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds)
+ .Select(x => x.Menu_id)
+ .Distinct().ToList();
}
///
@@ -270,6 +282,11 @@ namespace ZR.Service
return list.Select(x => x.RoleKey).ToList();
}
+ ///
+ /// 获取用户所有角色名
+ ///
+ ///
+ ///
public List SelectUserRoleNames(long userId)
{
var list = SelectUserRoleListByUserId(userId);
diff --git a/ZR.Vue/src/views/system/menu/index.vue b/ZR.Vue/src/views/system/menu/index.vue
index a097dce..45fd1b2 100644
--- a/ZR.Vue/src/views/system/menu/index.vue
+++ b/ZR.Vue/src/views/system/menu/index.vue
@@ -52,10 +52,10 @@
-
+
-
+
@@ -103,11 +103,13 @@
-
+
-
+
+
+
@@ -221,7 +223,7 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import IconSelect from "@/components/IconSelect";
export default {
- name: "menu",
+ name: "menu1",
components: { Treeselect, IconSelect },
data() {
return {
@@ -289,7 +291,8 @@ export default {
getList() {
this.loading = true;
listMenu(this.queryParams).then((response) => {
- this.menuList = this.handleTree(response.data, "menuId");
+ this.menuList = response.data;
+ // this.menuList = this.handleTree(response.data, "menuId");
this.loading = false;
});
},
@@ -309,7 +312,8 @@ export default {
listMenu().then((response) => {
this.menuOptions = [];
const menu = { menuId: 0, menuName: "根菜单", children: [] };
- menu.children = this.handleTree(response.data, "menuId");
+ menu.children = response.data;
+ //menu.children = this.handleTree(response.data, "menuId");
this.menuOptions.push(menu);
});
},