Commit bd661296c07abf62d4347ff3e8a36e00116c2712

Authored by YunaiV
1 parent 2aaeb7af

promotion:完善优惠劵模板的功能

yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java
... ... @@ -53,6 +53,7 @@ public class ProductSpuController {
53 53 return success(true);
54 54 }
55 55  
  56 + // TODO 芋艿:修改接口
56 57 @GetMapping("/get/detail")
57 58 @ApiOperation("获得商品 SPU")
58 59 @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
... ... @@ -79,6 +80,14 @@ public class ProductSpuController {
79 80 return success(ProductSpuConvert.INSTANCE.convertList(list));
80 81 }
81 82  
  83 + @GetMapping("/get-simple-list")
  84 + @ApiOperation("获得商品 SPU 精简列表")
  85 + @PreAuthorize("@ss.hasPermission('product:spu:query')")
  86 + public CommonResult<List<ProductSpuSimpleRespVO>> getSpuSimpleList() {
  87 + List<ProductSpuDO> list = spuService.getSpuList();
  88 + return success(ProductSpuConvert.INSTANCE.convertList02(list));
  89 + }
  90 +
82 91 @GetMapping("/page")
83 92 @ApiOperation("获得商品 SPU 分页")
84 93 @PreAuthorize("@ss.hasPermission('product:spu:query')")
... ...
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuSimpleRespVO.java 0 → 100755
  1 +package cn.iocoder.yudao.module.product.controller.admin.spu.vo;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +@ApiModel("管理后台 - 商品 SPU 精简 Response VO")
  10 +@Data
  11 +@EqualsAndHashCode(callSuper = true)
  12 +@ToString(callSuper = true)
  13 +public class ProductSpuSimpleRespVO extends ProductSpuBaseVO {
  14 +
  15 + @ApiModelProperty(value = "主键", required = true, example = "1")
  16 + private Long id;
  17 +
  18 + @ApiModelProperty(value = "商品名称", required = true, example = "芋道")
  19 + private String name;
  20 +
  21 + @ApiModelProperty(value = " 最小价格,单位使用:分", required = true, example = "1024")
  22 + private Integer minPrice;
  23 +
  24 + @ApiModelProperty(value = "最大价格,单位使用:分", required = true, example = "1024")
  25 + private Integer maxPrice;
  26 +
  27 +}
