Browse Source

Introduce StoreAssetCategory

pull/157/head
gdlcf88 4 years ago
parent
commit
4ac5085761
  1. 2
      Directory.Build.props
  2. 7
      EShop.sln
  3. 10
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/ProductsConsts.cs
  4. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.HttpApi/EasyAbp/EShop/Products/Categories/CategoryController.cs
  5. 21
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/Permissions/BookingPermissionDefinitionProvider.cs
  6. 36
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/Permissions/BookingPermissions.cs
  7. 12
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/Dtos/CreateUpdateStoreAssetCategoryDto.cs
  8. 13
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/Dtos/StoreAssetCategoryDto.cs
  9. 18
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/IStoreAssetCategoryAppService.cs
  10. 7
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application/EasyAbp/EShop/Plugins/Booking/BookingApplicationAutoMapperProfile.cs
  11. 25
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryAppService.cs
  12. 10
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain.Shared/EasyAbp/EShop/Plugins/Booking/Localization/en.json
  13. 10
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain.Shared/EasyAbp/EShop/Plugins/Booking/Localization/zh-Hans.json
  14. 10
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain.Shared/EasyAbp/EShop/Plugins/Booking/Localization/zh-Hant.json
  15. 1
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/ProductAssetCategories/ProductAssetCategory.cs
  16. 1
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/ProductAssets/ProductAsset.cs
  17. 9
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/IStoreAssetCategoryRepository.cs
  18. 30
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory.cs
  19. 2
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/BookingDbContext.cs
  20. 10
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/BookingDbContextModelCreatingExtensions.cs
  21. 2
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/EShopPluginsBookingEntityFrameworkCoreModule.cs
  22. 2
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/IBookingDbContext.cs
  23. 20
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryEfCoreQuerableExtensions.cs
  24. 21
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryRepository.cs
  25. 57
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.HttpApi/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryController.cs
  26. 7
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/BookingWebAutoMapperProfile.cs
  27. 13
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/EShopPluginsBookingWebModule.cs
  28. 4
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/EasyAbp.EShop.Plugins.Booking.Web.csproj
  29. 9
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Menus/BookingMenuContributor.cs
  30. 3
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Menus/BookingMenus.cs
  31. 18
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/CreateModal.cshtml
  32. 28
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/CreateModal.cshtml.cs
  33. 19
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/EditModal.cshtml
  34. 39
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/EditModal.cshtml.cs
  35. 48
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/Index.cshtml
  36. 12
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/Index.cshtml.cs
  37. 29
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/ViewModels/CreateEditStoreAssetCategoryViewModel.cs
  38. 0
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/index.css
  39. 70
      plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/index.js
  40. 28
      plugins/Booking/test/EasyAbp.EShop.Plugins.Booking.Application.Tests/StoreAssetCategories/StoreAssetCategoryAppServiceTests.cs
  41. 25
      plugins/Booking/test/EasyAbp.EShop.Plugins.Booking.Domain.Tests/StoreAssetCategories/StoreAssetCategoryDomainTests.cs
  42. 33
      plugins/Booking/test/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore.Tests/EntityFrameworkCore/StoreAssetCategories/StoreAssetCategoryRepositoryTests.cs
  43. 5410
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/20220603095504_AddedStoreAssetCategory.Designer.cs
  44. 39
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/20220603095504_AddedStoreAssetCategory.cs
  45. 47
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/EShopSampleDbContextModelSnapshot.cs

2
Directory.Build.props

@ -4,7 +4,7 @@
<AbpVersion>5.1.3</AbpVersion>
<EasyAbpAbpTreesModuleVersion>2.5.3</EasyAbpAbpTreesModuleVersion>
<EasyAbpPaymentServiceModuleVersion>2.0.11</EasyAbpPaymentServiceModuleVersion>
<EasyAbpAbpTagHelperPlusModuleVersion>0.8.2</EasyAbpAbpTagHelperPlusModuleVersion>
<EasyAbpAbpTagHelperPlusModuleVersion>1.0.0</EasyAbpAbpTagHelperPlusModuleVersion>
</PropertyGroup>
</Project>

7
EShop.sln

