/// <summary> /// 生成树状层次的菜单数据 /// </summary> /// <param name="parentId">父级ID</param> /// <param name="minDepth"></param> /// <param name="maxDepth"></param> /// <returns></returns> private IList <HGMenuModel> CreateHierarchyTreeItems(string parentId, int minDepth, int maxDepth, IList <HGMenuModel> nodeList) { IList <HGMenuModel> result = new List <HGMenuModel>(); var rootNodeList = nodeList.Where(a => a.parent_id == parentId);//父级的菜单 foreach (var item in rootNodeList) { var navItem = new HGMenuModel { id = item.id, cliam_id = item.cliam_id, display_name = item.display_name, icon = item.icon, parent_id = item.parent_id, method = item.method, submenu_list = CreateHierarchyTreeItems(item.id, minDepth, maxDepth, nodeList), }; result.Add(navItem); } return(result); }
/// <summary> /// 根据当前用户权限加载菜单集合 /// </summary> /// <returns></returns> private IList <HGMenuModel> GetNavItems() { IList <HGMenuModel> newList = new List <HGMenuModel>(); IList <HGMenuModel> newList2 = new List <HGMenuModel>(); var menuList = CreateHierarchyTreeItems("9999", 1, 22, MenuList); try { for (int i = 0; i < menuList.Count; i++) { var item = menuList[i]; var navItem = new HGMenuModel { id = item.id, cliam_id = item.cliam_id, display_name = item.display_name, icon = item.icon, parent_id = item.parent_id, method = item.method, submenu_list = new List <HGMenuModel>(), }; newList2.Add(navItem); //遍历该节点,如果有子菜单就再递归,如果没有,直接加入 foreach (var item2 in item.submenu_list) { //没有子菜单 if (null == item2.submenu_list || 0 == item2.submenu_list.Count) { //有权限 if (Claims.Contains(item2.cliam_id)) { newList2[i].submenu_list.Add(item2); } } else { var list = new List <HGMenuModel>();//用于保存子菜单 //有子菜单 foreach (HGMenuModel nag in item2.submenu_list) { //有权限 if (Claims == nag.cliam_id) { list.Add(nag); } } //如果子菜单至少有1个 if (0 < list.Count) { item2.submenu_list = list; newList2[i].submenu_list.Add(item2); } } } } foreach (var item in newList2) { if (item.submenu_list.Count > 0) { newList.Add(item); } } } catch (Exception ex) { } return(newList); }