... ...
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/spu/ProductSpuConvert.java
... ... @@ -36,5 +36,7 @@ public interface ProductSpuConvert {
36 36 AppSpuPageRespVO convertAppResp(ProductSpuDO list);
37 37  
38 38 List<SpuInfoRespDTO> convertList2(List<ProductSpuDO> list);
39   -
  39 +
  40 + List<ProductSpuSimpleRespVO> convertList02(List<ProductSpuDO> list);
  41 +
40 42 }
... ...
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java
... ... @@ -64,6 +64,13 @@ public interface ProductSpuService {
64 64 List<ProductSpuDO> getSpuList(Collection<Long> ids);
65 65  
66 66 /**
  67 + * 获得所有商品 SPU 列表
  68 + *
  69 + * @return 商品 SPU 列表
  70 + */
  71 + List<ProductSpuDO> getSpuList();
  72 +
  73 + /**
67 74 * 获得商品 SPU 分页
68 75 *
69 76 * @param pageReqVO 分页查询
... ...
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java
... ... @@ -177,6 +177,11 @@ public class ProductSpuServiceImpl implements ProductSpuService {
177 177 }
178 178  
179 179 @Override
  180 + public List<ProductSpuDO> getSpuList() {
  181 + return productSpuMapper.selectList();
  182 + }
  183 +
  184 + @Override
180 185 public PageResult<ProductSpuRespVO> getSpuPage(ProductSpuPageReqVO pageReqVO) {
181 186 // 库存告警的 SPU 编号的集合
182 187 Set<Long> alarmStockSpuIds = null;
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/CouponTemplateBaseVO.java
... ... @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.validation.InEnum;
6 6 import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum;
7 7 import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;
8 8 import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTemplateValidityTypeEnum;
  9 +import com.fasterxml.jackson.annotation.JsonFormat;
9 10 import com.fasterxml.jackson.annotation.JsonIgnore;
10 11 import io.swagger.annotations.ApiModelProperty;
11 12 import lombok.Data;
... ... @@ -19,6 +20,7 @@ import java.util.List;
19 20 import java.util.Objects;
20 21  
21 22 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  23 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
22 24  
23 25 /**
24 26 * 优惠劵模板 Base VO,提供给添加、修改、详细的子 VO 使用
... ... @@ -62,10 +64,12 @@ public class CouponTemplateBaseVO {
62 64  
63 65 @ApiModelProperty(value = "固定日期 - 生效开始时间")
64 66 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  67 + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
65 68 private Date validStartTime;
66 69  
67 70 @ApiModelProperty(value = "固定日期 - 生效结束时间")
68 71 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  72 + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
69 73 private Date validEndTime;
70 74  
71 75 @ApiModelProperty(value = "领取日期 - 开始天数")
... ... @@ -82,15 +86,14 @@ public class CouponTemplateBaseVO {
82 86 private Integer discountType;
83 87  
84 88 @ApiModelProperty(value = "折扣百分比", example = "80", notes = "例如说,80% 为 80")
85   - @Min(value = 1)
86 89 private Integer discountPercent;
87 90  
88 91 @ApiModelProperty(value = "优惠金额", example = "10", notes = "单位:分")
89   - @Min(value = 1)
  92 + @Min(value = 0, message = "优惠金额需要大于等于 0")
90 93 private Integer discountPrice;
91 94  
92 95 @ApiModelProperty(value = "折扣上限", example = "100", notes = "单位:分,仅在 discountType 为 PERCENT 使用")
93   - private Integer discountPriceLimit;
  96 + private Integer discountLimitPrice;
94 97  
95 98 @AssertTrue(message = "商品 SPU 编号的数组不能为空")
96 99 @JsonIgnore
... ... @@ -127,11 +130,11 @@ public class CouponTemplateBaseVO {
127 130 || fixedEndTerm != null;
128 131 }
129 132  
130   - @AssertTrue(message = "折扣百分比不能为空")
  133 + @AssertTrue(message = "折扣百分比需要大于等于 1")
131 134 @JsonIgnore
132 135 public boolean isDiscountPercentValid() {
133 136 return ObjectUtil.notEqual(discountType, PromotionDiscountTypeEnum.PERCENT.getType())
134   - || discountPercent != null;
  137 + || (discountPercent != null && discountPercent >= 1);
135 138 }
136 139  
137 140 @AssertTrue(message = "优惠金额不能为空")
... ... @@ -143,9 +146,9 @@ public class CouponTemplateBaseVO {
143 146  
144 147 @AssertTrue(message = "折扣上限不能为空")
145 148 @JsonIgnore
146   - public boolean isDiscountPriceLimit() {
  149 + public boolean isDiscountLimitPriceValid() {
147 150 return ObjectUtil.notEqual(discountType, PromotionDiscountTypeEnum.PERCENT.getType())
148   - || discountPriceLimit != null;
  151 + || discountLimitPrice != null;
149 152 }
150 153  
151 154 }
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java
1 1 package cn.iocoder.yudao.module.promotion.service.coupon;
2 2  
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplateCreateReqVO;
5 6 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.CouponTemplatePageReqVO;
... ... @@ -30,7 +31,8 @@ public class CouponTemplateServiceImpl implements CouponTemplateService {
30 31 @Override
31 32 public Long createCouponTemplate(CouponTemplateCreateReqVO createReqVO) {
32 33 // 插入
33   - CouponTemplateDO couponTemplate = CouponTemplateConvert.INSTANCE.convert(createReqVO);
  34 + CouponTemplateDO couponTemplate = CouponTemplateConvert.INSTANCE.convert(createReqVO)
  35 + .setStatus(CommonStatusEnum.ENABLE.getStatus());
34 36 couponTemplateMapper.insert(couponTemplate);
35 37 // 返回
36 38 return couponTemplate.getId();
... ...
yudao-ui-admin/src/api/mall/CouponTemplete/CouponTemplete.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建优惠券模板
4   -export function create(data) {
5   - return request({
6   - url: '/coupon/template/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新优惠券模板
13   -export function update(data) {
14   - return request({
15   - url: '/coupon/template/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除优惠券模板
22   -export function deleteCouponTemplete (id) {
23   - return request({
24   - url: '/coupon/template/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得优惠券模板
30   -export function get(id) {
31   - return request({
32   - url: '/coupon/template/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得优惠券模板分页
38   -export function getPage(query) {
39   - return request({
40   - url: '/coupon/template/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出优惠券模板 Excel
47   -export function exportExcel(query) {
48   - return request({
49   - url: '/coupon/template/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/mall/product/spu.js
... ... @@ -50,3 +50,11 @@ export function getSpuPage(query) {
50 50 params: query
51 51 })
52 52 }
  53 +
  54 +// 获得商品 SPU 精简列表
  55 +export function getSpuSimpleList() {
  56 + return request({
  57 + url: '/product/spu/get-simple-list',
  58 + method: 'get',
  59 + })
  60 +}
... ...
yudao-ui-admin/src/api/promotion/couponTemplate.js renamed to yudao-ui-admin/src/api/mall/promotion/couponTemplate.js
yudao-ui-admin/src/views/mall/CouponTemplete/index.vue deleted
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   -
47   - <!-- todo 优惠券类型-->
48   - <el-table-column label="优惠券类型" align="center" prop="type" />
49   - <el-table-column label="优惠券名称" align="center" prop="name" />
50   - <el-table-column label="优惠券图片" align="center" prop="image" />
51   - <el-table-column label="发放数量" align="center" prop="count" />
52   - <el-table-column label="已领取数量" align="center" prop="leadCount" />
53   - <el-table-column label="已使用数量" align="center" prop="usedCount" />
54   -<!-- todo 适用商品类型-->
55   -<!-- <el-table-column label="适用商品类型" align="center" prop="goodsType" />-->
56   - <!-- todo 使用门槛0-无门槛 1-有门槛-->
57   -
58   - <el-table-column label="使用门槛" align="center" prop="hasUseLimit" />
59   -<!-- <el-table-column label="满多少元使用 0代表无限制" align="center" prop="atLeast" />-->
60   - <!-- todo 发放面额 折扣-->
61   - <el-table-column label="优惠金额/折扣" align="center" prop="money" />
62   -<!-- <el-table-column label="1 =< 折扣 <= 9.9 当type为discount时需要添加" align="center" prop="discount" />-->
63   -<!-- <el-table-column label="最多折扣金额 当type为discount时可选择性添加" align="center" prop="discountLimit" />-->
64   -<!-- <el-table-column label="最低金额 当type为radom时需要添加" align="center" prop="minMoney" />-->
65   -<!-- <el-table-column label="最大金额 当type为radom时需要添加" align="center" prop="maxMoney" />-->
66   - <!-- todo 1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期 -->
67   - <el-table-column label="有效期限" align="center" prop="validityType" />
68   -<!-- <el-table-column label="使用开始日期 过期类型1时必填" align="center" prop="startUseTime" width="180">-->
69   -<!-- <template slot-scope="scope">-->
70   -<!-- <span>{{ parseTime(scope.row.startUseTime) }}</span>-->
71   -<!-- </template>-->
72   -<!-- </el-table-column>-->
73   -<!-- <el-table-column label="使用结束日期 过期类型1时必填" align="center" prop="endUseTime" width="180">-->
74   -<!-- <template slot-scope="scope">-->
75   -<!-- <span>{{ parseTime(scope.row.endUseTime) }}</span>-->
76   -<!-- </template>-->
77   -<!-- </el-table-column>-->
78   -<!-- <el-table-column label="有效日期结束时间" align="center" prop="endTime" width="180">-->
79   -<!-- <template slot-scope="scope">-->
80   -<!-- <span>{{ parseTime(scope.row.endTime) }}</span>-->
81   -<!-- </template>-->
82   -<!-- </el-table-column>-->
83   -<!-- <el-table-column label="当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效" align="center" prop="fixedTerm" />-->
84   -<!-- <el-table-column label="是否无限制0-否 1是" align="center" prop="whetherLimitless" />-->
85   - <el-table-column label="领取上限" align="center" prop="maxFetch" />
86   - <!-- todo 0-不限制 1- 优惠券仅原价购买商品时可用-->
87   - <el-table-column label="优惠叠加" align="center" prop="whetherForbidPreference" />
88   - <el-table-column label="是否显示" align="center" prop="whetherShow" />
89   - <el-table-column label="订单的优惠总金额" align="center" prop="discountOrderMoney" />
90   - <el-table-column label="用券总成交额" align="center" prop="orderMoney" />
91   - <el-table-column label="是否禁止发放" align="center" prop="whetherForbidden" />
92   - <el-table-column label="使用优惠券购买的商品数量" align="center" prop="orderGoodsNum" />
93   - <el-table-column label="状态" align="center" prop="status" />
94   -
95   - <el-table-column label="备注" align="center" prop="couponNameRemark" />
96   -
97   - <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
98   -
99   - <template #scope>
100   - <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
101   - v-hasPermi="['CouponTemplete::update']">修改</el-button>
102   - <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
103   - v-hasPermi="['CouponTemplete::delete']">删除</el-button>
104   - </template>
105   - </el-table-column>
106   - </el-table>
107   - <!-- 分页组件 -->
108   - <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
109   - @pagination="getList"/>
110   -
111   - <!-- 对话框(添加 / 修改) -->
112   - <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
113   - <el-form ref="form" :model="form" :rules="rules" label-width="150px">
114   - <el-form-item label="优惠券类型" prop="type">
115   - <el-select v-model="form.type" placeholder="请选择优惠券类型 reward-满减 discount-折扣 random-随机">
116   - <el-option label="请选择字典生成" value="" />
117   - </el-select>
118   - </el-form-item>
119   - <el-form-item label="优惠券名称" prop="name">
120   - <el-input v-model="form.name" placeholder="请输入优惠券名称" />
121   - </el-form-item>
122   - <el-form-item label="名称备注" prop="couponNameRemark">
123   - <el-input v-model="form.couponNameRemark" placeholder="请输入名称备注" />
124   - </el-form-item>
125   - <el-form-item label="发放数量" prop="count">
126   - <el-input v-model="form.count" placeholder="请输入发放数量" />
127   - </el-form-item>
128   - <el-form-item label="适用商品类型" prop="goodsType">
129   - <el-radio-group v-model="form.goodsType">
130   - <el-radio label="1">请选择字典生成</el-radio>
131   - </el-radio-group>
132   - </el-form-item>
133   - <!-- todo 请输入适用商品id-->
134   - <el-form-item label="适用商品id" prop="productIds">
135   - <el-input v-model="form.productIds" placeholder="请输入适用商品id" />
136   - </el-form-item>
137   - <el-form-item label="使用门槛" prop="hasUseLimit">
138   - <el-radio-group v-model="form.hasUseLimit">
139   - <el-radio label="1">请选择字典生成</el-radio>
140   - </el-radio-group>
141   - </el-form-item>
142   - <el-form-item label="满多少元使用" prop="atLeast">
143   - <el-input v-model="form.atLeast" placeholder="请输入满多少元使用 0代表无限制" />
144   - </el-form-item>
145   - <el-form-item label="发放面额" prop="money">
146   - <el-input v-model="form.money" placeholder="请输入发放面额 当type为reward时需要添加" />
147   - </el-form-item>
148   - <el-form-item label="1 =< 折扣 <= 9.9" prop="discount">
149   - <el-input v-model="form.discount" placeholder="请输入1 =< 折扣 <= 9.9 当type为discount时需要添加" />
150   - </el-form-item>
151   - <el-form-item label="最多折扣金额" prop="discountLimit">
152   - <el-input v-model="form.discountLimit" placeholder="请输入最多折扣金额 当type为discount时可选择性添加" />
153   - </el-form-item>
154   - <el-form-item label="最低金额" prop="minMoney">
155   - <el-input v-model="form.minMoney" placeholder="请输入最低金额 当type为radom时需要添加" />
156   - </el-form-item>
157   - <el-form-item label="最大金额" prop="maxMoney">
158   - <el-input v-model="form.maxMoney" placeholder="请输入最大金额 当type为radom时需要添加" />
159   - </el-form-item>
160   - <el-form-item label="过期类型" prop="validityType">
161   - <el-radio-group v-model="form.validityType">
162   - <el-radio label="1">请选择字典生成</el-radio>
163   - </el-radio-group>
164   - </el-form-item>
165   - <el-form-item label="使用开始日期 过期类型1时必填" prop="startUseTime">
166   - <el-date-picker clearable v-model="form.startUseTime" type="date" value-format="timestamp" placeholder="选择使用开始日期 过期类型1时必填" />
167   - </el-form-item>
168   - <el-form-item label="使用结束日期 过期类型1时必填" prop="endUseTime">
169   - <el-date-picker clearable v-model="form.endUseTime" type="date" value-format="timestamp" placeholder="选择使用结束日期 过期类型1时必填" />
170   - </el-form-item>
171   - <el-form-item label="当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效" prop="fixedTerm">
172   - <el-input v-model="form.fixedTerm" placeholder="请输入当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效" />
173   - </el-form-item>
174   - <el-form-item label="是否无限制0-否 1是" prop="whetherLimitless">
175   - <el-radio-group v-model="form.whetherLimitless">
176   - <el-radio label="1">请选择字典生成</el-radio>
177   - </el-radio-group>
178   - </el-form-item>
179   - <el-form-item label="每人最大领取个数" prop="maxFetch">
180   - <el-input v-model="form.maxFetch" placeholder="请输入每人最大领取个数" />
181   - </el-form-item>
182   - <el-form-item label="是否开启过期提醒0-不开启 1-开启" prop="whetherExpireNotice">
183   - <el-radio-group v-model="form.whetherExpireNotice">
184   - <el-radio label="1">请选择字典生成</el-radio>
185   - </el-radio-group>
186   - </el-form-item>
187   - <el-form-item label="过期前N天提醒" prop="expireNoticeFixedTerm">
188   - <el-input v-model="form.expireNoticeFixedTerm" placeholder="请输入过期前N天提醒" />
189   - </el-form-item>
190   - <el-form-item label="优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用" prop="whetherForbidPreference">
191   - <el-radio-group v-model="form.whetherForbidPreference">
192   - <el-radio label="1">请选择字典生成</el-radio>
193   - </el-radio-group>
194   - </el-form-item>
195   - <el-form-item label="是否显示" prop="whetherShow">
196   - <el-input v-model="form.whetherShow" placeholder="请输入是否显示" />
197   - </el-form-item>
198   - <el-form-item label="订单的优惠总金额" prop="discountOrderMoney">
199   - <el-input v-model="form.discountOrderMoney" placeholder="请输入订单的优惠总金额" />
200   - </el-form-item>
201   - <el-form-item label="用券总成交额" prop="orderMoney">
202   - <el-input v-model="form.orderMoney" placeholder="请输入用券总成交额" />
203   - </el-form-item>
204   - <el-form-item label="是否禁止发放0-否 1-是" prop="whetherForbidden">
205   - <el-radio-group v-model="form.whetherForbidden">
206   - <el-radio label="1">请选择字典生成</el-radio>
207   - </el-radio-group>
208   - </el-form-item>
209   - <el-form-item label="使用优惠券购买的商品数量" prop="orderGoodsNum">
210   - <el-input v-model="form.orderGoodsNum" placeholder="请输入使用优惠券购买的商品数量" />
211   - </el-form-item>
212   - <el-form-item label="状态" prop="status">
213   - <el-radio-group v-model="form.status">
214   - <el-radio label="1">请选择字典生成</el-radio>
215   - </el-radio-group>
216   - </el-form-item>
217   - <el-form-item label="有效日期结束时间" prop="endTime">
218   - <el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择有效日期结束时间" />
219   - </el-form-item>
220   - </el-form>
221   - <div slot="footer" class="dialog-footer">
222   - <el-button type="primary" @click="submitForm">确 定</el-button>
223   - <el-button @click="cancel">取 消</el-button>
224   - </div>
225   - </el-dialog>
226   - </div>
227   -</template>
228   -
229   -<script>
230   -import { create, update, deleteCouponTemplete, get, getPage, exportExcel } from "@/api/mall/CouponTemplete/CouponTemplete.js";
231   -import {getDictDatas} from "@/utils/dict";
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   - datas:getDictDatas(),
293   -
294   - // 表单参数
295   - form: {},
296   - // 表单校验
297   - rules: {
298   - type: [{ required: true, message: "优惠券类型 reward-满减 discount-折扣 random-随机不能为空", trigger: "change" }],
299   - name: [{ required: true, message: "优惠券名称不能为空", trigger: "blur" }],
300   - count: [{ required: true, message: "发放数量不能为空", trigger: "blur" }],
301   - leadCount: [{ required: true, message: "已领取数量不能为空", trigger: "blur" }],
302   - usedCount: [{ required: true, message: "已使用数量不能为空", trigger: "blur" }],
303   - goodsType: [{ required: true, message: "适用商品类型1-全部商品可用;2-指定商品可用;3-指定商品不可用不能为空", trigger: "blur" }],
304   - hasUseLimit: [{ required: true, message: "使用门槛0-无门槛 1-有门槛不能为空", trigger: "blur" }],
305   - atLeast: [{ required: true, message: "满多少元使用 0代表无限制不能为空", trigger: "blur" }],
306   - money: [{ required: true, message: "发放面额 当type为reward时需要添加不能为空", trigger: "blur" }],
307   - discount: [{ required: true, message: "1 =< 折扣 <= 9.9 当type为discount时需要添加不能为空", trigger: "blur" }],
308   - discountLimit: [{ required: true, message: "最多折扣金额 当type为discount时可选择性添加不能为空", trigger: "blur" }],
309   - minMoney: [{ required: true, message: "最低金额 当type为radom时需要添加不能为空", trigger: "blur" }],
310   - maxMoney: [{ required: true, message: "最大金额 当type为radom时需要添加不能为空", trigger: "blur" }],
311   - validityType: [{ required: true, message: "过期类型1-时间范围过期 2-领取之日固定日期后过期 3-领取次日固定日期后过期不能为空", trigger: "blur" }],
312   - fixedTerm: [{ required: true, message: "当validity_type为2或者3时需要添加 领取之日起或者次日N天内有效不能为空", trigger: "blur" }],
313   - whetherLimitless: [{ required: true, message: "是否无限制0-否 1是不能为空", trigger: "blur" }],
314   - maxFetch: [{ required: true, message: "每人最大领取个数不能为空", trigger: "blur" }],
315   - whetherExpireNotice: [{ required: true, message: "是否开启过期提醒0-不开启 1-开启不能为空", trigger: "blur" }],
316   - expireNoticeFixedTerm: [{ required: true, message: "过期前N天提醒不能为空", trigger: "blur" }],
317   - whetherForbidPreference: [{ required: true, message: "优惠叠加 0-不限制 1- 优惠券仅原价购买商品时可用不能为空", trigger: "blur" }],
318   - whetherShow: [{ required: true, message: "是否显示不能为空", trigger: "blur" }],
319   - discountOrderMoney: [{ required: true, message: "订单的优惠总金额不能为空", trigger: "blur" }],
320   - orderMoney: [{ required: true, message: "用券总成交额不能为空", trigger: "blur" }],
321   - whetherForbidden: [{ required: true, message: "是否禁止发放0-否 1-是不能为空", trigger: "blur" }],
322   - orderGoodsNum: [{ required: true, message: "使用优惠券购买的商品数量不能为空", trigger: "blur" }],
323   - status: [{ required: true, message: "状态(1进行中2已结束-1已关闭)不能为空", trigger: "blur" }],
324   - }
325   - };
326   - },
327   - created() {
328   - this.getList();
329   - },
330   - methods: {
331   - /** 查询列表 */
332   - getList() {
333   - this.loading = true;
334   - // 执行查询
335   - getPage(this.queryParams).then(response => {
336   - this.list = response.data.list;
337   - this.total = response.data.total;
338   - this.loading = false;
339   - });
340   - },
341   - /** 取消按钮 */
342   - cancel() {
343   - this.open = false;
344   - this.reset();
345   - },
346   - /** 表单重置 */
347   - reset() {
348   - this.form = {
349   - id: undefined,
350   - type: undefined,
351   - name: undefined,
352   - couponNameRemark: undefined,
353   - image: undefined,
354   - count: undefined,
355   - leadCount: undefined,
356   - usedCount: undefined,
357   - goodsType: undefined,
358   - productIds: undefined,
359   - hasUseLimit: undefined,
360   - atLeast: undefined,
361   - money: undefined,
362   - discount: undefined,
363   - discountLimit: undefined,
364   - minMoney: undefined,
365   - maxMoney: undefined,
366   - validityType: undefined,
367   - startUseTime: undefined,
368   - endUseTime: undefined,
369   - fixedTerm: undefined,
370   - whetherLimitless: undefined,
371   - maxFetch: undefined,
372   - whetherExpireNotice: undefined,
373   - expireNoticeFixedTerm: undefined,
374   - whetherForbidPreference: undefined,
375   - whetherShow: undefined,
376   - discountOrderMoney: undefined,
377   - orderMoney: undefined,
378   - whetherForbidden: undefined,
379   - orderGoodsNum: undefined,
380   - status: undefined,
381   - endTime: undefined,
382   - };
383   - this.resetForm("form");
384   - },
385   - /** 搜索按钮操作 */
386   - handleQuery() {
387   - this.queryParams.pageNo = 1;
388   - this.getList();
389   - },
390   - /** 重置按钮操作 */
391   - resetQuery() {
392   - this.resetForm("queryForm");
393   - this.handleQuery();
394   - },
395   - /** 新增按钮操作 */
396   - handleAdd() {
397   - this.reset();
398   - this.open = true;
399   - this.title = "添加优惠券模板";
400   - },
401   - /** 修改按钮操作 */
402   - handleUpdate(row) {
403   - this.reset();
404   - const id = row.id;
405   - get(id).then(response => {
406   - this.form = response.data;
407   - this.open = true;
408   - this.title = "修改优惠券模板";
409   - });
410   - },
411   - /** 提交按钮 */
412   - submitForm() {
413   - this.$refs["form"].validate(valid => {
414   - if (!valid) {
415   - return;
416   - }
417   - // 修改的提交
418   - if (this.form.id != null) {
419   - update(this.form).then(response => {
420   - this.$modal.msgSuccess("修改成功");
421   - this.open = false;
422   - this.getList();
423   - });
424   - return;
425   - }
426   - // 添加的提交
427   - create(this.form).then(response => {
428   - this.$modal.msgSuccess("新增成功");
429   - this.open = false;
430   - this.getList();
431   - });
432   - });
433   - },
434   - /** 删除按钮操作 */
435   - handleDelete(row) {
436   - const id = row.id;
437   - this.$modal.confirm('是否确认删除优惠券模板编号为"' + id + '"的数据项?').then(function() {
438   - return deleteCouponTemplete(id);
439   - }).then(() => {
440   - this.getList();
441   - this.$modal.msgSuccess("删除成功");
442   - }).catch(() => {});
443   - },
444   - /** 导出按钮操作 */
445   - handleExport() {
446   - // 处理查询参数
447   - let params = {...this.queryParams};
448   - params.pageNo = undefined;
449   - params.pageSize = undefined;
450   - this.$modal.confirm('是否确认导出所有优惠券模板数据项?').then(() => {
451   - this.exportLoading = true;
452   - return exportExcel(params);
453   - }).then(response => {
454   - this.$download.excel(response, '优惠券模板.xls');
455   - this.exportLoading = false;
456   - }).catch(() => {});
457   - }
458   - }
459   -};
460   -</script>
yudao-ui-admin/src/views/promotion/couponTemplate/index.vue renamed to yudao-ui-admin/src/views/mall/promotion/couponTemplate/index.vue
... ... @@ -108,7 +108,7 @@
108 108 </el-radio-group>
109 109 </el-form-item>
110 110 <el-form-item v-if="form.takeType === 1" label="发放数量" prop="totalCount">
111   - <el-input-number v-model="form.usePrice" placeholder="发放数量,没有之后不能领取或发放,-1 为不限制"
  111 + <el-input-number v-model="form.totalCount" placeholder="发放数量,没有之后不能领取或发放,-1 为不限制"
