Commit c8ec5c8952da003a63d3a8c327a951ab125bac20
1 parent
515c0de7
mall:上传enum类,做后端模板添加判定、前端页面添加
Showing
19 changed files
with
883 additions
and
91 deletions
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponExpireTimeTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.CouponTemplete.enums; | |
| 2 | + | |
| 3 | + | |
| 4 | +import lombok.Getter; | |
| 5 | +import lombok.RequiredArgsConstructor; | |
| 6 | + | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 优惠券 - 是否开启过期提醒 | |
| 10 | + * | |
| 11 | + * @author Sin | |
| 12 | + */ | |
| 13 | +@RequiredArgsConstructor | |
| 14 | +@Getter | |
| 15 | +public enum CouponExpireTimeTypeEnum { | |
| 16 | + | |
| 17 | + OPEN(1,"不开启"),CLOSE(0,"开启"),; | |
| 18 | + | |
| 19 | + /** | |
| 20 | + * 是否开启过期提醒 | |
| 21 | + */ | |
| 22 | + private final Integer type; | |
| 23 | + /** | |
| 24 | + * 是否开启过期提醒 | |
| 25 | + */ | |
| 26 | + private final String name; | |
| 27 | + | |
| 28 | +} | ... | ... |
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponFetchTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.CouponTemplete.enums; | |
| 2 | + | |
| 3 | + | |
| 4 | +import lombok.Getter; | |
| 5 | +import lombok.RequiredArgsConstructor; | |
| 6 | + | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 优惠券 - 领取是否无限制 0 | |
| 10 | + * | |
| 11 | + * @author Sin | |
| 12 | + */ | |
| 13 | +@RequiredArgsConstructor | |
| 14 | +@Getter | |
| 15 | +public enum CouponFetchTypeEnum { | |
| 16 | + | |
| 17 | + LIMIT(0,"否"),NOT_LIMIT(0,"开启"),; | |
| 18 | + | |
| 19 | + /** | |
| 20 | + * 是否开启过期提醒 | |
| 21 | + */ | |
| 22 | + private final Integer type; | |
| 23 | + /** | |
| 24 | + * 是否开启过期提醒 | |
| 25 | + */ | |
| 26 | + private final String name; | |
| 27 | + | |
| 28 | +} | ... | ... |
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponProductTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.CouponTemplete.enums; | |
| 2 | + | |
| 3 | + | |
| 4 | +import lombok.Getter; | |
| 5 | +import lombok.RequiredArgsConstructor; | |
| 6 | + | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 优惠券 - 优惠券类型 | |
| 10 | + * | |
| 11 | + * @author Sin | |
| 12 | + */ | |
| 13 | +@RequiredArgsConstructor | |
| 14 | +@Getter | |
| 15 | +public enum CouponProductTypeEnum { | |
| 16 | + | |
| 17 | + PROCESSING(1,"进行中"), | |
| 18 | + END(2,"已结束"), | |
| 19 | + CLOSE(3,"已关闭"),; | |
| 20 | + | |
| 21 | + /** | |
| 22 | + * 优惠券类型 | |
| 23 | + */ | |
| 24 | + private final Integer type; | |
| 25 | + /** | |
| 26 | + * 优惠券类型名 | |
| 27 | + */ | |
| 28 | + private final String name; | |
| 29 | + | |
| 30 | +} | ... | ... |
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponStatusTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.CouponTemplete.enums; | |
| 2 | + | |
| 3 | + | |
| 4 | +import lombok.Getter; | |
| 5 | +import lombok.RequiredArgsConstructor; | |
| 6 | + | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 优惠券 - 优惠券类型 | |
| 10 | + * | |
| 11 | + * @author Sin | |
| 12 | + */ | |
| 13 | +@RequiredArgsConstructor | |
| 14 | +@Getter | |
| 15 | +public enum CouponStatusTypeEnum { | |
| 16 | + | |
| 17 | + ALL(1,"全部商品可用"), | |
| 18 | + POINT_PRODUCT(2,"指定商品可用"), | |
| 19 | + POINT_PRODUCT_NOT(3,"指定商品不可用不能为空"),; | |
| 20 | + | |
| 21 | + /** | |
| 22 | + * 优惠券类型 | |
| 23 | + */ | |
| 24 | + private final Integer type; | |
| 25 | + /** | |
| 26 | + * 优惠券类型名 | |
| 27 | + */ | |
| 28 | + private final String name; | |
| 29 | + | |
| 30 | +} | ... | ... |
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.CouponTemplete.enums; | |
| 2 | + | |
| 3 | + | |
| 4 | +import lombok.Getter; | |
| 5 | +import lombok.RequiredArgsConstructor; | |
| 6 | + | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 优惠券 - 优惠券类型 | |
| 10 | + * | |
| 11 | + * @author Sin | |
| 12 | + */ | |
| 13 | +@RequiredArgsConstructor | |
| 14 | +@Getter | |
| 15 | +public enum CouponTypeEnum { | |
| 16 | + | |
| 17 | + REWARD(1,"满减"), | |
| 18 | + DISCOUNT(2,"折扣"), | |
| 19 | + RANDOW(3,"随机"),; | |
| 20 | + | |
| 21 | + /** | |
| 22 | + * 优惠券类型 | |
| 23 | + */ | |
| 24 | + private final Integer type; | |
| 25 | + /** | |
| 26 | + * 优惠券类型名 | |
| 27 | + */ | |
| 28 | + private final String name; | |
| 29 | + | |
| 30 | +} | ... | ... |
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponUseLimitEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.CouponTemplete.enums; | |
| 2 | + | |
| 3 | + | |
| 4 | +import lombok.Getter; | |
| 5 | +import lombok.RequiredArgsConstructor; | |
| 6 | + | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 优惠券 - 优惠券类型 | |
| 10 | + * | |
| 11 | + * @author Sin | |
| 12 | + */ | |
| 13 | +@RequiredArgsConstructor | |
| 14 | +@Getter | |
| 15 | +public enum CouponUseLimitEnum { | |
| 16 | + | |
| 17 | + HAS_LIMIT(1,"无门槛"), | |
| 18 | + NO_LIMIT(2,"有门槛"),; | |
| 19 | + | |
| 20 | + /** | |
| 21 | + * 优惠券类型 | |
| 22 | + */ | |
| 23 | + private final Integer type; | |
| 24 | + /** | |
| 25 | + * 优惠券类型名 | |
| 26 | + */ | |
| 27 | + private final String name; | |
| 28 | + | |
| 29 | +} | ... | ... |
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/CouponValidityTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.CouponTemplete.enums; | |
| 2 | + | |
| 3 | +import lombok.Getter; | |
| 4 | +import lombok.RequiredArgsConstructor; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * 过期类型 - 状态 | |
| 8 | + * | |
| 9 | + * @author Sin | |
| 10 | + */ | |
| 11 | +@RequiredArgsConstructor | |
| 12 | +@Getter | |
| 13 | +public enum CouponValidityTypeEnum { | |
| 14 | + | |
| 15 | + TIME_RANGE_EXPIRTED(1,"时间范围过期"), | |
| 16 | + EXPIRES_AFTER_FIXED_DATE(2,"领取之日固定日期后过期"), | |
| 17 | + EXPIRES_DATE_NEXT_FIEXD_DATE(3,"领取次日固定日期后过期不能为空"),; | |
| 18 | + | |
| 19 | + | |
| 20 | + /** | |
| 21 | + * 状态值 | |
| 22 | + */ | |
| 23 | + private final Integer status; | |
| 24 | + /** | |
| 25 | + * 状态名 | |
| 26 | + */ | |
| 27 | + private final String name; | |
| 28 | + | |
| 29 | +} | ... | ... |
yudao-module-mall/yudao-module-coupon-api/src/main/java/cn/iocoder/yudao/module/CouponTemplete/enums/ErrorCodeConstants.java
| ... | ... | @@ -11,6 +11,13 @@ public interface ErrorCodeConstants { |
| 11 | 11 | // ========== COUPON分类相关 1010001000 ============ |
| 12 | 12 | |
| 13 | 13 | ErrorCode COUPON_TEMPLETE_NOT_EXISTS = new ErrorCode(1010001000, "优惠券模板不存在"); |
| 14 | + ErrorCode MONEY_NOT_NULL = new ErrorCode(1010001001, "当type为reward时需要添加发放面额不能为空"); | |
| 15 | + ErrorCode DISCOUNT_NOT_NULL = new ErrorCode(1010001001, "当type为discount时需要添加折扣不能为空"); | |
| 16 | + ErrorCode DISCOUNT_LIMIT_NOT_NULL = new ErrorCode(1010001001, "当type为discount时可选择性添加最多折扣金额不能为空"); | |
| 17 | + ErrorCode MIN_MAX_NOT_NULL = new ErrorCode(1010001001, "当type为radom时需要添加最低金额"); | |
| 18 | + ErrorCode START_END_TIME_NOT_NULL = new ErrorCode(1010001001, "使用开始日期,使用结束日期不能为空"); | |
| 19 | + ErrorCode FIXED_TERM_NOT_NULL = new ErrorCode(1010001001, "领取之日起或者次日N天内有效不能为空"); | |
| 20 | + | |
| 14 | 21 | |
| 15 | 22 | // ========== COUPON分类相关 1010002000 ============ |
| 16 | 23 | ErrorCode COUPON_NOT_EXISTS = new ErrorCode(1010001000, "优惠券模板不存在"); | ... | ... |
yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupon/CouponController.java
| ... | ... | @@ -6,20 +6,13 @@ import org.springframework.validation.annotation.Validated; |
| 6 | 6 | import org.springframework.security.access.prepost.PreAuthorize; |
| 7 | 7 | import io.swagger.annotations.*; |
| 8 | 8 | |
| 9 | -import javax.validation.constraints.*; | |
| 10 | 9 | import javax.validation.*; |
| 11 | -import javax.servlet.http.*; | |
| 12 | 10 | import java.util.*; |
| 13 | -import java.io.IOException; | |
| 14 | 11 | |
| 15 | 12 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 16 | 13 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 17 | 14 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 18 | 15 | |
| 19 | -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | |
| 20 | - | |
| 21 | -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | |
| 22 | -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; | |
| 23 | 16 | |
| 24 | 17 | import cn.iocoder.yudao.module.coupon.controller.admin.coupon.vo.*; |
| 25 | 18 | import cn.iocoder.yudao.module.coupon.dal.dataobject.coupon.CouponDO; |
| ... | ... | @@ -28,25 +21,29 @@ import cn.iocoder.yudao.module.coupon.service.coupon.CouponService; |
| 28 | 21 | |
| 29 | 22 | @Api(tags = "管理后台 - 优惠券") |
| 30 | 23 | @RestController |
| 31 | -@RequestMapping("/coupon/") | |
| 24 | +@RequestMapping("/coupon/coupon/") | |
| 32 | 25 | @Validated |
| 33 | 26 | public class CouponController { |
| 34 | 27 | |
| 35 | 28 | @Resource |
| 36 | - private CouponService Service; | |
| 29 | + private CouponService couponService; | |
| 30 | + | |
| 37 | 31 | |
| 32 | + //todo 用户优惠券 | |
| 38 | 33 | @PostMapping("/create") |
| 39 | - @ApiOperation("创建优惠券") | |
| 34 | + @ApiOperation("用户领取优惠券") | |
| 40 | 35 | @PreAuthorize("@ss.hasPermission('coupon::create')") |
| 41 | - public CommonResult<Long> create(@Valid @RequestBody CouponCreateReqVO createReqVO) { | |
| 42 | - return success(Service.create(createReqVO)); | |
| 36 | + public CommonResult<Long> create(@RequestParam("couponTemplateId") Long couponTemplateId) { | |
| 37 | + | |
| 38 | + return success(couponService.create(couponTemplateId)); | |
| 43 | 39 | } |
| 44 | 40 | |
| 41 | + | |
| 45 | 42 | @PutMapping("/update") |
| 46 | 43 | @ApiOperation("更新优惠券") |
| 47 | 44 | @PreAuthorize("@ss.hasPermission('coupon::update')") |
| 48 | 45 | public CommonResult<Boolean> update(@Valid @RequestBody CouponUpdateReqVO updateReqVO) { |
| 49 | - Service.update(updateReqVO); | |
| 46 | + couponService.update(updateReqVO); | |
| 50 | 47 | return success(true); |
| 51 | 48 | } |
| 52 | 49 | |
| ... | ... | @@ -55,7 +52,7 @@ public class CouponController { |
| 55 | 52 | @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) |
| 56 | 53 | @PreAuthorize("@ss.hasPermission('coupon::delete')") |
| 57 | 54 | public CommonResult<Boolean> delete(@RequestParam("id") Long id) { |
| 58 | - Service.delete(id); | |
| 55 | + couponService.delete(id); | |
| 59 | 56 | return success(true); |
| 60 | 57 | } |
| 61 | 58 | |
| ... | ... | @@ -64,16 +61,18 @@ public class CouponController { |
| 64 | 61 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
| 65 | 62 | @PreAuthorize("@ss.hasPermission('coupon::query')") |
| 66 | 63 | public CommonResult<CouponRespVO> get(@RequestParam("id") Long id) { |
| 67 | - CouponDO couponDO = Service.get(id); | |
| 64 | + CouponDO couponDO = couponService.get(id); | |
| 68 | 65 | return success(CouponConvert.INSTANCE.convert(couponDO)); |
| 69 | 66 | } |
| 70 | 67 | |
| 68 | + | |
| 69 | + | |
| 71 | 70 | @GetMapping("/list") |
| 72 | 71 | @ApiOperation("获得优惠券列表") |
| 73 | - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | |
| 72 | +// @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | |
| 74 | 73 | @PreAuthorize("@ss.hasPermission('coupon::query')") |
| 75 | 74 | public CommonResult<List<CouponRespVO>> getList(@RequestParam("ids") Collection<Long> ids) { |
| 76 | - List<CouponDO> list = Service.getList(ids); | |
| 75 | + List<CouponDO> list = couponService.getList(ids); | |
| 77 | 76 | return success(CouponConvert.INSTANCE.convertList(list)); |
| 78 | 77 | } |
| 79 | 78 | |
| ... | ... | @@ -81,20 +80,9 @@ public class CouponController { |
| 81 | 80 | @ApiOperation("获得优惠券分页") |
| 82 | 81 | @PreAuthorize("@ss.hasPermission('coupon::query')") |
| 83 | 82 | public CommonResult<PageResult<CouponRespVO>> getPage(@Valid CouponPageReqVO pageVO) { |
| 84 | - PageResult<CouponDO> pageResult = Service.getPage(pageVO); | |
| 83 | + PageResult<CouponDO> pageResult = couponService.getPage(pageVO); | |
| 85 | 84 | return success(CouponConvert.INSTANCE.convertPage(pageResult)); |
| 86 | 85 | } |
| 87 | 86 | |
| 88 | - @GetMapping("/export-excel") | |
| 89 | - @ApiOperation("导出优惠券 Excel") | |
| 90 | - @PreAuthorize("@ss.hasPermission('coupon::export')") | |
| 91 | - @OperateLog(type = EXPORT) | |
| 92 | - public void exportExcel(@Valid CouponExportReqVO exportReqVO, | |
| 93 | - HttpServletResponse response) throws IOException { | |
| 94 | - List<CouponDO> list = Service.getList(exportReqVO); | |
| 95 | - // 导出 Excel | |
| 96 | - List<CouponExcelVO> datas = CouponConvert.INSTANCE.convertList02(list); | |
| 97 | - ExcelUtils.write(response, "优惠券.xls", "数据", CouponExcelVO.class, datas); | |
| 98 | - } | |
| 99 | 87 | |
| 100 | 88 | } | ... | ... |
yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupontemplete/CouponTempleteController.java
| ... | ... | @@ -11,24 +11,15 @@ import org.springframework.security.access.prepost.PreAuthorize; |
| 11 | 11 | import io.swagger.annotations.*; |
| 12 | 12 | |
| 13 | 13 | import javax.validation.*; |
| 14 | -import javax.servlet.http.*; | |
| 15 | 14 | import java.util.*; |
| 16 | -import java.io.IOException; | |
| 17 | 15 | |
| 18 | 16 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 19 | 17 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 20 | 18 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 21 | 19 | |
| 22 | -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | |
| 23 | - | |
| 24 | -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | |
| 25 | -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; | |
| 26 | - | |
| 27 | - | |
| 28 | - | |
| 29 | 20 | @Api(tags = "管理后台 - 优惠券模板") |
| 30 | 21 | @RestController |
| 31 | -@RequestMapping("/CouponTemplete/") | |
| 22 | +@RequestMapping("/coupon/CouponTemplete/") | |
| 32 | 23 | @Validated |
| 33 | 24 | public class CouponTempleteController { |
| 34 | 25 | |
| ... | ... | @@ -61,7 +52,7 @@ public class CouponTempleteController { |
| 61 | 52 | |
| 62 | 53 | @GetMapping("/get") |
| 63 | 54 | @ApiOperation("获得优惠券模板") |
| 64 | - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | |
| 55 | +// @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | |
| 65 | 56 | @PreAuthorize("@ss.hasPermission('CouponTemplete::query')") |
| 66 | 57 | public CommonResult<CouponTempleteRespVO> get(@RequestParam("id") Long id) { |
| 67 | 58 | CouponTempleteDO couponTempleteDO = Service.get(id); |
| ... | ... | @@ -70,7 +61,7 @@ public class CouponTempleteController { |
| 70 | 61 | |
| 71 | 62 | @GetMapping("/list") |
| 72 | 63 | @ApiOperation("获得优惠券模板列表") |
| 73 | - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | |
| 64 | +// @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | |
| 74 | 65 | @PreAuthorize("@ss.hasPermission('CouponTemplete::query')") |
| 75 | 66 | public CommonResult<List<CouponTempleteRespVO>> getList(@RequestParam("ids") Collection<Long> ids) { |
| 76 | 67 | List<CouponTempleteDO> list = Service.getList(ids); |
| ... | ... | @@ -85,16 +76,6 @@ public class CouponTempleteController { |
| 85 | 76 | return success(CouponTempleteConvert.INSTANCE.convertPage(pageResult)); |
| 86 | 77 | } |
| 87 | 78 | |
| 88 | - @GetMapping("/export-excel") | |
| 89 | - @ApiOperation("导出优惠券模板 Excel") | |
| 90 | - @PreAuthorize("@ss.hasPermission('CouponTemplete::export')") | |
| 91 | - @OperateLog(type = EXPORT) | |
| 92 | - public void exportExcel(@Valid CouponTempleteExportReqVO exportReqVO, | |
| 93 | - HttpServletResponse response) throws IOException { | |
| 94 | - List<CouponTempleteDO> list = Service.getList(exportReqVO); | |
| 95 | - // 导出 Excel | |
| 96 | - List<CouponTempleteExcelVO> datas = CouponTempleteConvert.INSTANCE.convertList02(list); | |
| 97 | - ExcelUtils.write(response, "优惠券模板.xls", "数据", CouponTempleteExcelVO.class, datas); | |
| 98 | - } | |
| 79 | + | |
| 99 | 80 | |
| 100 | 81 | } | ... | ... |
yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/controller/admin/coupontemplete/vo/CouponTempleteBaseVO.java
| ... | ... | @@ -16,9 +16,8 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ |
| 16 | 16 | @Data |
| 17 | 17 | public class CouponTempleteBaseVO { |
| 18 | 18 | |
| 19 | - @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机", required = true) | |
| 20 | - @NotNull(message = "优惠券类型 reward-满减 discount-折扣 random-随机不能为空") | |
| 21 | - private String type; | |
| 19 | + | |
| 20 | + //基本信息 | |
| 22 | 21 | |
| 23 | 22 | @ApiModelProperty(value = "优惠券名称", required = true) |
| 24 | 23 | @NotNull(message = "优惠券名称不能为空") |
| ... | ... | @@ -30,17 +29,8 @@ public class CouponTempleteBaseVO { |
| 30 | 29 | @ApiModelProperty(value = "优惠券图片") |
| 31 | 30 | private String image; |
| 32 | 31 | |
| 33 | - @ApiModelProperty(value = "发放数量", required = true) | |
| 34 | - @NotNull(message = "发放数量不能为空") | |
| 35 | - private Integer count; | |
| 36 | - | |
| 37 | - @ApiModelProperty(value = "已领取数量", required = true) | |
| 38 | - @NotNull(message = "已领取数量不能为空") | |
| 39 | - private Integer leadCount; | |
| 32 | + /* ============判断适用商品——开始============= */ | |
| 40 | 33 | |
| 41 | - @ApiModelProperty(value = "已使用数量", required = true) | |
| 42 | - @NotNull(message = "已使用数量不能为空") | |
| 43 | - private Integer usedCount; | |
| 44 | 34 | |
| 45 | 35 | @ApiModelProperty(value = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用", required = true) |
| 46 | 36 | @NotNull(message = "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用不能为空") |
| ... | ... | @@ -57,15 +47,22 @@ public class CouponTempleteBaseVO { |
| 57 | 47 | @NotNull(message = "满多少元使用 0代表无限制不能为空") |
| 58 | 48 | private BigDecimal atLeast; |
| 59 | 49 | |
| 60 | - @ApiModelProperty(value = "发放面额 当type为reward时需要添加", required = true) | |
| 50 | + | |
| 51 | + /* ============折扣类型——开始============= */ | |
| 52 | + | |
| 53 | + @ApiModelProperty(value = "优惠券类型 reward-满减 discount-折扣 random-随机", required = true) | |
| 54 | + @NotNull(message = "优惠券类型 reward-满减 discount-折扣 random-随机不能为空") | |
| 55 | + private String type; | |
| 56 | + | |
| 57 | + @ApiModelProperty(value = "发放面额 当type为reward时需要添加") | |
| 61 | 58 | @NotNull(message = "发放面额 当type为reward时需要添加不能为空") |
| 62 | 59 | private BigDecimal money; |
| 63 | 60 | |
| 64 | - @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加", required = true) | |
| 61 | + @ApiModelProperty(value = "1 =< 折扣 <= 9.9 当type为discount时需要添加") | |
| 65 | 62 | @NotNull(message = "1 =< 折扣 <= 9.9 当type为discount时需要添加不能为空") |
| 66 | 63 | private BigDecimal discount; |
| 67 | 64 | |
| 68 | - @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加", required = true) | |
| 65 | + @ApiModelProperty(value = "最多折扣金额 当type为discount时可选择性添加") | |
| 69 | 66 | @NotNull(message = "最多折扣金额 当type为discount时可选择性添加不能为空") |
| 70 | 67 | private BigDecimal discountLimit; |
| 71 | 68 | |
| ... | ... | @@ -77,9 +74,15 @@ public class CouponTempleteBaseVO { |
| 77 | 74 | @NotNull(message = "最大金额 当type为radom时需要添加不能为空") |
| 78 | 75 | private BigDecimal maxMoney; |
| 79 | 76 | |
| 77 | + /* ============折扣类型——结束============= */ | |
| 78 | + | |
| 79 | + | |
| 80 | + /* ============过期类型——开始============= */ | |
| 81 | + | |
| 82 | + | |
| 80 | 83 | @ApiModelProperty(value = "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期", required = true) |
| 81 | - @NotNull(message = "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期不能为空") | |
| 82 | - private Boolean validityType; | |
| 84 | + @NotNull(message = "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期 不能为空") | |
| 85 | + private Integer validityType; | |
| 83 | 86 | |
| 84 | 87 | @ApiModelProperty(value = "使用开始日期 过期类型1时必填") |
| 85 | 88 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| ... | ... | @@ -89,19 +92,26 @@ public class CouponTempleteBaseVO { |
| 89 | 92 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 90 | 93 | private Date endUseTime; |
| 91 | 94 | |
| 92 | - @ApiModelProperty(value = "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效", required = true) | |
| 95 | + @ApiModelProperty(value = "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效") | |
| 93 | 96 | @NotNull(message = "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效不能为空") |
| 94 | 97 | private Integer fixedTerm; |
| 95 | 98 | |
| 96 | - @ApiModelProperty(value = "是否无限制0-否 1是", required = true) | |
| 97 | - @NotNull(message = "是否无限制0-否 1是不能为空") | |
| 99 | + @ApiModelProperty(value = "有效日期结束时间") | |
| 100 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 101 | + private Date endTime; | |
| 102 | + | |
| 103 | + /* ============过期类型——结束============= */ | |
| 104 | + | |
| 105 | + | |
| 106 | + @ApiModelProperty(value = "领取是否无限制0-否 1是", required = true) | |
| 107 | + @NotNull(message = "是否无限制0-否 1是 不能为空") | |
| 98 | 108 | private Boolean whetherLimitless; |
| 99 | 109 | |
| 100 | 110 | @ApiModelProperty(value = "每人最大领取个数", required = true) |
| 101 | 111 | @NotNull(message = "每人最大领取个数不能为空") |
| 102 | 112 | private Integer maxFetch; |
| 103 | 113 | |
| 104 | - @ApiModelProperty(value = "是否开启过期提醒0-不开启 1-开启", required = true) | |
| 114 | + @ApiModelProperty(value = "是否开启过期提醒 0-不开启 1-开启", required = true) | |
| 105 | 115 | @NotNull(message = "是否开启过期提醒0-不开启 1-开启不能为空") |
| 106 | 116 | private Boolean whetherExpireNotice; |
| 107 | 117 | |
| ... | ... | @@ -117,6 +127,18 @@ public class CouponTempleteBaseVO { |
| 117 | 127 | @NotNull(message = "是否显示不能为空") |
| 118 | 128 | private Integer whetherShow; |
| 119 | 129 | |
| 130 | + @ApiModelProperty(value = "是否禁止发放0-否 1-是", required = true) | |
| 131 | + @NotNull(message = "是否禁止发放0-否 1-是不能为空") | |
| 132 | + private Boolean whetherForbidden; | |
| 133 | + | |
| 134 | + /* ============汇总计算——开始============= */ | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + @ApiModelProperty(value = "使用优惠券购买的商品数量", required = true) | |
| 139 | + @NotNull(message = "使用优惠券购买的商品数量不能为空") | |
| 140 | + private Integer orderGoodsNum; | |
| 141 | + | |
| 120 | 142 | @ApiModelProperty(value = "订单的优惠总金额", required = true) |
| 121 | 143 | @NotNull(message = "订单的优惠总金额不能为空") |
| 122 | 144 | private BigDecimal discountOrderMoney; |
| ... | ... | @@ -125,20 +147,26 @@ public class CouponTempleteBaseVO { |
| 125 | 147 | @NotNull(message = "用券总成交额不能为空") |
| 126 | 148 | private BigDecimal orderMoney; |
| 127 | 149 | |
| 128 | - @ApiModelProperty(value = "是否禁止发放0-否 1-是", required = true) | |
| 129 | - @NotNull(message = "是否禁止发放0-否 1-是不能为空") | |
| 130 | - private Boolean whetherForbidden; | |
| 150 | + @ApiModelProperty(value = "发放数量", required = true) | |
| 151 | + @NotNull(message = "发放数量不能为空") | |
| 152 | + private Integer count; | |
| 153 | + | |
| 154 | + @ApiModelProperty(value = "已领取数量", required = true) | |
| 155 | + @NotNull(message = "已领取数量不能为空") | |
| 156 | + private Integer leadCount; | |
| 157 | + | |
| 158 | + @ApiModelProperty(value = "已使用数量", required = true) | |
| 159 | + @NotNull(message = "已使用数量不能为空") | |
| 160 | + private Integer usedCount; | |
| 161 | + | |
| 162 | + | |
| 163 | + /* ============汇总计算——结束============= */ | |
| 131 | 164 | |
| 132 | - @ApiModelProperty(value = "使用优惠券购买的商品数量", required = true) | |
| 133 | - @NotNull(message = "使用优惠券购买的商品数量不能为空") | |
| 134 | - private Integer orderGoodsNum; | |
| 135 | 165 | |
| 136 | - @ApiModelProperty(value = "状态(1进行中2已结束-1已关闭)", required = true) | |
| 166 | + @ApiModelProperty(value = "状态(1进行中2已结束3已关闭)", required = true) | |
| 137 | 167 | @NotNull(message = "状态(1进行中2已结束-1已关闭)不能为空") |
| 138 | 168 | private Integer status; |
| 139 | 169 | |
| 140 | - @ApiModelProperty(value = "有效日期结束时间") | |
| 141 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 142 | - private Date endTime; | |
| 170 | + | |
| 143 | 171 | |
| 144 | 172 | } | ... | ... |
yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/CouponTemplete/CouponTempleteServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.coupon.service.CouponTemplete; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.module.CouponTemplete.enums.CouponTypeEnum; | |
| 4 | +import cn.iocoder.yudao.module.CouponTemplete.enums.CouponValidityTypeEnum; | |
| 3 | 5 | import cn.iocoder.yudao.module.coupon.controller.admin.coupontemplete.vo.CouponTempleteCreateReqVO; |
| 4 | 6 | import cn.iocoder.yudao.module.coupon.controller.admin.coupontemplete.vo.CouponTempleteExportReqVO; |
| 5 | 7 | import cn.iocoder.yudao.module.coupon.controller.admin.coupontemplete.vo.CouponTempletePageReqVO; |
| ... | ... | @@ -18,7 +20,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 18 | 20 | |
| 19 | 21 | |
| 20 | 22 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 21 | -import static cn.iocoder.yudao.module.CouponTemplete.enums.ErrorCodeConstants.COUPON_TEMPLETE_NOT_EXISTS; | |
| 23 | +import static cn.iocoder.yudao.module.CouponTemplete.enums.ErrorCodeConstants.*; | |
| 22 | 24 | |
| 23 | 25 | /** |
| 24 | 26 | * 优惠券模板 Service 实现类 |
| ... | ... | @@ -36,11 +38,57 @@ public class CouponTempleteServiceImpl implements CouponTempleteService { |
| 36 | 38 | public Long create(CouponTempleteCreateReqVO createReqVO) { |
| 37 | 39 | // 插入 |
| 38 | 40 | CouponTempleteDO couponTempleteDO = CouponTempleteConvert.INSTANCE.convert(createReqVO); |
| 41 | + /* 验证类型、判断必填*/ | |
| 42 | + checkCouponType(createReqVO); | |
| 43 | + | |
| 44 | + /*todo 验证过期类型、判断必填*/ | |
| 45 | + checkValidityType(createReqVO); | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 39 | 49 | couponTempleteMapper.insert(couponTempleteDO); |
| 40 | 50 | // 返回 |
| 41 | 51 | return couponTempleteDO.getId(); |
| 42 | 52 | } |
| 43 | 53 | |
| 54 | + /*确认优惠券类型*/ | |
| 55 | + private void checkValidityType(CouponTempleteCreateReqVO createReqVO) { | |
| 56 | + Integer validtyType = createReqVO.getValidityType(); | |
| 57 | + | |
| 58 | + if(CouponValidityTypeEnum.TIME_RANGE_EXPIRTED.getStatus().equals(validtyType)){ | |
| 59 | + if(createReqVO.getStartUseTime() == null||createReqVO.getEndUseTime() == null){ | |
| 60 | + throw exception(START_END_TIME_NOT_NULL); | |
| 61 | + } | |
| 62 | + }else{ | |
| 63 | + if(createReqVO.getFixedTerm() == null){ | |
| 64 | + throw exception(FIXED_TERM_NOT_NULL); | |
| 65 | + } | |
| 66 | + } | |
| 67 | + } | |
| 68 | + | |
| 69 | + private void checkCouponType(CouponTempleteCreateReqVO createReqVO) { | |
| 70 | + | |
| 71 | + String couponType = createReqVO.getType(); | |
| 72 | + //当type=reward时候,需要添加 | |
| 73 | + if(couponType.equals(CouponTypeEnum.REWARD.getName())){ | |
| 74 | + if(createReqVO.getMoney()==null){ | |
| 75 | + throw exception(MONEY_NOT_NULL); | |
| 76 | + } | |
| 77 | + }else if(couponType.equals(CouponTypeEnum.DISCOUNT.getName())){ | |
| 78 | + if(createReqVO.getDiscount()==null){ | |
| 79 | + throw exception(DISCOUNT_NOT_NULL); | |
| 80 | + } | |
| 81 | + if(createReqVO.getDiscountLimit()==null){ | |
| 82 | + throw exception(DISCOUNT_LIMIT_NOT_NULL); | |
| 83 | + } | |
| 84 | + }else if (couponType.equals(CouponTypeEnum.RANDOW.getName())){ | |
| 85 | + //当type为radom时需要添加不能为空 | |
| 86 | + if(createReqVO.getMinMoney()==null||createReqVO.getMaxMoney()==null){ | |
| 87 | + throw exception(MIN_MAX_NOT_NULL); | |
| 88 | + } | |
| 89 | + } | |
| 90 | + } | |
| 91 | + | |
| 44 | 92 | @Override |
| 45 | 93 | public void update(CouponTempleteUpdateReqVO updateReqVO) { |
| 46 | 94 | // 校验存在 | ... | ... |
yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponService.java
| ... | ... | @@ -16,10 +16,10 @@ public interface CouponService { |
| 16 | 16 | /** |
| 17 | 17 | * 创建优惠券 |
| 18 | 18 | * |
| 19 | - * @param createReqVO 创建信息 | |
| 19 | + * @param templateId 优惠券模板id | |
| 20 | 20 | * @return 编号 |
| 21 | 21 | */ |
| 22 | - Long create(@Valid CouponCreateReqVO createReqVO); | |
| 22 | + Long create(Long templateId); | |
| 23 | 23 | |
| 24 | 24 | /** |
| 25 | 25 | * 更新优惠券 | ... | ... |
yudao-module-mall/yudao-module-coupon-biz/src/main/java/cn/iocoder/yudao/module/coupon/service/coupon/CouponServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.coupon.service.coupon; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.bean.BeanUtil; | |
| 4 | +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | |
| 5 | +import cn.iocoder.yudao.module.coupon.dal.dataobject.CouponTemplete.CouponTempleteDO; | |
| 6 | +import cn.iocoder.yudao.module.coupon.dal.mysql.CouponTemplete.CouponTempleteMapper; | |
| 7 | +import io.micrometer.core.instrument.Counter; | |
| 3 | 8 | import org.springframework.stereotype.Service; |
| 4 | 9 | import javax.annotation.Resource; |
| 5 | 10 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -27,7 +32,9 @@ public class CouponServiceImpl implements CouponService { |
| 27 | 32 | @Resource |
| 28 | 33 | private CouponMapper couponMapper; |
| 29 | 34 | |
| 30 | - @Override | |
| 35 | + @Resource | |
| 36 | + private CouponTempleteMapper couponTempleteMapper; | |
| 37 | + | |
| 31 | 38 | public Long create(CouponCreateReqVO createReqVO) { |
| 32 | 39 | // 插入 |
| 33 | 40 | CouponDO couponDO = CouponConvert.INSTANCE.convert(createReqVO); |
| ... | ... | @@ -36,6 +43,24 @@ public class CouponServiceImpl implements CouponService { |
| 36 | 43 | return couponDO.getId(); |
| 37 | 44 | } |
| 38 | 45 | |
| 46 | + | |
| 47 | + /** | |
| 48 | + *todo 获取用户id收获优惠券 | |
| 49 | + *@author:wxr | |
| 50 | + *@date:2022-08-13 3:11 | |
| 51 | + *@Description | |
| 52 | + */ | |
| 53 | + @Override | |
| 54 | + public Long create(Long templateId) { | |
| 55 | + Long userid = SecurityFrameworkUtils.getLoginUserId(); | |
| 56 | + CouponDO couponDO = CouponDO.builder().memberId(userid).build(); | |
| 57 | + CouponTempleteDO couponTempleteDO = couponTempleteMapper.selectById(templateId); | |
| 58 | + //todo 缺少判空 | |
| 59 | + BeanUtil.copyProperties(couponTempleteDO,couponTempleteDO); | |
| 60 | + couponMapper.insert(couponDO); | |
| 61 | + return couponDO.getId(); | |
| 62 | + } | |
| 63 | + | |
| 39 | 64 | @Override |
| 40 | 65 | public void update(CouponUpdateReqVO updateReqVO) { |
| 41 | 66 | // 校验存在 | ... | ... |
yudao-ui-admin/.env.dev
yudao-ui-admin/.env.local
yudao-ui-admin/.eslintignore
yudao-ui-admin/src/api/mall/CouponTemplete/CouponTemplete.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +// 创建优惠券模板 | |
| 4 | +export function create(data) { | |
| 5 | + return request({ | |
| 6 | + url: '/coupon/CouponTemplete/create', | |
| 7 | + method: 'post', | |
| 8 | + data: data | |
| 9 | + }) | |
| 10 | +} | |
| 11 | + | |
| 12 | +// 更新优惠券模板 | |
| 13 | +export function update(data) { | |
| 14 | + return request({ | |
| 15 | + url: '/coupon/CouponTemplete/update', | |
| 16 | + method: 'put', | |
| 17 | + data: data | |
| 18 | + }) | |
| 19 | +} | |
| 20 | + | |
| 21 | +// 删除优惠券模板 | |
| 22 | +export function deleteCouponTemplete (id) { | |
| 23 | + return request({ | |
| 24 | + url: '/coupon/CouponTemplete/delete?id=' + id, | |
| 25 | + method: 'delete' | |
| 26 | + }) | |
| 27 | +} | |
| 28 | + | |
| 29 | +// 获得优惠券模板 | |
| 30 | +export function get(id) { | |
| 31 | + return request({ | |
| 32 | + url: '/coupon/CouponTemplete/get?id=' + id, | |
| 33 | + method: 'get' | |
| 34 | + }) | |
| 35 | +} | |
| 36 | + | |
| 37 | +// 获得优惠券模板分页 | |
| 38 | +export function getPage(query) { | |
| 39 | + return request({ | |
| 40 | + url: '/coupon/CouponTemplete/page', | |
| 41 | + method: 'get', | |
| 42 | + params: query | |
| 43 | + }) | |
| 44 | +} | |
| 45 | + | |
| 46 | +// 导出优惠券模板 Excel | |
| 47 | +export function exportExcel(query) { | |
| 48 | + return request({ | |
| 49 | + url: '/coupon/CouponTemplete/export-excel', | |
| 50 | + method: 'get', | |
| 51 | + params: query, | |
| 52 | + responseType: 'blob' | |
| 53 | + }) | |
| 54 | +} | ... | ... |
yudao-ui-admin/src/views/mall/CouponTemplete/index.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="app-container"> | |
| 3 | + | |
| 4 | + <!-- 搜索工作栏 --> | |
| 5 | + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> | |
| 6 | + <el-form-item label="优惠券类" prop="type"> | |
| 7 | + <el-select v-model="queryParams.type" placeholder="请选择优惠券类型 reward-满减 discount-折扣 random-随机" clearable size="small"> | |
| 8 | + <el-option label="请选择字典生成" value="" /> | |
| 9 | + </el-select> | |
| 10 | + </el-form-item> | |
| 11 | + <el-form-item label="优惠券名称" prop="name"> | |
| 12 | + <el-input v-model="queryParams.name" placeholder="请输入优惠券名称" clearable @keyup.enter.native="handleQuery"/> | |
| 13 | + </el-form-item> | |
| 14 | + | |
| 15 | + <el-form-item label="状态" prop="status"> | |
| 16 | + <el-select v-model="queryParams.status" placeholder="请选择状态(1进行中2已结束-1已关闭)" clearable size="small"> | |
| 17 | + <el-option label="请选择字典生成" value="" /> | |
| 18 | + </el-select> | |
| 19 | + </el-form-item> | |
| 20 | + <el-form-item label="有效日期结束时间" prop="endTime"> | |
| 21 | + <el-date-picker v-model="queryParams.endTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange" | |
| 22 | + range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" /> | |
| 23 | + </el-form-item> | |
| 24 | + | |
| 25 | + <el-form-item> | |
| 26 | + <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button> | |
| 27 | + <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button> | |
| 28 | + </el-form-item> | |
| 29 | + </el-form> | |
| 30 | + | |
| 31 | + <!-- 操作工具栏 --> | |
| 32 | + <el-row :gutter="10" class="mb8"> | |
| 33 | + <el-col :span="1.5"> | |
| 34 | + <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" | |
| 35 | + v-hasPermi="['CouponTemplete::create']">新增</el-button> | |
| 36 | + </el-col> | |
| 37 | + <el-col :span="1.5"> | |
| 38 | + <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading" | |
| 39 | + v-hasPermi="['CouponTemplete::export']">导出</el-button> | |
| 40 | + </el-col> | |
| 41 | + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | |
| 42 | + </el-row> | |
| 43 | + | |
| 44 | + <!-- 列表 --> | |
| 45 | + <el-table v-loading="loading" :data="list"> | |
| 46 | + <el-table-column label="用户ID" align="center" prop="id" /> | |
| 47 | + | |
| 48 | + <!-- todo 优惠券类型--> | |
| 49 | + <el-table-column label="优惠券类型" align="center" prop="type" /> | |
| 50 | + <el-table-column label="优惠券名称" align="center" prop="name" /> | |
| 51 | + <el-table-column label="优惠券图片" align="center" prop="image" /> | |
| 52 | + <el-table-column label="发放数量" align="center" prop="count" /> | |
| 53 | + <el-table-column label="已领取数量" align="center" prop="leadCount" /> | |
| 54 | + <el-table-column label="已使用数量" align="center" prop="usedCount" /> | |
| 55 | +<!-- todo 适用商品类型--> | |
| 56 | +<!-- <el-table-column label="适用商品类型" align="center" prop="goodsType" />--> | |
| 57 | + <!-- todo 使用门槛0-无门槛 1-有门槛--> | |
| 58 | + | |
| 59 | + <el-table-column label="使用门槛" align="center" prop="hasUseLimit" /> | |
| 60 | +<!-- <el-table-column label="满多少元使用 0代表无限制" align="center" prop="atLeast" />--> | |
| 61 | + <!-- todo 发放面额 折扣--> | |
| 62 | + <el-table-column label="优惠金额/折扣" align="center" prop="money" /> | |
| 63 | +<!-- <el-table-column label="1 =< 折扣 <= 9.9 当type为discount时需要添加" align="center" prop="discount" />--> | |
| 64 | +<!-- <el-table-column label="最多折扣金额 当type为discount时可选择性添加" align="center" prop="discountLimit" />--> | |
| 65 | +<!-- <el-table-column label="最低金额 当type为radom时需要添加" align="center" prop="minMoney" />--> | |
| 66 | +<!-- <el-table-column label="最大金额 当type为radom时需要添加" align="center" prop="maxMoney" />--> | |
| 67 | + <!-- todo 1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期 --> | |
| 68 | + <el-table-column label="有效期限" align="center" prop="validityType" /> | |
| 69 | +<!-- <el-table-column label="使用开始日期 过期类型1时必填" align="center" prop="startUseTime" width="180">--> | |
| 70 | +<!-- <template slot-scope="scope">--> | |
| 71 | +<!-- <span>{{ parseTime(scope.row.startUseTime) }}</span>--> | |
| 72 | +<!-- </template>--> | |
| 73 | +<!-- </el-table-column>--> | |
| 74 | +<!-- <el-table-column label="使用结束日期 过期类型1时必填" align="center" prop="endUseTime" width="180">--> | |
| 75 | +<!-- <template slot-scope="scope">--> | |
| 76 | +<!-- <span>{{ parseTime(scope.row.endUseTime) }}</span>--> | |
| 77 | +<!-- </template>--> | |
| 78 | +<!-- </el-table-column>--> | |
| 79 | +<!-- <el-table-column label="有效日期结束时间" align="center" prop="endTime" width="180">--> | |
| 80 | +<!-- <template slot-scope="scope">--> | |
| 81 | +<!-- <span>{{ parseTime(scope.row.endTime) }}</span>--> | |
| 82 | +<!-- </template>--> | |
| 83 | +<!-- </el-table-column>--> | |
| 84 | +<!-- <el-table-column label="当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效" align="center" prop="fixedTerm" />--> | |
| 85 | +<!-- <el-table-column label="是否无限制0-否 1是" align="center" prop="whetherLimitless" />--> | |
| 86 | + <el-table-column label="领取上限" align="center" prop="maxFetch" /> | |
| 87 | + <!-- todo 0-不限制 1- 优惠券仅原价购买商品时可用--> | |
| 88 | + <el-table-column label="优惠叠加" align="center" prop="whetherForbidPreference" /> | |
| 89 | + <el-table-column label="是否显示" align="center" prop="whetherShow" /> | |
| 90 | + <el-table-column label="订单的优惠总金额" align="center" prop="discountOrderMoney" /> | |
| 91 | + <el-table-column label="用券总成交额" align="center" prop="orderMoney" /> | |
| 92 | + <el-table-column label="是否禁止发放" align="center" prop="whetherForbidden" /> | |
| 93 | + <el-table-column label="使用优惠券购买的商品数量" align="center" prop="orderGoodsNum" /> | |
| 94 | + <el-table-column label="状态" align="center" prop="status" /> | |
| 95 | + | |
| 96 | + <el-table-column label="备注" align="center" prop="couponNameRemark" /> | |
| 97 | + | |
| 98 | + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | |
| 99 | + | |
| 100 | + <template #scope> | |
| 101 | + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" | |
| 102 | + v-hasPermi="['CouponTemplete::update']">修改</el-button> | |
| 103 | + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" | |
| 104 | + v-hasPermi="['CouponTemplete::delete']">删除</el-button> | |
| 105 | + </template> | |
| 106 | + </el-table-column> | |
| 107 | + </el-table> | |
| 108 | + <!-- 分页组件 --> | |
| 109 | + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" | |
| 110 | + @pagination="getList"/> | |
| 111 | + | |
| 112 | + <!-- 对话框(添加 / 修改) --> | |
| 113 | + <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> | |
| 114 | + <el-form ref="form" :model="form" :rules="rules" label-width="150px"> | |
| 115 | + <el-form-item label="优惠券类型" prop="type"> | |
| 116 | + <el-select v-model="form.type" placeholder="请选择优惠券类型 reward-满减 discount-折扣 random-随机"> | |
| 117 | + <el-option label="请选择字典生成" value="" /> | |
| 118 | + </el-select> | |
| 119 | + </el-form-item> | |
| 120 | + <el-form-item label="优惠券名称" prop="name"> | |
| 121 | + <el-input v-model="form.name" placeholder="请输入优惠券名称" /> | |
| 122 | + </el-form-item> | |
| 123 | + <el-form-item label="名称备注" prop="couponNameRemark"> | |
| 124 | + <el-input v-model="form.couponNameRemark" placeholder="请输入名称备注" /> | |
| 125 | + </el-form-item> | |
| 126 | + <el-form-item label="发放数量" prop="count"> | |
| 127 | + <el-input v-model="form.count" placeholder="请输入发放数量" /> | |
| 128 | + </el-form-item> | |
| 129 | + <el-form-item label="适用商品类型" prop="goodsType"> | |
| 130 | + <el-radio-group v-model="form.goodsType"> | |
| 131 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 132 | + </el-radio-group> | |
| 133 | + </el-form-item> | |
| 134 | + <!-- todo 请输入适用商品id--> | |
| 135 | + <el-form-item label="适用商品id" prop="productIds"> | |
| 136 | + <el-input v-model="form.productIds" placeholder="请输入适用商品id" /> | |
| 137 | + </el-form-item> | |
| 138 | + <el-form-item label="使用门槛" prop="hasUseLimit"> | |
| 139 | + <el-radio-group v-model="form.hasUseLimit"> | |
| 140 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 141 | + </el-radio-group> | |
| 142 | + </el-form-item> | |
| 143 | + <el-form-item label="满多少元使用" prop="atLeast"> | |
| 144 | + <el-input v-model="form.atLeast" placeholder="请输入满多少元使用 0代表无限制" /> | |
| 145 | + </el-form-item> | |
| 146 | + <el-form-item label="发放面额" prop="money"> | |
| 147 | + <el-input v-model="form.money" placeholder="请输入发放面额 当type为reward时需要添加" /> | |
| 148 | + </el-form-item> | |
| 149 | + <el-form-item label="1 =< 折扣 <= 9.9" prop="discount"> | |
| 150 | + <el-input v-model="form.discount" placeholder="请输入1 =< 折扣 <= 9.9 当type为discount时需要添加" /> | |
| 151 | + </el-form-item> | |
| 152 | + <el-form-item label="最多折扣金额" prop="discountLimit"> | |
| 153 | + <el-input v-model="form.discountLimit" placeholder="请输入最多折扣金额 当type为discount时可选择性添加" /> | |
| 154 | + </el-form-item> | |
| 155 | + <el-form-item label="最低金额" prop="minMoney"> | |
| 156 | + <el-input v-model="form.minMoney" placeholder="请输入最低金额 当type为radom时需要添加" /> | |
| 157 | + </el-form-item> | |
| 158 | + <el-form-item label="最大金额" prop="maxMoney"> | |
| 159 | + <el-input v-model="form.maxMoney" placeholder="请输入最大金额 当type为radom时需要添加" /> | |
| 160 | + </el-form-item> | |
| 161 | + <el-form-item label="过期类型" prop="validityType"> | |
| 162 | + <el-radio-group v-model="form.validityType"> | |
| 163 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 164 | + </el-radio-group> | |
| 165 | + </el-form-item> | |
| 166 | + <el-form-item label="使用开始日期 过期类型1时必填" prop="startUseTime"> | |
| 167 | + <el-date-picker clearable v-model="form.startUseTime" type="date" value-format="timestamp" placeholder="选择使用开始日期 过期类型1时必填" /> | |
| 168 | + </el-form-item> | |
| 169 | + <el-form-item label="使用结束日期 过期类型1时必填" prop="endUseTime"> | |
| 170 | + <el-date-picker clearable v-model="form.endUseTime" type="date" value-format="timestamp" placeholder="选择使用结束日期 过期类型1时必填" /> | |
| 171 | + </el-form-item> | |
| 172 | + <el-form-item label="当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效" prop="fixedTerm"> | |
| 173 | + <el-input v-model="form.fixedTerm" placeholder="请输入当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效" /> | |
| 174 | + </el-form-item> | |
| 175 | + <el-form-item label="是否无限制0-否 1是" prop="whetherLimitless"> | |
| 176 | + <el-radio-group v-model="form.whetherLimitless"> | |
| 177 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 178 | + </el-radio-group> | |
| 179 | + </el-form-item> | |
| 180 | + <el-form-item label="每人最大领取个数" prop="maxFetch"> | |
| 181 | + <el-input v-model="form.maxFetch" placeholder="请输入每人最大领取个数" /> | |
| 182 | + </el-form-item> | |
| 183 | + <el-form-item label="是否开启过期提醒0-不开启 1-开启" prop="whetherExpireNotice"> | |
| 184 | + <el-radio-group v-model="form.whetherExpireNotice"> | |
| 185 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 186 | + </el-radio-group> | |
| 187 | + </el-form-item> | |
| 188 | + <el-form-item label="过期前N天提醒" prop="expireNoticeFixedTerm"> | |
| 189 | + <el-input v-model="form.expireNoticeFixedTerm" placeholder="请输入过期前N天提醒" /> | |
| 190 | + </el-form-item> | |
| 191 | + <el-form-item label="优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用" prop="whetherForbidPreference"> | |
| 192 | + <el-radio-group v-model="form.whetherForbidPreference"> | |
| 193 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 194 | + </el-radio-group> | |
| 195 | + </el-form-item> | |
| 196 | + <el-form-item label="是否显示" prop="whetherShow"> | |
| 197 | + <el-input v-model="form.whetherShow" placeholder="请输入是否显示" /> | |
| 198 | + </el-form-item> | |
| 199 | + <el-form-item label="订单的优惠总金额" prop="discountOrderMoney"> | |
| 200 | + <el-input v-model="form.discountOrderMoney" placeholder="请输入订单的优惠总金额" /> | |
| 201 | + </el-form-item> | |
| 202 | + <el-form-item label="用券总成交额" prop="orderMoney"> | |
| 203 | + <el-input v-model="form.orderMoney" placeholder="请输入用券总成交额" /> | |
| 204 | + </el-form-item> | |
| 205 | + <el-form-item label="是否禁止发放0-否 1-是" prop="whetherForbidden"> | |
| 206 | + <el-radio-group v-model="form.whetherForbidden"> | |
| 207 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 208 | + </el-radio-group> | |
| 209 | + </el-form-item> | |
| 210 | + <el-form-item label="使用优惠券购买的商品数量" prop="orderGoodsNum"> | |
| 211 | + <el-input v-model="form.orderGoodsNum" placeholder="请输入使用优惠券购买的商品数量" /> | |
| 212 | + </el-form-item> | |
| 213 | + <el-form-item label="状态" prop="status"> | |
| 214 | + <el-radio-group v-model="form.status"> | |
| 215 | + <el-radio label="1">请选择字典生成</el-radio> | |
| 216 | + </el-radio-group> | |
| 217 | + </el-form-item> | |
| 218 | + <el-form-item label="有效日期结束时间" prop="endTime"> | |
| 219 | + <el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择有效日期结束时间" /> | |
| 220 | + </el-form-item> | |
| 221 | + </el-form> | |
| 222 | + <div slot="footer" class="dialog-footer"> | |
| 223 | + <el-button type="primary" @click="submitForm">确 定</el-button> | |
| 224 | + <el-button @click="cancel">取 消</el-button> | |
| 225 | + </div> | |
| 226 | + </el-dialog> | |
| 227 | + </div> | |
| 228 | +</template> | |
| 229 | + | |
| 230 | +<script> | |
| 231 | +import { create, update, deleteCouponTemplete, get, getPage, exportExcel } from "@/api/mall/CouponTemplete/CouponTemplete.js"; | |
| 232 | + | |
| 233 | +export default { | |
| 234 | + name: "", | |
| 235 | + components: { | |
| 236 | + }, | |
| 237 | + data() { | |
| 238 | + return { | |
| 239 | + // 遮罩层 | |
| 240 | + loading: true, | |
| 241 | + // 导出遮罩层 | |
| 242 | + exportLoading: false, | |
| 243 | + // 显示搜索条件 | |
| 244 | + showSearch: true, | |
| 245 | + // 总条数 | |
| 246 | + total: 0, | |
| 247 | + // 优惠券模板列表 | |
| 248 | + list: [], | |
| 249 | + // 弹出层标题 | |
| 250 | + title: "", | |
| 251 | + // 是否显示弹出层 | |
| 252 | + open: false, | |
| 253 | + // 查询参数 | |
| 254 | + queryParams: { | |
| 255 | + pageNo: 1, | |
| 256 | + pageSize: 10, | |
| 257 | + type: null, | |
| 258 | + name: null, | |
| 259 | + couponNameRemark: null, | |
| 260 | + image: null, | |
| 261 | + count: null, | |
| 262 | + leadCount: null, | |
| 263 | + usedCount: null, | |
| 264 | + goodsType: null, | |
| 265 | + productIds: null, | |
| 266 | + hasUseLimit: null, | |
| 267 | + atLeast: null, | |
| 268 | + money: null, | |
| 269 | + discount: null, | |
| 270 | + discountLimit: null, | |
| 271 | + minMoney: null, | |
| 272 | + maxMoney: null, | |
| 273 | + validityType: null, | |
| 274 | + startUseTime: [], | |
| 275 | + endUseTime: [], | |
| 276 | + fixedTerm: null, | |
| 277 | + whetherLimitless: null, | |
| 278 | + maxFetch: null, | |
| 279 | + whetherExpireNotice: null, | |
| 280 | + expireNoticeFixedTerm: null, | |
| 281 | + whetherForbidPreference: null, | |
| 282 | + whetherShow: null, | |
| 283 | + discountOrderMoney: null, | |
| 284 | + orderMoney: null, | |
| 285 | + whetherForbidden: null, | |
| 286 | + orderGoodsNum: null, | |
| 287 | + status: null, | |
| 288 | + endTime: [], | |
| 289 | + createTime: [], | |
| 290 | + }, | |
| 291 | + // 表单参数 | |
| 292 | + form: {}, | |
| 293 | + // 表单校验 | |
| 294 | + rules: { | |
| 295 | + type: [{ required: true, message: "优惠券类型 reward-满减 discount-折扣 random-随机不能为空", trigger: "change" }], | |
| 296 | + name: [{ required: true, message: "优惠券名称不能为空", trigger: "blur" }], | |
| 297 | + count: [{ required: true, message: "发放数量不能为空", trigger: "blur" }], | |
| 298 | + leadCount: [{ required: true, message: "已领取数量不能为空", trigger: "blur" }], | |
| 299 | + usedCount: [{ required: true, message: "已使用数量不能为空", trigger: "blur" }], | |
| 300 | + goodsType: [{ required: true, message: "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用不能为空", trigger: "blur" }], | |
| 301 | + hasUseLimit: [{ required: true, message: "使用门槛0-无门槛 1-有门槛不能为空", trigger: "blur" }], | |
| 302 | + atLeast: [{ required: true, message: "满多少元使用 0代表无限制不能为空", trigger: "blur" }], | |
| 303 | + money: [{ required: true, message: "发放面额 当type为reward时需要添加不能为空", trigger: "blur" }], | |
| 304 | + discount: [{ required: true, message: "1 =< 折扣 <= 9.9 当type为discount时需要添加不能为空", trigger: "blur" }], | |
| 305 | + discountLimit: [{ required: true, message: "最多折扣金额 当type为discount时可选择性添加不能为空", trigger: "blur" }], | |
| 306 | + minMoney: [{ required: true, message: "最低金额 当type为radom时需要添加不能为空", trigger: "blur" }], | |
| 307 | + maxMoney: [{ required: true, message: "最大金额 当type为radom时需要添加不能为空", trigger: "blur" }], | |
| 308 | + validityType: [{ required: true, message: "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期不能为空", trigger: "blur" }], | |
| 309 | + fixedTerm: [{ required: true, message: "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效不能为空", trigger: "blur" }], | |
| 310 | + whetherLimitless: [{ required: true, message: "是否无限制0-否 1是不能为空", trigger: "blur" }], | |
| 311 | + maxFetch: [{ required: true, message: "每人最大领取个数不能为空", trigger: "blur" }], | |
| 312 | + whetherExpireNotice: [{ required: true, message: "是否开启过期提醒0-不开启 1-开启不能为空", trigger: "blur" }], | |
| 313 | + expireNoticeFixedTerm: [{ required: true, message: "过期前N天提醒不能为空", trigger: "blur" }], | |
| 314 | + whetherForbidPreference: [{ required: true, message: "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用不能为空", trigger: "blur" }], | |
| 315 | + whetherShow: [{ required: true, message: "是否显示不能为空", trigger: "blur" }], | |
| 316 | + discountOrderMoney: [{ required: true, message: "订单的优惠总金额不能为空", trigger: "blur" }], | |
| 317 | + orderMoney: [{ required: true, message: "用券总成交额不能为空", trigger: "blur" }], | |
| 318 | + whetherForbidden: [{ required: true, message: "是否禁止发放0-否 1-是不能为空", trigger: "blur" }], | |
| 319 | + orderGoodsNum: [{ required: true, message: "使用优惠券购买的商品数量不能为空", trigger: "blur" }], | |
| 320 | + status: [{ required: true, message: "状态(1进行中2已结束-1已关闭)不能为空", trigger: "blur" }], | |
| 321 | + } | |
| 322 | + }; | |
| 323 | + }, | |
| 324 | + created() { | |
| 325 | + this.getList(); | |
| 326 | + }, | |
| 327 | + methods: { | |
| 328 | + /** 查询列表 */ | |
| 329 | + getList() { | |
| 330 | + this.loading = true; | |
| 331 | + // 执行查询 | |
| 332 | + getPage(this.queryParams).then(response => { | |
| 333 | + this.list = response.data.list; | |
| 334 | + this.total = response.data.total; | |
| 335 | + this.loading = false; | |
| 336 | + }); | |
| 337 | + }, | |
| 338 | + /** 取消按钮 */ | |
| 339 | + cancel() { | |
| 340 | + this.open = false; | |
| 341 | + this.reset(); | |
| 342 | + }, | |
| 343 | + /** 表单重置 */ | |
| 344 | + reset() { | |
| 345 | + this.form = { | |
| 346 | + id: undefined, | |
| 347 | + type: undefined, | |
| 348 | + name: undefined, | |
| 349 | + couponNameRemark: undefined, | |
| 350 | + image: undefined, | |
| 351 | + count: undefined, | |
| 352 | + leadCount: undefined, | |
| 353 | + usedCount: undefined, | |
| 354 | + goodsType: undefined, | |
| 355 | + productIds: undefined, | |
| 356 | + hasUseLimit: undefined, | |
| 357 | + atLeast: undefined, | |
| 358 | + money: undefined, | |
| 359 | + discount: undefined, | |
| 360 | + discountLimit: undefined, | |
| 361 | + minMoney: undefined, | |
| 362 | + maxMoney: undefined, | |
| 363 | + validityType: undefined, | |
| 364 | + startUseTime: undefined, | |
| 365 | + endUseTime: undefined, | |
| 366 | + fixedTerm: undefined, | |
| 367 | + whetherLimitless: undefined, | |
| 368 | + maxFetch: undefined, | |
| 369 | + whetherExpireNotice: undefined, | |
| 370 | + expireNoticeFixedTerm: undefined, | |
| 371 | + whetherForbidPreference: undefined, | |
| 372 | + whetherShow: undefined, | |
| 373 | + discountOrderMoney: undefined, | |
| 374 | + orderMoney: undefined, | |
| 375 | + whetherForbidden: undefined, | |
| 376 | + orderGoodsNum: undefined, | |
| 377 | + status: undefined, | |
| 378 | + endTime: undefined, | |
| 379 | + }; | |
| 380 | + this.resetForm("form"); | |
| 381 | + }, | |
| 382 | + /** 搜索按钮操作 */ | |
| 383 | + handleQuery() { | |
| 384 | + this.queryParams.pageNo = 1; | |
| 385 | + this.getList(); | |
| 386 | + }, | |
| 387 | + /** 重置按钮操作 */ | |
| 388 | + resetQuery() { | |
| 389 | + this.resetForm("queryForm"); | |
| 390 | + this.handleQuery(); | |
| 391 | + }, | |
| 392 | + /** 新增按钮操作 */ | |
| 393 | + handleAdd() { | |
| 394 | + this.reset(); | |
| 395 | + this.open = true; | |
| 396 | + this.title = "添加优惠券模板"; | |
| 397 | + }, | |
| 398 | + /** 修改按钮操作 */ | |
| 399 | + handleUpdate(row) { | |
| 400 | + this.reset(); | |
| 401 | + const id = row.id; | |
| 402 | + get(id).then(response => { | |
| 403 | + this.form = response.data; | |
| 404 | + this.open = true; | |
| 405 | + this.title = "修改优惠券模板"; | |
| 406 | + }); | |
| 407 | + }, | |
| 408 | + /** 提交按钮 */ | |
| 409 | + submitForm() { | |
| 410 | + this.$refs["form"].validate(valid => { | |
| 411 | + if (!valid) { | |
| 412 | + return; | |
| 413 | + } | |
| 414 | + // 修改的提交 | |
| 415 | + if (this.form.id != null) { | |
| 416 | + update(this.form).then(response => { | |
| 417 | + this.$modal.msgSuccess("修改成功"); | |
| 418 | + this.open = false; | |
| 419 | + this.getList(); | |
| 420 | + }); | |
| 421 | + return; | |
| 422 | + } | |
| 423 | + // 添加的提交 | |
| 424 | + create(this.form).then(response => { | |
| 425 | + this.$modal.msgSuccess("新增成功"); | |
| 426 | + this.open = false; | |
| 427 | + this.getList(); | |
| 428 | + }); | |
| 429 | + }); | |
| 430 | + }, | |
| 431 | + /** 删除按钮操作 */ | |
| 432 | + handleDelete(row) { | |
| 433 | + const id = row.id; | |
| 434 | + this.$modal.confirm('是否确认删除优惠券模板编号为"' + id + '"的数据项?').then(function() { | |
| 435 | + return deleteCouponTemplete(id); | |
| 436 | + }).then(() => { | |
| 437 | + this.getList(); | |
| 438 | + this.$modal.msgSuccess("删除成功"); | |
| 439 | + }).catch(() => {}); | |
| 440 | + }, | |
| 441 | + /** 导出按钮操作 */ | |
| 442 | + handleExport() { | |
| 443 | + // 处理查询参数 | |
| 444 | + let params = {...this.queryParams}; | |
| 445 | + params.pageNo = undefined; | |
| 446 | + params.pageSize = undefined; | |
| 447 | + this.$modal.confirm('是否确认导出所有优惠券模板数据项?').then(() => { | |
| 448 | + this.exportLoading = true; | |
| 449 | + return exportExcel(params); | |
| 450 | + }).then(response => { | |
| 451 | + this.$download.excel(response, '优惠券模板.xls'); | |
| 452 | + this.exportLoading = false; | |
| 453 | + }).catch(() => {}); | |
| 454 | + } | |
| 455 | + } | |
| 456 | +}; | |
| 457 | +</script> | ... | ... |