|
|
@@ -14,20 +14,32 @@
|
|
|
<el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
|
|
|
<el-table-column prop="id" label="ID" width="70" />
|
|
|
<el-table-column prop="name" label="名称" min-width="140" show-overflow-tooltip />
|
|
|
- <el-table-column label="类型" width="90">
|
|
|
+ <el-table-column label="类型" width="110">
|
|
|
<template slot-scope="{ row }">
|
|
|
- <el-tag size="mini">{{ row.type }}</el-tag>
|
|
|
+ <el-tag size="mini">{{ typeLabel(row.type) }}</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="面值(元)" width="90">
|
|
|
- <template slot-scope="{ row }">{{ (row.value / 100).toFixed(2) }}</template>
|
|
|
+ <el-table-column label="面值/折扣" width="100">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <span v-if="row.type === 'DISCOUNT'">{{ (row.discountRate / 100).toFixed(1) }}折</span>
|
|
|
+ <span v-else>{{ (row.value / 100).toFixed(2) }}元</span>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="使用门槛(元)" width="110">
|
|
|
<template slot-scope="{ row }">{{ row.minSpend ? (row.minSpend / 100).toFixed(2) : '无' }}</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="applicableTo" label="适用对象" width="110">
|
|
|
+ <el-table-column label="适用对象" width="110">
|
|
|
<template slot-scope="{ row }">{{ applicableLabel(row.applicableTo) }}</template>
|
|
|
</el-table-column>
|
|
|
+ <el-table-column label="积分价" width="80">
|
|
|
+ <template slot-scope="{ row }">{{ row.pointsPrice || 0 }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="发放规则" width="130">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <span v-if="row.grantType">{{ grantTypeLabel(row.grantType) }}</span>
|
|
|
+ <span v-else>-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="有效期" width="180">
|
|
|
<template slot-scope="{ row }">{{ row.validFrom }} ~ {{ row.validUntil }}</template>
|
|
|
</el-table-column>
|
|
|
@@ -74,13 +86,19 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="类型" required>
|
|
|
<el-select v-model="form.type" placeholder="请选择类型" style="width: 100%">
|
|
|
- <el-option label="FIXED" value="FIXED" />
|
|
|
+ <el-option label="FIXED(满减)" value="FIXED" />
|
|
|
+ <el-option label="CASH(无门槛)" value="CASH" />
|
|
|
+ <el-option label="DISCOUNT(折扣)" value="DISCOUNT" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="面值(元)" required>
|
|
|
+ <el-form-item v-if="form.type !== 'DISCOUNT'" label="面值(元)" required>
|
|
|
<el-input-number v-model="form.valueYuan" :min="0.01" :step="0.5" :precision="2" style="width: 200px" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="使用门槛(元)">
|
|
|
+ <el-form-item v-if="form.type === 'DISCOUNT'" label="折扣率(千分比)" required>
|
|
|
+ <el-input-number v-model="form.discountRate" :min="1" :max="10000" :step="100" style="width: 200px" />
|
|
|
+ <div class="form-item-tip">9000 = 9折,10000 = 无折扣</div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="form.type === 'FIXED'" label="使用门槛(元)">
|
|
|
<el-input-number v-model="form.minSpendYuan" :min="0" :step="10" :precision="2" style="width: 200px" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="适用对象">
|
|
|
@@ -91,6 +109,38 @@
|
|
|
<el-option label="测评服务" value="ASSESSMENT" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item label="绑定商品ID">
|
|
|
+ <el-input-number v-model="form.productId" :min="0" :step="1" style="width: 200px" />
|
|
|
+ <div class="form-item-tip">0 或留空 = 全场通用</div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="积分兑换价">
|
|
|
+ <el-input-number v-model="form.pointsPrice" :min="0" :step="100" style="width: 200px" />
|
|
|
+ <div class="form-item-tip">0 = 不可积分兑换</div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="自动发放规则">
|
|
|
+ <el-select v-model="form.grantType" placeholder="不自动发放" style="width: 100%">
|
|
|
+ <el-option label="不自动发放" value="" />
|
|
|
+ <el-option label="JOIN(开通会员赠)" value="JOIN" />
|
|
|
+ <el-option label="PERIODIC(周期补发)" value="PERIODIC" />
|
|
|
+ <el-option label="POPULATION(家庭人口券)" value="POPULATION" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="form.grantType === 'JOIN' || form.grantType === 'PERIODIC'" label="适用会员等级">
|
|
|
+ <el-select v-model="form.grantLevelCode" placeholder="请选择会员等级" style="width: 100%">
|
|
|
+ <el-option label="FREE" value="FREE" />
|
|
|
+ <el-option label="FAMILY" value="FAMILY" />
|
|
|
+ <el-option label="PREMIUM" value="PREMIUM" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="form.grantType === 'PERIODIC'" label="补发周期">
|
|
|
+ <el-select v-model="form.grantPeriod" placeholder="请选择补发周期" style="width: 100%">
|
|
|
+ <el-option label="MONTHLY(每月)" value="MONTHLY" />
|
|
|
+ <el-option label="QUARTERLY(每季度)" value="QUARTERLY" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="form.grantType && form.grantType !== ''" label="每次发放数量">
|
|
|
+ <el-input-number v-model="form.grantQuantity" :min="1" :step="1" style="width: 200px" />
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="有效期起" required>
|
|
|
<el-date-picker v-model="form.validFrom" type="date" placeholder="选择开始日期" value-format="yyyy-MM-dd" style="width: 100%" />
|
|
|
</el-form-item>
|
|
|
@@ -178,6 +228,13 @@ export default {
|
|
|
type: 'FIXED',
|
|
|
valueYuan: null,
|
|
|
minSpendYuan: null,
|
|
|
+ discountRate: null,
|
|
|
+ productId: null,
|
|
|
+ pointsPrice: 0,
|
|
|
+ grantType: '',
|
|
|
+ grantLevelCode: 'FAMILY',
|
|
|
+ grantPeriod: 'MONTHLY',
|
|
|
+ grantQuantity: 1,
|
|
|
applicableTo: 'ALL',
|
|
|
validFrom: '',
|
|
|
validUntil: '',
|
|
|
@@ -188,6 +245,14 @@ export default {
|
|
|
const map = { ALL: '全部商品', MEMBERSHIP: '会员服务', PRODUCT: '特定商品', ASSESSMENT: '测评服务' }
|
|
|
return map[val] || val
|
|
|
},
|
|
|
+ typeLabel(val) {
|
|
|
+ const map = { FIXED: '满减券', CASH: '无门槛券', DISCOUNT: '折扣券' }
|
|
|
+ return map[val] || val
|
|
|
+ },
|
|
|
+ grantTypeLabel(val) {
|
|
|
+ const map = { JOIN: '开通赠券', PERIODIC: '周期补发', POPULATION: '家庭人口券' }
|
|
|
+ return map[val] || val
|
|
|
+ },
|
|
|
async loadData() {
|
|
|
this.loading = true
|
|
|
try {
|
|
|
@@ -226,8 +291,15 @@ export default {
|
|
|
id: row.id,
|
|
|
name: row.name,
|
|
|
type: row.type,
|
|
|
- valueYuan: row.value / 100,
|
|
|
+ valueYuan: row.type === 'DISCOUNT' ? null : row.value / 100,
|
|
|
minSpendYuan: row.minSpend ? row.minSpend / 100 : null,
|
|
|
+ discountRate: row.discountRate || null,
|
|
|
+ productId: row.productId || null,
|
|
|
+ pointsPrice: row.pointsPrice || 0,
|
|
|
+ grantType: row.grantType || '',
|
|
|
+ grantLevelCode: row.grantLevelCode || 'FAMILY',
|
|
|
+ grantPeriod: row.grantPeriod || 'MONTHLY',
|
|
|
+ grantQuantity: row.grantQuantity || 1,
|
|
|
applicableTo: row.applicableTo,
|
|
|
validFrom: row.validFrom,
|
|
|
validUntil: row.validUntil,
|
|
|
@@ -246,7 +318,17 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
async handleSubmit() {
|
|
|
- if (!this.form.name || !this.form.valueYuan || !this.form.totalCount || !this.form.validFrom || !this.form.validUntil) {
|
|
|
+ const isDiscount = this.form.type === 'DISCOUNT'
|
|
|
+ if (isDiscount) {
|
|
|
+ if (!this.form.discountRate) {
|
|
|
+ this.$message.warning('折扣券请填写折扣率')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else if (!this.form.valueYuan) {
|
|
|
+ this.$message.warning('请填写面值')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!this.form.name || !this.form.totalCount || !this.form.validFrom || !this.form.validUntil) {
|
|
|
this.$message.warning('请填写完整信息')
|
|
|
return
|
|
|
}
|
|
|
@@ -255,8 +337,15 @@ export default {
|
|
|
const payload = {
|
|
|
name: this.form.name,
|
|
|
type: this.form.type,
|
|
|
- value: Math.round(this.form.valueYuan * 100),
|
|
|
+ value: isDiscount ? 0 : Math.round(this.form.valueYuan * 100),
|
|
|
minSpend: this.form.minSpendYuan ? Math.round(this.form.minSpendYuan * 100) : 0,
|
|
|
+ discountRate: isDiscount ? this.form.discountRate : null,
|
|
|
+ productId: this.form.productId || null,
|
|
|
+ pointsPrice: this.form.pointsPrice || 0,
|
|
|
+ grantType: this.form.grantType || null,
|
|
|
+ grantLevelCode: this.form.grantType ? this.form.grantLevelCode : null,
|
|
|
+ grantPeriod: this.form.grantType === 'PERIODIC' ? this.form.grantPeriod : null,
|
|
|
+ grantQuantity: this.form.grantType ? this.form.grantQuantity : null,
|
|
|
applicableTo: this.form.applicableTo,
|
|
|
validFrom: this.form.validFrom,
|
|
|
validUntil: this.form.validUntil,
|