Beispiel #1
0
        /// <summary>
        /// 菜单移动
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task Move(MoveMenuInput input)
        {
            var menu = await _menuRepository.FirstOrDefaultAsync(input.MenuId);

            if (menu == null)
            {
                throw new AbpException("菜单信息不存在");
            }
            if (menu.ParentId == input.ParentId)
            {
                return;
            }
            menu.ParentId = input.ParentId;
            var  code   = GenderLevelCode();
            Menu parent = null;

            if (input.ParentId.HasValue)
            {
                parent = await _menuRepository.FirstOrDefaultAsync(input.ParentId.Value);

                code = $"{parent.LevelCode}.{code}";
            }
            await ChangeMenuPermissions(menu, parent);

            menu.LevelCode = code;
            await _menuRepository.UpdateAsync(menu);

            await _cachingAppService.ClearCache(new EntityDto <string>(SystemCacheName.MenuCache));
        }
Beispiel #2
0
        public async Task <MenuDto> MoveMenu(MoveMenuInput input)
        {
            var children = await GetAllChildren(input.Id);

            if (children.Contains(input.NewParentId))
            {
                throw new UserFriendlyException("检查到嵌套层级结构,保存失败");
            }
            var menu = await _menuRepository.GetAsync(input.Id);

            if (menu.ParentId != input.NewParentId)
            {
                var menus = await _menuRepository.GetAll()
                            .Where(m => m.ParentId == menu.ParentId && m.Id != menu.Id)
                            .OrderBy(m => m.Order)
                            .ToListAsync();

                for (int index = 0; index < menus.Count; index++)
                {
                    menus[index].Order = index;
                }
            }
            menu.ParentId = input.NewParentId;

            {
                var menus = await _menuRepository.GetAll()
                            .Where(m => m.ParentId == input.NewParentId || m.Id == menu.Id)
                            .OrderBy(m => m.Order)
                            .ToListAsync();

                for (int index = 0; index < menus.Count; index++)
                {
                    if (menu.Id == menus[index].Id)
                    {
                        menus[index].Order = input.NewOrder;
                    }
                    else if (index < input.NewOrder)
                    {
                        menus[index].Order = index;
                    }
                    else
                    {
                        menus[index].Order = index + 1;
                    }
                }
            }

            await CurrentUnitOfWork.SaveChangesAsync();

            await RebuildMenu();

            return(menu.MapTo <MenuDto>());
        }