Skip to content

Commit 5a8c3dd

Browse files
committed
promotion:实现部分优惠劵模板的前端表单 80%
1 parent 7f7220d commit 5a8c3dd

File tree

3 files changed

+114
-90
lines changed

3 files changed

+114
-90
lines changed

src/utils/constants.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,3 +264,17 @@ export const CouponTemplateValidityTypeEnum = {
264264
name: '领取之后可用'
265265
}
266266
}
267+
268+
/**
269+
* 营销的商品范围枚举
270+
*/
271+
export const PromotionProductScopeEnum = {
272+
ALL: {
273+
scope: 1,
274+
name: '全部商品参与'
275+
},
276+
SPU: {
277+
scope: 2,
278+
name: '指定商品参与'
279+
}
280+
}

src/utils/dict.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ export const DICT_TYPE = {
6262

6363
// ========== MALL - PROMOTION 模块 ==========
6464
PROMOTION_DISCOUNT_TYPE: 'promotion_discount_type', // 优惠类型
65+
PROMOTION_PRODUCT_SCOPE: 'promotion_product_scope', // 营销的商品范围
66+
COUPON_TEMPLATE_VALIDITY_TYPE: 'coupon_template_validity_type', // 优惠劵模板的有限期类型
6567
}
6668

6769
/**

src/views/promotion/couponTemplate/index.vue

Lines changed: 98 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -74,79 +74,71 @@
7474
@pagination="getList"/>
7575

7676
<!-- 对话框(添加 / 修改) -->
77-
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
78-
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
79-
<el-form-item label="优惠劵名" prop="name">
80-
<el-input v-model="form.name" placeholder="请输入优惠劵名" />
77+
<el-dialog :title="title" :visible.sync="open" width="600px" v-dialogDrag append-to-body>
78+
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
79+
<el-form-item label="优惠券名称" prop="name">
80+
<el-input v-model="form.name" placeholder="请输入优惠券名称" />
8181
</el-form-item>
82-
<el-form-item label="状态" prop="status">
83-
<el-radio-group v-model="form.status">
84-
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
82+
<el-form-item label="优惠券类型" prop="discountType">
83+
<el-radio-group v-model="form.discountType">
84+
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.PROMOTION_DISCOUNT_TYPE)"
8585
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
8686
</el-radio-group>
8787
</el-form-item>
88-
<el-form-item label="类型" prop="type">
89-
<el-select v-model="form.type" placeholder="请选择类型">
90-
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PRODUCT_SPU_STATUS)"
91-
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
92-
</el-select>
88+
<el-form-item v-if="form.discountType === PromotionDiscountTypeEnum.PRICE.type" label="优惠券面额" prop="discountPrice">
89+
<el-input-number v-model="form.discountPrice" placeholder="请输入优惠金额,单位:元"
90+
style="width: 400px" :precision="2" :min="0" /> 元
9391
</el-form-item>
94-
<el-form-item label="发行总量" prop="totalCount">
95-
<el-input v-model="form.totalCount" placeholder="请输入发行总量" />
92+
<el-form-item v-if="form.discountType === PromotionDiscountTypeEnum.PERCENT.type" label="优惠券折扣" prop="discountPercent">
93+
<el-input-number v-model="form.discountPercent" placeholder="优惠券折扣不能小于 1 折,且不可大于 9.9 折"
94+
style="width: 400px" :precision="1" :min="1" :max="9.9" /> 折
9695
</el-form-item>
97-
<el-form-item label="每人限领个数" prop="takeLimitCount">
98-
<el-input v-model="form.takeLimitCount" placeholder="请输入每人限领个数" />
96+
<el-form-item v-if="form.discountType === PromotionDiscountTypeEnum.PERCENT.type" label="最多优惠" prop="discountLimitPrice">
97+
<el-input-number v-model="form.discountLimitPrice" placeholder="请输入最多优惠"
98+
style="width: 400px" :precision="2" :min="0" /> 元
9999
</el-form-item>
100-
<el-form-item label="领取方式" prop="takeType">
101-
<el-select v-model="form.takeType" placeholder="请选择领取方式">
102-
<el-option label="请选择字典生成" value="" />
103-
</el-select>
104-
</el-form-item>
105-
<el-form-item label="是否设置满多少金额可用,单位:分" prop="usePrice">
106-
<el-input v-model="form.usePrice" placeholder="请输入是否设置满多少金额可用,单位:分" />
107-
</el-form-item>
108-
<el-form-item label="商品范围" prop="productScope">
109-
<el-input v-model="form.productScope" placeholder="请输入商品范围" />
110-
</el-form-item>
111-
<el-form-item label="商品 SPU 编号的数组" prop="productSpuIds">
112-
<el-input v-model="form.productSpuIds" placeholder="请输入商品 SPU 编号的数组" />
113-
</el-form-item>
114-
<el-form-item label="生效日期类型" prop="validityType">
115-
<el-select v-model="form.validityType" placeholder="请选择生效日期类型">
116-
<el-option label="请选择字典生成" value="" />
117-
</el-select>
118-
</el-form-item>
119-
<el-form-item label="固定日期-生效开始时间" prop="validStartTime">
120-
<el-date-picker clearable v-model="form.validStartTime" type="date" value-format="timestamp" placeholder="选择固定日期-生效开始时间" />
100+
<el-form-item label="满多少元可以使用" prop="usePrice">
101+
<el-input-number v-model="form.usePrice" placeholder="无门槛请设为 0"
102+
style="width: 400px" :precision="2" :min="0" /> 元
121103
</el-form-item>
122-
<el-form-item label="固定日期-生效结束时间" prop="validEndTime">
123-
<el-date-picker clearable v-model="form.validEndTime" type="date" value-format="timestamp" placeholder="选择固定日期-生效结束时间" />
124-
</el-form-item>
125-
<el-form-item label="领取日期-开始天数" prop="fixedStartTerm">
126-
<el-input v-model="form.fixedStartTerm" placeholder="请输入领取日期-开始天数" />
104+
<el-form-item label="领取方式" prop="takeType">
105+
<el-radio-group v-model="form.takeType">
106+
<el-radio :key="1" :label="1">直接领取</el-radio>
107+
<el-radio :key="2" :label="2">指定发放</el-radio>
108+
</el-radio-group>
127109
</el-form-item>
128-
<el-form-item label="领取日期-结束天数" prop="fixedEndTerm">
129-
<el-input v-model="form.fixedEndTerm" placeholder="请输入领取日期-结束天数" />
110+
<el-form-item v-if="form.takeType === 1" label="发放数量" prop="totalCount">
111+
<el-input-number v-model="form.usePrice" placeholder="发放数量,没有之后不能领取或发放,-1 为不限制"
112+
style="width: 400px" :precision="0" :min="-1" /> 张
130113
</el-form-item>
131-
<el-form-item label="优惠类型" prop="discountType">
132-
<el-select v-model="form.discountType" placeholder="请选择优惠类型">
133-
<el-option label="请选择字典生成" value="" />
134-
</el-select>
114+
<el-form-item v-if="form.takeType === 1" label="每人限领个数" prop="takeLimitCount">
115+
<el-input-number v-model="form.takeLimitCount" placeholder="设置为 -1 时,可无限领取"
116+
style="width: 400px" :precision="0" :min="-1" /> 张
135117
</el-form-item>
136-
<el-form-item label="折扣百分比" prop="discountPercent">
137-
<el-input v-model="form.discountPercent" placeholder="请输入折扣百分比" />
118+
<el-form-item label="有效期类型" prop="validityType">
119+
<el-radio-group v-model="form.validityType">
120+
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COUPON_TEMPLATE_VALIDITY_TYPE)"
121+
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
122+
</el-radio-group>
138123
</el-form-item>
139-
<el-form-item label="优惠金额,单位:分" prop="discountPrice">
140-
<el-input v-model="form.discountPrice" placeholder="请输入优惠金额,单位:分" />
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']" />
141127
</el-form-item>
142-
<el-form-item label="折扣上限" prop="discountPriceLimit">
143-
<el-input v-model="form.discountPriceLimit" placeholder="请输入折扣上限,仅在 {@link #preferentialType} 等于 2 时生效" />
128+
<el-form-item v-if="form.validityType === CouponTemplateValidityTypeEnum.TERM.type" label="领取日期" prop="fixedStartTerm">
129+
第 <el-input-number v-model="form.fixedStartTerm" placeholder="0 为今天生效"
130+
style="width: 165px" :precision="0" :min="0"/> 至
131+
<el-input-number v-model="form.fixedEndTerm" placeholder="请输入结束天数"
132+
style="width: 165px" :precision="0" :min="0"/> 天有效
144133
</el-form-item>
145-
<el-form-item label="领取优惠券的数量" prop="takeNum">
146-
<el-input v-model="form.takeNum" placeholder="请输入领取优惠券的数量" />
134+
<el-form-item label="活动商品" prop="productScope">
135+
<el-radio-group v-model="form.productScope">
136+
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.PROMOTION_PRODUCT_SCOPE)"
137+
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
138+
</el-radio-group>
147139
</el-form-item>
148-
<el-form-item label="使用优惠券的次数" prop="useCount">
149-
<el-input v-model="form.useCount" placeholder="请输入使用优惠券的次数" />
140+
<el-form-item v-if="form.productScope === PromotionProductScopeEnum.SPU.scope" prop="productSpuIds">
141+
<el-input v-model="form.productSpuIds" placeholder="请输入商品 SPU 编号的数组" />
150142
</el-form-item>
151143
</el-form>
152144
<div slot="footer" class="dialog-footer">
@@ -159,7 +151,7 @@
159151

160152
<script>
161153
import { createCouponTemplate, updateCouponTemplate, deleteCouponTemplate, getCouponTemplate, getCouponTemplatePage } from "@/api/promotion/couponTemplate";
162-
import {CouponTemplateValidityTypeEnum, PromotionDiscountTypeEnum} from "@/utils/constants";
154+
import { CommonStatusEnum, CouponTemplateValidityTypeEnum, PromotionDiscountTypeEnum, PromotionProductScopeEnum} from "@/utils/constants";
163155
164156
export default {
165157
name: "CouponTemplate",
@@ -175,7 +167,7 @@ export default {
175167
showSearch: true,
176168
// 总条数
177169
total: 0,
178-
// 优惠劵模板列表
170+
// 优惠劵列表
179171
list: [],
180172
// 弹出层标题
181173
title: "",
@@ -194,19 +186,26 @@ export default {
194186
form: {},
195187
// 表单校验
196188
rules: {
197-
name: [{ required: true, message: "优惠劵名不能为空", trigger: "blur" }],
198-
status: [{ required: true, message: "状态不能为空", trigger: "blur" }],
199-
type: [{ required: true, message: "类型", trigger: "change" }],
200-
totalCount: [{ required: true, message: "发行总量不能为空", trigger: "blur" }],
201-
takeLimitCount: [{ required: true, message: "每人限领个数不能为空", trigger: "blur" }],
189+
name: [{ required: true, message: "优惠券名称不能为空", trigger: "blur" }],
190+
discountType: [{ required: true, message: "优惠券类型不能为空", trigger: "change" }],
191+
discountPrice: [{ required: true, message: "优惠券面额不能为空", trigger: "blur" }],
192+
discountPercent: [{ required: true, message: "优惠券折扣不能为空", trigger: "blur" }],
193+
discountLimitPrice: [{ required: true, message: "最多优惠不能为空", trigger: "blur" }],
194+
usePrice: [{ required: true, message: "满多少元可以使用不能为空", trigger: "blur" }],
202195
takeType: [{ required: true, message: "领取方式不能为空", trigger: "change" }],
203-
usePrice: [{ required: true, message: "是否设置满多少金额可用,单位:分不能为空", trigger: "blur" }],
196+
totalCount: [{ required: true, message: "发放数量不能为空", trigger: "blur" }],
197+
takeLimitCount: [{ required: true, message: "每人限领个数不能为空", trigger: "blur" }],
198+
validityType: [{ required: true, message: "有效期类型不能为空", trigger: "change" }],
199+
validTimes: [{ required: true, message: "固定日期不能为空", trigger: "change" }],
200+
fixedStartTerm: [{ required: true, message: "开始领取天数不能为空", trigger: "blur" }],
201+
fixedEndTerm: [{ required: true, message: "开始领取天数不能为空", trigger: "blur" }],
204202
productScope: [{ required: true, message: "商品范围不能为空", trigger: "blur" }],
205-
validityType: [{ required: true, message: "生效日期类型不能为空", trigger: "change" }],
206-
discountType: [{ required: true, message: "优惠类型不能为空", trigger: "change" }],
207-
takeNum: [{ required: true, message: "领取优惠券的数量不能为空", trigger: "blur" }],
208-
useCount: [{ required: true, message: "使用优惠券的次数不能为空", trigger: "blur" }],
209-
}
203+
productSpuIds: [{ required: true, message: "商品范围不能为空", trigger: "blur" }],
204+
},
205+
// 如下的变量,主要为了 v-if 判断可以使用到
206+
PromotionProductScopeEnum: PromotionProductScopeEnum,
207+
CouponTemplateValidityTypeEnum: CouponTemplateValidityTypeEnum,
208+
PromotionDiscountTypeEnum: PromotionDiscountTypeEnum,
210209
};
211210
},
212211
created() {
@@ -233,25 +232,22 @@ export default {
233232
this.form = {
234233
id: undefined,
235234
name: undefined,
236-
status: undefined,
237-
type: undefined,
235+
discountType: PromotionDiscountTypeEnum.PRICE.type,
236+
discountPrice: 0,
237+
discountPercent: undefined,
238+
discountLimitPrice: undefined,
239+
usePrice: undefined,
240+
takeType: 1,
238241
totalCount: undefined,
239242
takeLimitCount: undefined,
240-
takeType: undefined,
241-
usePrice: undefined,
242-
productScope: undefined,
243-
productSpuIds: undefined,
244-
validityType: undefined,
243+
validityType: CouponTemplateValidityTypeEnum.DATE.type,
244+
validTimes: [],
245245
validStartTime: undefined,
246246
validEndTime: undefined,
247247
fixedStartTerm: undefined,
248248
fixedEndTerm: undefined,
249-
discountType: undefined,
250-
discountPercent: undefined,
251-
discountPrice: undefined,
252-
discountPriceLimit: undefined,
253-
takeNum: undefined,
254-
useCount: undefined,
249+
productScope: PromotionProductScopeEnum.ALL.scope,
250+
productSpuIds: [],
255251
};
256252
this.resetForm("form");
257253
},
@@ -269,16 +265,21 @@ export default {
269265
handleAdd() {
270266
this.reset();
271267
this.open = true;
272-
this.title = "添加优惠劵模板";
268+
this.title = "添加优惠劵";
273269
},
274270
/** 修改按钮操作 */
275271
handleUpdate(row) {
276272
this.reset();
277273
const id = row.id;
278274
getCouponTemplate(id).then(response => {
279-
this.form = response.data;
275+
this.form = {
276+
...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,
280+
}
280281
this.open = true;
281-
this.title = "修改优惠劵模板";
282+
this.title = "修改优惠劵";
282283
});
283284
},
284285
/** 提交按钮 */
@@ -287,17 +288,24 @@ export default {
287288
if (!valid) {
288289
return;
289290
}
291+
// 金额相关字段的缩放
292+
let data = {
293+
...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,
297+
}
290298
// 修改的提交
291299
if (this.form.id != null) {
292-
updateCouponTemplate(this.form).then(response => {
300+
updateCouponTemplate(data).then(response => {
293301
this.$modal.msgSuccess("修改成功");
294302
this.open = false;
295303
this.getList();
296304
});
297305
return;
298306
}
299307
// 添加的提交
300-
createCouponTemplate(this.form).then(response => {
308+
createCouponTemplate(data).then(response => {
301309
this.$modal.msgSuccess("新增成功");
302310
this.open = false;
303311
this.getList();
@@ -307,7 +315,7 @@ export default {
307315
/** 删除按钮操作 */
308316
handleDelete(row) {
309317
const id = row.id;
310-
this.$modal.confirm('是否确认删除优惠劵模板编号为"' + id + '"的数据项?').then(function() {
318+
this.$modal.confirm('是否确认删除优惠劵编号为"' + id + '"的数据项?').then(function() {
311319
return deleteCouponTemplate(id);
312320
}).then(() => {
313321
this.getList();

0 commit comments

Comments
 (0)