@ -387,6 +387,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Orders.Bookin
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payments.Booking.Application", "plugins\Booking\src\EasyAbp.EShop.Payments.Booking.Application\EasyAbp.EShop.Payments.Booking.Application.csproj", "{4480BFAF-C981-4242-A509-EDA6F572E45C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.BookingService.Application.Contracts", "..\EasyAbp.BookingService\src\EasyAbp.BookingService.Application.Contracts\EasyAbp.BookingService.Application.Contracts.csproj", "{7535F638-6039-460E-B58C-61269BD953F9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -1017,6 +1019,10 @@ Global
{4480BFAF-C981-4242-A509-EDA6F572E45C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4480BFAF-C981-4242-A509-EDA6F572E45C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4480BFAF-C981-4242-A509-EDA6F572E45C}.Release|Any CPU.Build.0 = Release|Any CPU
{7535F638-6039-460E-B58C-61269BD953F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7535F638-6039-460E-B58C-61269BD953F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7535F638-6039-460E-B58C-61269BD953F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7535F638-6039-460E-B58C-61269BD953F9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1210,6 +1216,7 @@ Global
{772637D4-25D2-406D-9A0F-6C0506F9D97A} = {D0774C59-2D28-499A-B432-8714CA123CF3}
{C0399352-1278-4D91-8D4E-7491FD77C18B} = {A8C4583C-034E-47AF-B7EC-1A34EE288E2F}
{4480BFAF-C981-4242-A509-EDA6F572E45C} = {A8C4583C-034E-47AF-B7EC-1A34EE288E2F}
{7535F638-6039-460E-B58C-61269BD953F9} = {D0774C59-2D28-499A-B432-8714CA123CF3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}

10
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/ProductsConsts.cs

@ -8,11 +8,15 @@
public const string DefaultProductGroupDescription = "";
public const string CategoryRouteBase = "/api/e-shop/products/category";
public const string RouteBase = "/api/e-shop/products";
public const string GetCategorySummaryListedDataSourceUrl = CategoryRouteBase + "/summary";
public const string GetCategorySummaryListedDataSourceUrl = RouteBase + "/category/summary";
public const string GetCategorySummarySingleDataSourceUrl = CategoryRouteBase + "/{id}";
public const string GetCategorySummarySingleDataSourceUrl = RouteBase + "/category/{id}";
public const string GetProductListedDataSourceUrl = RouteBase + "/product";
public const string GetProductSingleDataSourceUrl = RouteBase + "/product/{id}";
public const string DefaultPaymentExpireInSettingName = "EasyAbp.EShop.Products.Product.DefaultPaymentExpireIn";
}

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.HttpApi/EasyAbp/EShop/Products/Categories/CategoryController.cs

@ -8,7 +8,7 @@ using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Products.Categories
{
[RemoteService(Name = EShopProductsRemoteServiceConsts.RemoteServiceName)]
[Route(ProductsConsts.CategoryRouteBase)]
[Route("/api/e-shop/products/category")]
public class CategoryController : ProductsController, ICategoryAppService
{
private readonly ICategoryAppService _service;

21
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/Permissions/BookingPermissionDefinitionProvider.cs

@ -10,15 +10,20 @@ public class BookingPermissionDefinitionProvider : PermissionDefinitionProvider
{
var myGroup = context.AddGroup(BookingPermissions.GroupName, L("Permission:Booking"));
var productAssetPermission = myGroup.AddPermission(BookingPermissions.ProductAsset.Default, L("Permission:ProductAsset"));
productAssetPermission.AddChild(BookingPermissions.ProductAsset.Create, L("Permission:Create"));
productAssetPermission.AddChild(BookingPermissions.ProductAsset.Update, L("Permission:Update"));
productAssetPermission.AddChild(BookingPermissions.ProductAsset.Delete, L("Permission:Delete"));
var productAssetPermission = myGroup.AddPermission(BookingPermissions.ProductAsset.Default, L("Permission:ProductAsset"));
productAssetPermission.AddChild(BookingPermissions.ProductAsset.Create, L("Permission:Create"));
productAssetPermission.AddChild(BookingPermissions.ProductAsset.Update, L("Permission:Update"));
productAssetPermission.AddChild(BookingPermissions.ProductAsset.Delete, L("Permission:Delete"));
var productAssetCategoryPermission = myGroup.AddPermission(BookingPermissions.ProductAssetCategory.Default, L("Permission:ProductAssetCategory"));
productAssetCategoryPermission.AddChild(BookingPermissions.ProductAssetCategory.Create, L("Permission:Create"));
productAssetCategoryPermission.AddChild(BookingPermissions.ProductAssetCategory.Update, L("Permission:Update"));
productAssetCategoryPermission.AddChild(BookingPermissions.ProductAssetCategory.Delete, L("Permission:Delete"));
var productAssetCategoryPermission = myGroup.AddPermission(BookingPermissions.ProductAssetCategory.Default, L("Permission:ProductAssetCategory"));
productAssetCategoryPermission.AddChild(BookingPermissions.ProductAssetCategory.Create, L("Permission:Create"));
productAssetCategoryPermission.AddChild(BookingPermissions.ProductAssetCategory.Update, L("Permission:Update"));
productAssetCategoryPermission.AddChild(BookingPermissions.ProductAssetCategory.Delete, L("Permission:Delete"));
var storeAssetCategoryPermission = myGroup.AddPermission(BookingPermissions.StoreAssetCategory.Default, L("Permission:StoreAssetCategory"));
storeAssetCategoryPermission.AddChild(BookingPermissions.StoreAssetCategory.Create, L("Permission:Create"));
storeAssetCategoryPermission.AddChild(BookingPermissions.StoreAssetCategory.Update, L("Permission:Update"));
storeAssetCategoryPermission.AddChild(BookingPermissions.StoreAssetCategory.Delete, L("Permission:Delete"));
}
private static LocalizableString L(string name)

36
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/Permissions/BookingPermissions.cs

@ -11,19 +11,27 @@ public class BookingPermissions
return ReflectionHelper.GetPublicConstantsRecursively(typeof(BookingPermissions));
}
public class ProductAsset
{
public const string Default = GroupName + ".ProductAsset";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
}
public class ProductAsset
{
public const string Default = GroupName + ".ProductAsset";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
}
public class ProductAssetCategory
{
public const string Default = GroupName + ".ProductAssetCategory";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
}
public class ProductAssetCategory
{
public const string Default = GroupName + ".ProductAssetCategory";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
}
public class StoreAssetCategory
{
public const string Default = GroupName + ".StoreAssetCategory";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
}
}

12
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/Dtos/CreateUpdateStoreAssetCategoryDto.cs

@ -0,0 +1,12 @@
using System;
using System.ComponentModel;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos
{
[Serializable]
public class CreateUpdateStoreAssetCategoryDto
{
public Guid StoreId { get; set; }
public Guid AssetCategoryId { get; set; }
}
}

13
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/Dtos/StoreAssetCategoryDto.cs

@ -0,0 +1,13 @@
using System;
using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos
{
[Serializable]
public class StoreAssetCategoryDto : AuditedEntityDto<Guid>
{
public Guid StoreId { get; set; }
public Guid AssetCategoryId { get; set; }
}
}

18
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application.Contracts/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/IStoreAssetCategoryAppService.cs

@ -0,0 +1,18 @@
using System;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
public interface IStoreAssetCategoryAppService :
ICrudAppService<
StoreAssetCategoryDto,
Guid,
PagedAndSortedResultRequestDto,
CreateUpdateStoreAssetCategoryDto,
CreateUpdateStoreAssetCategoryDto>
{
}
}

7
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application/EasyAbp/EShop/Plugins/Booking/BookingApplicationAutoMapperProfile.cs

@ -2,6 +2,8 @@ using EasyAbp.EShop.Plugins.Booking.ProductAssets;
using EasyAbp.EShop.Plugins.Booking.ProductAssets.Dtos;
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories;
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories.Dtos;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos;
using AutoMapper;
namespace EasyAbp.EShop.Plugins.Booking;
@ -28,5 +30,8 @@ public class BookingApplicationAutoMapperProfile : Profile
CreateMap<ProductAssetCategoryPeriod, ProductAssetCategoryPeriodDto>();
CreateMap<CreateProductAssetCategoryPeriodDto, ProductAssetCategoryPeriod>(MemberList.Source);
CreateMap<UpdateProductAssetCategoryPeriodDto, ProductAssetCategoryPeriod>(MemberList.Source);
CreateMap<StoreAssetCategory, StoreAssetCategoryDto>();
CreateMap<CreateUpdateStoreAssetCategoryDto, StoreAssetCategory>(MemberList.Source);
}
}
}

