diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs index 0457ca7bef..b80ca454ef 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs @@ -19,6 +19,8 @@ namespace Volo.CmsKit.Admin.Menus Task DeleteAsync(Guid menuId); + Task GetMenuItemAsync(Guid menuId, Guid menuItemId); + Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input); Task UpdateMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemUpdateInput input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs index 37252178bc..b47cbe9864 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs @@ -83,6 +83,16 @@ namespace Volo.CmsKit.Admin.Menus return MenuRepository.DeleteAsync(menuId); } + public async Task GetMenuItemAsync(Guid menuId, Guid menuItemId) + { + var menu = await MenuRepository.GetAsync(menuId); + + var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) + ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); + + return ObjectMapper.Map(menuItem); + } + [Authorize(CmsKitAdminPermissions.Menus.MenuItems.Create)] public virtual async Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs index 825aa0cd82..413bae1ec9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs @@ -34,6 +34,14 @@ namespace Volo.CmsKit.Admin.Menus return MenuAdminAppService.CreateAsync(input); } + [Route("{menuId}/menu-items/{menuItemId}")] + [Authorize(CmsKitAdminPermissions.Menus.MenuItems.Default)] + [HttpGet] + public Task GetMenuItemAsync(Guid menuId, Guid menuItemId) + { + return MenuAdminAppService.GetMenuItemAsync(menuId, menuItemId); + } + [Route("{menuId}/menu-items")] [HttpPost] [Authorize(CmsKitAdminPermissions.Menus.MenuItems.Create)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml index 07b343bb04..bf48f82cb0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml @@ -11,7 +11,7 @@ @model IndexModel @{ - PageLayout.Content.Title = L["MenuItems"].Value; + PageLayout.Content.Title = @Model.Menu.Name + " - " + L["MenuItems"].Value; PageLayout.Content.BreadCrumb.Add(L["Menu:CMS"].Value); PageLayout.Content.BreadCrumb.Add(L["Menu:Menus"].Value, "/Cms/Menus"); PageLayout.Content.MenuItemName = CmsKitAdminMenus.Menus.MenusMenu; @@ -19,27 +19,27 @@ @section styles { - - + + } @section scripts { - - + + } @section content_toolbar { - @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new { pageName = typeof(IndexModel).FullName }) + @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) }
- @Model.Menu.Name @L["MenuItems"] + @Model.Menu.Name diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml new file mode 100644 index 0000000000..f2c3d4fcba --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -0,0 +1,25 @@ +@page + +@using Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems +@using Volo.CmsKit.Admin.Web.Pages +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal + +@inherits CmsKitAdminPageBase + +@model UpdateModalModel + +@{ + Layout = null; +} + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs new file mode 100644 index 0000000000..72866da230 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs @@ -0,0 +1,72 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Volo.CmsKit.Admin.Menus; + +namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems +{ + public class UpdateModalModel : CmsKitAdminPageModel + { + protected IMenuAdminAppService MenuAdminAppService { get; } + + public UpdateModalModel(IMenuAdminAppService menuAdminAppService) + { + MenuAdminAppService = menuAdminAppService; + } + + [BindProperty] + public MenuItemUpdateViewModel ViewModel { get; set; } + + [HiddenInput] + [BindProperty(SupportsGet = true)] + public Guid MenuId { get; set; } + + [HiddenInput] + [BindProperty(SupportsGet = true)] + public Guid Id { get; set; } + + public async Task OnGetAsync() + { + var menuItemDto = await MenuAdminAppService.GetMenuItemAsync(MenuId, Id); + + ViewModel = ObjectMapper.Map(menuItemDto); + } + + public async Task OnPostAsync() + { + var input = ObjectMapper.Map(ViewModel); + + var result = await MenuAdminAppService.UpdateMenuItemAsync(MenuId, Id, input); + + return new OkObjectResult(result); + } + + [AutoMap(typeof(MenuItemDto))] + [AutoMap(typeof(MenuItemUpdateInput), ReverseMap = true)] + public class MenuItemUpdateViewModel + { + [Required] + public string DisplayName { get; set; } + + public bool IsActive { get; set; } + + [Required] + public string Url { get; set; } + + public string Icon { get; set; } + + public string Target { get; set; } + + public string ElementId { get; set; } + + public string CssClass { get; set; } + + public string RequiredPermissionName { get; set; } + + public Guid? PageId { get; set; } + } + } +} \ No newline at end of file