mall:完善商品品牌的前后端实现
parent
efd4942129
commit
fa9823161e
|
@ -24,64 +24,6 @@ SET NAMES utf8mb4;
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for product_brand
|
-- Table structure for product_brand
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `product_brand`;
|
|
||||||
CREATE TABLE `product_brand`
|
|
||||||
(
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '品牌编号',
|
|
||||||
`category_id` bigint NOT NULL COMMENT '分类编号',
|
|
||||||
`name` varchar(255) NOT NULL COMMENT '品牌名称',
|
|
||||||
`banner_url` varchar(255) NOT NULL COMMENT '品牌图片',
|
|
||||||
`sort` int DEFAULT '0' COMMENT '品牌排序',
|
|
||||||
`description` varchar(1024) DEFAULT NULL COMMENT '品牌描述',
|
|
||||||
`status` tinyint NOT NULL COMMENT '状态',
|
|
||||||
`creator` varchar(64) DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE=InnoDB COMMENT='品牌';
|
|
||||||
|
|
||||||
-- TODO 父级菜单的 id 处理: 2000 、 2001
|
|
||||||
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES (2000, '商城', '', 1, 1, 0, '/mall', 'merchant', NULL, 0);
|
|
||||||
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES (2001, '商品', '', 1, 1, 2000, 'product', 'dict', NULL, 0);
|
|
||||||
-- 商品分类 菜单 SQL
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('分类管理', '', 2, 0, 2001, 'category', '', 'mall/product/category/index', 0);
|
|
||||||
-- 按钮父菜单ID
|
|
||||||
SELECT @parentId := LAST_INSERT_ID();
|
|
||||||
-- 按钮 SQL
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('分类查询', 'product:category:query', 3, 1, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('分类创建', 'product:category:create', 3, 2, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('分类更新', 'product:category:update', 3, 3, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('分类删除', 'product:category:delete', 3, 4, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('分类导出', 'product:category:export', 3, 5, @parentId, '', '', '', 0);
|
|
||||||
|
|
||||||
-- 品牌管理 菜单 SQL
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('品牌管理', '', 2, 1, 2001, 'brand', '', 'mall/product/brand/index', 0);
|
|
||||||
-- 按钮父菜单ID
|
|
||||||
SELECT @parentId := LAST_INSERT_ID();
|
|
||||||
-- 按钮 SQL
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('品牌查询', 'product:brand:query', 3, 1, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('品牌创建', 'product:brand:create', 3, 2, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('品牌更新', 'product:brand:update', 3, 3, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('品牌删除', 'product:brand:delete', 3, 4, @parentId, '', '', '', 0);
|
|
||||||
INSERT INTO `system_menu`(`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`)
|
|
||||||
VALUES ('品牌导出', 'product:brand:export', 3, 5, @parentId, '', '', '', 0);
|
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for market_activity
|
-- Table structure for market_activity
|
||||||
|
|
|
@ -17,7 +17,7 @@ public interface ErrorCodeConstants {
|
||||||
ErrorCode PRODUCT_CATEGORY_DISABLED = new ErrorCode(1008001004, "商品分类({})已禁用,无法使用");
|
ErrorCode PRODUCT_CATEGORY_DISABLED = new ErrorCode(1008001004, "商品分类({})已禁用,无法使用");
|
||||||
|
|
||||||
// ========== 品牌相关编号 1008002000 ==========
|
// ========== 品牌相关编号 1008002000 ==========
|
||||||
ErrorCode BRAND_NOT_EXISTS = new ErrorCode(1008002000, "品牌不存在");
|
ErrorCode PRODUCT_BRAND_NOT_EXISTS = new ErrorCode(1008002000, "品牌不存在");
|
||||||
|
|
||||||
// ========== 规格名称 1008003000 ==========
|
// ========== 规格名称 1008003000 ==========
|
||||||
ErrorCode PROPERTY_NOT_EXISTS = new ErrorCode(1008003000, "规格名称不存在");
|
ErrorCode PROPERTY_NOT_EXISTS = new ErrorCode(1008003000, "规格名称不存在");
|
||||||
|
|
|
@ -5,9 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.*;
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.*;
|
||||||
import cn.iocoder.yudao.module.product.convert.brand.BrandConvert;
|
import cn.iocoder.yudao.module.product.convert.brand.ProductBrandConvert;
|
||||||
import cn.iocoder.yudao.module.product.dal.dataobject.brand.BrandDO;
|
import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
|
||||||
import cn.iocoder.yudao.module.product.service.brand.BrandService;
|
import cn.iocoder.yudao.module.product.service.brand.ProductBrandService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
@ -24,26 +24,26 @@ import java.util.List;
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
|
|
||||||
@Api(tags = "管理后台 - 品牌")
|
@Api(tags = "管理后台 - 商品品牌")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/product/brand")
|
@RequestMapping("/product/brand")
|
||||||
@Validated
|
@Validated
|
||||||
public class BrandController {
|
public class ProductBrandController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private BrandService brandService;
|
private ProductBrandService brandService;
|
||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@ApiOperation("创建品牌")
|
@ApiOperation("创建品牌")
|
||||||
@PreAuthorize("@ss.hasPermission('product:brand:create')")
|
@PreAuthorize("@ss.hasPermission('product:brand:create')")
|
||||||
public CommonResult<Long> createBrand(@Valid @RequestBody BrandCreateReqVO createReqVO) {
|
public CommonResult<Long> createBrand(@Valid @RequestBody ProductBrandCreateReqVO createReqVO) {
|
||||||
return success(brandService.createBrand(createReqVO));
|
return success(brandService.createProductBrand(createReqVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@ApiOperation("更新品牌")
|
@ApiOperation("更新品牌")
|
||||||
@PreAuthorize("@ss.hasPermission('product:brand:update')")
|
@PreAuthorize("@ss.hasPermission('product:brand:update')")
|
||||||
public CommonResult<Boolean> updateBrand(@Valid @RequestBody BrandUpdateReqVO updateReqVO) {
|
public CommonResult<Boolean> updateBrand(@Valid @RequestBody ProductBrandUpdateReqVO updateReqVO) {
|
||||||
brandService.updateBrand(updateReqVO);
|
brandService.updateBrand(updateReqVO);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
@ -61,29 +61,17 @@ public class BrandController {
|
||||||
@ApiOperation("获得品牌")
|
@ApiOperation("获得品牌")
|
||||||
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
|
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
|
||||||
@PreAuthorize("@ss.hasPermission('product:brand:query')")
|
@PreAuthorize("@ss.hasPermission('product:brand:query')")
|
||||||
public CommonResult<BrandRespVO> getBrand(@RequestParam("id") Long id) {
|
public CommonResult<ProductBrandRespVO> getBrand(@RequestParam("id") Long id) {
|
||||||
BrandDO brand = brandService.getBrand(id);
|
ProductBrandDO brand = brandService.getBrand(id);
|
||||||
return success(BrandConvert.INSTANCE.convert(brand));
|
return success(ProductBrandConvert.INSTANCE.convert(brand));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@ApiOperation("获得品牌分页")
|
@ApiOperation("获得品牌分页")
|
||||||
@PreAuthorize("@ss.hasPermission('product:brand:query')")
|
@PreAuthorize("@ss.hasPermission('product:brand:query')")
|
||||||
public CommonResult<PageResult<BrandRespVO>> getBrandPage(@Valid BrandPageReqVO pageVO) {
|
public CommonResult<PageResult<ProductBrandRespVO>> getBrandPage(@Valid ProductBrandPageReqVO pageVO) {
|
||||||
PageResult<BrandDO> pageResult = brandService.getBrandPage(pageVO);
|
PageResult<ProductBrandDO> pageResult = brandService.getBrandPage(pageVO);
|
||||||
return success(BrandConvert.INSTANCE.convertPage(pageResult));
|
return success(ProductBrandConvert.INSTANCE.convertPage(pageResult));
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
|
||||||
@ApiOperation("导出品牌 Excel")
|
|
||||||
@PreAuthorize("@ss.hasPermission('product:brand:export')")
|
|
||||||
@OperateLog(type = EXPORT)
|
|
||||||
public void exportBrandExcel(@Valid BrandExportReqVO exportReqVO,
|
|
||||||
HttpServletResponse response) throws IOException {
|
|
||||||
List<BrandDO> list = brandService.getBrandList(exportReqVO);
|
|
||||||
// 导出 Excel
|
|
||||||
List<BrandExcelVO> datas = BrandConvert.INSTANCE.convertList02(list);
|
|
||||||
ExcelUtils.write(response, "品牌.xls", "数据", BrandExcelVO.class, datas);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,45 +0,0 @@
|
||||||
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.annotations.*;
|
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
|
|
||||||
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 品牌 Excel VO
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class BrandExcelVO {
|
|
||||||
|
|
||||||
@ExcelProperty("品牌编号")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@ExcelProperty("分类编号")
|
|
||||||
private Long categoryId;
|
|
||||||
|
|
||||||
@ExcelProperty("品牌名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@ExcelProperty("品牌图片")
|
|
||||||
private String bannerUrl;
|
|
||||||
|
|
||||||
@ExcelProperty("品牌排序")
|
|
||||||
private Integer sort;
|
|
||||||
|
|
||||||
@ExcelProperty("品牌描述")
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
@ExcelProperty(value = "状态", converter = DictConvert.class)
|
|
||||||
@DictFormat("common_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
|
|
||||||
private Integer status;
|
|
||||||
|
|
||||||
@ExcelProperty("创建时间")
|
|
||||||
private Date createTime;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.annotations.*;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
|
||||||
|
|
||||||
@ApiModel(value = "管理后台 - 品牌 Excel 导出 Request VO", description = "参数和 BrandPageReqVO 是一致的")
|
|
||||||
@Data
|
|
||||||
public class BrandExportReqVO {
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "分类编号", example = "1")
|
|
||||||
private Long categoryId;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "品牌名称", example = "芋道")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "状态", example = "0")
|
|
||||||
private Integer status;
|
|
||||||
|
|
||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
|
||||||
@ApiModelProperty(value = "创建时间")
|
|
||||||
private Date[] createTime;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,20 +1,16 @@
|
||||||
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
||||||
|
|
||||||
import lombok.*;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import java.util.*;
|
import lombok.Data;
|
||||||
import io.swagger.annotations.*;
|
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 品牌 Base VO,提供给添加、修改、详细的子 VO 使用
|
* 商品品牌 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
|
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class BrandBaseVO {
|
public class ProductBrandBaseVO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "分类编号", required = true, example = "1")
|
|
||||||
@NotNull(message = "分类编号不能为空")
|
|
||||||
private Long categoryId;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "品牌名称", required = true, example = "芋道")
|
@ApiModelProperty(value = "品牌名称", required = true, example = "芋道")
|
||||||
@NotNull(message = "品牌名称不能为空")
|
@NotNull(message = "品牌名称不能为空")
|
||||||
|
@ -22,7 +18,7 @@ public class BrandBaseVO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "品牌图片", required = true)
|
@ApiModelProperty(value = "品牌图片", required = true)
|
||||||
@NotNull(message = "品牌图片不能为空")
|
@NotNull(message = "品牌图片不能为空")
|
||||||
private String bannerUrl;
|
private String picUrl;
|
||||||
|
|
||||||
@ApiModelProperty(value = "品牌排序", example = "1")
|
@ApiModelProperty(value = "品牌排序", example = "1")
|
||||||
private Integer sort;
|
private Integer sort;
|
|
@ -1,14 +1,12 @@
|
||||||
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.annotations.*;
|
import io.swagger.annotations.*;
|
||||||
import javax.validation.constraints.*;
|
|
||||||
|
|
||||||
@ApiModel("管理后台 - 品牌创建 Request VO")
|
@ApiModel("管理后台 - 商品品牌创建 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
public class BrandCreateReqVO extends BrandBaseVO {
|
public class ProductBrandCreateReqVO extends ProductBrandBaseVO {
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,21 +1,22 @@
|
||||||
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.annotations.*;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
@ApiModel("管理后台 - 品牌分页 Request VO")
|
@ApiModel("管理后台 - 商品品牌分页 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
public class BrandPageReqVO extends PageParam {
|
public class ProductBrandPageReqVO extends PageParam {
|
||||||
|
|
||||||
@ApiModelProperty(value = "分类编号", example = "1")
|
|
||||||
private Long categoryId;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "品牌名称", example = "芋道")
|
@ApiModelProperty(value = "品牌名称", example = "芋道")
|
||||||
private String name;
|
private String name;
|
|
@ -1,14 +1,18 @@
|
||||||
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
||||||
|
|
||||||
import lombok.*;
|
import io.swagger.annotations.ApiModel;
|
||||||
import java.util.*;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import io.swagger.annotations.*;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
@ApiModel("管理后台 - 品牌 Response VO")
|
@ApiModel("管理后台 - 品牌 Response VO")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
public class BrandRespVO extends BrandBaseVO {
|
public class ProductBrandRespVO extends ProductBrandBaseVO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "品牌编号", required = true, example = "1")
|
@ApiModelProperty(value = "品牌编号", required = true, example = "1")
|
||||||
private Long id;
|
private Long id;
|
|
@ -1,15 +1,14 @@
|
||||||
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
package cn.iocoder.yudao.module.product.controller.admin.brand.vo;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.annotations.*;
|
import io.swagger.annotations.*;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
@ApiModel("管理后台 - 品牌更新 Request VO")
|
@ApiModel("管理后台 - 商品品牌更新 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
public class BrandUpdateReqVO extends BrandBaseVO {
|
public class ProductBrandUpdateReqVO extends ProductBrandBaseVO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "品牌编号", required = true, example = "1")
|
@ApiModelProperty(value = "品牌编号", required = true, example = "1")
|
||||||
@NotNull(message = "品牌编号不能为空")
|
@NotNull(message = "品牌编号不能为空")
|
|
@ -1,34 +0,0 @@
|
||||||
package cn.iocoder.yudao.module.product.convert.brand;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
|
|
||||||
import org.mapstruct.Mapper;
|
|
||||||
import org.mapstruct.factory.Mappers;
|
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.*;
|
|
||||||
import cn.iocoder.yudao.module.product.dal.dataobject.brand.BrandDO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 品牌 Convert
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface BrandConvert {
|
|
||||||
|
|
||||||
BrandConvert INSTANCE = Mappers.getMapper(BrandConvert.class);
|
|
||||||
|
|
||||||
BrandDO convert(BrandCreateReqVO bean);
|
|
||||||
|
|
||||||
BrandDO convert(BrandUpdateReqVO bean);
|
|
||||||
|
|
||||||
BrandRespVO convert(BrandDO bean);
|
|
||||||
|
|
||||||
List<BrandRespVO> convertList(List<BrandDO> list);
|
|
||||||
|
|
||||||
PageResult<BrandRespVO> convertPage(PageResult<BrandDO> page);
|
|
||||||
|
|
||||||
List<BrandExcelVO> convertList02(List<BrandDO> list);
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package cn.iocoder.yudao.module.product.convert.brand;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandRespVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 品牌 Convert
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ProductBrandConvert {
|
||||||
|
|
||||||
|
ProductBrandConvert INSTANCE = Mappers.getMapper(ProductBrandConvert.class);
|
||||||
|
|
||||||
|
ProductBrandDO convert(ProductBrandCreateReqVO bean);
|
||||||
|
|
||||||
|
ProductBrandDO convert(ProductBrandUpdateReqVO bean);
|
||||||
|
|
||||||
|
ProductBrandRespVO convert(ProductBrandDO bean);
|
||||||
|
|
||||||
|
List<ProductBrandRespVO> convertList(List<ProductBrandDO> list);
|
||||||
|
|
||||||
|
PageResult<ProductBrandRespVO> convertPage(PageResult<ProductBrandDO> page);
|
||||||
|
|
||||||
|
}
|
|
@ -6,9 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
// TODO @JeromeSoar:Product 前缀
|
|
||||||
/**
|
/**
|
||||||
* 品牌 DO
|
* 商品品牌 DO
|
||||||
*
|
*
|
||||||
* @author 芋道源码
|
* @author 芋道源码
|
||||||
*/
|
*/
|
||||||
|
@ -19,17 +18,13 @@ import lombok.*;
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class BrandDO extends BaseDO {
|
public class ProductBrandDO extends BaseDO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 品牌编号
|
* 品牌编号
|
||||||
*/
|
*/
|
||||||
@TableId
|
@TableId
|
||||||
private Long id;
|
private Long id;
|
||||||
/**
|
|
||||||
* 分类编号
|
|
||||||
*/
|
|
||||||
private Long categoryId;
|
|
||||||
/**
|
/**
|
||||||
* 品牌名称
|
* 品牌名称
|
||||||
*/
|
*/
|
||||||
|
@ -37,7 +32,7 @@ public class BrandDO extends BaseDO {
|
||||||
/**
|
/**
|
||||||
* 品牌图片
|
* 品牌图片
|
||||||
*/
|
*/
|
||||||
private String bannerUrl;
|
private String picUrl;
|
||||||
/**
|
/**
|
||||||
* 品牌排序
|
* 品牌排序
|
||||||
*/
|
*/
|
|
@ -1,38 +0,0 @@
|
||||||
package cn.iocoder.yudao.module.product.dal.mysql.brand;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|
||||||
import cn.iocoder.yudao.module.product.dal.dataobject.brand.BrandDO;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 品牌 Mapper
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface BrandMapper extends BaseMapperX<BrandDO> {
|
|
||||||
|
|
||||||
default PageResult<BrandDO> selectPage(BrandPageReqVO reqVO) {
|
|
||||||
return selectPage(reqVO, new LambdaQueryWrapperX<BrandDO>()
|
|
||||||
.eqIfPresent(BrandDO::getCategoryId, reqVO.getCategoryId())
|
|
||||||
.likeIfPresent(BrandDO::getName, reqVO.getName())
|
|
||||||
.eqIfPresent(BrandDO::getStatus, reqVO.getStatus())
|
|
||||||
.betweenIfPresent(BrandDO::getCreateTime, reqVO.getCreateTime())
|
|
||||||
.orderByDesc(BrandDO::getId));
|
|
||||||
}
|
|
||||||
|
|
||||||
default List<BrandDO> selectList(BrandExportReqVO reqVO) {
|
|
||||||
return selectList(new LambdaQueryWrapperX<BrandDO>()
|
|
||||||
.eqIfPresent(BrandDO::getCategoryId, reqVO.getCategoryId())
|
|
||||||
.likeIfPresent(BrandDO::getName, reqVO.getName())
|
|
||||||
.eqIfPresent(BrandDO::getStatus, reqVO.getStatus())
|
|
||||||
.betweenIfPresent(BrandDO::getCreateTime, reqVO.getCreateTime())
|
|
||||||
.orderByDesc(BrandDO::getId));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package cn.iocoder.yudao.module.product.dal.mysql.brand;
|
||||||
|
|
||||||
|
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.product.controller.admin.brand.vo.ProductBrandPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface ProductBrandMapper extends BaseMapperX<ProductBrandDO> {
|
||||||
|
|
||||||
|
default PageResult<ProductBrandDO> selectPage(ProductBrandPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<ProductBrandDO>()
|
||||||
|
.likeIfPresent(ProductBrandDO::getName, reqVO.getName())
|
||||||
|
.eqIfPresent(ProductBrandDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(ProductBrandDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(ProductBrandDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,17 +1,21 @@
|
||||||
package cn.iocoder.yudao.module.product.service.brand;
|
package cn.iocoder.yudao.module.product.service.brand;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import javax.validation.*;
|
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.*;
|
|
||||||
import cn.iocoder.yudao.module.product.dal.dataobject.brand.BrandDO;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 品牌 Service 接口
|
* 商品品牌 Service 接口
|
||||||
*
|
*
|
||||||
* @author 芋道源码
|
* @author 芋道源码
|
||||||
*/
|
*/
|
||||||
public interface BrandService {
|
public interface ProductBrandService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建品牌
|
* 创建品牌
|
||||||
|
@ -19,14 +23,14 @@ public interface BrandService {
|
||||||
* @param createReqVO 创建信息
|
* @param createReqVO 创建信息
|
||||||
* @return 编号
|
* @return 编号
|
||||||
*/
|
*/
|
||||||
Long createBrand(@Valid BrandCreateReqVO createReqVO);
|
Long createProductBrand(@Valid ProductBrandCreateReqVO createReqVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新品牌
|
* 更新品牌
|
||||||
*
|
*
|
||||||
* @param updateReqVO 更新信息
|
* @param updateReqVO 更新信息
|
||||||
*/
|
*/
|
||||||
void updateBrand(@Valid BrandUpdateReqVO updateReqVO);
|
void updateBrand(@Valid ProductBrandUpdateReqVO updateReqVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除品牌
|
* 删除品牌
|
||||||
|
@ -41,7 +45,7 @@ public interface BrandService {
|
||||||
* @param id 编号
|
* @param id 编号
|
||||||
* @return 品牌
|
* @return 品牌
|
||||||
*/
|
*/
|
||||||
BrandDO getBrand(Long id);
|
ProductBrandDO getBrand(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得品牌列表
|
* 获得品牌列表
|
||||||
|
@ -49,7 +53,7 @@ public interface BrandService {
|
||||||
* @param ids 编号
|
* @param ids 编号
|
||||||
* @return 品牌列表
|
* @return 品牌列表
|
||||||
*/
|
*/
|
||||||
List<BrandDO> getBrandList(Collection<Long> ids);
|
List<ProductBrandDO> getBrandList(Collection<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得品牌分页
|
* 获得品牌分页
|
||||||
|
@ -57,14 +61,6 @@ public interface BrandService {
|
||||||
* @param pageReqVO 分页查询
|
* @param pageReqVO 分页查询
|
||||||
* @return 品牌分页
|
* @return 品牌分页
|
||||||
*/
|
*/
|
||||||
PageResult<BrandDO> getBrandPage(BrandPageReqVO pageReqVO);
|
PageResult<ProductBrandDO> getBrandPage(ProductBrandPageReqVO pageReqVO);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得品牌列表, 用于 Excel 导出
|
|
||||||
*
|
|
||||||
* @param exportReqVO 查询条件
|
|
||||||
* @return 品牌列表
|
|
||||||
*/
|
|
||||||
List<BrandDO> getBrandList(BrandExportReqVO exportReqVO);
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,19 +1,21 @@
|
||||||
package cn.iocoder.yudao.module.product.service.brand;
|
package cn.iocoder.yudao.module.product.service.brand;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.convert.brand.ProductBrandConvert;
|
||||||
|
import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
|
||||||
|
import cn.iocoder.yudao.module.product.dal.mysql.brand.ProductBrandMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import java.util.*;
|
import javax.annotation.Resource;
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.*;
|
import java.util.Collection;
|
||||||
import cn.iocoder.yudao.module.product.dal.dataobject.brand.BrandDO;
|
import java.util.List;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.product.convert.brand.BrandConvert;
|
|
||||||
import cn.iocoder.yudao.module.product.dal.mysql.brand.BrandMapper;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.PRODUCT_BRAND_NOT_EXISTS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 品牌 Service 实现类
|
* 品牌 Service 实现类
|
||||||
|
@ -22,26 +24,26 @@ import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*;
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
public class BrandServiceImpl implements BrandService {
|
public class ProductBrandServiceImpl implements ProductBrandService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private BrandMapper brandMapper;
|
private ProductBrandMapper brandMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createBrand(BrandCreateReqVO createReqVO) {
|
public Long createProductBrand(ProductBrandCreateReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
BrandDO brand = BrandConvert.INSTANCE.convert(createReqVO);
|
ProductBrandDO brand = ProductBrandConvert.INSTANCE.convert(createReqVO);
|
||||||
brandMapper.insert(brand);
|
brandMapper.insert(brand);
|
||||||
// 返回
|
// 返回
|
||||||
return brand.getId();
|
return brand.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateBrand(BrandUpdateReqVO updateReqVO) {
|
public void updateBrand(ProductBrandUpdateReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
this.validateBrandExists(updateReqVO.getId());
|
validateBrandExists(updateReqVO.getId());
|
||||||
// 更新
|
// 更新
|
||||||
BrandDO updateObj = BrandConvert.INSTANCE.convert(updateReqVO);
|
ProductBrandDO updateObj = ProductBrandConvert.INSTANCE.convert(updateReqVO);
|
||||||
brandMapper.updateById(updateObj);
|
brandMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,28 +57,23 @@ public class BrandServiceImpl implements BrandService {
|
||||||
|
|
||||||
private void validateBrandExists(Long id) {
|
private void validateBrandExists(Long id) {
|
||||||
if (brandMapper.selectById(id) == null) {
|
if (brandMapper.selectById(id) == null) {
|
||||||
throw exception(BRAND_NOT_EXISTS);
|
throw exception(PRODUCT_BRAND_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BrandDO getBrand(Long id) {
|
public ProductBrandDO getBrand(Long id) {
|
||||||
return brandMapper.selectById(id);
|
return brandMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BrandDO> getBrandList(Collection<Long> ids) {
|
public List<ProductBrandDO> getBrandList(Collection<Long> ids) {
|
||||||
return brandMapper.selectBatchIds(ids);
|
return brandMapper.selectBatchIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<BrandDO> getBrandPage(BrandPageReqVO pageReqVO) {
|
public PageResult<ProductBrandDO> getBrandPage(ProductBrandPageReqVO pageReqVO) {
|
||||||
return brandMapper.selectPage(pageReqVO);
|
return brandMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<BrandDO> getBrandList(BrandExportReqVO exportReqVO) {
|
|
||||||
return brandMapper.selectList(exportReqVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,173 +0,0 @@
|
||||||
package cn.iocoder.yudao.module.product.service.brand;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Disabled;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.*;
|
|
||||||
import cn.iocoder.yudao.module.product.dal.dataobject.brand.BrandDO;
|
|
||||||
import cn.iocoder.yudao.module.product.dal.mysql.brand.BrandMapper;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import static cn.hutool.core.util.RandomUtil.*;
|
|
||||||
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
|
||||||
import static org.mockito.Mockito.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link BrandServiceImpl} 的单元测试类
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Import(BrandServiceImpl.class)
|
|
||||||
public class BrandServiceImplTest extends BaseDbUnitTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private BrandServiceImpl brandService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private BrandMapper brandMapper;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCreateBrand_success() {
|
|
||||||
// 准备参数
|
|
||||||
BrandCreateReqVO reqVO = randomPojo(BrandCreateReqVO.class);
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
Long brandId = brandService.createBrand(reqVO);
|
|
||||||
// 断言
|
|
||||||
assertNotNull(brandId);
|
|
||||||
// 校验记录的属性是否正确
|
|
||||||
BrandDO brand = brandMapper.selectById(brandId);
|
|
||||||
assertPojoEquals(reqVO, brand);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateBrand_success() {
|
|
||||||
// mock 数据
|
|
||||||
BrandDO dbBrand = randomPojo(BrandDO.class);
|
|
||||||
brandMapper.insert(dbBrand);// @Sql: 先插入出一条存在的数据
|
|
||||||
// 准备参数
|
|
||||||
BrandUpdateReqVO reqVO = randomPojo(BrandUpdateReqVO.class, o -> {
|
|
||||||
o.setId(dbBrand.getId()); // 设置更新的 ID
|
|
||||||
});
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
brandService.updateBrand(reqVO);
|
|
||||||
// 校验是否更新正确
|
|
||||||
BrandDO brand = brandMapper.selectById(reqVO.getId()); // 获取最新的
|
|
||||||
assertPojoEquals(reqVO, brand);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateBrand_notExists() {
|
|
||||||
// 准备参数
|
|
||||||
BrandUpdateReqVO reqVO = randomPojo(BrandUpdateReqVO.class);
|
|
||||||
|
|
||||||
// 调用, 并断言异常
|
|
||||||
assertServiceException(() -> brandService.updateBrand(reqVO), BRAND_NOT_EXISTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDeleteBrand_success() {
|
|
||||||
// mock 数据
|
|
||||||
BrandDO dbBrand = randomPojo(BrandDO.class);
|
|
||||||
brandMapper.insert(dbBrand);// @Sql: 先插入出一条存在的数据
|
|
||||||
// 准备参数
|
|
||||||
Long id = dbBrand.getId();
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
brandService.deleteBrand(id);
|
|
||||||
// 校验数据不存在了
|
|
||||||
assertNull(brandMapper.selectById(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDeleteBrand_notExists() {
|
|
||||||
// 准备参数
|
|
||||||
Long id = randomLongId();
|
|
||||||
|
|
||||||
// 调用, 并断言异常
|
|
||||||
assertServiceException(() -> brandService.deleteBrand(id), BRAND_NOT_EXISTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
|
||||||
public void testGetBrandPage() {
|
|
||||||
// mock 数据
|
|
||||||
BrandDO dbBrand = randomPojo(BrandDO.class, o -> { // 等会查询到
|
|
||||||
o.setCategoryId(null);
|
|
||||||
o.setName(null);
|
|
||||||
o.setStatus(null);
|
|
||||||
o.setCreateTime(null);
|
|
||||||
});
|
|
||||||
brandMapper.insert(dbBrand);
|
|
||||||
// 测试 categoryId 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setCategoryId(null)));
|
|
||||||
// 测试 name 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setName(null)));
|
|
||||||
// 测试 status 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setStatus(null)));
|
|
||||||
// 测试 createTime 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setCreateTime(null)));
|
|
||||||
// 准备参数
|
|
||||||
BrandPageReqVO reqVO = new BrandPageReqVO();
|
|
||||||
reqVO.setCategoryId(null);
|
|
||||||
reqVO.setName(null);
|
|
||||||
reqVO.setStatus(null);
|
|
||||||
reqVO.setCreateTime((new Date[]{}));
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
PageResult<BrandDO> pageResult = brandService.getBrandPage(reqVO);
|
|
||||||
// 断言
|
|
||||||
assertEquals(1, pageResult.getTotal());
|
|
||||||
assertEquals(1, pageResult.getList().size());
|
|
||||||
assertPojoEquals(dbBrand, pageResult.getList().get(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
|
||||||
public void testGetBrandList() {
|
|
||||||
// mock 数据
|
|
||||||
BrandDO dbBrand = randomPojo(BrandDO.class, o -> { // 等会查询到
|
|
||||||
o.setCategoryId(null);
|
|
||||||
o.setName(null);
|
|
||||||
o.setStatus(null);
|
|
||||||
o.setCreateTime(null);
|
|
||||||
});
|
|
||||||
brandMapper.insert(dbBrand);
|
|
||||||
// 测试 categoryId 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setCategoryId(null)));
|
|
||||||
// 测试 name 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setName(null)));
|
|
||||||
// 测试 status 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setStatus(null)));
|
|
||||||
// 测试 createTime 不匹配
|
|
||||||
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setCreateTime(null)));
|
|
||||||
// 准备参数
|
|
||||||
BrandExportReqVO reqVO = new BrandExportReqVO();
|
|
||||||
reqVO.setCategoryId(null);
|
|
||||||
reqVO.setName(null);
|
|
||||||
reqVO.setStatus(null);
|
|
||||||
reqVO.setCreateTime((new Date[]{}));
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
List<BrandDO> list = brandService.getBrandList(reqVO);
|
|
||||||
// 断言
|
|
||||||
assertEquals(1, list.size());
|
|
||||||
assertPojoEquals(dbBrand, list.get(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
package cn.iocoder.yudao.module.product.service.brand;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
|
||||||
|
import cn.iocoder.yudao.module.product.dal.mysql.brand.ProductBrandMapper;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
||||||
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||||
|
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.PRODUCT_BRAND_NOT_EXISTS;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ProductBrandServiceImpl} 的单元测试类
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Import(ProductBrandServiceImpl.class)
|
||||||
|
public class ProductBrandServiceImplTest extends BaseDbUnitTest {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ProductBrandServiceImpl brandService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ProductBrandMapper brandMapper;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateBrand_success() {
|
||||||
|
// 准备参数
|
||||||
|
ProductBrandCreateReqVO reqVO = randomPojo(ProductBrandCreateReqVO.class);
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
Long brandId = brandService.createProductBrand(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertNotNull(brandId);
|
||||||
|
// 校验记录的属性是否正确
|
||||||
|
ProductBrandDO brand = brandMapper.selectById(brandId);
|
||||||
|
assertPojoEquals(reqVO, brand);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateBrand_success() {
|
||||||
|
// mock 数据
|
||||||
|
ProductBrandDO dbBrand = randomPojo(ProductBrandDO.class);
|
||||||
|
brandMapper.insert(dbBrand);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
ProductBrandUpdateReqVO reqVO = randomPojo(ProductBrandUpdateReqVO.class, o -> {
|
||||||
|
o.setId(dbBrand.getId()); // 设置更新的 ID
|
||||||
|
});
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
brandService.updateBrand(reqVO);
|
||||||
|
// 校验是否更新正确
|
||||||
|
ProductBrandDO brand = brandMapper.selectById(reqVO.getId()); // 获取最新的
|
||||||
|
assertPojoEquals(reqVO, brand);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateBrand_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
ProductBrandUpdateReqVO reqVO = randomPojo(ProductBrandUpdateReqVO.class);
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> brandService.updateBrand(reqVO), PRODUCT_BRAND_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteBrand_success() {
|
||||||
|
// mock 数据
|
||||||
|
ProductBrandDO dbBrand = randomPojo(ProductBrandDO.class);
|
||||||
|
brandMapper.insert(dbBrand);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
Long id = dbBrand.getId();
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
brandService.deleteBrand(id);
|
||||||
|
// 校验数据不存在了
|
||||||
|
assertNull(brandMapper.selectById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteBrand_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
Long id = randomLongId();
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> brandService.deleteBrand(id), PRODUCT_BRAND_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetBrandPage() {
|
||||||
|
// mock 数据
|
||||||
|
ProductBrandDO dbBrand = randomPojo(ProductBrandDO.class, o -> { // 等会查询到
|
||||||
|
o.setName("芋道源码");
|
||||||
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
o.setCreateTime(buildTime(2022, 2, 1));
|
||||||
|
});
|
||||||
|
brandMapper.insert(dbBrand);
|
||||||
|
// 测试 name 不匹配
|
||||||
|
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setName("源码")));
|
||||||
|
// 测试 status 不匹配
|
||||||
|
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
||||||
|
// 测试 createTime 不匹配
|
||||||
|
brandMapper.insert(cloneIgnoreId(dbBrand, o -> o.setCreateTime(buildTime(2022, 3, 1))));
|
||||||
|
// 准备参数
|
||||||
|
ProductBrandPageReqVO reqVO = new ProductBrandPageReqVO();
|
||||||
|
reqVO.setName("芋道");
|
||||||
|
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
reqVO.setCreateTime((new Date[]{buildTime(2022, 1, 1), buildTime(2022, 2, 25)}));
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
PageResult<ProductBrandDO> pageResult = brandService.getBrandPage(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertEquals(1, pageResult.getTotal());
|
||||||
|
assertEquals(1, pageResult.getList().size());
|
||||||
|
assertPojoEquals(dbBrand, pageResult.getList().get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -16,9 +16,8 @@ CREATE TABLE IF NOT EXISTS "product_category" (
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS "product_brand" (
|
CREATE TABLE IF NOT EXISTS "product_brand" (
|
||||||
"id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
"id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||||
"category_id" bigint(20) NOT NULL,
|
|
||||||
"name" varchar(255) NOT NULL,
|
"name" varchar(255) NOT NULL,
|
||||||
"banner_url" varchar(255) NOT NULL,
|
"pic_url" varchar(255) NOT NULL,
|
||||||
"sort" int(11),
|
"sort" int(11),
|
||||||
"description" varchar(1024),
|
"description" varchar(1024),
|
||||||
"status" tinyint(4) NOT NULL,
|
"status" tinyint(4) NOT NULL,
|
||||||
|
@ -28,4 +27,4 @@ CREATE TABLE IF NOT EXISTS "product_brand" (
|
||||||
"update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
"update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
"deleted" bit NOT NULL DEFAULT FALSE,
|
"deleted" bit NOT NULL DEFAULT FALSE,
|
||||||
PRIMARY KEY ("id")
|
PRIMARY KEY ("id")
|
||||||
) COMMENT '品牌';
|
) COMMENT '商品品牌';
|
||||||
|
|
|
@ -26,25 +26,18 @@
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
|
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
|
||||||
v-hasPermi="['product:brand:create']">新增
|
v-hasPermi="['product:brand:create']">新增</el-button>
|
||||||
</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
|
|
||||||
:loading="exportLoading"
|
|
||||||
v-hasPermi="['product:brand:export']">导出
|
|
||||||
</el-button>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<el-table-column label="商品分类" align="center" prop="categoryId"/>
|
<el-table-column label="品牌编号" align="center" prop="id"/>
|
||||||
<el-table-column label="品牌名称" align="center" prop="name"/>
|
<el-table-column label="品牌名称" align="center" prop="name"/>
|
||||||
<el-table-column label="品牌图片" align="center" prop="bannerUrl">
|
<el-table-column label="品牌图片" align="center" prop="picUrl">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<img v-if="scope.row.bannerUrl" :src="scope.row.bannerUrl" alt="分类图片" class="img-height"/>
|
<img v-if="scope.row.picUrl" :src="scope.row.picUrl" alt="分类图片" style="height: 100px;" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="品牌排序" align="center" prop="sort"/>
|
<el-table-column label="品牌排序" align="center" prop="sort"/>
|
||||||
|
@ -77,15 +70,11 @@
|
||||||
<!-- 对话框(添加 / 修改) -->
|
<!-- 对话框(添加 / 修改) -->
|
||||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
<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 ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="商品分类" prop="categoryId">
|
|
||||||
<Treeselect v-model="form.categoryId" :options="categoryOptions" :normalizer="normalizer" :show-count="true"
|
|
||||||
placeholder="请选择商品分类"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="品牌名称" prop="name">
|
<el-form-item label="品牌名称" prop="name">
|
||||||
<el-input v-model="form.name" placeholder="请输入品牌名称"/>
|
<el-input v-model="form.name" placeholder="请输入品牌名称"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="品牌图片" prop="bannerUrl">
|
<el-form-item label="品牌图片" prop="picUrl">
|
||||||
<imageUpload v-model="form.bannerUrl" :limit="1"/>
|
<imageUpload v-model="form.picUrl" :limit="1"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="品牌排序" prop="sort">
|
<el-form-item label="品牌排序" prop="sort">
|
||||||
<el-input v-model="form.sort" placeholder="请输入品牌排序"/>
|
<el-input v-model="form.sort" placeholder="请输入品牌排序"/>
|
||||||
|
@ -113,20 +102,18 @@
|
||||||
import {
|
import {
|
||||||
createBrand,
|
createBrand,
|
||||||
deleteBrand,
|
deleteBrand,
|
||||||
exportBrandExcel,
|
|
||||||
getBrand,
|
getBrand,
|
||||||
getBrandPage,
|
getBrandPage,
|
||||||
updateBrand
|
updateBrand
|
||||||
} from "@/api/mall/product/brand";
|
} from "@/api/mall/product/brand";
|
||||||
import {getProductCategoryList} from "@/api/mall/product/category";
|
|
||||||
import ImageUpload from '@/components/ImageUpload';
|
import ImageUpload from '@/components/ImageUpload';
|
||||||
import Treeselect from "@riophae/vue-treeselect";
|
|
||||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||||
|
import {CommonStatusEnum} from "@/utils/constants";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Brand",
|
name: "ProductBrand",
|
||||||
components: {
|
components: {
|
||||||
ImageUpload, Treeselect,
|
ImageUpload
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -153,21 +140,18 @@ export default {
|
||||||
status: null,
|
status: null,
|
||||||
createTime: []
|
createTime: []
|
||||||
},
|
},
|
||||||
// 商品分类树选项
|
|
||||||
categoryOptions: [],
|
|
||||||
// 表单参数
|
// 表单参数
|
||||||
form: {},
|
form: {},
|
||||||
// 表单校验
|
// 表单校验
|
||||||
rules: {
|
rules: {
|
||||||
categoryId: [{required: true, message: "分类编号不能为空", trigger: "blur"}],
|
|
||||||
name: [{required: true, message: "品牌名称不能为空", trigger: "blur"}],
|
name: [{required: true, message: "品牌名称不能为空", trigger: "blur"}],
|
||||||
bannerUrl: [{required: true, message: "品牌图片不能为空", trigger: "blur"}],
|
picUrl: [{required: true, message: "品牌图片不能为空", trigger: "blur"}],
|
||||||
|
sort: [{required: true, message: "品牌排序不能为空", trigger: "blur"}],
|
||||||
status: [{required: true, message: "状态不能为空", trigger: "change"}],
|
status: [{required: true, message: "状态不能为空", trigger: "change"}],
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getTreeselect();
|
|
||||||
this.getList();
|
this.getList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -181,26 +165,6 @@ export default {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
/** 转换菜单数据结构 */
|
|
||||||
normalizer(node) {
|
|
||||||
if (node.children && !node.children.length) {
|
|
||||||
delete node.children;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
id: node.id,
|
|
||||||
label: node.name,
|
|
||||||
children: node.children
|
|
||||||
};
|
|
||||||
},
|
|
||||||
/** 查询分类下拉树结构 */
|
|
||||||
getTreeselect() {
|
|
||||||
getProductCategoryList().then(response => {
|
|
||||||
this.categoryOptions = [];
|
|
||||||
const menu = {id: 0, name: '商品分类', children: []};
|
|
||||||
menu.children = this.handleTree(response.data, "id", "pid");
|
|
||||||
this.categoryOptions.push(menu);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
/** 取消按钮 */
|
/** 取消按钮 */
|
||||||
cancel() {
|
cancel() {
|
||||||
this.open = false;
|
this.open = false;
|
||||||
|
@ -210,12 +174,11 @@ export default {
|
||||||
reset() {
|
reset() {
|
||||||
this.form = {
|
this.form = {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
categoryId: undefined,
|
|
||||||
name: undefined,
|
name: undefined,
|
||||||
bannerUrl: undefined,
|
picUrl: undefined,
|
||||||
sort: undefined,
|
sort: 0,
|
||||||
description: undefined,
|
description: undefined,
|
||||||
status: undefined,
|
status: CommonStatusEnum.ENABLE,
|
||||||
};
|
};
|
||||||
this.resetForm("form");
|
this.resetForm("form");
|
||||||
},
|
},
|
||||||
|
@ -232,14 +195,12 @@ export default {
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.reset();
|
this.reset();
|
||||||
this.getTreeselect();
|
|
||||||
this.open = true;
|
this.open = true;
|
||||||
this.title = "添加品牌";
|
this.title = "添加品牌";
|
||||||
},
|
},
|
||||||
/** 修改按钮操作 */
|
/** 修改按钮操作 */
|
||||||
handleUpdate(row) {
|
handleUpdate(row) {
|
||||||
this.reset();
|
this.reset();
|
||||||
this.getTreeselect();
|
|
||||||
const id = row.id;
|
const id = row.id;
|
||||||
getBrand(id).then(response => {
|
getBrand(id).then(response => {
|
||||||
this.form = response.data;
|
this.form = response.data;
|
||||||
|
@ -280,30 +241,7 @@ export default {
|
||||||
this.$modal.msgSuccess("删除成功");
|
this.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
});
|
});
|
||||||
},
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
handleExport() {
|
|
||||||
// 处理查询参数
|
|
||||||
let params = {...this.queryParams};
|
|
||||||
params.pageNo = undefined;
|
|
||||||
params.pageSize = undefined;
|
|
||||||
// 执行导出
|
|
||||||
this.$modal.confirm('是否确认导出所有品牌数据项?').then(() => {
|
|
||||||
this.exportLoading = true;
|
|
||||||
return exportBrandExcel(params);
|
|
||||||
}).then(response => {
|
|
||||||
this.$download.excel(response, "品牌.xls");
|
|
||||||
this.exportLoading = false;
|
|
||||||
}).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
//
|
|
||||||
.img-height {
|
|
||||||
height: 150px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ import ImageUpload from '@/components/ImageUpload';
|
||||||
import {CommonStatusEnum} from "@/utils/constants";
|
import {CommonStatusEnum} from "@/utils/constants";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Category",
|
name: "ProductCategory",
|
||||||
components: {
|
components: {
|
||||||
Editor, Treeselect, ImageUpload
|
Editor, Treeselect, ImageUpload
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue