/// <summary> /// 製作無限下層的左側選單 /// </summary> /// <param name="helper"></param> /// <param name="menu"></param> /// <returns></returns> public static MvcHtmlString SubMenuHandler(this HtmlHelper helper, MenuLinkModel menu) { string htmlStr = string.Empty; if (menu.SubMenu.Count > 0) { htmlStr = @"<li class=""submenu coustom-submenu"">"; //htmlStr += string.Format(@"<a href=""#""><i class=""{0}""></i> <span>{1}</span> <span class=""label label-success"">{2}</span></a>", menu.MenuIcon, menu.MenuName, menu.SubMenu.Count); htmlStr += string.Format(@"<a href=""#""><i class=""{0}""></i> <span>{1}</span></a>", menu.MenuIcon, menu.MenuName); htmlStr += "<ul>"; foreach (var sub in menu.SubMenu) { if (sub.Enabled && sub.MenuEnabled) { htmlStr += chkHasSubMenu(sub); } } htmlStr += "</ul>"; htmlStr += "</li>"; } else { htmlStr = string.Format(@"<li><a href=""/{0}""><i class=""{1}""></i> <span>{2}</span></a> </li>", menu.MenuPath, menu.MenuIcon, menu.MenuName); } return(MvcHtmlString.Create(htmlStr)); }
/// <summary> /// 取出所有子選單的MenuIID /// </summary> /// <param name="sub"></param> /// <returns></returns> private List <string> AddSubMenu(MenuLinkModel sub) { List <string> muIDlist = new List <string>(); sub.SubMenu.ForEach(f => { muIDlist.Add(f.MenuID); muIDlist.AddRange(AddSubMenu(f)); } ); return(muIDlist); }
/// <summary> /// 利用遞回方式確認無限下層子選單是否已含該目錄 /// </summary> /// <param name="subMenu"></param> /// <param name="muID"></param> /// <returns></returns> private bool findSubMenu(MenuLinkModel subMenu, string muID) { bool hasInsert = false; if (subMenu.MenuID == muID) { hasInsert = true; } else { foreach (var sub in subMenu.SubMenu) { hasInsert = findSubMenu(sub, muID); if (hasInsert) { return(hasInsert); } } } return(hasInsert); }
private static string chkHasSubMenu(MenuLinkModel mu) { string htmlStr = string.Empty; if (mu.SubMenu.Count > 0) { htmlStr += @"<li class=""submenu coustom-submenu"">"; htmlStr += string.Format(@"<a href=""#""><i class=""{0}""></i> <span>{1}</span> <span class=""label label-success"">{2}</span></a>", mu.MenuIcon, mu.MenuName, mu.SubMenu.Count); htmlStr += "<ul>"; foreach (var sub in mu.SubMenu) { htmlStr += string.Format(@"<li><a href=""/{0}""><i class=""{1}""></i> <span>{2}</span></a> </li>", sub.MenuPath, sub.MenuIcon, sub.MenuName); } htmlStr += "</ul>"; htmlStr += "</li>"; } else { htmlStr = string.Format(@"<li><a href=""/{0}""><i class=""{1}""></i> <span>{2}</span></a> </li>", mu.MenuPath, mu.MenuIcon, mu.MenuName); } return(htmlStr); }
/// <summary> /// 尋找無限下層子選單並找尋為model的父選單,若無合就加入該model為子選單 /// </summary> /// <param name="sub"></param> /// <param name="model"></param> /// <returns></returns> private MenuLinkModel FindSubMenu(MenuLinkModel sub, MenuLinkModel model) { string muID = model.ParentMenuID; foreach (var s in sub.SubMenu) { if (s.MenuID == muID) { s.SubMenu.Add(model); return(s); } else { var find = FindSubMenu(s, model); if (find != null) { return(find); } } } return(null); }
/// <summary> /// 遞回尋找所有下層子目錄 /// </summary> /// <param name="menu"></param> /// <returns></returns> private bool EachSubMenu(MenuLinkModel menu) { bool hasAuthority = false; foreach (var sub in menu.SubMenu) { if (sub.MenuPathController == this.ControllerID && sub.MenuPathAction == this.ActionID) { hasAuthority = true; break; } else { bool isSubHasAuthority = EachSubMenu(sub); if (isSubHasAuthority) { return(isSubHasAuthority); } } } return(hasAuthority); }
/// <summary> /// 利用遞迴方式 取得該角色下所有選單功能 無限追朔下層 /// </summary> /// <param name="muID"></param> private MenuLinkModel GetMenuFunctionAllValidForRoleID(string muID, int roleID) { MenuModule menuModule = new MenuModule(); var menu = menuModule.GetMenuDataByID(muID); MenuLinkModel model = new MenuLinkModel() { MenuID = menu.MenuID, ParentMenuID = menu.ParentMenuID, MenuName = menu.MenuName, Enabled = (bool)menu.Enabled, MenuEnabled = (bool)menu.MenuEnabled, MenuPathController = menu.MenuPathController, MenuPathAction = menu.MenuPathAction, MenuPath = menu.MenuPath, MenuSort = menu.MenuSort, MenuIcon = menu.MenuIcon }; //取下層 var findSub = this.DB.PTMenu.Join(this.DB.PTRoleMenuMap, t1 => t1.MUID, t2 => t2.MAP_MUID, (m, r) => new { RoleID = r.MAP_ROLEID, ParentMenuID = m.MUPID, MenuID = m.MUID }) .Where(s => s.RoleID == roleID && s.ParentMenuID == muID) .ToList(); foreach (var sub in findSub) { model.SubMenu.Add(GetMenuFunctionAllValidForRoleID(sub.MenuID, roleID)); } return(model); }
/// <summary> // 取出所有角色之下的目錄並移除重複 /// </summary> /// <param name="roleList"></param> /// <returns></returns> public List <MenuLinkModel> GetMenuListByRoleList(List <RoleModel> roleList) { List <string> muIDList = new List <string>(); foreach (var r in roleList) { foreach (var m in r.MenuList) { muIDList.Add(m.MenuID); m.SubMenu.ForEach(f => { muIDList.Add(f.MenuID); muIDList.AddRange(AddSubMenu(f)); } ); } } muIDList = muIDList.Distinct().ToList(); List <MenuLinkModel> muModelList = new List <MenuLinkModel>(); MenuLinkModel model = new MenuLinkModel(); MenuModule menuModule = new MenuModule(); foreach (var mu in muIDList) { var menu = menuModule.GetMenuDataByID(mu); model = new MenuLinkModel() { MenuID = menu.MenuID, ParentMenuID = menu.ParentMenuID, MenuName = menu.MenuName, Enabled = (bool)menu.Enabled, MenuEnabled = (bool)menu.MenuEnabled, MenuPathController = menu.MenuPathController, MenuPathAction = menu.MenuPathAction, MenuPath = menu.MenuPath, MenuSort = menu.MenuSort, MenuIcon = menu.MenuIcon }; if (mu.Length == 1) { if (!muModelList.Contains(model)) { muModelList.Add(model); } } //找尋第一層 var find = muModelList.Where(o => o.MenuID == model.ParentMenuID).FirstOrDefault(); if (find != null) { find.SubMenu.Add(model); } else { //找尋無限下層 foreach (var m in muModelList) { if (model.ParentMenuID == null) { break; } var findSubMenu = FindSubMenu(m, model); } } } return(muModelList); }