コード例 #1
0
        /// <summary>
        /// 获取菜单列表,带有权限标示
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public IList<TreeModel> GetHaveRightMenu(RoleMenuQuery queryRoleMenu)
        {
            if (queryRoleMenu.GroupID == 2)
            {
                MenuQuery query = new MenuQuery();
                query.JournalID = queryRoleMenu.JournalID;
                query.GroupID = 2;
                query.Status = 1;
                return GetTreeNodeList(query);
            }

            # region 找到内容菜单,添加栏目列表

            Func<IList<TreeModel>> funcGetSiteChanneNodes = () =>
            {
                IList<TreeModel> channelTreeList = new List<TreeModel>();
                SiteChannelQuery channelQuery = new SiteChannelQuery();
                channelQuery.JournalID = queryRoleMenu.JournalID;
                channelQuery.Status = 1;
                SiteConfigFacadeAPIService siteConfigAPIService = new SiteConfigFacadeAPIService();
                channelTreeList = siteConfigAPIService.GetSiteChannelTreeList(channelQuery,true);
                TreeModel root = channelTreeList.Single(p => p.Id == 0);
                return root.children;
            };

            # endregion

            IList<TreeModel> listResult = new List<TreeModel>();

            HttpClientHelper clientHelper = new HttpClientHelper();

            // 给指定的作者设置了例外的菜单
            IDictionary<long, string> dictExceptionRightMenu = new Dictionary<long, string>();
            if (queryRoleMenu.AuthorID != null)
            {
                AuthorMenuRightExceptionEntity authorExecEntity = new AuthorMenuRightExceptionEntity();
                authorExecEntity.AuthorID = queryRoleMenu.AuthorID.Value;
                authorExecEntity.JournalID = queryRoleMenu.JournalID;
                dictExceptionRightMenu = clientHelper.PostAuth<IDictionary<long, string>, AuthorMenuRightExceptionEntity>(GetAPIUrl(APIConstant.SYSGETAUTHOREXCEPTIONRIGHTMENU), authorExecEntity);
            }
            IList<MenuEntity> listHaveRightMenuList = clientHelper.Post<IList<MenuEntity>, RoleMenuQuery>(GetAPIUrl(APIConstant.SYSGETHAVERIGHTMENULIST), queryRoleMenu);

            if (listHaveRightMenuList != null)
            {
                IList<MenuEntity> listRoot = listHaveRightMenuList.Where(item => item.PMenuID == 0).ToList<MenuEntity>();
                TreeModel treeNode = null;
                foreach (MenuEntity item in listRoot)
                {
                    if (!dictExceptionRightMenu.ContainsKey(item.MenuID))
                    {
                        bool first = true;

                        treeNode = new TreeModel();
                        treeNode.key = item.MenuID.ToString();
                        treeNode.text = item.MenuName;
                        treeNode.url = SiteConfig.RootPath + item.MenuUrl;
                        treeNode.icon = SiteConfig.RootPath + item.IconUrl;
                        treeNode.isexpand = queryRoleMenu.IsExpend;

                        IList<MenuEntity> listChild = listHaveRightMenuList.Where(p => p.PMenuID == item.MenuID).ToList<MenuEntity>();
                        if (listChild != null)
                        {
                            treeNode.isexpand = (first != queryRoleMenu.IsExpend) && first ? first : queryRoleMenu.IsExpend;
                            // 二级
                            foreach (MenuEntity itemChild in listChild)
                            {
                                if (!dictExceptionRightMenu.ContainsKey(itemChild.MenuID))
                                {
                                    TreeModel treeChildNode = new TreeModel();
                                    treeChildNode.key = itemChild.MenuID.ToString();
                                    treeChildNode.text = itemChild.MenuName;
                                    treeChildNode.url = SiteConfig.RootPath + itemChild.MenuUrl;
                                    treeChildNode.icon = SiteConfig.RootPath + itemChild.IconUrl;
                                    treeChildNode.isexpand = queryRoleMenu.IsExpend;
                                    // 如果是网站内容管理节点,则载入站点栏目设置
                                    if (itemChild.IsContentMenu)
                                    {
                                        treeChildNode.children = funcGetSiteChanneNodes();
                                        treeNode.children.Add(treeChildNode);
                                    }
                                    else
                                    {
                                        treeNode.children.Add(treeChildNode);
                                        // 三级
                                        IList<MenuEntity> lastListChild = listHaveRightMenuList.Where(p => p.PMenuID == itemChild.MenuID).ToList<MenuEntity>();
                                        foreach (MenuEntity lastChild in lastListChild)
                                        {
                                            if (!dictExceptionRightMenu.ContainsKey(lastChild.MenuID))
                                            {
                                                TreeModel treeLastNode = new TreeModel();
                                                treeLastNode.key = lastChild.MenuID.ToString();
                                                treeLastNode.text = lastChild.MenuName;
                                                treeLastNode.url = SiteConfig.RootPath + lastChild.MenuUrl;
                                                treeLastNode.icon = SiteConfig.RootPath + lastChild.IconUrl;
                                                treeLastNode.isexpand = queryRoleMenu.IsExpend;
                                                treeChildNode.children.Add(treeLastNode);
                                            }
                                        }
                                    }
                                }
                            }
                            first = false;
                        }
                        listResult.Add(treeNode);
                    }
                }
            }
            return listResult;
        }