/// <summary> /// 循环获取子节点树形数据 /// </summary> /// <param name="parentTreeItem"></param> /// <param name="currentPG"></param> /// <param name="pgList"></param> /// <param name="plList"></param> private void LoopGetPermissionLinesChildrenTree(PermissionLineTreeViewModel parentTreeItem, PermissionGroup currentPG, List <PermissionGroup> pgList, List <PermissionLine> plList) { PermissionLineTreeViewModel currentTreeItem = new PermissionLineTreeViewModel(); currentTreeItem.id = "-" + currentPG.Id;//负数以与权限项做区别 currentTreeItem.text = currentPG.DisplayName; List <PermissionGroup> childrenPGList = pgList.FindAll(delegate(PermissionGroup pg) { return(pg.ParentId == currentPG.Id); }); foreach (var childrenPG in childrenPGList) { //递归子节点 LoopGetPermissionLinesChildrenTree(currentTreeItem, childrenPG, pgList, plList); } //将该节点的权限项加入children属性中 List <PermissionLine> childrenPLList = plList.FindAll(delegate(PermissionLine pl) { return(pl.Group.Id == currentPG.Id); }); foreach (var childrenPL in childrenPLList) { PermissionLineTreeViewModel childrenTreeItem = new PermissionLineTreeViewModel(); childrenTreeItem.id = childrenPL.Id.ToString(); childrenTreeItem.text = childrenPL.DisplayName; currentTreeItem.children.Add(childrenTreeItem); plList.Remove(childrenPL);//移除使用过的项 } parentTreeItem.children.Add(currentTreeItem); pgList.Remove(currentPG);//移除使用过的项 }
/// <summary> /// 获取EasyUI树形数据 /// </summary> /// <returns></returns> public JsonResult GetPermissionLinesTree() { Guid platformGuid = GetPlatformId(); using (FlyDbContext ctx = new FlyDbContext()) { List <PermissionLine> plList = new List <PermissionLine>(); //获取所有权限项 plList = ctx.PermissionLines.Where(p => p.Group.PlatformId == platformGuid).OrderBy(s => s.Id).ToList(); List <Guid> idList = new List <Guid>(); //获取权限项用到的所有权限组 foreach (var item in plList) { if (!idList.Contains(item.GroupId)) { idList.Add(item.GroupId); } } List <PermissionGroup> pgList = ctx.PermissionGroups.Where(o => o.PlatformId == platformGuid && idList.Contains(o.Id)).ToList(); int pgListCount = pgList.Count; for (int i = 0; i < pgListCount; i++) { LoopGetParent(ctx, pgList[i], pgList, platformGuid); } //到这里所有权限项和相关所有权限组都取到了,下面递归构建树形试图对象 List <PermissionLineTreeViewModel> viewTreeItemList = new List <PermissionLineTreeViewModel>(); //一级节点 List <PermissionGroup> rootPGList = pgList.FindAll(delegate(PermissionGroup pg) { return(pg.ParentId == null); }); foreach (var rootPG in rootPGList) { PermissionLineTreeViewModel treeItem = new PermissionLineTreeViewModel(); treeItem.id = "-" + rootPG.Id.ToString();//负数以与权限项做区别 treeItem.text = rootPG.DisplayName; List <PermissionGroup> childrenPGList = pgList.FindAll(delegate(PermissionGroup pg) { return(pg.ParentId == rootPG.Id); }); foreach (var childrenPG in childrenPGList) { //递归子节点 LoopGetPermissionLinesChildrenTree(treeItem, childrenPG, pgList, plList); } //将该节点的权限项加入children属性中 List <PermissionLine> childrenPLList = plList.FindAll(delegate(PermissionLine pl) { return(pl.Group.Id == rootPG.Id); }); foreach (var childrenPL in childrenPLList) { PermissionLineTreeViewModel childrenTreeItem = new PermissionLineTreeViewModel(); childrenTreeItem.id = childrenPL.Id.ToString(); childrenTreeItem.text = childrenPL.DisplayName; treeItem.children.Add(childrenTreeItem); plList.Remove(childrenPL);//移除使用过的项 } viewTreeItemList.Add(treeItem); } JsonResult result = new JsonResult() { Data = new[] { new { id = 0, text = "所有权限", children = viewTreeItemList } } }; result.JsonRequestBehavior = JsonRequestBehavior.AllowGet; return(result); } }