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 ef362132..2356f545 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
@@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",
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 0fed0784..12c3c025 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
@@ -57,8 +57,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",
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 689e1db5..bd779745 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
@@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",
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 8fe31f51..92f8d162 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
@@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",
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 6cf4f29a..76b16483 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
@@ -57,8 +57,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",
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 e824d6e9..4e2e98a9 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
@@ -57,8 +57,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",
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 e0f7702c..117be7f6 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
@@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",
diff --git a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/cs.json b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/cs.json
index f95e23b5..74ad23fe 100644
--- a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/cs.json
+++ b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/cs.json
@@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",
diff --git a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/en.json b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/en.json
index 32ad83e4..668a23ce 100644
--- a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/en.json
+++ b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/en.json
@@ -11,8 +11,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",
diff --git a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pl.json b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pl.json
index d74ad4df..94ec8ed3 100644
--- a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pl.json
+++ b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pl.json
@@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",
diff --git a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pt-BR.json b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pt-BR.json
index b9b6ce42..526a4c9b 100644
--- a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pt-BR.json
+++ b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pt-BR.json
@@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",
diff --git a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/sl.json b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/sl.json
index d68b8312..d01e0aa9 100644
--- a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/sl.json
+++ b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/sl.json
@@ -11,8 +11,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",
diff --git a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/tr.json b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/tr.json
index b423993c..eb71f510 100644
--- a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/tr.json
+++ b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/tr.json
@@ -11,8 +11,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",
diff --git a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/vi.json b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/vi.json
index 2e54950b..b81dbb76 100644
--- a/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/vi.json
+++ b/modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/vi.json
@@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Coupons/Dtos/GetCouponListInput.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Coupons/Dtos/GetCouponListInput.cs
index 58748592..a4235349 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Coupons/Dtos/GetCouponListInput.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Coupons/Dtos/GetCouponListInput.cs
@@ -8,6 +8,8 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons.Dtos
{
public bool AvailableOnly { get; set; }
+ public Guid? StoreId { get; set; }
+
public Guid? UserId { get; set; }
}
}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissionDefinitionProvider.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissionDefinitionProvider.cs
index a762b909..f63968b7 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissionDefinitionProvider.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissionDefinitionProvider.cs
@@ -11,6 +11,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
var myGroup = context.AddGroup(CouponsPermissions.GroupName, L("Permission:Coupons"));
var couponTemplatePermission = myGroup.AddPermission(CouponsPermissions.CouponTemplate.Default, L("Permission:CouponTemplate"));
+ couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.CrossStore, L("Permission:CrossStore"));
couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.Create, L("Permission:Create"));
couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.Update, L("Permission:Update"));
couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.Delete, L("Permission:Delete"));
@@ -18,6 +19,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
var couponPermission = myGroup.AddPermission(CouponsPermissions.Coupon.Default, L("Permission:Coupon"));
couponPermission.AddChild(CouponsPermissions.Coupon.Use, L("Permission:Use"));
couponPermission.AddChild(CouponsPermissions.Coupon.Manage, L("Permission:Manage"));
+ couponPermission.AddChild(CouponsPermissions.Coupon.CrossStore, L("Permission:CrossStore"));
couponPermission.AddChild(CouponsPermissions.Coupon.Create, L("Permission:Create"));
couponPermission.AddChild(CouponsPermissions.Coupon.Update, L("Permission:Update"));
couponPermission.AddChild(CouponsPermissions.Coupon.Delete, L("Permission:Delete"));
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissions.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissions.cs
index 64f3b58f..0d5e74ff 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissions.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissions.cs
@@ -14,6 +14,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
public class CouponTemplate
{
public const string Default = GroupName + ".CouponTemplate";
+ public const string CrossStore = Default + ".CrossStore";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
@@ -24,6 +25,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
public const string Default = GroupName + ".Coupon";
public const string Use = Default + ".Use";
public const string Manage = Default + ".Manage";
+ public const string CrossStore = Default + ".CrossStore";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp.EShop.Plugins.Coupons.Application.csproj b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp.EShop.Plugins.Coupons.Application.csproj
index 02cf7664..cdce45ff 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp.EShop.Plugins.Coupons.Application.csproj
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp.EShop.Plugins.Coupons.Application.csproj
@@ -10,6 +10,7 @@
+
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateAppService.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateAppService.cs
index 22e513a6..93d14ee7 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateAppService.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateAppService.cs
@@ -5,6 +5,8 @@ using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Coupons.Permissions;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates.Dtos;
+using EasyAbp.EShop.Stores.Authorization;
+using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
@@ -33,8 +35,14 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
public override async Task CreateAsync(CreateUpdateCouponTemplateDto input)
{
- await CheckCreatePolicyAsync();
-
+ await AuthorizationService.CheckMultiStorePolicyAsync(input.StoreId, CreatePolicyName,
+ CouponsPermissions.CouponTemplate.CrossStore);
+
+ if (input.Scopes.Any(x => x.StoreId != input.StoreId))
+ {
+ await AuthorizationService.CheckAsync(CouponsPermissions.CouponTemplate.CrossStore);
+ }
+
var entity = await MapToEntityAsync(input);
TryToSetTenantId(entity);
@@ -52,10 +60,16 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
public override async Task UpdateAsync(Guid id, CreateUpdateCouponTemplateDto input)
{
- await CheckUpdatePolicyAsync();
-
var entity = await GetEntityByIdAsync(id);
+ await AuthorizationService.CheckMultiStorePolicyAsync(entity.StoreId, UpdatePolicyName,
+ CouponsPermissions.CouponTemplate.CrossStore);
+
+ if (input.StoreId != entity.StoreId || input.Scopes.Any(x => x.StoreId != input.StoreId))
+ {
+ await AuthorizationService.CheckAsync(CouponsPermissions.CouponTemplate.CrossStore);
+ }
+
await MapToEntityAsync(input, entity);
foreach (var inputScoreDto in input.Scopes.Where(dto => !ExistScope(entity.Scopes, dto)))
@@ -70,7 +84,17 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
return await MapToGetOutputDtoAsync(entity);
}
-
+
+ public override async Task DeleteAsync(Guid id)
+ {
+ var couponTemplate = await GetEntityByIdAsync(id);
+
+ await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId, DeletePolicyName,
+ CouponsPermissions.CouponTemplate.CrossStore);
+
+ await _repository.DeleteAsync(couponTemplate);
+ }
+
protected virtual bool ExistScope(IEnumerable scopes, ICouponTemplateScope need)
{
return scopes.Any(x => x.StoreId == need.StoreId &&
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/Coupons/CouponAppService.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/Coupons/CouponAppService.cs
index e59a39a5..2eb1ef89 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/Coupons/CouponAppService.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/Coupons/CouponAppService.cs
@@ -4,9 +4,11 @@ using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Coupons.Permissions;
using EasyAbp.EShop.Plugins.Coupons.Coupons.Dtos;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
+using EasyAbp.EShop.Stores.Authorization;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
+using Volo.Abp.Authorization;
using Volo.Abp.Users;
namespace EasyAbp.EShop.Plugins.Coupons.Coupons
@@ -41,21 +43,25 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons
{
await CheckGetPolicyAsync();
- var entity = await GetEntityByIdAsync(id);
+ var coupon = await GetEntityByIdAsync(id);
- if (entity.UserId != CurrentUser.GetId())
+ if (coupon.UserId != CurrentUser.GetId())
{
- await AuthorizationService.CheckAsync(CouponsPermissions.Coupon.Manage);
+ var couponTemplate = await _couponTemplateRepository.GetAsync(coupon.CouponTemplateId);
+
+ await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
+ CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
}
- return await MapToGetOutputDtoAsync(entity);
+ return await MapToGetOutputDtoAsync(coupon);
}
public override async Task> GetListAsync(GetCouponListInput input)
{
if (input.UserId != CurrentUser.GetId())
{
- await AuthorizationService.CheckAsync(CouponsPermissions.Coupon.Manage);
+ await AuthorizationService.CheckMultiStorePolicyAsync(input.StoreId,
+ CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
}
return await base.GetListAsync(input);
@@ -67,15 +73,51 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons
var couponTemplate = await _couponTemplateRepository.GetAsync(input.CouponTemplateId);
- var entity = await MapToEntityAsync(input);
+ await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
+ CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
+
+ var coupon = await MapToEntityAsync(input);
- TryToSetTenantId(entity);
+ TryToSetTenantId(coupon);
- entity.SetExpirationTime(couponTemplate.GetCalculatedExpirationTime(Clock));
+ coupon.SetExpirationTime(couponTemplate.GetCalculatedExpirationTime(Clock));
- await Repository.InsertAsync(entity, autoSave: true);
+ await Repository.InsertAsync(coupon, autoSave: true);
- return await MapToGetOutputDtoAsync(entity);
+ return await MapToGetOutputDtoAsync(coupon);
+ }
+
+ public override async Task UpdateAsync(Guid id, UpdateCouponDto input)
+ {
+ await CheckUpdatePolicyAsync();
+
+ var coupon = await GetEntityByIdAsync(id);
+
+ var couponTemplate = await _couponTemplateRepository.GetAsync(coupon.CouponTemplateId);
+
+ await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
+ CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
+
+ await MapToEntityAsync(input, coupon);
+
+ await Repository.UpdateAsync(coupon, autoSave: true);
+
+ return await MapToGetOutputDtoAsync(coupon);
+
+ }
+
+ public override async Task DeleteAsync(Guid id)
+ {
+ await CheckDeletePolicyAsync();
+
+ var coupon = await GetEntityByIdAsync(id);
+
+ var couponTemplate = await _couponTemplateRepository.GetAsync(coupon.CouponTemplateId);
+
+ await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
+ CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
+
+ await _repository.DeleteAsync(coupon, true);
}
[Authorize(CouponsPermissions.Coupon.Use)]
@@ -83,6 +125,11 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons
{
var coupon = await GetEntityByIdAsync(id);
+ if (coupon.UserId != CurrentUser.GetId())
+ {
+ throw new AbpAuthorizationException();
+ }
+
if (coupon.OrderId.HasValue)
{
throw new CouponHasBeenOccupiedException();
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsApplicationModule.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsApplicationModule.cs
index 91517769..01874f21 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsApplicationModule.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsApplicationModule.cs
@@ -1,4 +1,5 @@
-using Microsoft.Extensions.DependencyInjection;
+using EasyAbp.EShop.Stores;
+using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Volo.Abp.Application;
@@ -8,6 +9,7 @@ namespace EasyAbp.EShop.Plugins.Coupons
[DependsOn(
typeof(EShopPluginsCouponsDomainModule),
typeof(EShopPluginsCouponsApplicationContractsModule),
+ typeof(EShopStoresApplicationSharedModule),
typeof(AbpDddApplicationModule),
typeof(AbpAutoMapperModule)
)]
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/cs.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/cs.json
index bd160d9d..3c0ad895 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/cs.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/cs.json
@@ -24,9 +24,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
+ "CouponTemplateScope": "Coupon template scope",
+ "CouponTemplateScopeStoreId": "Store ID",
+ "CouponTemplateScopeProductGroupName": "Product group name",
+ "CouponTemplateScopeProductId": "Product ID",
+ "CouponTemplateScopeProductSkuId": "Product SKU ID",
+ "CreateCouponTemplateScope": "New",
+ "EditCouponTemplateScope": "Edit",
+ "CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/en.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/en.json
index c6e86914..9c7f9038 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/en.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/en.json
@@ -24,9 +24,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
+ "CouponTemplateScope": "Coupon template scope",
+ "CouponTemplateScopeStoreId": "Store ID",
+ "CouponTemplateScopeProductGroupName": "Product group name",
+ "CouponTemplateScopeProductId": "Product ID",
+ "CouponTemplateScopeProductSkuId": "Product SKU ID",
+ "CreateCouponTemplateScope": "New",
+ "EditCouponTemplateScope": "Edit",
+ "CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pl-PL.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pl-PL.json
index 2d6952a8..f40bbb1f 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pl-PL.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pl-PL.json
@@ -21,9 +21,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
+ "CouponTemplateScope": "Coupon template scope",
+ "CouponTemplateScopeStoreId": "Store ID",
+ "CouponTemplateScopeProductGroupName": "Product group name",
+ "CouponTemplateScopeProductId": "Product ID",
+ "CouponTemplateScopeProductSkuId": "Product SKU ID",
+ "CreateCouponTemplateScope": "New",
+ "EditCouponTemplateScope": "Edit",
+ "CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pt-BR.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pt-BR.json
index cf3c0c22..dd701c0d 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pt-BR.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pt-BR.json
@@ -21,9 +21,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
+ "CouponTemplateScope": "Coupon template scope",
+ "CouponTemplateScopeStoreId": "Store ID",
+ "CouponTemplateScopeProductGroupName": "Product group name",
+ "CouponTemplateScopeProductId": "Product ID",
+ "CouponTemplateScopeProductSkuId": "Product SKU ID",
+ "CreateCouponTemplateScope": "New",
+ "EditCouponTemplateScope": "Edit",
+ "CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/sl.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/sl.json
index 7df02afc..c3bd397a 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/sl.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/sl.json
@@ -23,9 +23,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
+ "CouponTemplateScope": "Coupon template scope",
+ "CouponTemplateScopeStoreId": "Store ID",
+ "CouponTemplateScopeProductGroupName": "Product group name",
+ "CouponTemplateScopeProductId": "Product ID",
+ "CouponTemplateScopeProductSkuId": "Product SKU ID",
+ "CreateCouponTemplateScope": "New",
+ "EditCouponTemplateScope": "Edit",
+ "CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/tr.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/tr.json
index a6c936ce..58429c9d 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/tr.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/tr.json
@@ -24,9 +24,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
+ "CouponTemplateScope": "Coupon template scope",
+ "CouponTemplateScopeStoreId": "Store ID",
+ "CouponTemplateScopeProductGroupName": "Product group name",
+ "CouponTemplateScopeProductId": "Product ID",
+ "CouponTemplateScopeProductSkuId": "Product SKU ID",
+ "CreateCouponTemplateScope": "New",
+ "EditCouponTemplateScope": "Edit",
+ "CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/vi.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/vi.json
index aa6dd038..0f0fe697 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/vi.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/vi.json
@@ -21,9 +21,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
+ "CouponTemplateScope": "Coupon template scope",
+ "CouponTemplateScopeStoreId": "Store ID",
+ "CouponTemplateScopeProductGroupName": "Product group name",
+ "CouponTemplateScopeProductId": "Product ID",
+ "CouponTemplateScopeProductSkuId": "Product SKU ID",
+ "CreateCouponTemplateScope": "New",
+ "EditCouponTemplateScope": "Edit",
+ "CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
- "CouponType.Normal": "X discount",
- "CouponType.PerMeet": "X discount for every Y",
+ "CouponType.Normal": "Normal (X discount)",
+ "CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hans.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hans.json
index c9874dc5..9dafc79a 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hans.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hans.json
@@ -23,6 +23,14 @@
"CreateCouponTemplate": "新建",
"EditCouponTemplate": "编辑",
"CouponTemplateDeletionConfirmationMessage": "确认删除优惠券模板 {0}?",
+ "CouponTemplateScope": "优惠券使用范围",
+ "CouponTemplateScopeStoreId": "店铺 ID",
+ "CouponTemplateScopeProductGroupName": "商品组",
+ "CouponTemplateScopeProductId": "商品 ID",
+ "CouponTemplateScopeProductSkuId": "商品 SKU ID",
+ "CreateCouponTemplateScope": "新建",
+ "EditCouponTemplateScope": "编辑",
+ "CouponTemplateScopeDeletionConfirmationMessage": "确认删除优惠券模板使用范围 {0}?",
"SuccessfullyDeleted": "删除成功",
"CouponType.Normal": "代金券(满 X 减 Y)",
"CouponType.PerMeet": "满减券(每满 X 减 Y)",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hant.json b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hant.json
index eaf96766..a2ceefda 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hant.json
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hant.json
@@ -23,6 +23,14 @@
"CreateCouponTemplate": "新建",
"EditCouponTemplate": "編輯",
"CouponTemplateDeletionConfirmationMessage": "確認刪除優惠券模板 {0}?",
+ "CouponTemplateScope": "優惠券使用範圍",
+ "CouponTemplateScopeStoreId": "店鋪 ID",
+ "CouponTemplateScopeProductGroupName": "商品組",
+ "CouponTemplateScopeProductId": "商品 ID",
+ "CouponTemplateScopeProductSkuId": "商品 SKU ID",
+ "CreateCouponTemplateScope": "新建",
+ "EditCouponTemplateScope": "編輯",
+ "CouponTemplateScopeDeletionConfirmationMessage": "確認刪除優惠券模板使用範圍 {0}?",
"SuccessfullyDeleted": "刪除成功",
"CouponType.Normal": "代金券(滿 X 減 Y)",
"CouponType.PerMeet": "滿減券(每滿 X 減 Y)",
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/CouponsWebAutoMapperProfile.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/CouponsWebAutoMapperProfile.cs
index 34c88060..ef876d53 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/CouponsWebAutoMapperProfile.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/CouponsWebAutoMapperProfile.cs
@@ -3,6 +3,7 @@ using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTempla
using EasyAbp.EShop.Plugins.Coupons.Coupons.Dtos;
using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.Coupons.Coupon.ViewModels;
using AutoMapper;
+using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels;
using Volo.Abp.AutoMapper;
namespace EasyAbp.EShop.Plugins.Coupons.Web
@@ -14,9 +15,13 @@ namespace EasyAbp.EShop.Plugins.Coupons.Web
/* You can configure your AutoMapper mapping configuration here.
* Alternatively, you can split your mapping configurations
* into multiple profile classes for a better organization. */
+ CreateMap(MemberList.Destination);
CreateMap();
+ CreateMap();
CreateMap()
.Ignore(x => x.Scopes);
+ CreateMap();
+ CreateMap();
CreateMap();
CreateMap();
CreateMap();
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/EditModal.cshtml.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/EditModal.cshtml.cs
index 9deed383..1b072f5c 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/EditModal.cshtml.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/EditModal.cshtml.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
@@ -31,8 +32,16 @@ namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTe
public virtual async Task OnPostAsync()
{
- var dto = ObjectMapper.Map(ViewModel);
- await _service.UpdateAsync(Id, dto);
+ var dto = await _service.GetAsync(Id);
+
+ var updateDto =
+ ObjectMapper.Map(ViewModel);
+
+ updateDto.Scopes =
+ ObjectMapper.Map, List>(dto.Scopes);
+
+ await _service.UpdateAsync(Id, updateDto);
+
return NoContent();
}
}
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/index.js b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/index.js
index 0d24fa76..339bd5d5 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/index.js
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/index.js
@@ -20,6 +20,13 @@ $(function () {
rowAction: {
items:
[
+ {
+ text: l('CouponTemplateScope'),
+ visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),
+ action: function (data) {
+ document.location.href = document.location.origin + '/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/?CouponTemplateId=' + data.record.id;
+ }
+ },
{
text: l('Edit'),
visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml
new file mode 100644
index 00000000..b38c5cbd
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml
@@ -0,0 +1,19 @@
+@page
+@using Microsoft.AspNetCore.Mvc.Localization
+@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal;
+@using EasyAbp.EShop.Plugins.Coupons.Localization
+@inject IHtmlLocalizer L
+@model EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.CreateModalModel
+@{
+ Layout = null;
+}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml.cs
new file mode 100644
index 00000000..ed97aa4c
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
+using EasyAbp.EShop.Plugins.Coupons.CouponTemplates.Dtos;
+using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplate.ViewModels;
+using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels;
+
+namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
+{
+ public class CreateModalModel : CouponsPageModel
+ {
+ [HiddenInput]
+ [BindProperty(SupportsGet = true)]
+ public Guid CouponTemplateId { get; set; }
+
+ [BindProperty]
+ public CreateEditCouponTemplateScopeViewModel ViewModel { get; set; }
+
+ private readonly ICouponTemplateAppService _service;
+
+ public CreateModalModel(ICouponTemplateAppService service)
+ {
+ _service = service;
+ }
+
+ public virtual async Task OnPostAsync()
+ {
+ var dto = await _service.GetAsync(CouponTemplateId);
+
+ var updateDto =
+ ObjectMapper.Map(dto);
+
+ var createScopeDto =
+ ObjectMapper.Map(ViewModel);
+
+ updateDto.Scopes.Add(createScopeDto);
+
+ await _service.UpdateAsync(CouponTemplateId, updateDto);
+
+ return NoContent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml
new file mode 100644
index 00000000..c2a5e4fe
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml
@@ -0,0 +1,20 @@
+@page
+@using EasyAbp.EShop.Plugins.Coupons.Localization
+@using Microsoft.AspNetCore.Mvc.Localization
+@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal;
+@inject IHtmlLocalizer L
+@model EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.EditModalModel
+@{
+ Layout = null;
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml.cs
new file mode 100644
index 00000000..827383c0
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
+using EasyAbp.EShop.Plugins.Coupons.CouponTemplates.Dtos;
+using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplate.ViewModels;
+using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels;
+
+namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
+{
+ public class EditModalModel : CouponsPageModel
+ {
+ [HiddenInput]
+ [BindProperty(SupportsGet = true)]
+ public Guid CouponTemplateId { get; set; }
+
+ [HiddenInput]
+ [BindProperty(SupportsGet = true)]
+ public Guid CouponTemplateScopeId { get; set; }
+
+ [BindProperty]
+ public CreateEditCouponTemplateScopeViewModel ViewModel { get; set; }
+
+ private readonly ICouponTemplateAppService _service;
+
+ public EditModalModel(ICouponTemplateAppService service)
+ {
+ _service = service;
+ }
+
+ public virtual async Task OnGetAsync()
+ {
+ var dto = await _service.GetAsync(CouponTemplateId);
+
+ ViewModel =
+ ObjectMapper.Map(
+ dto.Scopes.First(x => x.Id == CouponTemplateScopeId));
+ }
+
+ public virtual async Task OnPostAsync()
+ {
+ var dto = await _service.GetAsync(CouponTemplateId);
+
+ dto.Scopes.RemoveAll(x => x.Id == CouponTemplateScopeId);
+
+ var updateDto =
+ ObjectMapper.Map(dto);
+
+ updateDto.Scopes.Add(ObjectMapper
+ .Map(ViewModel));
+
+ await _service.UpdateAsync(CouponTemplateId, updateDto);
+
+ return NoContent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml
new file mode 100644
index 00000000..4c41ee91
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml
@@ -0,0 +1,62 @@
+@page
+@using EasyAbp.EShop.Plugins.Coupons.Permissions
+@using Microsoft.AspNetCore.Authorization
+@using Microsoft.AspNetCore.Mvc.Localization
+@using Volo.Abp.AspNetCore.Mvc.UI.Layout
+@using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
+@using EasyAbp.EShop.Plugins.Coupons.Localization
+@using EasyAbp.EShop.Plugins.Coupons.Web.Menus
+@model IndexModel
+@inject IPageLayout PageLayout
+@inject IHtmlLocalizer L
+@inject IAuthorizationService Authorization
+@{
+ PageLayout.Content.Title = L["CouponTemplateScope"].Value;
+ PageLayout.Content.BreadCrumb.Add(L["Menu:CouponTemplate"].Value);
+ PageLayout.Content.MenuItemName = CouponsMenus.CouponTemplate;
+}
+
+@section scripts
+{
+
+}
+@section styles
+{
+
+}
+
+
+
+
+
+
+
+ @L["CouponTemplateScope"]
+
+
+ @if (await Authorization.IsGrantedAsync(CouponsPermissions.CouponTemplate.Update))
+ {
+
+ }
+
+
+
+
+
+
+
+ | @L["Actions"] |
+ @L["CouponTemplateScopeStoreId"] |
+ @L["CouponTemplateScopeProductGroupName"] |
+ @L["CouponTemplateScopeProductId"] |
+ @L["CouponTemplateScopeProductSkuId"] |
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml.cs
new file mode 100644
index 00000000..f8c0a290
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+
+namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
+{
+ public class IndexModel : CouponsPageModel
+ {
+ [BindProperty(SupportsGet = true)]
+ public Guid CouponTemplateId { get; set; }
+
+ public virtual async Task OnGetAsync()
+ {
+ await Task.CompletedTask;
+ }
+ }
+}
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/ViewModels/CreateEditCouponTemplateScopeViewModel.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/ViewModels/CreateEditCouponTemplateScopeViewModel.cs
new file mode 100644
index 00000000..c58f9021
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/ViewModels/CreateEditCouponTemplateScopeViewModel.cs
@@ -0,0 +1,21 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
+
+namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels
+{
+ public class CreateEditCouponTemplateScopeViewModel
+ {
+ [Display(Name = "CouponTemplateScopeStoreId")]
+ public Guid StoreId { get; set; }
+
+ [Display(Name = "CouponTemplateScopeProductGroupName")]
+ public string ProductGroupName { get; set; }
+
+ [Display(Name = "CouponTemplateScopeProductId")]
+ public Guid? ProductId { get; set; }
+
+ [Display(Name = "CouponTemplateScopeProductSkuId")]
+ public Guid? ProductSkuId { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.css b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.css
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.js b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.js
new file mode 100644
index 00000000..c1c07717
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.js
@@ -0,0 +1,85 @@
+$(function () {
+
+ var l = abp.localization.getResource('EasyAbpEShopPluginsCoupons');
+
+ var service = easyAbp.eShop.plugins.coupons.couponTemplates.couponTemplate;
+ var createModal = new abp.ModalManager(abp.appPath + 'EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal');
+ var editModal = new abp.ModalManager(abp.appPath + 'EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal');
+
+ var dataTable = $('#CouponTemplateScopeTable').DataTable(abp.libs.datatables.normalizeConfiguration({
+ processing: true,
+ serverSide: true,
+ paging: true,
+ searching: false,
+ autoWidth: false,
+ scrollCollapse: true,
+ order: [[0, "asc"]],
+ ajax: function (requestData, callback, settings) {
+ if (callback) {
+ service.get(couponTemplateId).then(function (result) {
+ callback({
+ recordsTotal: result.scopes.length,
+ recordsFiltered: result.scopes.length,
+ data: result.scopes
+ });
+ });
+ }
+ },
+ columnDefs: [
+ {
+ rowAction: {
+ items:
+ [
+ {
+ text: l('Edit'),
+ visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),
+ action: function (data) {
+ editModal.open({ couponTemplateId: couponTemplateId, couponTemplateScopeId: data.record.id });
+ }
+ },
+ {
+ text: l('Delete'),
+ visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),
+ confirmMessage: function (data) {
+ return l('CouponTemplateScopeDeletionConfirmationMessage', data.record.id);
+ },
+ action: function (data) {
+ service.get(couponTemplateId).then(function (result) {
+ var updateDto = result;
+ for (var i in updateDto.scopes) {
+ if (updateDto.scopes[i].id === data.record.id) {
+ updateDto.scopes.splice(i, 1);
+ service.update(couponTemplateId, updateDto)
+ .then(function () {
+ abp.notify.info(l('SuccessfullyDeleted'));
+ dataTable.ajax.reload();
+ });
+ break;
+ }
+ }
+ });
+ }
+ }
+ ]
+ }
+ },
+ { data: "storeId" },
+ { data: "productGroupName" },
+ { data: "productId" },
+ { data: "productSkuId" },
+ ]
+ }));
+
+ createModal.onResult(function () {
+ dataTable.ajax.reload();
+ });
+
+ editModal.onResult(function () {
+ dataTable.ajax.reload();
+ });
+
+ $('#NewCouponTemplateScopeButton').click(function (e) {
+ e.preventDefault();
+ createModal.open({ couponTemplateId: couponTemplateId });
+ });
+});
\ No newline at end of file