/// <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)); }
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>()); }