項目是前后端分離,所以只寫接口
ENTITY層:
public class VM_Menu { public string ID { get; set; } public string MenuCode { get; set; } public string MenuDesc { get; set; } public string MenuURL { get; set; } public string ParentMenuID { get; set; } public Nullable<int> Sequence { get; set; } public string CreateUserID { get; set; } public Nullable<System.DateTime> CreateDate { get; set; } public string UpdateUserID { get; set; } public Nullable<System.DateTime> UpdateDate { get; set; } public string MenuIcon { get; set; } //添加子級菜單 public object ChildMenu { get; set; } }
BLL層:
/// <summary> /// 獲取菜單樹結構 /// </summary> /// <returns></returns> public List<VM_Menu> GetMenuTree() { var allMenuList = GetMenu().ToList(); List<VM_Menu> rootNodeList = new List<VM_Menu>(); foreach (var parentNodeList in allMenuList.Where(t => t.ParentMenuID == null)) { VM_Menu menuNode = new VM_Menu(); menuNode.ID = parentNodeList.ID; menuNode.MenuCode = parentNodeList.MenuCode; menuNode.MenuDesc = parentNodeList.MenuDesc; menuNode.MenuURL = parentNodeList.MenuURL; menuNode.ParentMenuID = parentNodeList.ParentMenuID; menuNode.Sequence = parentNodeList.Sequence; menuNode.CreateUserID = parentNodeList.CreateUserID; menuNode.CreateDate = parentNodeList.CreateDate; menuNode.UpdateUserID = parentNodeList.UpdateUserID; menuNode.UpdateDate = parentNodeList.UpdateDate; menuNode.MenuIcon = parentNodeList.MenuIcon; menuNode.ChildMenu = CreateChildTree(allMenuList, menuNode); rootNodeList.Add(menuNode); } return rootNodeList; } /// <summary> /// 遞歸生成子樹 /// </summary> /// <param name="AllMenuList"></param> /// <param name="vmMenu"></param> /// <returns></returns> private List<VM_Menu> CreateChildTree(List<AM_MENU> AllMenuList, VM_Menu vmMenu) { string parentMenuID = vmMenu.ID;//根節點ID List<VM_Menu> nodeList = new List<VM_Menu>(); var children = AllMenuList.Where(t => t.ParentMenuID == parentMenuID); foreach (var chl in children) { VM_Menu node = new VM_Menu(); node.ID = chl.ID; node.MenuCode = chl.MenuCode; node.MenuDesc = chl.MenuDesc; node.MenuURL = chl.MenuURL; node.ParentMenuID = chl.ParentMenuID; node.Sequence = chl.Sequence; node.CreateUserID = chl.CreateUserID; node.CreateDate = chl.CreateDate; node.UpdateUserID = chl.UpdateUserID; node.UpdateDate = chl.UpdateDate; node.MenuIcon = chl.MenuIcon; node.ChildMenu = CreateChildTree(AllMenuList, node); nodeList.Add(node); } return nodeList; }
View層:
/// <summary> /// 獲取菜單樹結構 /// </summary> /// <returns></returns> public HttpResponseMessage GetMenuTree() { List<VM_Menu> list = b_authority.GetMenuTree(); return PageHelper.GetPageList(list); }