25
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Application/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryAppService.cs

@ -0,0 +1,25 @@
using System;
using EasyAbp.EShop.Plugins.Booking.Permissions;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
public class StoreAssetCategoryAppService : CrudAppService<StoreAssetCategory, StoreAssetCategoryDto, Guid, PagedAndSortedResultRequestDto, CreateUpdateStoreAssetCategoryDto, CreateUpdateStoreAssetCategoryDto>,
IStoreAssetCategoryAppService
{
protected override string GetPolicyName { get; set; } = BookingPermissions.StoreAssetCategory.Default;
protected override string GetListPolicyName { get; set; } = BookingPermissions.StoreAssetCategory.Default;
protected override string CreatePolicyName { get; set; } = BookingPermissions.StoreAssetCategory.Create;
protected override string UpdatePolicyName { get; set; } = BookingPermissions.StoreAssetCategory.Update;
protected override string DeletePolicyName { get; set; } = BookingPermissions.StoreAssetCategory.Delete;
private readonly IStoreAssetCategoryRepository _repository;
public StoreAssetCategoryAppService(IStoreAssetCategoryRepository repository) : base(repository)
{
_repository = repository;
}
}
}

10
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain.Shared/EasyAbp/EShop/Plugins/Booking/Localization/en.json

@ -49,6 +49,14 @@
"EditProductAssetCategoryPeriod": "Edit",
"ProductAssetCategoryPeriodDeletionConfirmationMessage": "Are you sure to delete the product asset category period {0}?",
"EasyAbp.EShop.Plugins.Booking:PeriodNotFound": "Period {id} not found.",
"EasyAbp.EShop.Plugins.Booking:DuplicatePeriod": "Period {id} exists."
"EasyAbp.EShop.Plugins.Booking:DuplicatePeriod": "Period {id} exists.",
"Permission:StoreAssetCategory": "Store assets",
"Menu:StoreAssetCategory": "Store assets",
"StoreAssetCategory": "Store assets",
"StoreAssetCategoryStoreId": "Store ID",
"StoreAssetCategoryAssetCategoryId": "Asset category ID",
"CreateStoreAssetCategory": "New",
"EditStoreAssetCategory": "Edit",
"StoreAssetCategoryDeletionConfirmationMessage": "Are you sure to delete the store asset category {0}?"
}
}

