Пример #1
0
        /// <summary>
        /// 泛型递归求树形结构
        /// </summary>
        /// <param name="all"></param>
        /// <param name="curItem"></param>
        /// <param name="pid"></param>
        public static void LoopToAppendChildren(List <SysMenuTreeVM> all, SysMenuTreeVM curItem, string pid)
        {
            var subItems = all.Where(ee => ee.ParentId == curItem.ID).ToList();

            if (subItems.Count > 0)
            {
                curItem.Children = new List <SysMenuTreeVM>();
                curItem.Children.AddRange(subItems);
            }
            else
            {
                curItem.Children = null;
            }

            foreach (var subItem in subItems)
            {
                if (subItem.ID == pid && (default(Guid).ToString().Equals(pid) || string.IsNullOrWhiteSpace(pid)))
                {
                }
                LoopToAppendChildren(all, subItem, pid);
            }
        }
Пример #2
0
        /// <summary>
        /// 实现 菜单树
        /// </summary>
        /// <param name="parentId"></param>
        /// <returns></returns>
        public async Task <MessageModel <SysMenuTreeVM> > GetMenuTree(string parentId = "")
        {
            if (string.IsNullOrWhiteSpace(parentId))
            {
                parentId = default(Guid).ToString();
            }

            var sysMenus = await _dal.Query(d => d.Status == 1);//里面是没有根节点的,因为根节点是虚拟的



            var sysMenuTrees = (from child in sysMenus
                                //where child.IsDeleted == false
                                orderby child.OrderNo
                                select new SysMenuTreeVM
            {
                ID = child.ID,
                MenuId = child.MenuId,
                Name = child.Name,
                Url = child.Url,
                PathUrl = child.PathUrl,
                Description = child.Description,
                Icon = child.Icon,
                OrderNo = child.OrderNo,
                IsShow = child.IsShow,
                ParentId = child.ParentId,

                CreateID = child.CreateID,
                CreateTime = child.CreateTime,
                Creator = child.Creator,
                ModifyID = child.ModifyID,
                Modifier = child.Modifier,
                ModifyTime = child.ModifyTime,
                Status = child.Status,



                //PowerGroups = _mapper.Map<Destination<List<SysMenuPowerGroupVM>>>(new Source<SysMenuPowerGroup> { Value = _sysMenuPowerGRepository.Query() }).Value;

                //转换
                //将数据转化为T
                //                           var source = new Source<SysUser> { Value = sysUserInfo };
                //var t = _mapper.Map<Destination<SysUserVM>>(source);

                //data = MessageModel<SysUserVM>.Success(t.Value);
            }).ToList();

            //虚拟一个根节点
            SysMenuTreeVM rootRoot = new SysMenuTreeVM
            {
                ID          = default(Guid).ToString(),
                ParentId    = default(Guid).ToString(),
                Name        = "根节点",
                ParentArray = new List <String> {//不知道这块还给不给这个,还是赋值为空,待验证
                    default(Guid).ToString()
                }
            };

            sysMenuTrees = sysMenuTrees.OrderBy(d => d.OrderNo).ToList();

            //查询出所有菜单权限组
            var allSysMenuPowerGs = await _sysMenuPowerGRepository.Query(mg => mg.Status == 1);

            //查询出所有的权限组
            var allSysPowerGroups = await _sysPowerGroupRepository.Query(g => g.Status == 1);

            //查询每个节点的父节点 数组
            foreach (var item in sysMenuTrees)
            {
                if (!default(Guid).ToString().Equals(item.ID))
                {
                    //
                    List <string> pidArray = new List <string>();

                    //pidArray.Add(item.ID);//不要自己

                    var parent = sysMenuTrees.FirstOrDefault(d => d.ID == item.ParentId);

                    while (parent != null)
                    {
                        pidArray.Add(parent.ID);
                        parent = sysMenuTrees.FirstOrDefault(d => d.ID == parent.ParentId);
                    }

                    //补上根节点
                    pidArray.Add(default(Guid).ToString());
                    pidArray.Reverse();

                    item.ParentArray = pidArray;


                    //给每个节点加上权限组
                    item.PowerGroups = (from child in allSysPowerGroups
                                        join mppg in allSysMenuPowerGs on child.ID equals mppg.SysPowerGroupID
                                        where mppg.SysMenuID == item.ID
                                        orderby child.OrderNo
                                        select new SysPowerGroupVM
                    {
                        ID = child.ID,
                        Name = child.Name,
                        OrderNo = child.OrderNo,

                        CreateID = child.CreateID,
                        CreateTime = child.CreateTime,
                        Creator = child.Creator,
                        ModifyID = child.ModifyID,
                        Modifier = child.Modifier,
                        ModifyTime = child.ModifyTime,
                        Status = child.Status,
                    }).ToList();
                }
            }

            LoopToAppendChildren(sysMenuTrees, rootRoot, parentId);//不是很懂是如何传递回rootRoot的

            var messageModel = MessageModel <SysMenuTreeVM> .Success();

            if (messageModel.success)
            {
                messageModel.data = rootRoot;
                messageModel.msg  = "获取成功";
            }

            return(messageModel);
        }