菜单管理树构建改用后端构建
This commit is contained in:
parent
68686f60fc
commit
512c5bc176
@ -8,6 +8,7 @@ using ZR.Admin.WebApi.Filters;
|
|||||||
using ZR.Model.System.Dto;
|
using ZR.Model.System.Dto;
|
||||||
using ZR.Model.System;
|
using ZR.Model.System;
|
||||||
using ZR.Service.System.IService;
|
using ZR.Service.System.IService;
|
||||||
|
using ZR.Model;
|
||||||
|
|
||||||
namespace ZR.Admin.WebApi.Controllers.System
|
namespace ZR.Admin.WebApi.Controllers.System
|
||||||
{
|
{
|
||||||
@ -32,10 +33,10 @@ namespace ZR.Admin.WebApi.Controllers.System
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ActionPermissionFilter(Permission = "system:menu:list")]
|
[ActionPermissionFilter(Permission = "system:menu:list")]
|
||||||
[HttpGet("list")]
|
[HttpGet("list")]
|
||||||
public IActionResult MenuList([FromQuery] SysMenu menu)
|
public IActionResult TreeMenuList([FromQuery] SysMenu menu)
|
||||||
{
|
{
|
||||||
long userId = HttpContext.GetUId();
|
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -74,7 +75,7 @@ namespace ZR.Admin.WebApi.Controllers.System
|
|||||||
public IActionResult RoleMenuTreeselect(int roleId)
|
public IActionResult RoleMenuTreeselect(int roleId)
|
||||||
{
|
{
|
||||||
long userId = HttpContext.GetUId();
|
long userId = HttpContext.GetUId();
|
||||||
var menus = sysMenuService.SelectMenuList(userId);
|
var menus = sysMenuService.SelectMenuList(new SysMenu(), userId);
|
||||||
var checkedKeys = sysRoleService.SelectUserRoleMenus(roleId);
|
var checkedKeys = sysRoleService.SelectUserRoleMenus(roleId);
|
||||||
return SUCCESS(new
|
return SUCCESS(new
|
||||||
{
|
{
|
||||||
|
|||||||
@ -84,6 +84,7 @@ namespace ZR.Model.System
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 子菜单
|
/// 子菜单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<SysMenu> children = new List<SysMenu>();
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<SysMenu> children { get; set; } = new List<SysMenu>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,41 @@ namespace ZR.Repository.System
|
|||||||
/// 获取所有菜单(菜单管理)
|
/// 获取所有菜单(菜单管理)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
public List<SysMenu> SelectTreeMenuList(SysMenu menu)
|
||||||
|
{
|
||||||
|
return Context.Queryable<SysMenu>()
|
||||||
|
.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据用户查询系统菜单列表(菜单管理)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sysMenu"></param>
|
||||||
|
/// <param name="roles">用户角色集合</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<SysMenu> SelectTreeMenuListByUserId(SysMenu sysMenu, List<long> roles)
|
||||||
|
{
|
||||||
|
var roleMenus = Context.Queryable<SysRoleMenu>()
|
||||||
|
.Where(r => roles.Contains(r.Role_id));
|
||||||
|
|
||||||
|
return Context.Queryable<SysMenu>()
|
||||||
|
.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public List<SysMenu> SelectMenuList(SysMenu menu)
|
public List<SysMenu> SelectMenuList(SysMenu menu)
|
||||||
{
|
{
|
||||||
return Context.Queryable<SysMenu>()
|
return Context.Queryable<SysMenu>()
|
||||||
@ -32,22 +67,21 @@ namespace ZR.Repository.System
|
|||||||
/// 根据用户查询系统菜单列表
|
/// 根据用户查询系统菜单列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sysMenu"></param>
|
/// <param name="sysMenu"></param>
|
||||||
/// <param name="userId">用户id</param>
|
/// <param name="roles">用户角色集合</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<SysMenu> SelectMenuListByUserId(SysMenu sysMenu, long userId)
|
public List<SysMenu> SelectMenuListByRoles(SysMenu sysMenu, List<long> roles)
|
||||||
{
|
{
|
||||||
return Context.Queryable<SysMenu, SysRoleMenu, SysUserRole, SysRole>((menu, roleMenu, userRole, role) => new JoinQueryInfos(
|
var roleMenus = Context.Queryable<SysRoleMenu>()
|
||||||
JoinType.Left, menu.menuId == roleMenu.Menu_id,
|
.Where(r => roles.Contains(r.Role_id));
|
||||||
JoinType.Left, roleMenu.Role_id == userRole.RoleId,
|
|
||||||
JoinType.Left, userRole.RoleId == role.RoleId
|
return Context.Queryable<SysMenu>()
|
||||||
))
|
.InnerJoin(roleMenus, (c, j) => c.menuId == j.Menu_id)
|
||||||
.Where((menu, roleMenu, userRole, role) => userRole.UserId == userId)
|
.Where((c, j) => c.status == "0")
|
||||||
.WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (menu, roleMenu, userRole, role) => menu.menuName.Contains(sysMenu.menuName))
|
.WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (c, j) => c.menuName.Contains(sysMenu.menuName))
|
||||||
.WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (menu, roleMenu, userRole, role) => menu.visible == sysMenu.visible)
|
.WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible)
|
||||||
.WhereIF(!string.IsNullOrEmpty(sysMenu.status), (menu, roleMenu, userRole, role) => menu.status == sysMenu.status)
|
.OrderBy((c, j) => new { c.parentId, c.orderNum })
|
||||||
.OrderBy((menu, roleMenu, userRole, role) => new { menu.parentId, menu.orderNum })
|
.Select(c => c)
|
||||||
//.Distinct()
|
.ToList();
|
||||||
.Select((menu, roleMenu, userRole, role) => menu).ToList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 左侧菜单树
|
#region 左侧菜单树
|
||||||
@ -68,7 +102,7 @@ namespace ZR.Repository.System
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据用户角色获取左侧菜单树
|
/// 根据用户角色获取左侧菜单树
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="userId"></param>
|
/// <param name="roleIds"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<SysMenu> SelectMenuTreeByRoleIds(List<long> roleIds)
|
public List<SysMenu> SelectMenuTreeByRoleIds(List<long> roleIds)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
using Infrastructure.Model;
|
using Infrastructure.Model;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using ZR.Model;
|
using ZR.Model;
|
||||||
using ZR.Model.System;
|
using ZR.Model.System;
|
||||||
|
|
||||||
@ -110,6 +111,16 @@ namespace ZR.Repository.System
|
|||||||
return Context.Queryable<SysRoleMenu>().Where(it => it.Role_id == roleId).ToList();
|
return Context.Queryable<SysRoleMenu>().Where(it => it.Role_id == roleId).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据用户所有角色获取菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roleIds"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<SysRoleMenu> SelectRoleMenuByRoleIds(long[] roleIds)
|
||||||
|
{
|
||||||
|
return Context.Queryable<SysRoleMenu>().Where(it => roleIds.Contains(it.Role_id)).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 批量插入用户菜单
|
/// 批量插入用户菜单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -8,34 +8,34 @@ namespace ZR.Service.System.IService
|
|||||||
{
|
{
|
||||||
public interface ISysMenuService
|
public interface ISysMenuService
|
||||||
{
|
{
|
||||||
public List<SysMenu> SelectMenuList(long userId);
|
//List<SysMenu> SelectMenuList(long userId);
|
||||||
|
|
||||||
public List<SysMenu> SelectMenuList(SysMenu menu, long userId);
|
List<SysMenu> SelectMenuList(SysMenu menu, long userId);
|
||||||
|
List<SysMenu> 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<SysMenu> SelectMenuTreeByUserId(long userId);
|
||||||
|
|
||||||
public List<SysMenu> SelectMenuTreeByUserId(long userId);
|
List<SysMenu> SelectMenuPermsListByUserId(long userId);
|
||||||
|
|
||||||
public List<SysMenu> SelectMenuPermsListByUserId(long userId);
|
List<string> SelectMenuPermsByUserId(long userId);
|
||||||
|
|
||||||
public List<string> SelectMenuPermsByUserId(long userId);
|
bool CheckMenuExistRole(long menuId);
|
||||||
|
|
||||||
public bool CheckMenuExistRole(long menuId);
|
List<RouterVo> BuildMenus(List<SysMenu> menus);
|
||||||
|
|
||||||
public List<RouterVo> BuildMenus(List<SysMenu> menus);
|
List<TreeSelectVo> BuildMenuTreeSelect(List<SysMenu> menus);
|
||||||
|
|
||||||
public List<TreeSelectVo> BuildMenuTreeSelect(List<SysMenu> menus);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -105,7 +105,7 @@ namespace ZR.Service.System.IService
|
|||||||
/// <param name="userId"></param>
|
/// <param name="userId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<long> SelectUserRoleMenus(long roleId);
|
public List<long> SelectUserRoleMenus(long roleId);
|
||||||
|
List<long> SelectRoleMenuByRoleIds(long[] roleIds);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取用户角色列表
|
/// 获取用户角色列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -4,7 +4,6 @@ using System.Linq;
|
|||||||
using ZR.Model.System.Dto;
|
using ZR.Model.System.Dto;
|
||||||
using ZR.Model.System;
|
using ZR.Model.System;
|
||||||
using ZR.Model.System.Vo;
|
using ZR.Model.System.Vo;
|
||||||
using ZR.Model.Vo;
|
|
||||||
using ZR.Model.Vo.System;
|
using ZR.Model.Vo.System;
|
||||||
using ZR.Repository.System;
|
using ZR.Repository.System;
|
||||||
using ZR.Service.System.IService;
|
using ZR.Service.System.IService;
|
||||||
@ -30,31 +29,39 @@ namespace ZR.Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据用户查询系统菜单列表
|
/// 获取所有菜单数(菜单管理)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="menu"></param>
|
|
||||||
/// <param name="userId"></param>
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<SysMenu> SelectMenuList(long userId)
|
public List<SysMenu> SelectTreeMenuList(SysMenu menu, long userId)
|
||||||
{
|
{
|
||||||
return SelectMenuList(new SysMenu(), userId);
|
List<SysMenu> menuList;
|
||||||
|
if (SysRoleService.IsAdmin(userId))
|
||||||
|
{
|
||||||
|
menuList = MenuRepository.SelectTreeMenuList(menu);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var userRoles = SysRoleService.SelectUserRoles(userId);
|
||||||
|
menuList = MenuRepository.SelectTreeMenuListByUserId(menu, userRoles);
|
||||||
|
}
|
||||||
|
return menuList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取所有菜单(菜单管理)
|
/// 获取所有菜单列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<SysMenu> SelectMenuList(SysMenu menu, long userId)
|
public List<SysMenu> SelectMenuList(SysMenu menu, long userId)
|
||||||
{
|
{
|
||||||
List<SysMenu> menuList;
|
List<SysMenu> menuList;
|
||||||
//if (SysUser.IsAdmin(userId))
|
|
||||||
if (SysRoleService.IsAdmin(userId))
|
if (SysRoleService.IsAdmin(userId))
|
||||||
{
|
{
|
||||||
menuList = MenuRepository.SelectMenuList(menu);
|
menuList = MenuRepository.SelectMenuList(menu);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
menuList = MenuRepository.SelectMenuListByUserId(menu, userId);
|
var userRoles = SysRoleService.SelectUserRoles(userId);
|
||||||
|
menuList = MenuRepository.SelectMenuListByRoles(menu, userRoles);
|
||||||
}
|
}
|
||||||
return menuList;
|
return menuList;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -216,7 +216,7 @@ namespace ZR.Service
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 判断是否是管理员
|
/// 判断是否是管理员
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="userid"></param>
|
/// <param name="roleid"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool IsRoleAdmin(long roleid)
|
public bool IsRoleAdmin(long roleid)
|
||||||
{
|
{
|
||||||
@ -228,13 +228,25 @@ namespace ZR.Service
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取角色菜单id集合
|
/// 获取角色菜单id集合
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="userId"></param>
|
/// <param name="roleId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<long> SelectUserRoleMenus(long roleId)
|
public List<long> SelectUserRoleMenus(long roleId)
|
||||||
{
|
{
|
||||||
var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId);
|
var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId);
|
||||||
|
|
||||||
return list.Select(x => x.Menu_id).ToList();
|
return list.Select(x => x.Menu_id).Distinct().ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据用户所有角色获取菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roleIds"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<long> SelectRoleMenuByRoleIds(long[] roleIds)
|
||||||
|
{
|
||||||
|
return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds)
|
||||||
|
.Select(x => x.Menu_id)
|
||||||
|
.Distinct().ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -270,6 +282,11 @@ namespace ZR.Service
|
|||||||
return list.Select(x => x.RoleKey).ToList();
|
return list.Select(x => x.RoleKey).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取用户所有角色名
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public List<string> SelectUserRoleNames(long userId)
|
public List<string> SelectUserRoleNames(long userId)
|
||||||
{
|
{
|
||||||
var list = SelectUserRoleListByUserId(userId);
|
var list = SelectUserRoleListByUserId(userId);
|
||||||
|
|||||||
@ -103,11 +103,13 @@
|
|||||||
<el-form-item label="菜单图标" prop="icon">
|
<el-form-item label="菜单图标" prop="icon">
|
||||||
<el-popover placement="bottom-start" width="460" trigger="click" @show="$refs['iconSelect'].reset()">
|
<el-popover placement="bottom-start" width="460" trigger="click" @show="$refs['iconSelect'].reset()">
|
||||||
<IconSelect ref="iconSelect" @selected="selected" />
|
<IconSelect ref="iconSelect" @selected="selected" />
|
||||||
<el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
|
<el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" clearable="" readonly>
|
||||||
<svg-icon v-if="form.icon" slot="prefix" :icon-class="form.icon" class="el-input__icon" style="height: 32px;width: 16px;" />
|
<svg-icon v-if="form.icon" slot="prefix" :icon-class="form.icon" class="el-input__icon" style="height: 32px;width: 16px;" />
|
||||||
<i v-else slot="prefix" class="el-icon-search el-input__icon" />
|
<i v-else slot="prefix" class="el-icon-search el-input__icon"></i>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
|
|
||||||
|
<!-- <el-link type="danger" @click="form.icon = ''">清空</el-link> -->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :lg="24">
|
<el-col :lg="24">
|
||||||
@ -221,7 +223,7 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
|||||||
import IconSelect from "@/components/IconSelect";
|
import IconSelect from "@/components/IconSelect";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "menu",
|
name: "menu1",
|
||||||
components: { Treeselect, IconSelect },
|
components: { Treeselect, IconSelect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -289,7 +291,8 @@ export default {
|
|||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
listMenu(this.queryParams).then((response) => {
|
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;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -309,7 +312,8 @@ export default {
|
|||||||
listMenu().then((response) => {
|
listMenu().then((response) => {
|
||||||
this.menuOptions = [];
|
this.menuOptions = [];
|
||||||
const menu = { menuId: 0, menuName: "根菜单", children: [] };
|
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);
|
this.menuOptions.push(menu);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user