112 112 style="width: 400px" :precision="0" :min="-1" /> 张
113 113 </el-form-item>
114 114 <el-form-item v-if="form.takeType === 1" label="每人限领个数" prop="takeLimitCount">
... ... @@ -122,8 +122,8 @@
122 122 </el-radio-group>
123 123 </el-form-item>
124 124 <el-form-item v-if="form.validityType === CouponTemplateValidityTypeEnum.DATE.type" label="固定日期" prop="validTimes">
125   - <el-date-picker v-model="queryParams.validTimes" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
126   - range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
  125 + <el-date-picker v-model="form.validTimes" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
  126 + :default-time="['00:00:00', '23:59:59']" />
127 127 </el-form-item>
128 128 <el-form-item v-if="form.validityType === CouponTemplateValidityTypeEnum.TERM.type" label="领取日期" prop="fixedStartTerm">
129 129 第 <el-input-number v-model="form.fixedStartTerm" placeholder="0 为今天生效"
... ... @@ -138,7 +138,13 @@
138 138 </el-radio-group>
139 139 </el-form-item>
140 140 <el-form-item v-if="form.productScope === PromotionProductScopeEnum.SPU.scope" prop="productSpuIds">
141   - <el-input v-model="form.productSpuIds" placeholder="请输入商品 SPU 编号的数组" />
  141 + <el-select v-model="form.productSpuIds" placeholder="请选择活动商品" clearable size="small"
  142 + multiple filterable style="width: 400px">
  143 + <el-option v-for="item in productSpus" :key="item.id" :label="item.name" :value="item.id">
  144 + <span style="float: left">{{ item.name }}</span>
  145 + <span style="float: right; color: #8492a6; font-size: 13px">¥{{ (item.minPrice / 100.0).toFixed(2) }}</span>
  146 + </el-option>
  147 + </el-select>
