Browse Source

UI for SKU details editing

pull/143/head
gdlcf88 5 years ago
parent
commit
eea477957c
  1. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
  2. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
  3. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
  4. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
  5. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
  6. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
  7. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
  8. 5
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json
  9. 5
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json
  10. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductDetailViewModel.cs
  11. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs
  12. 14
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml.cs
  13. 62
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/EditModal.cshtml.cs
  14. 23
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/ViewModels/CreateEditSkuProductDetailViewModel.cs
  15. 6
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/ViewModels/EditProductSkuViewModel.cs
  16. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/ProductsWebAutoMapperProfile.cs

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json

@ -14,7 +14,6 @@
"ProductDisplayName": "Display name", "ProductDisplayName": "Display name",
"ProductDisplayOrder": "Display order", "ProductDisplayOrder": "Display order",
"ProductSold": "Sold", "ProductSold": "Sold",
"ProductDetailStoreId": "Store ID",
"ProductDetailDescription": "Description", "ProductDetailDescription": "Description",
"ProductCategory": "Categories", "ProductCategory": "Categories",
"ProductAttribute": "Attribute", "ProductAttribute": "Attribute",
@ -35,8 +34,8 @@
"ProductSkuOrderMaxQuantity": "Maximum quantity per purchase", "ProductSkuOrderMaxQuantity": "Maximum quantity per purchase",
"ProductSkuPaymentExpireIn": "Payment expire in", "ProductSkuPaymentExpireIn": "Payment expire in",
"ProductSkuMediaResources": "Media resources", "ProductSkuMediaResources": "Media resources",
"ProductSkuProductDetailId": "Product detail ID",
"ProductSkuContentDescription": "SKU content", "ProductSkuContentDescription": "SKU content",
"ProductSkuProductDetailDescriptionPlaceholder": "Fallback to details of the product if you keep null here.",
"CreateProductSku": "New", "CreateProductSku": "New",
"EditProductSku": "Edit", "EditProductSku": "Edit",
"ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?", "ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?",

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json

@ -15,7 +15,6 @@
"ProductDisplayName": "Display name", "ProductDisplayName": "Display name",
"ProductDisplayOrder": "Display order", "ProductDisplayOrder": "Display order",
"ProductSold": "Sold", "ProductSold": "Sold",
"ProductDetailStoreId": "Store ID",
"ProductDetailDescription": "Description", "ProductDetailDescription": "Description",
"ProductCategory": "Categories", "ProductCategory": "Categories",
"ProductAttribute": "Attribute", "ProductAttribute": "Attribute",
@ -36,8 +35,8 @@
"ProductSkuOrderMaxQuantity": "Maximum quantity per purchase", "ProductSkuOrderMaxQuantity": "Maximum quantity per purchase",
"ProductSkuPaymentExpireIn": "Payment expire in", "ProductSkuPaymentExpireIn": "Payment expire in",
"ProductSkuMediaResources": "Media resources", "ProductSkuMediaResources": "Media resources",
"ProductSkuProductDetailId": "Product detail ID",
"ProductSkuContentDescription": "SKU content", "ProductSkuContentDescription": "SKU content",
"ProductSkuProductDetailDescriptionPlaceholder": "Fallback to details of the product if you keep null here.",
"CreateProductSku": "New", "CreateProductSku": "New",
"EditProductSku": "Edit", "EditProductSku": "Edit",
"ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?", "ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?",

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json

@ -14,7 +14,6 @@
"ProductDisplayName": "Display name", "ProductDisplayName": "Display name",
"ProductDisplayOrder": "Display order", "ProductDisplayOrder": "Display order",
"ProductSold": "Sold", "ProductSold": "Sold",
"ProductDetailStoreId": "Store ID",
"ProductDetailDescription": "Description", "ProductDetailDescription": "Description",
"ProductCategory": "Categories", "ProductCategory": "Categories",
"ProductAttribute": "Attribute", "ProductAttribute": "Attribute",
@ -35,8 +34,8 @@
"ProductSkuOrderMaxQuantity": "Maximum quantity per purchase", "ProductSkuOrderMaxQuantity": "Maximum quantity per purchase",
"ProductSkuPaymentExpireIn": "Payment expire in", "ProductSkuPaymentExpireIn": "Payment expire in",
"ProductSkuMediaResources": "Media resources", "ProductSkuMediaResources": "Media resources",
"ProductSkuProductDetailId": "Product detail ID",
"ProductSkuContentDescription": "SKU content", "ProductSkuContentDescription": "SKU content",
"ProductSkuProductDetailDescriptionPlaceholder": "Fallback to details of the product if you keep null here.",
"CreateProductSku": "New", "CreateProductSku": "New",
"EditProductSku": "Edit", "EditProductSku": "Edit",
"ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?", "ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?",

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json

