From a1b5146229b98a24ffdc50b820d5bc857796fd5a Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Fri, 6 Nov 2020 18:00:11 +0800 Subject: [PATCH] Improve category management page to support tree structure --- common.props | 2 +- .../Dtos/CreateUpdateCategoryDto.cs | 3 +++ .../Categories/Dtos/GetCategoryListDto.cs | 2 ++ .../Products/Categories/CategoryAppService.cs | 2 +- .../Products/Localization/Products/cs.json | 2 ++ .../Products/Localization/Products/en.json | 2 ++ .../Products/Localization/Products/pl.json | 2 ++ .../Products/Localization/Products/pt-BR.json | 2 ++ .../Products/Localization/Products/sl.json | 2 ++ .../Products/Localization/Products/tr.json | 2 ++ .../Products/Localization/Products/vi.json | 2 ++ .../Localization/Products/zh-Hans.json | 2 ++ .../Localization/Products/zh-Hant.json | 2 ++ .../Categories/Category/CreateModal.cshtml.cs | 14 ++++++++++++ .../Products/Categories/Category/Index.cshtml | 8 ++++++- .../Categories/Category/Index.cshtml.cs | 22 ++++++++++++++++++- .../ViewModels/CreateEditProductViewModel.cs | 6 ++++- .../Products/Categories/Category/index.js | 10 +++++++-- 18 files changed, 80 insertions(+), 7 deletions(-) diff --git a/common.props b/common.props index 716bda7e..91a6f4d2 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 1.4.1 + 1.5.0 $(NoWarn);CS1591 true EasyAbp Team diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/CreateUpdateCategoryDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/CreateUpdateCategoryDto.cs index 99c45095..db8b6cd9 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/CreateUpdateCategoryDto.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/CreateUpdateCategoryDto.cs @@ -8,6 +8,9 @@ namespace EasyAbp.EShop.Products.Categories.Dtos [Serializable] public class CreateUpdateCategoryDto : ExtensibleObject { + [DisplayName("CategoryParentId")] + public Guid? ParentId { get; set; } + [DisplayName("CategoryUniqueName")] public string UniqueName { get; set; } diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/GetCategoryListDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/GetCategoryListDto.cs index f1c4be2f..2e1d05a2 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/GetCategoryListDto.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/GetCategoryListDto.cs @@ -6,6 +6,8 @@ namespace EasyAbp.EShop.Products.Categories.Dtos [Serializable] public class GetCategoryListDto : PagedAndSortedResultRequestDto { + public Guid? ParentId { get; set; } + public bool ShowHidden { get; set; } } } \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Categories/CategoryAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Categories/CategoryAppService.cs index 6327d724..992f2cd1 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Categories/CategoryAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Categories/CategoryAppService.cs @@ -28,7 +28,7 @@ namespace EasyAbp.EShop.Products.Categories protected override IQueryable CreateFilteredQuery(GetCategoryListDto input) { - var query = base.CreateFilteredQuery(input); + var query = base.CreateFilteredQuery(input).Where(x => x.ParentId == input.ParentId); return input.ShowHidden ? query : query.Where(x => !x.IsHidden); } diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json index 2356f545..8287e52a 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json @@ -61,6 +61,8 @@ "CouponType.Custom": "Custom", "Menu:Category": "Category", "Category": "Category", + "Subcategory" : "Subcategory", + "CategoryParentId": "Parent ID", "CategoryUniqueName": "Unique name", "CategoryDisplayName": "Display name", "CategoryDescription": "Description", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json index 12c3c025..599ee686 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json @@ -62,6 +62,8 @@ "CouponType.Custom": "Custom", "Menu:Category": "Category", "Category": "Category", + "Subcategory" : "Subcategory", + "CategoryParentId": "Parent ID", "CategoryUniqueName": "Unique name", "CategoryDisplayName": "Display name", "CategoryDescription": "Description", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json index bd779745..88c7d345 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json @@ -61,6 +61,8 @@ "CouponType.Custom": "Custom", "Menu:Category": "Category", "Category": "Category", + "Subcategory" : "Subcategory", + "CategoryParentId": "Parent ID", "CategoryUniqueName": "Unique name", "CategoryDisplayName": "Display name", "CategoryDescription": "Description", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json index 92f8d162..32202599 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json @@ -61,6 +61,8 @@ "CouponType.Custom": "Custom", "Menu:Category": "Category", "Category": "Category", + "Subcategory" : "Subcategory", + "CategoryParentId": "Parent ID", "CategoryUniqueName": "Unique name", "CategoryDisplayName": "Display name", "CategoryDescription": "Description", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json index 76b16483..653855f7 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json @@ -62,6 +62,8 @@ "CouponType.Custom": "Custom", "Menu:Category": "Category", "Category": "Category", + "Subcategory" : "Subcategory", + "CategoryParentId": "Parent ID", "CategoryUniqueName": "Unique name", "CategoryDisplayName": "Display name", "CategoryDescription": "Description", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json index 4e2e98a9..4c389c08 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json @@ -62,6 +62,8 @@ "CouponType.Custom": "Custom", "Menu:Category": "Category", "Category": "Category", + "Subcategory" : "Subcategory", + "CategoryParentId": "Parent ID", "CategoryUniqueName": "Unique name", "CategoryDisplayName": "Display name", "CategoryDescription": "Description", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json index 117be7f6..3e0b3079 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json @@ -61,6 +61,8 @@ "CouponType.Custom": "Custom", "Menu:Category": "Category", "Category": "Category", + "Subcategory" : "Subcategory", + "CategoryParentId": "Parent ID", "CategoryUniqueName": "Unique name", "CategoryDisplayName": "Display name", "CategoryDescription": "Description", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json index 6b11c07f..c29a0da2 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json @@ -59,6 +59,8 @@ "SuccessfullyDeleted": "删除成功", "Menu:Category": "商品类目", "Category": "商品类目", + "Subcategory" : "子类目", + "CategoryParentId": "父类目 ID", "CategoryUniqueName": "类目编号", "CategoryDisplayName": "类目名称", "CategoryDescription": "描述", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json index bf7969a7..e4c98d87 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json @@ -59,6 +59,8 @@ "SuccessfullyDeleted": "刪除成功", "Menu:Category": "商品類目", "Category": "商品類目", + "Subcategory" : "子類目", + "CategoryParentId": "父類目 ID", "CategoryUniqueName": "類目編號", "CategoryDisplayName": "類目名稱", "CategoryDescription": "描述", diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/CreateModal.cshtml.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/CreateModal.cshtml.cs index b5d67d11..547e0f07 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/CreateModal.cshtml.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/CreateModal.cshtml.cs @@ -1,3 +1,4 @@ +using System; using System.Threading.Tasks; using EasyAbp.EShop.Products.Categories; using EasyAbp.EShop.Products.Categories.Dtos; @@ -11,6 +12,9 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Categories.Category [BindProperty] public CreateEditCategoryViewModel Category { get; set; } + [BindProperty(SupportsGet = true)] + public Guid? ParentId { get; set; } + private readonly ICategoryAppService _service; public CreateModalModel(ICategoryAppService service) @@ -18,6 +22,16 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Categories.Category _service = service; } + public virtual async Task OnGetAsync() + { + Category = new CreateEditCategoryViewModel + { + ParentId = ParentId + }; + + await Task.CompletedTask; + } + public async Task OnPostAsync() { await _service.CreateAsync( diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/Index.cshtml b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/Index.cshtml index 4f442747..8179b573 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/Index.cshtml +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/Index.cshtml @@ -11,6 +11,8 @@ PageLayout.Content.Title = L["Category"].Value; PageLayout.Content.BreadCrumb.Add(L["Menu:Category"].Value); PageLayout.Content.MenuItemName = ProductsMenus.Category; + + var parentDisplayName = Model.ParentDisplayName.IsNullOrEmpty() ? "" : $" - {Model.ParentDisplayName}"; } @section scripts @@ -22,11 +24,15 @@ } + + - @L["Category"] + @L["Category"]@parentDisplayName