/// <summary> /// 遞迴產生Node /// </summary> /// <param name="vo"></param> /// <param name="node"></param> public void SetNode(List <FunctionMenuVO> vo, FunctionMenuNode node) { var nodeData = node; var nextData = vo.Where(o => o.Parent == nodeData.Val.FunctionID).ToList(); if (nextData.Any()) { node.Next = new List <FunctionMenuNode>(); } else { return; } for (int i = 0; i < nextData.Count(); i++) { node.Next.Add(new FunctionMenuNode(nextData[i])); vo.Remove(nextData[i]); SetNode(vo, node.Next[i]); } }
/// <summary> /// 取得MenuNode /// </summary> /// <param name="userID"></param> /// <returns></returns> public List <FunctionMenuNode> GetFunctionToNode(string userID) { var menuData = Utility.MigrationIEnumerable <FunctionMenuDTO, FunctionMenuVO>(_functionRepo.GetMenuData(userID)); var topData = menuData.Where(o => o.Parent == 0).ToList(); var NotTopData = menuData.Where(o => o.Parent != 0).ToList(); var result = new List <FunctionMenuNode>() { }; foreach (var item in topData) { var node = new FunctionMenuNode(item) { }; result.Add(node); SetNode(NotTopData, node); } return(result); }
public void SetNodeTest() { #region arrange List <FunctionMenuVO> reFunctionVO = new List <FunctionMenuVO>() { new FunctionMenuVO() { FunctionID = 1, Url = "Role/RoleManagement", Parent = 0, Title = "角色管理" }, new FunctionMenuVO() { FunctionID = 2, Url = "Role/RoleAddEditDelete", Parent = 1, Title = "編輯角色" }, new FunctionMenuVO() { FunctionID = 8, Url = "Role/RoleUserEdit", Parent = 1, Title = "編輯角色使用者" } }; List <FunctionMenuNode> reFunctionMenuNodeList = new List <FunctionMenuNode>() { new FunctionMenuNode(new FunctionMenuVO() { FunctionID = 1, Url = "Role/RoleManagement", Parent = 0, Title = "角色管理" }) { Next = new List <FunctionMenuNode>() { new FunctionMenuNode(new FunctionMenuVO() { FunctionID = 2, Url = "Role/RoleAddEditDelete", Parent = 1, Title = "編輯角色" }), new FunctionMenuNode(new FunctionMenuVO() { FunctionID = 8, Url = "Role/RoleUserEdit", Parent = 1, Title = "編輯角色使用者" }) } } }; var result = new List <FunctionMenuNode>() { }; var node = new FunctionMenuNode(reFunctionVO[0]) { }; result.Add(node); #endregion #region act _target.SetNode(reFunctionVO.Where(o => o.Parent != 0).ToList(), node); #endregion #region assert for (int i = 0; i < result.Count; i++) { Assert.AreEqual(result[i].Val.FunctionID, reFunctionMenuNodeList[i].Val.FunctionID); Assert.AreEqual(result[i].Val.Url, reFunctionMenuNodeList[i].Val.Url); Assert.AreEqual(result[i].Val.Parent, reFunctionMenuNodeList[i].Val.Parent); Assert.AreEqual(result[i].Val.Title, reFunctionMenuNodeList[i].Val.Title); } for (int i = 0; i < result[0].Next.Count; i++) { Assert.AreEqual(result[0].Next[i].Val.FunctionID, reFunctionMenuNodeList[0].Next[i].Val.FunctionID); Assert.AreEqual(result[0].Next[i].Val.Url, reFunctionMenuNodeList[0].Next[i].Val.Url); Assert.AreEqual(result[0].Next[i].Val.Parent, reFunctionMenuNodeList[0].Next[i].Val.Parent); Assert.AreEqual(result[0].Next[i].Val.Title, reFunctionMenuNodeList[0].Next[i].Val.Title); } #endregion }