mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2025-01-31 17:40:05 +08:00
product:商品规格,调整成商品属性,避免和 sku 概念冲突
This commit is contained in:
parent
373188b58d
commit
fac3e7c726
@ -28,7 +28,7 @@ public class ProductSkuRespDTO {
|
||||
private String spuName;
|
||||
|
||||
/**
|
||||
* 规格值数组,JSON 格式
|
||||
* 属性数组,JSON 格式
|
||||
*/
|
||||
private List<Property> properties;
|
||||
/**
|
||||
|
@ -22,13 +22,13 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode BRAND_DISABLED = new ErrorCode(1008002001, "品牌不存在");
|
||||
ErrorCode BRAND_NAME_EXISTS = new ErrorCode(1008002002, "品牌名称已存在");
|
||||
|
||||
// ========== 商品规格名称 1008003000 ==========
|
||||
ErrorCode PROPERTY_NOT_EXISTS = new ErrorCode(1008003000, "规格名称不存在");
|
||||
ErrorCode PROPERTY_EXISTS = new ErrorCode(1008003001, "规格名称已存在");
|
||||
// ========== 商品属性项 1008003000 ==========
|
||||
ErrorCode PROPERTY_NOT_EXISTS = new ErrorCode(1008003000, "属性项不存在");
|
||||
ErrorCode PROPERTY_EXISTS = new ErrorCode(1008003001, "属性项的名称已存在");
|
||||
|
||||
// ========== 规格值 1008004000 ==========
|
||||
ErrorCode PROPERTY_VALUE_NOT_EXISTS = new ErrorCode(1008004000, "规格值不存在");
|
||||
ErrorCode PROPERTY_VALUE_EXISTS = new ErrorCode(1008004001, "规格值已存在");
|
||||
// ========== 商品属性值 1008004000 ==========
|
||||
ErrorCode PROPERTY_VALUE_NOT_EXISTS = new ErrorCode(1008004000, "属性值不存在");
|
||||
ErrorCode PROPERTY_VALUE_EXISTS = new ErrorCode(1008004001, "属性值的名称已存在");
|
||||
|
||||
// ========== 商品 SPU 1008005000 ==========
|
||||
ErrorCode SPU_NOT_EXISTS = new ErrorCode(1008005000, "商品 SPU 不存在");
|
||||
@ -36,7 +36,7 @@ public interface ErrorCodeConstants {
|
||||
// ========== 商品 SKU 1008006000 ==========
|
||||
ErrorCode SKU_NOT_EXISTS = new ErrorCode(1008006000, "商品 SKU 不存在");
|
||||
ErrorCode SKU_PROPERTIES_DUPLICATED = new ErrorCode(1008006001, "商品 SKU 的属性组合存在重复");
|
||||
ErrorCode SPU_ATTR_NUMBERS_MUST_BE_EQUALS = new ErrorCode(1008006002, "一个 SPU 下的每个 SKU,其规格数必须一致");
|
||||
ErrorCode SPU_ATTR_NUMBERS_MUST_BE_EQUALS = new ErrorCode(1008006002, "一个 SPU 下的每个 SKU,其属性项必须一致");
|
||||
ErrorCode SPU_SKU_NOT_DUPLICATE = new ErrorCode(1008006003, "一个 SPU 下的每个 SKU,必须不重复");
|
||||
ErrorCode SKU_STOCK_NOT_ENOUGH = new ErrorCode(1008006004, "商品 SKU 库存不足");
|
||||
|
||||
|
@ -21,11 +21,11 @@ public enum ProductSpuSpecTypeEnum implements IntArrayValuable {
|
||||
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ProductSpuSpecTypeEnum::getType).toArray();
|
||||
|
||||
/**
|
||||
* 规格
|
||||
* 规格类型
|
||||
*/
|
||||
private final Integer type;
|
||||
/**
|
||||
* 规格名
|
||||
* 规格名称
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
|
@ -18,7 +18,7 @@ import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Api(tags = "管理后台 - 规格名称")
|
||||
@Api(tags = "管理后台 - 商品属性项")
|
||||
@RestController
|
||||
@RequestMapping("/product/property")
|
||||
@Validated
|
||||
@ -28,14 +28,14 @@ public class ProductPropertyController {
|
||||
private ProductPropertyService productPropertyService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("创建规格名称")
|
||||
@ApiOperation("创建属性项")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:create')")
|
||||
public CommonResult<Long> createProperty(@Valid @RequestBody ProductPropertyCreateReqVO createReqVO) {
|
||||
return success(productPropertyService.createProperty(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@ApiOperation("更新规格名称")
|
||||
@ApiOperation("更新属性项")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:update')")
|
||||
public CommonResult<Boolean> updateProperty(@Valid @RequestBody ProductPropertyUpdateReqVO updateReqVO) {
|
||||
productPropertyService.updateProperty(updateReqVO);
|
||||
@ -43,7 +43,7 @@ public class ProductPropertyController {
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@ApiOperation("删除规格名称")
|
||||
@ApiOperation("删除属性项")
|
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
|
||||
@PreAuthorize("@ss.hasPermission('product:property:delete')")
|
||||
public CommonResult<Boolean> deleteProperty(@RequestParam("id") Long id) {
|
||||
@ -52,7 +52,7 @@ public class ProductPropertyController {
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@ApiOperation("获得规格名称")
|
||||
@ApiOperation("获得属性项")
|
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
|
||||
@PreAuthorize("@ss.hasPermission('product:property:query')")
|
||||
public CommonResult<ProductPropertyRespVO> getProperty(@RequestParam("id") Long id) {
|
||||
@ -60,21 +60,21 @@ public class ProductPropertyController {
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@ApiOperation("获得规格名称列表")
|
||||
@ApiOperation("获得属性项列表")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:query')")
|
||||
public CommonResult<List<ProductPropertyRespVO>> getPropertyList(@Valid ProductPropertyListReqVO listReqVO) {
|
||||
return success(productPropertyService.getPropertyList(listReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("获得规格名称分页")
|
||||
@ApiOperation("获得属性项分页")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:query')")
|
||||
public CommonResult<PageResult<ProductPropertyRespVO>> getPropertyPage(@Valid ProductPropertyPageReqVO pageVO) {
|
||||
return success(productPropertyService.getPropertyPage(pageVO));
|
||||
}
|
||||
|
||||
@GetMapping("/listAndValue")
|
||||
@ApiOperation("获得规格名称列表")
|
||||
@ApiOperation("获得属性项列表")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:query')")
|
||||
public CommonResult<List<ProductPropertyAndValueRespVO>> getPropertyAndValueList(@Valid ProductPropertyListReqVO listReqVO) {
|
||||
return success(productPropertyService.getPropertyAndValueList(listReqVO));
|
||||
|
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.product.controller.admin.property;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyPageReqVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueCreateReqVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValuePageReqVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO;
|
||||
@ -20,7 +19,7 @@ import javax.validation.Valid;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Api(tags = "管理后台 - 规格值名称")
|
||||
@Api(tags = "管理后台 - 商品属性值")
|
||||
@RestController
|
||||
@RequestMapping("/product/property/value")
|
||||
@Validated
|
||||
@ -30,14 +29,14 @@ public class ProductPropertyValueController {
|
||||
private ProductPropertyValueService productPropertyValueService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("创建规格名称")
|
||||
@ApiOperation("创建属性值")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:create')")
|
||||
public CommonResult<Long> createProperty(@Valid @RequestBody ProductPropertyValueCreateReqVO createReqVO) {
|
||||
return success(productPropertyValueService.createPropertyValue(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@ApiOperation("更新规格名称")
|
||||
@ApiOperation("更新属性值")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:update')")
|
||||
public CommonResult<Boolean> updateProperty(@Valid @RequestBody ProductPropertyValueUpdateReqVO updateReqVO) {
|
||||
productPropertyValueService.updatePropertyValue(updateReqVO);
|
||||
@ -45,7 +44,7 @@ public class ProductPropertyValueController {
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@ApiOperation("删除规格名称")
|
||||
@ApiOperation("删除属性值")
|
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
|
||||
@PreAuthorize("@ss.hasPermission('product:property:delete')")
|
||||
public CommonResult<Boolean> deleteProperty(@RequestParam("id") Long id) {
|
||||
@ -54,7 +53,7 @@ public class ProductPropertyValueController {
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@ApiOperation("获得规格名称")
|
||||
@ApiOperation("获得属性值")
|
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
|
||||
@PreAuthorize("@ss.hasPermission('product:property:query')")
|
||||
public CommonResult<ProductPropertyValueRespVO> getProperty(@RequestParam("id") Long id) {
|
||||
@ -62,7 +61,7 @@ public class ProductPropertyValueController {
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("获得规格名称分页")
|
||||
@ApiOperation("获得属性值分页")
|
||||
@PreAuthorize("@ss.hasPermission('product:property:query')")
|
||||
public CommonResult<PageResult<ProductPropertyValueRespVO>> getPropertyValuePage(@Valid ProductPropertyValuePageReqVO pageVO) {
|
||||
return success(productPropertyValueService.getPropertyValueListPage(pageVO));
|
||||
|
@ -7,28 +7,23 @@ import lombok.ToString;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: ProductPropertyViewRespVO
|
||||
* @Author: franky
|
||||
* @CreateDate: 2022/7/5 21:29
|
||||
* @Version: 1.0.0
|
||||
*/
|
||||
@ApiModel("管理后台 - 规格名称详情展示 Request VO")
|
||||
// TODO 芋艿:看看怎么删除
|
||||
@ApiModel("管理后台 - 商品属性详情展示 Request VO")
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class ProductPropertyViewRespVO {
|
||||
|
||||
@ApiModelProperty(value = "规格名称id", example = "1")
|
||||
@ApiModelProperty(value = "属性项 id", example = "1")
|
||||
public Long propertyId;
|
||||
|
||||
@ApiModelProperty(value = "规格名称", example = "内存")
|
||||
@ApiModelProperty(value = "属性项的名字", example = "内存")
|
||||
public String name;
|
||||
|
||||
@ApiModelProperty(value = "规格属性值集合", example = "[{\"v1\":11,\"v2\":\"64G\"},{\"v1\":10,\"v2\":\"32G\"}]")
|
||||
@ApiModelProperty(value = "属性值数组")
|
||||
public List<Tuple2> propertyValues;
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "规格属性值元组")
|
||||
@ApiModel(value = "属性值元组")
|
||||
public static class Tuple2 {
|
||||
private final long id;
|
||||
private final String name;
|
||||
|
@ -10,20 +10,20 @@ import lombok.ToString;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@ApiModel("管理后台 - 规格 + 规格值 Response VO")
|
||||
@ApiModel("管理后台 - 商品属性项 + 属性值 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProductPropertyAndValueRespVO extends ProductPropertyBaseVO {
|
||||
|
||||
@ApiModelProperty(value = "规格的编号", required = true, example = "1024")
|
||||
@ApiModelProperty(value = "属性项的编号", required = true, example = "1024")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "创建时间", required = true)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 规格值的集合
|
||||
* 属性值的集合
|
||||
*/
|
||||
private List<ProductPropertyValueRespVO> values;
|
||||
|
||||
|
@ -7,14 +7,14 @@ import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 规格名称 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||
* 商品属性项 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
|
||||
*/
|
||||
@Data
|
||||
public class ProductPropertyBaseVO {
|
||||
|
||||
@ApiModelProperty(value = "规格名称", required = true, example = "颜色")
|
||||
@NotBlank(message = "规格名称不能为空")
|
||||
@ApiModelProperty(value = "名称", required = true, example = "颜色")
|
||||
@NotBlank(message = "名称不能为空")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "备注", example = "颜色")
|
||||
|
@ -5,7 +5,7 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
@ApiModel("管理后台 - 规格名称创建 Request VO")
|
||||
@ApiModel("管理后台 - 属性项创建 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
|
@ -5,12 +5,12 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
@ApiModel("管理后台 - 规格名称 List Request VO")
|
||||
@ApiModel("管理后台 - 属性项 List Request VO")
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class ProductPropertyListReqVO {
|
||||
|
||||
@ApiModelProperty(value = "规格名称", example = "颜色")
|
||||
@ApiModelProperty(value = "名称", example = "颜色")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举")
|
||||
|
@ -12,13 +12,13 @@ import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@ApiModel("管理后台 - 规格名称分页 Request VO")
|
||||
@ApiModel("管理后台 - 属性项 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProductPropertyPageReqVO extends PageParam {
|
||||
|
||||
@ApiModelProperty(value = "规格名称", example = "颜色")
|
||||
@ApiModelProperty(value = "名称", example = "颜色")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举")
|
||||
|
@ -8,13 +8,13 @@ import lombok.ToString;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ApiModel("管理后台 - 规格 + 规格值 Response VO")
|
||||
@ApiModel("管理后台 - 属性项 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProductPropertyRespVO extends ProductPropertyBaseVO {
|
||||
|
||||
@ApiModelProperty(value = "规格的编号", required = true, example = "1024")
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "创建时间", required = true)
|
||||
|
@ -1,12 +1,14 @@
|
||||
package cn.iocoder.yudao.module.product.controller.admin.property.vo.property;
|
||||
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueCreateReqVO;
|
||||
import lombok.*;
|
||||
import io.swagger.annotations.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.List;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
@ApiModel("管理后台 - 规格名称更新 Request VO")
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@ApiModel("管理后台 - 属性项更新 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
|
@ -7,18 +7,18 @@ import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 规格值 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||
* 属性值 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
|
||||
*/
|
||||
@Data
|
||||
public class ProductPropertyValueBaseVO {
|
||||
|
||||
@ApiModelProperty(value = "规格编号", required = true, example = "1024")
|
||||
@NotNull(message = "规格编号不能为空")
|
||||
@ApiModelProperty(value = "属性项的编号", required = true, example = "1024")
|
||||
@NotNull(message = "属性项的编号不能为空")
|
||||
private Long propertyId;
|
||||
|
||||
@ApiModelProperty(value = "规格值名字", required = true, example = "红色")
|
||||
@NotEmpty(message = "规格值名字不能为空")
|
||||
@ApiModelProperty(value = "名称", required = true, example = "红色")
|
||||
@NotEmpty(message = "名称名字不能为空")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举")
|
||||
|
@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.product.controller.admin.property.vo.value;
|
||||
import lombok.*;
|
||||
import io.swagger.annotations.*;
|
||||
|
||||
@ApiModel("管理后台 - 规格值创建 Request VO")
|
||||
@ApiModel("管理后台 - 商品属性值创建 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
|
@ -6,23 +6,17 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.Date;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@ApiModel("管理后台 - 规格名称值分页 Request VO")
|
||||
@ApiModel("管理后台 - 商品属性值分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProductPropertyValuePageReqVO extends PageParam {
|
||||
|
||||
@ApiModelProperty(value = "规格id", example = "1024")
|
||||
@ApiModelProperty(value = "属性项的编号", example = "1024")
|
||||
private String propertyId;
|
||||
|
||||
@ApiModelProperty(value = "规格值", example = "红色")
|
||||
@ApiModelProperty(value = "名称", example = "红色")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举")
|
||||
|
@ -8,13 +8,13 @@ import lombok.ToString;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ApiModel("管理后台 - 规格值 Response VO")
|
||||
@ApiModel("管理后台 - 商品属性值 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProductPropertyValueRespVO extends ProductPropertyValueBaseVO {
|
||||
|
||||
@ApiModelProperty(value = "主键", required = true, example = "10")
|
||||
@ApiModelProperty(value = "编号", required = true, example = "10")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
|
@ -4,7 +4,7 @@ import lombok.*;
|
||||
import io.swagger.annotations.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@ApiModel("管理后台 - 规格值更新 Request VO")
|
||||
@ApiModel("管理后台 - 商品属性值更新 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
|
@ -55,7 +55,7 @@ public class ProductSkuBaseVO {
|
||||
@ApiModelProperty(value = "商品体积", example = "1024", notes = "单位:m^3 平米")
|
||||
private Double volume;
|
||||
|
||||
@ApiModel("规格值")
|
||||
@ApiModel("商品属性")
|
||||
@Data
|
||||
public static class Property {
|
||||
|
||||
|
@ -18,7 +18,7 @@ public class ProductSkuCreateOrUpdateReqVO extends ProductSkuBaseVO {
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 规格值数组
|
||||
* 属性数组
|
||||
*/
|
||||
private List<Property> properties;
|
||||
|
||||
|
@ -22,7 +22,7 @@ public class ProductSkuRespVO extends ProductSkuBaseVO {
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 规格值数组
|
||||
* 属性数组
|
||||
*/
|
||||
private List<Property> properties;
|
||||
|
||||
|
@ -35,22 +35,22 @@ public class ProductSpuDetailRespVO extends ProductSpuBaseVO {
|
||||
public static class Sku extends ProductSkuBaseVO {
|
||||
|
||||
/**
|
||||
* 规格的数组
|
||||
* 属性数组
|
||||
*/
|
||||
private List<ProductSpuDetailRespVO.Property> properties;
|
||||
|
||||
}
|
||||
|
||||
@ApiModel(value = "管理后台 - 商品规格的详细 Response VO")
|
||||
@ApiModel(value = "管理后台 - 商品属性的详细 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public static class Property extends ProductSkuBaseVO.Property {
|
||||
|
||||
@ApiModelProperty(value = "规格的名字", required = true, example = "颜色")
|
||||
@ApiModelProperty(value = "属性项的名字", required = true, example = "颜色")
|
||||
private String propertyName;
|
||||
|
||||
@ApiModelProperty(value = "规格值的名字", required = true, example = "蓝色")
|
||||
@ApiModelProperty(value = "属性值的名称", required = true, example = "蓝色")
|
||||
private String valueName;
|
||||
|
||||
}
|
||||
@ -59,7 +59,7 @@ public class ProductSpuDetailRespVO extends ProductSpuBaseVO {
|
||||
private Long categoryId;
|
||||
|
||||
// TODO @芋艿:在瞅瞅~
|
||||
@ApiModelProperty(value = "规格属性修改和详情展示组合", example = "[{\"propertyId\":2,\"name\":\"内存\",\"propertyValues\":[{\"v1\":11,\"v2\":\"64G\"},{\"v1\":10,\"v2\":\"32G\"}]},{\"propertyId\":3,\"name\":\"尺寸\",\"propertyValues\":[{\"v1\":16,\"v2\":\"6.1\"},{\"v1\":15,\"v2\":\"5.7\"}]}]")
|
||||
@ApiModelProperty(value = "属性修改和详情展示组合", example = "[{\"propertyId\":2,\"name\":\"内存\",\"propertyValues\":[{\"v1\":11,\"v2\":\"64G\"},{\"v1\":10,\"v2\":\"32G\"}]},{\"propertyId\":3,\"name\":\"尺寸\",\"propertyValues\":[{\"v1\":16,\"v2\":\"6.1\"},{\"v1\":15,\"v2\":\"5.7\"}]}]")
|
||||
private List<ProductPropertyViewRespVO> productPropertyViews;
|
||||
|
||||
}
|
||||
|
@ -5,16 +5,14 @@ import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.Pro
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyCreateReqVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyRespVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyUpdateReqVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO;
|
||||
import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO;
|
||||
import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyValueDO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 规格名称 Convert
|
||||
* 属性项 Convert
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
|
@ -1,9 +1,6 @@
|
||||
package cn.iocoder.yudao.module.product.convert.propertyvalue;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueCreateReqVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueUpdateReqVO;
|
||||
@ -11,8 +8,10 @@ import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyVa
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 规格值 Convert
|
||||
* 属性值 Convert
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
|
@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
/**
|
||||
* 规格名称 DO
|
||||
* 商品属性项 DO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@ -28,7 +28,7 @@ public class ProductPropertyDO extends BaseDO {
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 规格名称
|
||||
* 名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
|
@ -9,7 +9,7 @@ import lombok.*;
|
||||
|
||||
|
||||
/**
|
||||
* 规格值 DO
|
||||
* 商品属性值 DO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@ -29,13 +29,13 @@ public class ProductPropertyValueDO extends BaseDO {
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 规格键编号
|
||||
* 属性项的编号
|
||||
*
|
||||
* 关联 {@link ProductPropertyDO#getId()}
|
||||
*/
|
||||
private Long propertyId;
|
||||
/**
|
||||
* 规格值名字
|
||||
* 名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ public class ProductSkuDO extends BaseDO {
|
||||
*/
|
||||
private String spuName;
|
||||
/**
|
||||
* 规格值数组,JSON 格式
|
||||
* 属性数组,JSON 格式
|
||||
*/
|
||||
@TableField(typeHandler = PropertyTypeHandler.class)
|
||||
private List<Property> properties;
|
||||
|
@ -7,13 +7,6 @@ import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.Pro
|
||||
import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 规格名称 Mapper
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProductPropertyMapper extends BaseMapperX<ProductPropertyDO> {
|
||||
|
||||
|
@ -9,11 +9,6 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 规格值 Mapper
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProductPropertyValueMapper extends BaseMapperX<ProductPropertyValueDO> {
|
||||
|
||||
|
@ -1,23 +1,21 @@
|
||||
package cn.iocoder.yudao.module.product.service.property;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyRespVO;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.*;
|
||||
import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 规格名称 Service 接口
|
||||
* 商品属性项 Service 接口
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
public interface ProductPropertyService {
|
||||
|
||||
/**
|
||||
* 创建规格名称
|
||||
* 创建属性项
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
@ -25,23 +23,23 @@ public interface ProductPropertyService {
|
||||
Long createProperty(@Valid ProductPropertyCreateReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新规格名称
|
||||
* 更新属性项
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateProperty(@Valid ProductPropertyUpdateReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除规格名称
|
||||
* 删除属性项
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteProperty(Long id);
|
||||
|
||||
/**
|
||||
* 获得规格名称列表
|
||||
* 获得属性项列表
|
||||
* @param listReqVO 集合查询
|
||||
* @return 规格名称集合
|
||||
* @return 属性项集合
|
||||
*/
|
||||
List<ProductPropertyRespVO> getPropertyList(ProductPropertyListReqVO listReqVO);
|
||||
|
||||
@ -49,31 +47,31 @@ public interface ProductPropertyService {
|
||||
* 获取属性名称分页
|
||||
*
|
||||
* @param pageReqVO 分页条件
|
||||
* @return 规格名称分页
|
||||
* @return 属性项分页
|
||||
*/
|
||||
PageResult<ProductPropertyRespVO> getPropertyPage(ProductPropertyPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获得指定编号的规格名称
|
||||
* 获得指定编号的属性项
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 规格名称
|
||||
* @return 属性项
|
||||
*/
|
||||
ProductPropertyRespVO getProperty(Long id);
|
||||
|
||||
/**
|
||||
* 根据规格属性编号的集合,获得对应的规格 + 规格值的集合
|
||||
* 根据属性项的编号的集合,获得对应的属性项数组
|
||||
*
|
||||
* @param ids 规格编号的集合
|
||||
* @return 对应的规格
|
||||
* @param ids 属性项的编号的集合
|
||||
* @return 属性项数组
|
||||
*/
|
||||
List<ProductPropertyRespVO> getPropertyList(Collection<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得规格名称 + 值的列表
|
||||
* 获得属性项 + 值的列表
|
||||
*
|
||||
* @param listReqVO 列表查询
|
||||
* @return 规格名称 + 值的列表
|
||||
* @return 属性项 + 值的列表
|
||||
*/
|
||||
List<ProductPropertyAndValueRespVO> getPropertyAndValueList(ProductPropertyListReqVO listReqVO);
|
||||
|
||||
|
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.product.service.property;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.*;
|
||||
import cn.iocoder.yudao.module.product.convert.property.ProductPropertyConvert;
|
||||
@ -19,14 +18,13 @@ import javax.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.PROPERTY_EXISTS;
|
||||
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.PROPERTY_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 规格名称 Service 实现类
|
||||
* 商品属性项 Service 实现类
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@ -58,7 +56,7 @@ public class ProductPropertyServiceImpl implements ProductPropertyService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateProperty(ProductPropertyUpdateReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
this.validatePropertyExists(updateReqVO.getId());
|
||||
validatePropertyExists(updateReqVO.getId());
|
||||
ProductPropertyDO productPropertyDO = productPropertyMapper.selectByName(updateReqVO.getName());
|
||||
if (productPropertyDO != null && !productPropertyDO.getId().equals(updateReqVO.getId())) {
|
||||
throw exception(PROPERTY_EXISTS);
|
||||
@ -71,10 +69,10 @@ public class ProductPropertyServiceImpl implements ProductPropertyService {
|
||||
@Override
|
||||
public void deleteProperty(Long id) {
|
||||
// 校验存在
|
||||
this.validatePropertyExists(id);
|
||||
validatePropertyExists(id);
|
||||
// 删除
|
||||
productPropertyMapper.deleteById(id);
|
||||
//同步删除属性值
|
||||
// 同步删除属性值
|
||||
productPropertyValueMapper.deletePropertyValueByPropertyId(id);
|
||||
}
|
||||
|
||||
@ -93,7 +91,6 @@ public class ProductPropertyServiceImpl implements ProductPropertyService {
|
||||
|
||||
@Override
|
||||
public PageResult<ProductPropertyRespVO> getPropertyPage(ProductPropertyPageReqVO pageReqVO) {
|
||||
//获取属性列表
|
||||
PageResult<ProductPropertyDO> pageResult = productPropertyMapper.selectPage(pageReqVO);
|
||||
return ProductPropertyConvert.INSTANCE.convertPage(pageResult);
|
||||
}
|
||||
@ -104,11 +101,13 @@ public class ProductPropertyServiceImpl implements ProductPropertyService {
|
||||
return ProductPropertyConvert.INSTANCE.convert(property);
|
||||
}
|
||||
|
||||
// TODO @芋艿:丢到 Controller
|
||||
@Override
|
||||
public List<ProductPropertyRespVO> getPropertyList(Collection<Long> ids) {
|
||||
return ProductPropertyConvert.INSTANCE.convertList(productPropertyMapper.selectBatchIds(ids));
|
||||
}
|
||||
|
||||
// TODO @芋艿:丢到 Controller
|
||||
@Override
|
||||
public List<ProductPropertyAndValueRespVO> getPropertyAndValueList(ProductPropertyListReqVO listReqVO) {
|
||||
List<ProductPropertyRespVO> propertyList = getPropertyList(listReqVO);
|
||||
|
@ -9,16 +9,14 @@ import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.Produc
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 规格值 Service 接口
|
||||
* </p>
|
||||
* 商品属性值 Service 接口
|
||||
*
|
||||
* @author LuoWenFeng
|
||||
*/
|
||||
public interface ProductPropertyValueService {
|
||||
|
||||
/**
|
||||
* 创建规格值
|
||||
* 创建属性值
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
@ -26,40 +24,40 @@ public interface ProductPropertyValueService {
|
||||
Long createPropertyValue(ProductPropertyValueCreateReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新规格值
|
||||
* 更新属性值
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updatePropertyValue(ProductPropertyValueUpdateReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除规格值
|
||||
* 删除属性值
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deletePropertyValue(Long id);
|
||||
|
||||
/**
|
||||
* 获得规格值
|
||||
* 获得属性值
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 规格名称
|
||||
* @return 属性值
|
||||
*/
|
||||
ProductPropertyValueRespVO getPropertyValue(Long id);
|
||||
|
||||
/**
|
||||
* 获得规格值
|
||||
* 获得属性值
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 规格名称
|
||||
* @return 属性值
|
||||
*/
|
||||
List<ProductPropertyValueRespVO> getPropertyValueListByPropertyId(List<Long> id);
|
||||
|
||||
/**
|
||||
* 获取规格值 分页
|
||||
* 获取属性值的分页
|
||||
*
|
||||
* @param pageReqVO 查询条件
|
||||
* @return
|
||||
* @return 属性值的分页
|
||||
*/
|
||||
PageResult<ProductPropertyValueRespVO> getPropertyValueListPage(ProductPropertyValuePageReqVO pageReqVO);
|
||||
}
|
||||
|
@ -14,13 +14,12 @@ import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.PROPERTY_VALUE_EXISTS;
|
||||
|
||||
/**
|
||||
* 规格值 Service 实现类
|
||||
* 商品属性值 Service 实现类
|
||||
*
|
||||
* @author LuoWenFeng
|
||||
*/
|
||||
|
@ -0,0 +1,33 @@
|
||||
package cn.iocoder.yudao.module.product.service.property.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 商品属性项的明细 Response BO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Data
|
||||
public class ProductPropertyValueDetailRespBO {
|
||||
|
||||
/**
|
||||
* 属性的编号
|
||||
*/
|
||||
private Long propertyId;
|
||||
|
||||
/**
|
||||
* 属性的名称
|
||||
*/
|
||||
private String propertyName;
|
||||
|
||||
/**
|
||||
* 属性值的编号
|
||||
*/
|
||||
private Long valueId;
|
||||
|
||||
/**
|
||||
* 属性值的名称
|
||||
*/
|
||||
private String valueName;
|
||||
|
||||
}
|
@ -84,15 +84,17 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
||||
return;
|
||||
}
|
||||
|
||||
// 1、校验规格属性存在
|
||||
Set<Long> propertyIds = skus.stream().filter(p -> p.getProperties() != null).flatMap(p -> p.getProperties().stream()) // 遍历多个 Property 属性
|
||||
.map(ProductSkuBaseVO.Property::getPropertyId).collect(Collectors.toSet()); // 将每个 Property 转换成对应的 propertyId,最后形成集合
|
||||
// 1、校验属性项存在
|
||||
Set<Long> propertyIds = skus.stream().filter(p -> p.getProperties() != null)
|
||||
.flatMap(p -> p.getProperties().stream()) // 遍历多个 Property 属性
|
||||
.map(ProductSkuBaseVO.Property::getPropertyId) // 将每个 Property 转换成对应的 propertyId,最后形成集合
|
||||
.collect(Collectors.toSet());
|
||||
List<ProductPropertyRespVO> propertyList = productPropertyService.getPropertyList(propertyIds);
|
||||
if (propertyList.size() != propertyIds.size()) {
|
||||
throw exception(PROPERTY_NOT_EXISTS);
|
||||
}
|
||||
|
||||
// 2. 校验,一个 SKU 下,没有重复的规格。校验方式是,遍历每个 SKU ,看看是否有重复的规格 propertyId
|
||||
// 2. 校验,一个 SKU 下,没有重复的属性。校验方式是,遍历每个 SKU ,看看是否有重复的属性 propertyId
|
||||
Map<Long, ProductPropertyValueRespVO> propertyValueMap = CollectionUtils.convertMap(productPropertyValueService.getPropertyValueListByPropertyId(new ArrayList<>(propertyIds)), ProductPropertyValueRespVO::getId);
|
||||
skus.forEach(sku -> {
|
||||
Set<Long> skuPropertyIds = convertSet(sku.getProperties(), propertyItem -> propertyValueMap.get(propertyItem.getValueId()).getPropertyId());
|
||||
@ -101,7 +103,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
||||
}
|
||||
});
|
||||
|
||||
// 3. 再校验,每个 Sku 的规格值的数量,是一致的。
|
||||
// 3. 再校验,每个 Sku 的属性值的数量,是一致的。
|
||||
int attrValueIdsSize = skus.get(0).getProperties().size();
|
||||
for (int i = 1; i < skus.size(); i++) {
|
||||
if (attrValueIdsSize != skus.get(i).getProperties().size()) {
|
||||
@ -151,7 +153,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
||||
public void updateSkus(Long spuId, String spuName, List<ProductSkuCreateOrUpdateReqVO> skus) {
|
||||
// 查询 SPU 下已经存在的 SKU 的集合
|
||||
List<ProductSkuDO> existsSkus = productSkuMapper.selectListBySpuId(spuId);
|
||||
// 构建规格与 SKU 的映射关系;
|
||||
// 构建属性与 SKU 的映射关系;
|
||||
// TODO @luowenfeng: 可以下 existsSkuMap2; 会简洁一点; 另外, 可以考虑抽一个小方法, 用于 Properties 生成一个串; 这样 177 也可以复用了
|
||||
Map<String, Long> existsSkuMap = existsSkus.stream()
|
||||
.map(v -> {
|
||||
|
@ -133,7 +133,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
|
||||
if (null != spu) {
|
||||
List<ProductSpuDetailRespVO.Sku> skuReqs = ProductSkuConvert.INSTANCE.convertList03(productSkuService.getSkusBySpuId(id));
|
||||
respVO.setSkus(skuReqs);
|
||||
// 组合 sku 规格属性
|
||||
// 组合 sku 属性
|
||||
if (spu.getSpecType().equals(ProductSpuSpecTypeEnum.DISABLE.getType())) {
|
||||
List<ProductSkuRespVO.Property> properties = new ArrayList<>();
|
||||
for (ProductSpuDetailRespVO.Sku productSkuRespVO : skuReqs) {
|
||||
|
@ -265,7 +265,7 @@ public class PriceServiceImpl implements PriceService {
|
||||
|
||||
private void calculatePriceByRewardActivity(PriceCalculateRespDTO priceCalculate, List<PriceCalculateRespDTO.OrderItem> orderItems,
|
||||
RewardActivityDO rewardActivity) {
|
||||
// 获得最大匹配的满减送活动的规格
|
||||
// 获得最大匹配的满减送活动的规则
|
||||
RewardActivityDO.Rule rule = getLastMatchRewardActivityRule(rewardActivity, orderItems);
|
||||
if (rule == null) {
|
||||
// 获取不到的情况下,记录不满足的优惠明细
|
||||
@ -288,11 +288,11 @@ public class PriceServiceImpl implements PriceService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得最大匹配的满减送活动的规格
|
||||
* 获得最大匹配的满减送活动的规则
|
||||
*
|
||||
* @param rewardActivity 满减送活动
|
||||
* @param orderItems 商品项
|
||||
* @return 匹配的活动规格
|
||||
* @return 匹配的活动规则
|
||||
*/
|
||||
private RewardActivityDO.Rule getLastMatchRewardActivityRule(RewardActivityDO rewardActivity,
|
||||
List<PriceCalculateRespDTO.OrderItem> orderItems) {
|
||||
|
@ -72,7 +72,7 @@ public class TradeAfterSaleBaseVO {
|
||||
@NotNull(message = "商品 SKU 编号不能为空")
|
||||
private Long skuId;
|
||||
|
||||
@ApiModelProperty(value = "规格值数组")
|
||||
@ApiModelProperty(value = "商品属性数组")
|
||||
private List<ProductPropertyValueDetailRespVO> properties;
|
||||
|
||||
@ApiModelProperty(value = "商品图片", example = "https://www.iocoder.cn/2.png")
|
||||
|
@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("管理后台 - 商品规格 + 规格值的明细 Response VO")
|
||||
@ApiModel("管理后台 - 商品属性值的明细 Response VO")
|
||||
@Data
|
||||
public class ProductPropertyValueDetailRespVO {
|
||||
|
||||
|
@ -1,11 +1,14 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageItemRespVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
|
||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -15,8 +18,11 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
|
||||
@Api(tags = "管理后台 - 交易订单")
|
||||
@ -33,7 +39,19 @@ public class TradeOrderController {
|
||||
@ApiOperation("获得交易订单分页")
|
||||
@PreAuthorize("@ss.hasPermission('trade:order:query')")
|
||||
public CommonResult<PageResult<TradeOrderPageItemRespVO>> getOrderPage(TradeOrderPageReqVO reqVO) {
|
||||
// 查询订单
|
||||
PageResult<TradeOrderDO> pageResult = tradeOrderService.getOrderPage(reqVO);
|
||||
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||
return success(PageResult.empty());
|
||||
}
|
||||
|
||||
// 查询订单项
|
||||
List<TradeOrderItemDO> orderItems = tradeOrderService.getOrderItems(
|
||||
convertSet(pageResult.getList(), TradeOrderDO::getId));
|
||||
// 查询属性
|
||||
Set<Long> propertyValueIds = TradeOrderConvert.INSTANCE.convertPropertyValueIds(orderItems);
|
||||
|
||||
|
||||
return success(null);
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ public class TradeOrderPageItemRespVO {
|
||||
public static class Item extends TradeOrderItemBaseVO {
|
||||
|
||||
/**
|
||||
* 规格值数组
|
||||
* 属性数组
|
||||
*/
|
||||
private List<ProductPropertyValueDetailRespVO> properties;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.validation.InEnum;
|
||||
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
@ -8,7 +9,7 @@ import lombok.Data;
|
||||
|
||||
@ApiModel("管理后台 - 交易订单的分页 Request VO")
|
||||
@Data
|
||||
public class TradeOrderPageReqVO {
|
||||
public class TradeOrderPageReqVO extends PageParam {
|
||||
|
||||
@ApiModelProperty(value = "订单状态", example = "1", notes = "参见 TradeOrderStatusEnum 枚举")
|
||||
@InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}")
|
||||
|
@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("用户 App - 商品规格 + 规格值的明细 Response VO")
|
||||
@ApiModel("用户 App - 商品属性值的明细 Response VO")
|
||||
@Data
|
||||
public class AppProductPropertyValueDetailRespVO {
|
||||
|
||||
|
@ -27,7 +27,7 @@ public class AppProductSkuBaseRespVO {
|
||||
private Integer stock;
|
||||
|
||||
/**
|
||||
* 规格数组
|
||||
* 属性数组
|
||||
*/
|
||||
private List<AppProductPropertyValueDetailRespVO> properties;
|
||||
|
||||
|
@ -56,7 +56,7 @@ public class AppTradeOrderGetCreateInfoRespVO {
|
||||
*/
|
||||
private String picURL;
|
||||
// /**
|
||||
// * 规格值数组
|
||||
// * 属性数组
|
||||
// */
|
||||
// private List<ProductAttrKeyValueRespVO> attrs; // TODO 后面改下
|
||||
/**
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.trade.convert.order;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
|
||||
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
|
||||
@ -18,8 +19,11 @@ import org.mapstruct.Mapping;
|
||||
import org.mapstruct.Mappings;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime;
|
||||
@ -88,4 +92,14 @@ public interface TradeOrderConvert {
|
||||
return createReqDTO;
|
||||
}
|
||||
|
||||
default Set<Long> convertPropertyValueIds(List<TradeOrderItemDO> orderItems) {
|
||||
if (CollUtil.isEmpty(orderItems)) {
|
||||
return new HashSet<>();
|
||||
}
|
||||
return orderItems.stream().filter(item -> item.getProperties() != null)
|
||||
.flatMap(p -> p.getProperties().stream()) // 遍历多个 Property 属性
|
||||
.map(TradeOrderItemDO.Property::getValueId) // 将每个 Property 转换成对应的 propertyId,最后形成集合
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ public class TradeAfterSaleDO extends BaseDO {
|
||||
*/
|
||||
private Long skuId;
|
||||
/**
|
||||
* 规格值数组,JSON 格式
|
||||
* 属性数组,JSON 格式
|
||||
*
|
||||
* 冗余 {@link TradeOrderItemDO#getProperties()}
|
||||
*/
|
||||
|
@ -63,7 +63,7 @@ public class TradeOrderItemDO extends BaseDO {
|
||||
*/
|
||||
private Long skuId;
|
||||
/**
|
||||
* 规格值数组,JSON 格式
|
||||
* 属性数组,JSON 格式
|
||||
*
|
||||
* 冗余 ProductSkuDO 的 properties 字段
|
||||
*/
|
||||
|
@ -1,6 +1,9 @@
|
||||
package cn.iocoder.yudao.module.trade.dal.mysql.order;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@ -14,8 +17,12 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
|
||||
}
|
||||
|
||||
default TradeOrderDO selectByIdAndUserId(Long id, Long userId) {
|
||||
return selectOne(TradeOrderDO::getId, id,
|
||||
TradeOrderDO::getUserId, userId);
|
||||
return selectOne(TradeOrderDO::getId, id, TradeOrderDO::getUserId, userId);
|
||||
}
|
||||
|
||||
default PageResult<TradeOrderDO> selectPage(TradeOrderPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<TradeOrderDO>()
|
||||
.eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus()));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,12 @@ import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreate
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap;
|
||||
|
||||
/**
|
||||
* 交易订单 Service 接口
|
||||
*
|
||||
@ -90,4 +96,23 @@ public interface TradeOrderService {
|
||||
void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus,
|
||||
Integer newAfterSaleStatus, Integer refundPrice);
|
||||
|
||||
/**
|
||||
* 查询交易订单项
|
||||
*
|
||||
* @param ids 交易订单项编号数组
|
||||
* @return 交易订单项数组
|
||||
*/
|
||||
List<TradeOrderItemDO> getOrderItems(Collection<Long> ids);
|
||||
|
||||
/**
|
||||
* 查询交易订单项 Map
|
||||
*
|
||||
* @param ids 交易订单项编号数组
|
||||
* @return 交易订单项 Map
|
||||
*/
|
||||
default Map<Long, List<TradeOrderItemDO>> getOrderItemMap(Collection<Long> ids) {
|
||||
List<TradeOrderItemDO> orderItems = getOrderItems(ids);
|
||||
return convertMultiMap(orderItems, TradeOrderItemDO::getOrderId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -43,10 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
||||
@ -423,7 +420,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
||||
|
||||
@Override
|
||||
public PageResult<TradeOrderDO> getOrderPage(TradeOrderPageReqVO reqVO) {
|
||||
return null;
|
||||
return tradeOrderMapper.selectPage(reqVO);
|
||||
}
|
||||
|
||||
// =================== Order Item ===================
|
||||
@ -475,6 +472,11 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
||||
// TODO 芋艿:未来如果有分佣,需要更新相关分佣订单为已失效
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TradeOrderItemDO> getOrderItems(Collection<Long> ids) {
|
||||
return tradeOrderItemMapper.selectBatchIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断指定订单的所有订单项,是不是都售后成功
|
||||
*
|
||||
|
@ -1,6 +1,8 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 创建规格名称
|
||||
// ------------------------ 属性项 -------------------
|
||||
|
||||
// 创建属性项
|
||||
export function createProperty(data) {
|
||||
return request({
|
||||
url: '/product/property/create',
|
||||
@ -9,7 +11,7 @@ export function createProperty(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 更新规格名称
|
||||
// 更新属性项
|
||||
export function updateProperty(data) {
|
||||
return request({
|
||||
url: '/product/property/update',
|
||||
@ -18,7 +20,7 @@ export function updateProperty(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 删除规格名称
|
||||
// 删除属性项
|
||||
export function deleteProperty(id) {
|
||||
return request({
|
||||
url: '/product/property/delete?id=' + id,
|
||||
@ -26,7 +28,7 @@ export function deleteProperty(id) {
|
||||
})
|
||||
}
|
||||
|
||||
// 获得规格名称
|
||||
// 获得属性项
|
||||
export function getProperty(id) {
|
||||
return request({
|
||||
url: '/product/property/get?id=' + id,
|
||||
@ -34,7 +36,7 @@ export function getProperty(id) {
|
||||
})
|
||||
}
|
||||
|
||||
// 获得规格名称分页
|
||||
// 获得属性项分页
|
||||
export function getPropertyPage(query) {
|
||||
return request({
|
||||
url: '/product/property/page',
|
||||
@ -43,7 +45,7 @@ export function getPropertyPage(query) {
|
||||
})
|
||||
}
|
||||
|
||||
// 获得规格名称列表
|
||||
// 获得属性项列表
|
||||
export function getPropertyList(query) {
|
||||
return request({
|
||||
url: '/product/property/list',
|
||||
@ -52,7 +54,7 @@ export function getPropertyList(query) {
|
||||
})
|
||||
}
|
||||
|
||||
// 获得规格名称列表
|
||||
// 获得属性项列表
|
||||
export function getPropertyListAndValue(query) {
|
||||
return request({
|
||||
url: '/product/property/listAndValue',
|
||||
@ -62,7 +64,7 @@ export function getPropertyListAndValue(query) {
|
||||
}
|
||||
|
||||
|
||||
// 导出规格名称 Excel
|
||||
// 导出属性项 Excel
|
||||
export function exportPropertyExcel(query) {
|
||||
return request({
|
||||
url: '/product/property/export-excel',
|
||||
@ -72,9 +74,9 @@ export function exportPropertyExcel(query) {
|
||||
})
|
||||
}
|
||||
|
||||
// ------------------------ 规格名称值 -------------------
|
||||
// ------------------------ 属性值 -------------------
|
||||
|
||||
// 获得规格名称值分页
|
||||
// 获得属性值分页
|
||||
export function getPropertyValuePage(query) {
|
||||
return request({
|
||||
url: '/product/property/value/page',
|
||||
@ -83,7 +85,7 @@ export function getPropertyValuePage(query) {
|
||||
})
|
||||
}
|
||||
|
||||
// 获得规格名称值
|
||||
// 获得属性值
|
||||
export function getPropertyValue(id) {
|
||||
return request({
|
||||
url: '/product/property/value/get?id=' + id,
|
||||
@ -92,7 +94,7 @@ export function getPropertyValue(id) {
|
||||
}
|
||||
|
||||
|
||||
// 创建规格名称值
|
||||
// 创建属性值
|
||||
export function createPropertyValue(data) {
|
||||
return request({
|
||||
url: '/product/property/value/create',
|
||||
@ -101,7 +103,7 @@ export function createPropertyValue(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 更新规格名称值
|
||||
// 更新属性值
|
||||
export function updatePropertyValue(data) {
|
||||
return request({
|
||||
url: '/product/property/value/update',
|
||||
@ -110,7 +112,7 @@ export function updatePropertyValue(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 删除规格名称
|
||||
// 删除属性值
|
||||
export function deletePropertyValue(id) {
|
||||
return request({
|
||||
url: '/product/property/value/delete?id=' + id,
|
||||
|
@ -106,7 +106,7 @@ export const constantRoutes = [
|
||||
path: 'value/:propertyId(\\d+)',
|
||||
component: (resolve) => require(['@/views/mall/product/property/value'], resolve),
|
||||
name: 'PropertyValue',
|
||||
meta: {title: '规格数据', icon: '', activeMenu: '/product/property'}
|
||||
meta: {title: '商品属性值', icon: '', activeMenu: '/product/property'}
|
||||
}
|
||||
]
|
||||
}, {
|
||||
|
@ -3,8 +3,8 @@
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="规格名称" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入规格名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择开启状态" clearable size="small">
|
||||
@ -33,8 +33,8 @@
|
||||
|
||||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="规格id" align="center" prop="id" />
|
||||
<el-table-column label="规格名称" align="center" :show-overflow-tooltip="true">
|
||||
<el-table-column label="编号" align="center" prop="id" />
|
||||
<el-table-column label="名称" align="center" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<router-link :to="'/property/value/' + scope.row.id" class="link-type">
|
||||
<span>{{ scope.row.name }}</span>
|
||||
@ -68,13 +68,13 @@
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="规格id" prop="id" v-if="form.id != null">
|
||||
<el-form-item label="编号" prop="id" v-if="form.id != null">
|
||||
<el-input v-model="form.id" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入规格名称" />
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开启状态" prop="status">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
|
||||
:key="dict.value" :label="parseInt(dict.value)">{{ dict.label }}
|
||||
@ -110,7 +110,7 @@ export default {
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 规格名称列表
|
||||
// 属性项列表
|
||||
list: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
@ -134,7 +134,7 @@ export default {
|
||||
// 表单校验
|
||||
rules: {
|
||||
name: [
|
||||
{ required: true, message: "规格不能为空", trigger: "blur" }
|
||||
{ required: true, message: "名称不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "blur" }
|
||||
@ -185,7 +185,7 @@ export default {
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加规格";
|
||||
this.title = "添加属性项";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
@ -194,7 +194,7 @@ export default {
|
||||
getProperty(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改规格";
|
||||
this.title = "修改属性项";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
@ -223,7 +223,7 @@ export default {
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const id = row.id;
|
||||
this.$modal.confirm('是否确认删除规格名称为"' + row.name + '"的数据项?').then(function() {
|
||||
this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() {
|
||||
return deleteProperty(id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
@ -237,11 +237,11 @@ export default {
|
||||
params.pageNo = undefined;
|
||||
params.pageSize = undefined;
|
||||
// 执行导出
|
||||
this.$modal.confirm('是否确认导出所有规格名称数据项?').then(() => {
|
||||
this.$modal.confirm('是否确认导出所有名称数据项?').then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportPropertyExcel(params);
|
||||
}).then(response => {
|
||||
this.$download.excel(response, '规格名称.xls');
|
||||
this.$download.excel(response, '名称.xls');
|
||||
this.exportLoading = false;
|
||||
}).catch(() => {});
|
||||
},
|
||||
|
@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="规格名称" prop="propertyId">
|
||||
<el-form-item label="属性项" prop="propertyId">
|
||||
<el-select v-model="queryParams.propertyId">
|
||||
<el-option v-for="item in propertyOptions" :key="item.id" :label="item.id +'-'+ item.name" :value="item.id"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格值" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入规格值" clearable @keyup.enter.native="handleQuery"/>
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="状态" clearable size="small">
|
||||
@ -35,8 +35,8 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="dataList">
|
||||
<el-table-column label="规格值id" align="center" prop="id"/>
|
||||
<el-table-column label="规格值" align="center" prop="name"/>
|
||||
<el-table-column label="编号" align="center" prop="id"/>
|
||||
<el-table-column label="名称" align="center" prop="name"/>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
|
||||
@ -66,11 +66,11 @@
|
||||
<!-- 添加或修改参数配置对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="90px">
|
||||
<el-form-item label="规格值编码">
|
||||
<el-form-item label="属性项">
|
||||
<el-input v-model="form.propertyId" :disabled="true"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格值" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入数据标签"/>
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入名称"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
@ -137,7 +137,7 @@ export default {
|
||||
// 表单校验
|
||||
rules: {
|
||||
name: [
|
||||
{required: true, message: "规格值不能为空", trigger: "blur"}
|
||||
{required: true, message: "名称不能为空", trigger: "blur"}
|
||||
],
|
||||
status: [
|
||||
{required: true, message: "状态不能为空", trigger: "blur"}
|
||||
@ -206,7 +206,7 @@ export default {
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加规格值";
|
||||
this.title = "添加属性值";
|
||||
this.form.propertyId = this.queryParams.propertyId;
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
@ -216,7 +216,7 @@ export default {
|
||||
getPropertyValue(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改规格值";
|
||||
this.title = "修改属性值";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
|
Loading…
Reference in New Issue
Block a user