@ -14,7 +14,6 @@
"ProductDisplayName": "Display name", "ProductDisplayName": "Display name",
"ProductDisplayOrder": "Display order", "ProductDisplayOrder": "Display order",
"ProductSold": "Sold", "ProductSold": "Sold",
"ProductDetailStoreId": "Store ID",
"ProductDetailDescription": "Description", "ProductDetailDescription": "Description",
"ProductCategory": "Categories", "ProductCategory": "Categories",
"ProductAttribute": "Attribute", "ProductAttribute": "Attribute",
@ -35,8 +34,8 @@
"ProductSkuOrderMaxQuantity": "Maximum quantity per purchase", "ProductSkuOrderMaxQuantity": "Maximum quantity per purchase",
"ProductSkuPaymentExpireIn": "Payment expire in", "ProductSkuPaymentExpireIn": "Payment expire in",
"ProductSkuMediaResources": "Media resources", "ProductSkuMediaResources": "Media resources",
"ProductSkuProductDetailId": "Product detail ID",
"ProductSkuContentDescription": "SKU content", "ProductSkuContentDescription": "SKU content",
"ProductSkuProductDetailDescriptionPlaceholder": "Fallback to details of the product if you keep null here.",
"CreateProductSku": "New", "CreateProductSku": "New",
"EditProductSku": "Edit", "EditProductSku": "Edit",
"ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?", "ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?",

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json

@ -15,7 +15,6 @@
"ProductDisplayName": "Display name", "ProductDisplayName": "Display name",
"ProductDisplayOrder": "Display order", "ProductDisplayOrder": "Display order",
"ProductSold": "Sold", "ProductSold": "Sold",
"ProductDetailStoreId": "Store ID",
"ProductDetailDescription": "Description", "ProductDetailDescription": "Description",
"ProductCategory": "Categories", "ProductCategory": "Categories",
"ProductAttribute": "Attribute", "ProductAttribute": "Attribute",
@ -36,8 +35,8 @@
"ProductSkuOrderMaxQuantity": "Maximum quantity per purchase", "ProductSkuOrderMaxQuantity": "Maximum quantity per purchase",
"ProductSkuPaymentExpireIn": "Payment expire in", "ProductSkuPaymentExpireIn": "Payment expire in",
"ProductSkuMediaResources": "Media resources", "ProductSkuMediaResources": "Media resources",
"ProductSkuProductDetailId": "Product detail ID",
"ProductSkuContentDescription": "SKU content", "ProductSkuContentDescription": "SKU content",
"ProductSkuProductDetailDescriptionPlaceholder": "Fallback to details of the product if you keep null here.",
"CreateProductSku": "New", "CreateProductSku": "New",
"EditProductSku": "Edit", "EditProductSku": "Edit",
"ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?", "ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?",

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json