10
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain.Shared/EasyAbp/EShop/Plugins/Booking/Localization/zh-Hans.json

@ -49,6 +49,14 @@
"EditProductAssetCategoryPeriod": "编辑",
"ProductAssetCategoryPeriodDeletionConfirmationMessage": "确认删除资产类目时段价格 {0}?",
"EasyAbp.EShop.Plugins.Booking:PeriodNotFound": "时段 {id} 不存在。",
"EasyAbp.EShop.Plugins.Booking:DuplicatePeriod": "时段 {id} 已存在。"
"EasyAbp.EShop.Plugins.Booking:DuplicatePeriod": "时段 {id} 已存在。",
"Permission:StoreAssetCategory": "店铺资产",
"Menu:StoreAssetCategory": "店铺资产",
"StoreAssetCategory": "店铺资产",
"StoreAssetCategoryStoreId": "店铺 ID",
"StoreAssetCategoryAssetCategoryId": "资产目录 ID",
"CreateStoreAssetCategory": "新建",
"EditStoreAssetCategory": "编辑",
"StoreAssetCategoryDeletionConfirmationMessage": "确认删除店铺资产 {0}?"
}
}

10
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain.Shared/EasyAbp/EShop/Plugins/Booking/Localization/zh-Hant.json

@ -49,6 +49,14 @@
"EditProductAssetCategoryPeriod": "編輯",
"ProductAssetCategoryPeriodDeletionConfirmationMessage": "確認刪除資產類目時段價格 {0}?",
"EasyAbp.EShop.Plugins.Booking:PeriodNotFound": "時段 {id} 不存在。",
"EasyAbp.EShop.Plugins.Booking:DuplicatePeriod": "時段 {id} 已存在。"
"EasyAbp.EShop.Plugins.Booking:DuplicatePeriod": "時段 {id} 已存在。",
"Permission:StoreAssetCategory": "店鋪資產",
"Menu:StoreAssetCategory": "店鋪資產",
"StoreAssetCategory": "店鋪資產",
"StoreAssetCategoryStoreId": "店鋪 ID",
"StoreAssetCategoryAssetCategoryId": "資產目錄 ID",
"CreateStoreAssetCategory": "新建",
"EditStoreAssetCategory": "編輯",
"StoreAssetCategoryDeletionConfirmationMessage": "確認刪除店鋪資產 {0}?"
}
}

1
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/ProductAssetCategories/ProductAssetCategory.cs

@ -48,7 +48,6 @@ public class ProductAssetCategory : AuditedAggregateRoot<Guid>, IMultiTenant
protected ProductAssetCategory()
{
Periods = new List<ProductAssetCategoryPeriod>();
}
public ProductAssetCategory(

1
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/ProductAssets/ProductAsset.cs

@ -50,7 +50,6 @@ public class ProductAsset : AuditedAggregateRoot<Guid>, IMultiTenant
protected ProductAsset()
{
Periods = new List<ProductAssetPeriod>();
}
public ProductAsset(

9
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/IStoreAssetCategoryRepository.cs

@ -0,0 +1,9 @@
using System;
using Volo.Abp.Domain.Repositories;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
public interface IStoreAssetCategoryRepository : IRepository<StoreAssetCategory, Guid>
{
}
}

30
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Domain/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory.cs

@ -0,0 +1,30 @@
using System;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
/// <summary>
/// Mapping of Store to AssetCategory.
/// It determines which AssetCategory can a store owner set to provide booking service as a product of its store.
/// Stores can use all the sub-categories if you set a parent category for them.
/// </summary>
public class StoreAssetCategory : AuditedAggregateRoot<Guid>, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }
public virtual Guid StoreId { get; protected set; }
public virtual Guid AssetCategoryId { get; protected set; }
protected StoreAssetCategory()
{
}
public StoreAssetCategory(Guid id, Guid? tenantId, Guid storeId, Guid assetCategoryId) : base(id)
{
TenantId = tenantId;
StoreId = storeId;
AssetCategoryId = assetCategoryId;
}
}

2
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/BookingDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using EasyAbp.EShop.Plugins.Booking.ProductAssets;
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
namespace EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore;
@ -16,6 +17,7 @@ public class BookingDbContext : AbpDbContext<BookingDbContext>, IBookingDbContex
public DbSet<ProductAssetPeriod> ProductAssetPeriods { get; set; }
public DbSet<ProductAssetCategoryPeriod> ProductAssetCategoryPeriods { get; set; }
public DbSet<ProductAssetCategory> ProductAssetCategories { get; set; }
public DbSet<StoreAssetCategory> StoreAssetCategories { get; set; }
public BookingDbContext(DbContextOptions<BookingDbContext> options)
: base(options)

10
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/BookingDbContextModelCreatingExtensions.cs

@ -1,3 +1,4 @@
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories;
using EasyAbp.EShop.Plugins.Booking.ProductAssets;
using Microsoft.EntityFrameworkCore;
@ -68,5 +69,14 @@ public static class BookingDbContextModelCreatingExtensions
/* Configure more properties here */
b.Property(x => x.Price).HasColumnType("decimal(20,8)");
});
builder.Entity<StoreAssetCategory>(b =>
{
b.ToTable(BookingDbProperties.DbTablePrefix + "StoreAssetCategories", BookingDbProperties.DbSchema);
b.ConfigureByConvention();
/* Configure more properties here */
});
}
}

