/// <summary> /// 递归组织用户的菜单和权限集合 /// </summary> private void GetUserRoleMenuPrivilegeTree(List<TreeNode> tree, List<SysMenu> userMenus, List<SysPrivilege> userPrivileges, List<SysMenu> roleMenus, List<SysPrivilege> rolePrivileges, long parentmenu) { var menus = userMenus.Where(x => x.Parent == parentmenu && x.ID != parentmenu); foreach (var menu in menus) { var menunode = new TreeNode(); menunode.id = menu.ID; menunode.text = menu.Name; menunode.attributes = new { type = 1 };//1菜单节点 2权限节点 //节点的选中状态 if (roleMenus.Any(x => x.ID == menu.ID)) { menunode.@checked = true; } else { menunode.@checked = false; } menunode.children = new List<TreeNode>(); //递归加载子节点 GetUserRoleMenuPrivilegeTree(menunode.children, userMenus, userPrivileges, roleMenus, rolePrivileges, menu.ID); //菜单下的权限节点 var menuPrivileges = userPrivileges.Where(x => x.Menu == menu.ID); foreach (var menuprivilege in menuPrivileges) { var privilegenode = new TreeNode(); privilegenode.id = menuprivilege.ID; privilegenode.text = menuprivilege.Name; privilegenode.attributes = new { type = 2 };//1菜单节点 2权限节点 //节点的选中状态 if (rolePrivileges.Any(x => x.ID == menuprivilege.ID)) { privilegenode.@checked = true; } else { privilegenode.@checked = false; } privilegenode.state = null;//节点展开或关闭状态 open menunode.children.Add(privilegenode); } if (menunode.children.Count > 0) { menunode.state = "closed"; menunode.@checked = false;//只要有子节点,自身的选中状态就只能依赖所有层级子节点是否都选中 } tree.Add(menunode); } }
private TreeNode wrapTree(SysArea parent,List<SysArea> areas) { TreeNode result = new TreeNode(); result.id = Int64.Parse(parent.Code); result.children = new List<TreeNode>(); result.state = "closed"; result.text = parent.Name; foreach (SysArea sysArea in areas.Where(a => a.Parent == parent.Code && a.Parent != a.Code)) { result.children.Add(wrapTree(sysArea,areas)); } return result; }
public List<TreeNode> getAreaTree() { TreeNode result = new TreeNode(); result.children = new List<TreeNode>(); result.state = "closed"; result.text = "系统区域"; List<SysArea> areas = sysAreaService.getAll(); foreach (SysArea sysArea in areas.Where(a => a.Parent == a.Code)) { result.children.Add(wrapTree(sysArea, areas)); } return new List<TreeNode>{result}; }