Browse Source

Improve category management page to support tree structure

pull/107/head 1.5.0
gdlcf88 6 years ago
parent
commit
a1b5146229
  1. 2
      common.props
  2. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/CreateUpdateCategoryDto.cs
  3. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/GetCategoryListDto.cs
  4. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Categories/CategoryAppService.cs
  5. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
  6. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
  7. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
  8. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
  9. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
  10. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
  11. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
  12. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json
  13. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json
  14. 14
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/CreateModal.cshtml.cs
  15. 8
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/Index.cshtml
  16. 22
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/Index.cshtml.cs
  17. 6
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/ViewModels/CreateEditProductViewModel.cs
  18. 10
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/index.js

2
common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>1.4.1</Version>
<Version>1.5.0</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>EasyAbp Team</Authors>

3
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; }

2
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; }
}
}

2
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<Category> 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);
}

2
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",

2
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",

2
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",

2
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",

2
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",

2
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",

2
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",

2
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": "描述",

2
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": "描述",

14
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<IActionResult> OnPostAsync()
{
await _service.CreateAsync(

8
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 @@
<abp-style src="/Pages/EShop/Products/Categories/Category/index.css"/>
}
<script>
let parentId = '@Model.ParentId';
</script>
<abp-card>
<abp-card-header>
<abp-row>
<abp-column size-md="_6">
<abp-card-title>@L["Category"]</abp-card-title>
<abp-card-title>@L["Category"]@parentDisplayName</abp-card-title>
</abp-column>
<abp-column size-md="_6" class="text-right">
<abp-button id="NewCategoryButton"

22
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/Index.cshtml.cs

@ -1,12 +1,32 @@
using System;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.Categories;
using Microsoft.AspNetCore.Mvc;
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Categories.Category
{
public class IndexModel : ProductsPageModel
{
private readonly ICategoryAppService _categoryAppService;
[BindProperty(SupportsGet = true)]
public Guid? ParentId { get; set; }
public string ParentDisplayName { get; set; }
public IndexModel(ICategoryAppService categoryAppService)
{
_categoryAppService = categoryAppService;
}
public async Task OnGetAsync()
{
await Task.CompletedTask;
if (!ParentId.HasValue)
{
return;
}
ParentDisplayName = (await _categoryAppService.GetAsync(ParentId.Value)).DisplayName;
}
}
}

6
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/ViewModels/CreateEditProductViewModel.cs

@ -1,9 +1,13 @@
using System.ComponentModel.DataAnnotations;
using System;
using System.ComponentModel.DataAnnotations;
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Categories.Category.ViewModels
{
public class CreateEditCategoryViewModel
{
[Display(Name = "CategoryParentId")]
public Guid? ParentId { get; set; }
[Display(Name = "CategoryUniqueName")]
public string UniqueName { get; set; }

10
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/index.js

@ -15,13 +15,19 @@ $(function () {
scrollCollapse: true,
order: [[1, "asc"]],
ajax: abp.libs.datatables.createAjax(service.getList, function () {
return { showHidden: true }
return { parentId: parentId, showHidden: true }
}),
columnDefs: [
{
rowAction: {
items:
[
{
text: l('Subcategory'),
action: function (data) {
document.location.href = document.location.origin + '/EShop/Products/Categories/Category?ParentId=' + data.record.id;
}
},
{
text: l('Product'),
action: function (data) {
@ -67,6 +73,6 @@ $(function () {
$('#NewCategoryButton').click(function (e) {
e.preventDefault();
createModal.open();
createModal.open({ parentId: parentId });
});
});
Loading…
Cancel
Save