2
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/EShopPluginsBookingEntityFrameworkCoreModule.cs

@ -1,3 +1,4 @@
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories;
using EasyAbp.EShop.Plugins.Booking.ProductAssets;
using Microsoft.Extensions.DependencyInjection;
@ -21,6 +22,7 @@ public class EShopPluginsBookingEntityFrameworkCoreModule : AbpModule
*/
options.AddRepository<ProductAsset, ProductAssetRepository>();
options.AddRepository<ProductAssetCategory, ProductAssetCategoryRepository>();
options.AddRepository<StoreAssetCategory, StoreAssetCategoryRepository>();
});
}
}

2
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/EntityFrameworkCore/IBookingDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using EasyAbp.EShop.Plugins.Booking.ProductAssets;
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
namespace EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore;
@ -16,4 +17,5 @@ public interface IBookingDbContext : IEfCoreDbContext
DbSet<ProductAssetPeriod> ProductAssetPeriods { get; set; }
DbSet<ProductAssetCategoryPeriod> ProductAssetCategoryPeriods { get; set; }
DbSet<ProductAssetCategory> ProductAssetCategories { get; set; }
DbSet<StoreAssetCategory> StoreAssetCategories { get; set; }
}

20
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryEfCoreQuerableExtensions.cs

@ -0,0 +1,20 @@
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
public static class StoreAssetCategoryEfCoreQueryableExtensions
{
public static IQueryable<StoreAssetCategory> IncludeDetails(this IQueryable<StoreAssetCategory> queryable, bool include = true)
{
if (!include)
{
return queryable;
}
return queryable
// .Include(x => x.xxx) // TODO: AbpHelper generated
;
}
}
}

21
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryRepository.cs

@ -0,0 +1,21 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
public class StoreAssetCategoryRepository : EfCoreRepository<IBookingDbContext, StoreAssetCategory, Guid>, IStoreAssetCategoryRepository
{
public StoreAssetCategoryRepository(IDbContextProvider<IBookingDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public override async Task<IQueryable<StoreAssetCategory>> WithDetailsAsync()
{
return (await GetQueryableAsync()).IncludeDetails();
}
}
}

57
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.HttpApi/EasyAbp/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategoryController.cs

@ -0,0 +1,57 @@
using System;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos;
using Volo.Abp.Application.Dtos;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
[RemoteService(Name = "BookingStoreAssetCategory")]
[Route("/api/booking/store-asset-category")]
public class StoreAssetCategoryController : BookingController, IStoreAssetCategoryAppService
{
private readonly IStoreAssetCategoryAppService _service;
public StoreAssetCategoryController(IStoreAssetCategoryAppService service)
{
_service = service;
}
[HttpPost]
[Route("")]
public virtual Task<StoreAssetCategoryDto> CreateAsync(CreateUpdateStoreAssetCategoryDto input)
{
return _service.CreateAsync(input);
}
[HttpPut]
[Route("{id}")]
public virtual Task<StoreAssetCategoryDto> UpdateAsync(Guid id, CreateUpdateStoreAssetCategoryDto input)
{
return _service.UpdateAsync(id, input);
}
[HttpDelete]
[Route("{id}")]
public virtual Task DeleteAsync(Guid id)
{
return _service.DeleteAsync(id);
}
[HttpGet]
[Route("{id}")]
public virtual Task<StoreAssetCategoryDto> GetAsync(Guid id)
{
return _service.GetAsync(id);
}
[HttpGet]
[Route("")]
public virtual Task<PagedResultDto<StoreAssetCategoryDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
return _service.GetListAsync(input);
}
}
}

7
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/BookingWebAutoMapperProfile.cs

@ -6,7 +6,9 @@ using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories.Dtos;
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories.Dtos;
using AutoMapper;
using EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.ProductAssetCategories.ProductAssetCategory.ViewModels;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos;
using EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.ProductAssetCategories.ProductAssetCategoryPeriod.ViewModels;
using EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory.ViewModels;
namespace EasyAbp.EShop.Plugins.Booking.Web;
@ -32,5 +34,8 @@ public class BookingWebAutoMapperProfile : Profile
CreateMap<ProductAssetCategoryPeriodDto, EditProductAssetCategoryPeriodViewModel>();
CreateMap<CreateProductAssetCategoryPeriodViewModel, CreateProductAssetCategoryPeriodDto>();
CreateMap<EditProductAssetCategoryPeriodViewModel, UpdateProductAssetCategoryPeriodDto>();
CreateMap<StoreAssetCategoryDto, CreateEditStoreAssetCategoryViewModel>();
CreateMap<CreateEditStoreAssetCategoryViewModel, CreateUpdateStoreAssetCategoryDto>();
}
}
}

13
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/EShopPluginsBookingWebModule.cs

@ -1,22 +1,29 @@
using Microsoft.AspNetCore.Mvc.RazorPages;
using EasyAbp.Abp.TagHelperPlus;
using EasyAbp.BookingService;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.DependencyInjection;
using EasyAbp.EShop.Plugins.Booking.Localization;
using EasyAbp.EShop.Plugins.Booking.Web.Menus;
using EasyAbp.EShop.Products;
using EasyAbp.EShop.Stores;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Volo.Abp.UI.Navigation;
using Volo.Abp.VirtualFileSystem;
using EasyAbp.EShop.Plugins.Booking.Permissions;
namespace EasyAbp.EShop.Plugins.Booking.Web;
[DependsOn(
typeof(AbpTagHelperPlusModule),
typeof(BookingServiceApplicationContractsModule),
typeof(EShopProductsApplicationContractsModule),
typeof(EShopStoresApplicationContractsModule),
typeof(EShopPluginsBookingApplicationContractsModule),
typeof(AbpAspNetCoreMvcUiThemeSharedModule),
typeof(AbpAutoMapperModule)
)]
)]
public class EShopPluginsBookingWebModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)

4
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/EasyAbp.EShop.Plugins.Booking.Web.csproj

@ -12,11 +12,15 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EasyAbp.Abp.TagHelperPlus" Version="$(EasyAbpAbpTagHelperPlusModuleVersion)" />
<PackageReference Include="Volo.Abp.AutoMapper" Version="$(AbpVersion)" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared" Version="$(AbpVersion)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\EasyAbp.BookingService\src\EasyAbp.BookingService.Application.Contracts\EasyAbp.BookingService.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\..\modules\EasyAbp.EShop.Products\src\EasyAbp.EShop.Products.Application.Contracts\EasyAbp.EShop.Products.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\..\modules\EasyAbp.EShop.Stores\src\EasyAbp.EShop.Stores.Application.Contracts\EasyAbp.EShop.Stores.Application.Contracts.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Plugins.Booking.Application.Contracts\EasyAbp.EShop.Plugins.Booking.Application.Contracts.csproj" />
</ItemGroup>

9
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Menus/BookingMenuContributor.cs