142 148 </el-form-item>
143 149 </el-form>
144 150 <div slot="footer" class="dialog-footer">
... ... @@ -150,8 +156,10 @@
150 156 </template>
151 157  
152 158 <script>
153   -import { createCouponTemplate, updateCouponTemplate, deleteCouponTemplate, getCouponTemplate, getCouponTemplatePage } from "@/api/promotion/couponTemplate";
154   -import { CommonStatusEnum, CouponTemplateValidityTypeEnum, PromotionDiscountTypeEnum, PromotionProductScopeEnum} from "@/utils/constants";
  159 +import { createCouponTemplate, updateCouponTemplate, deleteCouponTemplate, getCouponTemplate, getCouponTemplatePage } from "@/api/mall/promotion/couponTemplate";
  160 +import { CouponTemplateValidityTypeEnum, PromotionDiscountTypeEnum, PromotionProductScopeEnum} from "@/utils/constants";
  161 +import { getSpuSimpleList } from "@/api/mall/product/spu";
  162 +import { parseTime } from "@/utils/ruoyi";
155 163  
156 164 export default {
157 165 name: "CouponTemplate",
... ... @@ -202,6 +210,8 @@ export default {
202 210 productScope: [{ required: true, message: "商品范围不能为空", trigger: "blur" }],
203 211 productSpuIds: [{ required: true, message: "商品范围不能为空", trigger: "blur" }],
204 212 },
  213 + // 商品列表
  214 + productSpus: [],
205 215 // 如下的变量,主要为了 v-if 判断可以使用到
206 216 PromotionProductScopeEnum: PromotionProductScopeEnum,
207 217 CouponTemplateValidityTypeEnum: CouponTemplateValidityTypeEnum,
... ... @@ -221,6 +231,10 @@ export default {
221 231 this.total = response.data.total;
222 232 this.loading = false;
223 233 });
  234 + // 查询商品列表
  235 + getSpuSimpleList().then(response => {
  236 + this.productSpus = response.data
  237 + })
