Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        /// <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);
        }
Пример #8
0
        /// <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);
        }