@ -15,7 +15,6 @@
"ProductDisplayName": "Display name", "ProductDisplayName": "Display name",
"ProductDisplayOrder": "Display order", "ProductDisplayOrder": "Display order",
"ProductSold": "Sold", "ProductSold": "Sold",
"ProductDetailStoreId": "Store ID",
"ProductDetailDescription": "Description", "ProductDetailDescription": "Description",
"ProductCategory": "Categories", "ProductCategory": "Categories",
"ProductAttribute": "Attribute", "ProductAttribute": "Attribute",
@ -36,8 +35,8 @@
"ProductSkuOrderMaxQuantity": "Maximum quantity per purchase", "ProductSkuOrderMaxQuantity": "Maximum quantity per purchase",
"ProductSkuPaymentExpireIn": "Payment expire in", "ProductSkuPaymentExpireIn": "Payment expire in",
"ProductSkuMediaResources": "Media resources", "ProductSkuMediaResources": "Media resources",
"ProductSkuProductDetailId": "Product detail ID",
"ProductSkuContentDescription": "SKU content", "ProductSkuContentDescription": "SKU content",
"ProductSkuProductDetailDescriptionPlaceholder": "Fallback to details of the product if you keep null here.",
"CreateProductSku": "New", "CreateProductSku": "New",
"EditProductSku": "Edit", "EditProductSku": "Edit",
"ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?", "ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?",

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json

@ -14,7 +14,6 @@
"ProductDisplayName": "Display name", "ProductDisplayName": "Display name",
"ProductDisplayOrder": "Display order", "ProductDisplayOrder": "Display order",
"ProductSold": "Sold", "ProductSold": "Sold",
"ProductDetailStoreId": "Store ID",
"ProductDetailDescription": "Description", "ProductDetailDescription": "Description",
"ProductCategory": "Categories", "ProductCategory": "Categories",
"ProductAttribute": "Attribute", "ProductAttribute": "Attribute",
@ -35,8 +34,8 @@
"ProductSkuOrderMaxQuantity": "Maximum quantity per purchase", "ProductSkuOrderMaxQuantity": "Maximum quantity per purchase",
"ProductSkuPaymentExpireIn": "Payment expire in", "ProductSkuPaymentExpireIn": "Payment expire in",
"ProductSkuMediaResources": "Media resources", "ProductSkuMediaResources": "Media resources",
"ProductSkuProductDetailId": "Product detail ID",
"ProductSkuContentDescription": "SKU content", "ProductSkuContentDescription": "SKU content",
"ProductSkuProductDetailDescriptionPlaceholder": "Fallback to details of the product if you keep null here.",
"CreateProductSku": "New", "CreateProductSku": "New",
"EditProductSku": "Edit", "EditProductSku": "Edit",
"ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?", "ProductSkuDeletionConfirmationMessage": "Are you sure to delete the product SKU {0}?",

5
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json

@ -15,8 +15,7 @@
"ProductDisplayName": "商品名称", "ProductDisplayName": "商品名称",
"ProductDisplayOrder": "展示顺序", "ProductDisplayOrder": "展示顺序",
"ProductSold": "已售", "ProductSold": "已售",
"ProductDetailStoreId": "店铺 ID", "ProductDetailDescription": "详情介绍",
"ProductDetailDescription": "内容",
"ProductCategory": "所属类目", "ProductCategory": "所属类目",
"ProductAttribute": "商品属性", "ProductAttribute": "商品属性",
"ProductAttributeNames": "商品属性", "ProductAttributeNames": "商品属性",
@ -36,8 +35,8 @@
"ProductSkuOrderMaxQuantity": "单次最大购买数量", "ProductSkuOrderMaxQuantity": "单次最大购买数量",
"ProductSkuPaymentExpireIn": "支付限时", "ProductSkuPaymentExpireIn": "支付限时",
"ProductSkuMediaResources": "多媒体资源", "ProductSkuMediaResources": "多媒体资源",
"ProductSkuProductDetailId": "商品详情 ID",
"ProductSkuContentDescription": "SKU 描述", "ProductSkuContentDescription": "SKU 描述",
"ProductSkuProductDetailDescriptionPlaceholder": "如果此处不填,将使用商品自身的详情介绍。",
"CreateProductSku": "新建", "CreateProductSku": "新建",
"EditProductSku": "编辑", "EditProductSku": "编辑",
"ProductSkuDeletionConfirmationMessage": "确认删除 SKU {0}?", "ProductSkuDeletionConfirmationMessage": "确认删除 SKU {0}?",

5
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json