@ -24,6 +24,15 @@ public class BookingMenuContributor : IMenuContributor
var bookingMenuItem = new ApplicationMenuItem(BookingMenus.Prefix, l["Menu:Booking"]);
if (await context.IsGrantedAsync(BookingPermissions.StoreAssetCategory.Default))
{
bookingMenuItem.AddItem(
new ApplicationMenuItem(BookingMenus.StoreAssetCategory, l["Menu:StoreAssetCategory"],
"/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory")
);
}
if (await context.IsGrantedAsync(BookingPermissions.ProductAsset.Default))
{
bookingMenuItem.AddItem(

3
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Menus/BookingMenus.cs

@ -1,4 +1,4 @@
namespace EasyAbp.EShop.Plugins.Booking.Web.Menus;
namespace EasyAbp.EShop.Plugins.Booking.Web.Menus;
public class BookingMenus
{
@ -11,4 +11,5 @@ public class BookingMenus
public const string ProductAsset = Prefix + ".ProductAsset";
public const string ProductAssetCategory = Prefix + ".ProductAssetCategory";
public const string StoreAssetCategory = Prefix + ".StoreAssetCategory";
}

18
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/CreateModal.cshtml

@ -0,0 +1,18 @@
@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal;
@using EasyAbp.EShop.Plugins.Booking.Localization
@inject IHtmlLocalizer<BookingResource> L
@model EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory.CreateModalModel
@{
Layout = null;
}
<abp-dynamic-form abp-model="ViewModel" data-ajaxForm="true" asp-page="CreateModal">
<abp-modal>
<abp-modal-header title="@L["CreateStoreAssetCategory"].Value"></abp-modal-header>
<abp-modal-body>
<abp-form-content />
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</abp-dynamic-form>

28
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/CreateModal.cshtml.cs

@ -0,0 +1,28 @@
using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos;
using EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory.ViewModels;
using Microsoft.AspNetCore.Mvc;
namespace EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory
{
public class CreateModalModel : BookingPageModel
{
[BindProperty]
public CreateEditStoreAssetCategoryViewModel ViewModel { get; set; }
private readonly IStoreAssetCategoryAppService _service;
public CreateModalModel(IStoreAssetCategoryAppService service)
{
_service = service;
}
public virtual async Task<IActionResult> OnPostAsync()
{
var dto = ObjectMapper.Map<CreateEditStoreAssetCategoryViewModel, CreateUpdateStoreAssetCategoryDto>(ViewModel);
await _service.CreateAsync(dto);
return NoContent();
}
}
}

19
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/EditModal.cshtml

@ -0,0 +1,19 @@
@page
@using EasyAbp.EShop.Plugins.Booking.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal;
@inject IHtmlLocalizer<BookingResource> L
@model EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory.EditModalModel
@{
Layout = null;
}
<abp-dynamic-form abp-model="ViewModel" data-ajaxForm="true" asp-page="EditModal">
<abp-modal>
<abp-modal-header title="@L["EditStoreAssetCategory"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="Id" />
<abp-form-content />
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</abp-dynamic-form>

39
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/EditModal.cshtml.cs

@ -0,0 +1,39 @@
using System;
using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.Dtos;
using EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory.ViewModels;
using Microsoft.AspNetCore.Mvc;
namespace EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory
{
public class EditModalModel : BookingPageModel
{
[HiddenInput]
[BindProperty(SupportsGet = true)]
public Guid Id { get; set; }
[BindProperty]
public CreateEditStoreAssetCategoryViewModel ViewModel { get; set; }
private readonly IStoreAssetCategoryAppService _service;
public EditModalModel(IStoreAssetCategoryAppService service)
{
_service = service;
}
public virtual async Task OnGetAsync()
{
var dto = await _service.GetAsync(Id);
ViewModel = ObjectMapper.Map<StoreAssetCategoryDto, CreateEditStoreAssetCategoryViewModel>(dto);
}
public virtual async Task<IActionResult> OnPostAsync()
{
var dto = ObjectMapper.Map<CreateEditStoreAssetCategoryViewModel, CreateUpdateStoreAssetCategoryDto>(ViewModel);
await _service.UpdateAsync(Id, dto);
return NoContent();
}
}
}

48
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/Index.cshtml

@ -0,0 +1,48 @@
@page
@using EasyAbp.EShop.Plugins.Booking.Permissions
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Layout
@using EasyAbp.EShop.Plugins.Booking.Localization
@using EasyAbp.EShop.Plugins.Booking.Web.Menus
@using EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory
@model IndexModel
@inject IPageLayout PageLayout
@inject IHtmlLocalizer<BookingResource> L
@inject IAuthorizationService Authorization
@{
PageLayout.Content.Title = L["StoreAssetCategory"].Value;
PageLayout.Content.BreadCrumb.Add(L["Menu:StoreAssetCategory"].Value);
PageLayout.Content.MenuItemName = BookingMenus.StoreAssetCategory;
}
@section scripts
{
<abp-script src="/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/index.js" />
}
@section styles
{
<abp-style src="/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/index.css"/>
}
<abp-card>
<abp-card-header>
<abp-row>
<abp-column size-md="_6">
<abp-card-title>@L["StoreAssetCategory"]</abp-card-title>
</abp-column>
<abp-column size-md="_6" class="text-end">
@if (await Authorization.IsGrantedAsync(BookingPermissions.StoreAssetCategory.Create))
{
<abp-button id="NewStoreAssetCategoryButton"
text="@L["CreateStoreAssetCategory"].Value"
icon="plus"
button-type="Primary" />
}
</abp-column>
</abp-row>
</abp-card-header>
<abp-card-body>
<abp-table striped-rows="true" id="StoreAssetCategoryTable" class="nowrap"/>
</abp-card-body>
</abp-card>

12
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/Index.cshtml.cs

@ -0,0 +1,12 @@
using System.Threading.Tasks;
namespace EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory
{
public class IndexModel : BookingPageModel
{
public virtual async Task OnGetAsync()
{
await Task.CompletedTask;
}
}
}

29
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/ViewModels/CreateEditStoreAssetCategoryViewModel.cs

@ -0,0 +1,29 @@
using System;
using System.ComponentModel.DataAnnotations;
using EasyAbp.Abp.TagHelperPlus.EasySelector;
using EasyAbp.BookingService;
using EasyAbp.EShop.Stores;
namespace EasyAbp.EShop.Plugins.Booking.Web.Pages.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory.ViewModels
{
public class CreateEditStoreAssetCategoryViewModel
{
[EasySelector(
getListedDataSourceUrl: StoresConsts.GetStoreListedDataSourceUrl + "?onlyManageable=true",
getSingleDataSourceUrl: StoresConsts.GetStoreSingleDataSourceUrl,
keyPropertyName: "id",
textPropertyName: "name",
moduleName: EShopStoresRemoteServiceConsts.ModuleName)]
[Display(Name = "StoreAssetCategoryStoreId")]
public Guid StoreId { get; set; }
[EasySelector(
getListedDataSourceUrl: BookingServiceUrls.GetAssetCategoryListedDataSourceUrl,
getSingleDataSourceUrl: BookingServiceUrls.GetAssetCategorySingleDataSourceUrl,
keyPropertyName: "id",
textPropertyName: "name",
moduleName: BookingServiceRemoteServiceConsts.ModuleName)]
[Display(Name = "StoreAssetCategoryAssetCategoryId")]
public Guid AssetCategoryId { get; set; }
}
}

0
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/index.css

70
plugins/Booking/src/EasyAbp.EShop.Plugins.Booking.Web/Pages/EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/index.js

@ -0,0 +1,70 @@
$(function () {
var l = abp.localization.getResource('EasyAbpEShopPluginsBooking');
var service = easyAbp.eShop.plugins.booking.storeAssetCategories.storeAssetCategory;
var createModal = new abp.ModalManager(abp.appPath + 'EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/CreateModal');
var editModal = new abp.ModalManager(abp.appPath + 'EShop/Plugins/Booking/StoreAssetCategories/StoreAssetCategory/EditModal');
var dataTable = $('#StoreAssetCategoryTable').DataTable(abp.libs.datatables.normalizeConfiguration({
processing: true,
serverSide: true,
paging: true,
searching: false,
autoWidth: false,
scrollCollapse: true,
order: [[0, "asc"]],
ajax: abp.libs.datatables.createAjax(service.getList),
columnDefs: [
{
rowAction: {
items:
[
{
text: l('Edit'),
visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Booking.StoreAssetCategory.Update'),
action: function (data) {
editModal.open({ id: data.record.id });
}
},
{
text: l('Delete'),
visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Booking.StoreAssetCategory.Delete'),
confirmMessage: function (data) {
return l('StoreAssetCategoryDeletionConfirmationMessage', data.record.id);
},
action: function (data) {
service.delete(data.record.id)
.then(function () {
abp.notify.info(l('SuccessfullyDeleted'));
dataTable.ajax.reload();
});
}
}
]
}
},
{
title: l('StoreAssetCategoryStoreId'),
data: "storeId"
},
{
title: l('StoreAssetCategoryAssetCategoryId'),
data: "assetCategoryId"
},
]
}));
createModal.onResult(function () {
dataTable.ajax.reload();
});
editModal.onResult(function () {
dataTable.ajax.reload();
});
$('#NewStoreAssetCategoryButton').click(function (e) {
e.preventDefault();
createModal.open();
});
});

28
plugins/Booking/test/EasyAbp.EShop.Plugins.Booking.Application.Tests/StoreAssetCategories/StoreAssetCategoryAppServiceTests.cs

@ -0,0 +1,28 @@
using Shouldly;
using System.Threading.Tasks;
using Xunit;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
public class StoreAssetCategoryAppServiceTests : BookingApplicationTestBase
{
private readonly IStoreAssetCategoryAppService _storeAssetCategoryAppService;
public StoreAssetCategoryAppServiceTests()
{
_storeAssetCategoryAppService = GetRequiredService<IStoreAssetCategoryAppService>();
}
/*
[Fact]
public async Task Test1()
{
// Arrange
// Act
// Assert
}
*/
}
}

25
plugins/Booking/test/EasyAbp.EShop.Plugins.Booking.Domain.Tests/StoreAssetCategories/StoreAssetCategoryDomainTests.cs

@ -0,0 +1,25 @@
using System.Threading.Tasks;
using Shouldly;
using Xunit;
namespace EasyAbp.EShop.Plugins.Booking.StoreAssetCategories
{
public class StoreAssetCategoryDomainTests : BookingDomainTestBase
{
public StoreAssetCategoryDomainTests()
{
}
/*
[Fact]
public async Task Test1()
{
// Arrange
// Assert
// Assert
}
*/
}
}

33
plugins/Booking/test/EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore.Tests/EntityFrameworkCore/StoreAssetCategories/StoreAssetCategoryRepositoryTests.cs

@ -0,0 +1,33 @@
using System;
using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Booking.StoreAssetCategories;
using Volo.Abp.Domain.Repositories;
using Xunit;
namespace EasyAbp.EShop.Plugins.Booking.EntityFrameworkCore.StoreAssetCategories
{
public class StoreAssetCategoryRepositoryTests : BookingEntityFrameworkCoreTestBase
{
private readonly IStoreAssetCategoryRepository _storeAssetCategoryRepository;
public StoreAssetCategoryRepositoryTests()
{
_storeAssetCategoryRepository = GetRequiredService<IStoreAssetCategoryRepository>();
}
/*
[Fact]
public async Task Test1()
{
await WithUnitOfWorkAsync(async () =>
{
// Arrange
// Act
//Assert
});
}
*/
}
}

5410
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/20220603095504_AddedStoreAssetCategory.Designer.cs

File diff suppressed because it is too large

39
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/20220603095504_AddedStoreAssetCategory.cs

@ -0,0 +1,39 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace EShopSample.Migrations
{
public partial class AddedStoreAssetCategory : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "EasyAbpEShopPluginsBookingStoreAssetCategories",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
StoreId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
AssetCategoryId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_EasyAbpEShopPluginsBookingStoreAssetCategories", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "EasyAbpEShopPluginsBookingStoreAssetCategories");
}
}
}

47
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/EShopSampleDbContextModelSnapshot.cs

@ -965,6 +965,53 @@ namespace EShopSample.Migrations
b.ToTable("EasyAbpEShopPluginsBookingProductAssetPeriods", (string)null);
});
modelBuilder.Entity("EasyAbp.EShop.Plugins.Booking.StoreAssetCategories.StoreAssetCategory", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("AssetCategoryId")
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<Guid>("StoreId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.ToTable("EasyAbpEShopPluginsBookingStoreAssetCategories", (string)null);
});
modelBuilder.Entity("EasyAbp.EShop.Plugins.Coupons.Coupons.Coupon", b =>
{
b.Property<Guid>("Id")

Loading…
Cancel
Save