224 238 },
225 239 /** 取消按钮 */
226 240 cancel() {
... ... @@ -233,7 +247,7 @@ export default {
233 247 id: undefined,
234 248 name: undefined,
235 249 discountType: PromotionDiscountTypeEnum.PRICE.type,
236   - discountPrice: 0,
  250 + discountPrice: undefined,
237 251 discountPercent: undefined,
238 252 discountLimitPrice: undefined,
239 253 usePrice: undefined,
... ... @@ -274,9 +288,11 @@ export default {
274 288 getCouponTemplate(id).then(response => {
275 289 this.form = {
276 290 ...response.data,
277   - discountPrice: response.data.discountPrice ? response.data.discountPrice / 100.0 : undefined,
278   - discountPercent: response.data.discountPercent ? response.data.discountPercent / 10.0 : undefined,
279   - usePrice: response.data.usePrice ? response.data.usePrice / 100.0 : undefined,
  291 + discountPrice: response.data.discountPrice !== undefined ? response.data.discountPrice / 100.0 : undefined,
  292 + discountPercent: response.data.discountPercent !== undefined ? response.data.discountPercent / 10.0 : undefined,
  293 + discountLimitPrice: response.data.discountLimitPrice !== undefined ? response.data.discountLimitPrice / 100.0 : undefined,
  294 + usePrice: response.data.usePrice !== undefined ? response.data.usePrice / 100.0 : undefined,
  295 + validTimes: [response.data.validStartTime, response.data.validEndTime]
280 296 }
281 297 this.open = true;
282 298 this.title = "修改优惠劵";
... ... @@ -291,9 +307,12 @@ export default {
291 307 // 金额相关字段的缩放
292 308 let data = {
293 309 ...this.form,
294   - discountPrice: this.form.discountPrice ? this.form.discountPrice * 100 : undefined,
295   - discountPercent: this.form.discountPercent ? this.form.discountPercent * 10 : undefined,
296   - usePrice: this.form.usePrice ? this.form.usePrice * 100 : undefined,
  310 + discountPrice: this.form.discountPrice !== undefined ? this.form.discountPrice * 100 : undefined,
  311 + discountPercent: this.form.discountPercent !== undefined ? this.form.discountPercent * 10 : undefined,
  312 + discountLimitPrice: this.form.discountLimitPrice !== undefined ? this.form.discountLimitPrice * 100 : undefined,
  313 + usePrice: this.form.usePrice !== undefined ? this.form.usePrice * 100 : undefined,
  314 + validStartTime: this.form.validTimes && this.form.validTimes.length === 2 ? this.form.validTimes[0] : undefined,
  315 + validEndTime: this.form.validTimes && this.form.validTimes.length === 2 ? this.form.validTimes[1] : undefined,
297 316 }
298 317 // 修改的提交
299 318 if (this.form.id != null) {
... ...