@ -15,8 +15,7 @@
"ProductDisplayName": "商品名稱", "ProductDisplayName": "商品名稱",
"ProductDisplayOrder": "展示順序", "ProductDisplayOrder": "展示順序",
"ProductSold": "已售", "ProductSold": "已售",
"ProductDetailStoreId": "店铺 ID", "ProductDetailDescription": "詳情介紹",
"ProductDetailDescription": "內容",
"ProductCategory": "所屬類目", "ProductCategory": "所屬類目",
"ProductAttribute": "商品屬性", "ProductAttribute": "商品屬性",
"ProductAttributeNames": "商品屬性", "ProductAttributeNames": "商品屬性",
@ -36,8 +35,8 @@
"ProductSkuOrderMaxQuantity": "單次最大購買數量", "ProductSkuOrderMaxQuantity": "單次最大購買數量",
"ProductSkuPaymentExpireIn": "支付限時", "ProductSkuPaymentExpireIn": "支付限時",
"ProductSkuMediaResources": "多媒體資源", "ProductSkuMediaResources": "多媒體資源",
"ProductSkuProductDetailId": "商品詳情 ID",
"ProductSkuContentDescription": "SKU 描述", "ProductSkuContentDescription": "SKU 描述",
"ProductSkuProductDetailDescriptionPlaceholder": "如果此處不填,將使用商品自身的詳情介紹。",
"CreateProductSku": "新建", "CreateProductSku": "新建",
"EditProductSku": "編輯", "EditProductSku": "編輯",
"ProductSkuDeletionConfirmationMessage": "確認刪除 SKU {0}?", "ProductSkuDeletionConfirmationMessage": "確認刪除 SKU {0}?",

1
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductDetailViewModel.cs

@ -12,7 +12,6 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewM
public class CreateEditProductDetailViewModel public class CreateEditProductDetailViewModel
{ {
[HiddenInput] [HiddenInput]
[Display(Name = "ProductDetailStoreId")]
public Guid? StoreId { get; set; } public Guid? StoreId { get; set; }
[TextArea(Rows = 4)] [TextArea(Rows = 4)]

4
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs

@ -34,8 +34,8 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewM
[Required] [Required]
[Display(Name = "ProductDisplayName")] [Display(Name = "ProductDisplayName")]
public string DisplayName { get; set; } public string DisplayName { get; set; }
public CreateEditProductDetailViewModel ProductDetail { get; set; } public CreateEditProductDetailViewModel ProductDetail { get; set; } = new();
[Required] [Required]
[Placeholder("ProductAttributeNamesPlaceholder")] [Placeholder("ProductAttributeNamesPlaceholder")]

14
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml.cs

@ -2,6 +2,8 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductDetails.Dtos;
using EasyAbp.EShop.Products.ProductInventories; using EasyAbp.EShop.Products.ProductInventories;
using EasyAbp.EShop.Products.ProductInventories.Dtos; using EasyAbp.EShop.Products.ProductInventories.Dtos;
using EasyAbp.EShop.Products.Products; using EasyAbp.EShop.Products.Products;
@ -27,13 +29,16 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku
public Dictionary<string, ICollection<SelectListItem>> Attributes { get; set; } public Dictionary<string, ICollection<SelectListItem>> Attributes { get; set; }
private readonly IProductInventoryAppService _productInventoryAppService; private readonly IProductInventoryAppService _productInventoryAppService;
private readonly IProductDetailAppService _productDetailAppService;
private readonly IProductAppService _productAppService; private readonly IProductAppService _productAppService;
public CreateModalModel( public CreateModalModel(
IProductInventoryAppService productInventoryAppService, IProductInventoryAppService productInventoryAppService,
IProductDetailAppService productDetailAppService,
IProductAppService productAppService) IProductAppService productAppService)
{ {
_productInventoryAppService = productInventoryAppService; _productInventoryAppService = productInventoryAppService;
_productDetailAppService = productDetailAppService;
_productAppService = productAppService; _productAppService = productAppService;
} }
@ -57,6 +62,15 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku
createDto.AttributeOptionIds = SelectedAttributeOptionIdDict.Values.ToList(); createDto.AttributeOptionIds = SelectedAttributeOptionIdDict.Values.ToList();
if (ProductSku.ProductDetail.HasContent())
{
var detail = await _productDetailAppService.CreateAsync(
ObjectMapper.Map<CreateEditSkuProductDetailViewModel, CreateUpdateProductDetailDto>(ProductSku
.ProductDetail));
createDto.ProductDetailId = detail.Id;
}
var skuDto = await _productAppService.CreateSkuAsync(ProductId, createDto); var skuDto = await _productAppService.CreateSkuAsync(ProductId, createDto);
await _productInventoryAppService.UpdateAsync(new UpdateProductInventoryDto await _productInventoryAppService.UpdateAsync(new UpdateProductInventoryDto

62
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/EditModal.cshtml.cs

@ -1,12 +1,12 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductDetails.Dtos;
using EasyAbp.EShop.Products.Products; using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Products.Dtos; using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku.ViewModels; using EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku.ViewModels;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku
{ {
@ -24,25 +24,71 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku
public EditProductSkuViewModel ProductSku { get; set; } public EditProductSkuViewModel ProductSku { get; set; }
private readonly IProductAppService _productAppService; private readonly IProductAppService _productAppService;
private readonly IProductDetailAppService _productDetailAppService;
public EditModalModel(IProductAppService productAppService) public EditModalModel(
IProductAppService productAppService,
IProductDetailAppService productDetailAppService)
{ {
_productAppService = productAppService; _productAppService = productAppService;
_productDetailAppService = productDetailAppService;
} }
public virtual async Task OnGetAsync() public virtual async Task OnGetAsync()
{ {
var product = await _productAppService.GetAsync(ProductId); var product = await _productAppService.GetAsync(ProductId);
var sku = product.ProductSkus.Single(x => x.Id == ProductSkuId);
ProductSku = ProductSku = ObjectMapper.Map<ProductSkuDto, EditProductSkuViewModel>(sku);
ObjectMapper.Map<ProductSkuDto, EditProductSkuViewModel>(
product.ProductSkus.Single(x => x.Id == ProductSkuId)); if (sku.ProductDetailId.HasValue)
{
var detailDto = await _productDetailAppService.GetAsync(sku.ProductDetailId.Value);
ProductSku.ProductDetail = new CreateEditSkuProductDetailViewModel
{
StoreId = detailDto.StoreId,
Description = detailDto.Description
};
}
} }
public virtual async Task<IActionResult> OnPostAsync() public virtual async Task<IActionResult> OnPostAsync()
{ {
await _productAppService.UpdateSkuAsync(ProductId, ProductSkuId, var originalProduct = await _productAppService.GetAsync(ProductId);
ObjectMapper.Map<EditProductSkuViewModel, UpdateProductSkuDto>(ProductSku)); var originalSku = originalProduct.ProductSkus.Single(x => x.Id == ProductSkuId);
var updateProductSkuDto = ObjectMapper.Map<EditProductSkuViewModel, UpdateProductSkuDto>(ProductSku);
if (ProductSku.ProductDetail.HasContent())
{
if (originalSku.ProductDetailId.HasValue)
{
var detail = await _productDetailAppService.GetAsync(originalSku.ProductDetailId.Value);
await _productDetailAppService.UpdateAsync(detail.Id,
ObjectMapper.Map<CreateEditSkuProductDetailViewModel, CreateUpdateProductDetailDto>(
ProductSku.ProductDetail));
updateProductSkuDto.ProductDetailId = detail.Id;
}
else
{
var detail = await _productDetailAppService.CreateAsync(
ObjectMapper.Map<CreateEditSkuProductDetailViewModel, CreateUpdateProductDetailDto>(
ProductSku.ProductDetail));
updateProductSkuDto.ProductDetailId = detail.Id;
}
}
else if (originalSku.ProductDetailId.HasValue)
{
await _productDetailAppService.DeleteAsync(originalSku.ProductDetailId.Value);
updateProductSkuDto.ProductDetailId = null;
}
await _productAppService.UpdateSkuAsync(ProductId, ProductSkuId, updateProductSkuDto);
return NoContent(); return NoContent();
} }

23
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/ViewModels/CreateEditSkuProductDetailViewModel.cs

@ -0,0 +1,23 @@
using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku.ViewModels
{
public class CreateEditSkuProductDetailViewModel
{
[HiddenInput]
public Guid? StoreId { get; set; }
[TextArea(Rows = 4)]
[Display(Name = "ProductDetailDescription")]
[Placeholder("ProductSkuProductDetailDescriptionPlaceholder")]
public string Description { get; set; }
public bool HasContent()
{
return !Description.IsNullOrEmpty();
}
}
}

6
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/ViewModels/EditProductSkuViewModel.cs

@ -42,9 +42,7 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku.Vi
[Display(Name = "ProductSkuMediaResources")] [Display(Name = "ProductSkuMediaResources")]
public string MediaResources { get; set; } public string MediaResources { get; set; }
[HiddenInput] public CreateEditSkuProductDetailViewModel ProductDetail { get; set; } = new();
[Display(Name = "ProductSkuProductDetailId")]
public Guid? ProductDetailId { get; set; }
} }
} }

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/ProductsWebAutoMapperProfile.cs

@ -51,16 +51,23 @@ namespace EasyAbp.EShop.Products.Web
CreateMap<ProductDetailDto, CreateEditProductDetailViewModel>(); CreateMap<ProductDetailDto, CreateEditProductDetailViewModel>();
CreateMap<CreateEditProductDetailViewModel, CreateUpdateProductDetailDto>() CreateMap<CreateEditProductDetailViewModel, CreateUpdateProductDetailDto>()
.Ignore(dto => dto.ExtraProperties); .Ignore(dto => dto.ExtraProperties);
CreateMap<CreateEditSkuProductDetailViewModel, CreateUpdateProductDetailDto>()
.Ignore(dto => dto.ExtraProperties);
CreateMap<ProductAttributeDto, CreateEditProductAttributeViewModel>(); CreateMap<ProductAttributeDto, CreateEditProductAttributeViewModel>();
CreateMap<CreateEditProductAttributeViewModel, CreateUpdateProductAttributeDto>() CreateMap<CreateEditProductAttributeViewModel, CreateUpdateProductAttributeDto>()
.Ignore(dto => dto.ExtraProperties); .Ignore(dto => dto.ExtraProperties);
CreateMap<CreateProductSkuViewModel, CreateProductSkuDto>() CreateMap<CreateProductSkuViewModel, CreateProductSkuDto>()
.Ignore(dto => dto.ExtraProperties) .Ignore(dto => dto.ExtraProperties)
.Ignore(dto => dto.ProductDetailId)
.ForSourceMember(model => model.ProductDetail, opt => opt.DoNotValidate())
.ForSourceMember(model => model.Inventory, opt => opt.DoNotValidate()) .ForSourceMember(model => model.Inventory, opt => opt.DoNotValidate())
.Ignore(dto => dto.AttributeOptionIds); .Ignore(dto => dto.AttributeOptionIds);
CreateMap<EditProductSkuViewModel, UpdateProductSkuDto>() CreateMap<EditProductSkuViewModel, UpdateProductSkuDto>()
.Ignore(dto => dto.ProductDetailId)
.ForSourceMember(model => model.ProductDetail, opt => opt.DoNotValidate())
.Ignore(dto => dto.ExtraProperties); .Ignore(dto => dto.ExtraProperties);
CreateMap<ProductSkuDto, EditProductSkuViewModel>() CreateMap<ProductSkuDto, EditProductSkuViewModel>()
.Ignore(x => x.ProductDetail)
.ForSourceMember(dto => dto.AttributeOptionIds, opt => opt.DoNotValidate()) .ForSourceMember(dto => dto.AttributeOptionIds, opt => opt.DoNotValidate())
.ForSourceMember(dto => dto.Inventory, opt => opt.DoNotValidate()) .ForSourceMember(dto => dto.Inventory, opt => opt.DoNotValidate())
.ForSourceMember(dto => dto.Sold, opt => opt.DoNotValidate()); .ForSourceMember(dto => dto.Sold, opt => opt.DoNotValidate());

Loading…
Cancel
Save