|
|
@@ -120,23 +120,46 @@
|
|
|
<div class="form-tip">当选择次卡时必填</div>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item
|
|
|
- v-if="formData.card_type === '2'"
|
|
|
- label="积分数"
|
|
|
- prop="points_value"
|
|
|
- >
|
|
|
- <div class="input-with-unit">
|
|
|
- <el-input-number
|
|
|
- v-model.number="formData.points_value"
|
|
|
- :min="1"
|
|
|
- placeholder="请输入积分数"
|
|
|
- style="width: 100%"
|
|
|
- controls-position="right"
|
|
|
- />
|
|
|
- <span class="form-unit">分</span>
|
|
|
- </div>
|
|
|
- <div class="form-tip">当选择按积分时必填</div>
|
|
|
- </el-form-item>
|
|
|
+ <el-row v-if="formData.card_type === '2'" :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="积分数"
|
|
|
+ prop="points_value"
|
|
|
+ >
|
|
|
+ <div class="input-with-unit">
|
|
|
+ <el-input-number
|
|
|
+ v-model.number="formData.points_value"
|
|
|
+ :min="1"
|
|
|
+ placeholder="请输入积分数"
|
|
|
+ style="width: 100%"
|
|
|
+ controls-position="right"
|
|
|
+ />
|
|
|
+ <span class="form-unit">积分</span>
|
|
|
+ </div>
|
|
|
+ <div class="form-tip">当选择按积分时必填</div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <!-- 使用消耗积分数 -->
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="消耗积分"
|
|
|
+ prop="cost_value"
|
|
|
+ >
|
|
|
+ <div class="input-with-unit">
|
|
|
+ <el-input-number
|
|
|
+ v-model.number="formData.cost_value"
|
|
|
+ :min="1"
|
|
|
+ placeholder="请输入单次消耗积分数"
|
|
|
+ style="width: 100%"
|
|
|
+ controls-position="right"
|
|
|
+ />
|
|
|
+ <span class="form-unit">积分</span>
|
|
|
+ </div>
|
|
|
+ <div class="form-tip">每次使用将扣减的积分数</div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
|
|
|
<el-form-item label="说明描述" prop="description">
|
|
|
<el-input
|
|
|
@@ -195,6 +218,8 @@ const formData = reactive({
|
|
|
card_type: '',
|
|
|
unit_value: undefined as number | undefined,
|
|
|
points_value: undefined as number | undefined,
|
|
|
+ // 单次消耗积分数(仅按积分卡类型使用)
|
|
|
+ cost_value: undefined as number | undefined,
|
|
|
description: '',
|
|
|
})
|
|
|
|
|
|
@@ -240,6 +265,18 @@ const rules: FormRules = {
|
|
|
trigger: 'change',
|
|
|
},
|
|
|
],
|
|
|
+ cost_value: [
|
|
|
+ {
|
|
|
+ validator: (_rule, value, callback) => {
|
|
|
+ // 仅当为“按积分”卡类型时校验
|
|
|
+ if (formData.card_type === '2' && (value === undefined || value === null || value <= 0)) {
|
|
|
+ return callback(new Error('单次消耗积分数为必填项,且必须大于0'))
|
|
|
+ }
|
|
|
+ return callback()
|
|
|
+ },
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
}
|
|
|
|
|
|
// 套餐类型选项
|
|
|
@@ -301,6 +338,8 @@ const editDialog = (pkgId: number, specData: any) => {
|
|
|
// 积分数:转换为数字,如果为空或无效则设为 undefined
|
|
|
formData.points_value = toNumber(specData.points_value) ||
|
|
|
(specData.card_type === '2' ? toNumber(specData.quantity) : undefined)
|
|
|
+ // 单次消耗积分数
|
|
|
+ formData.cost_value = toNumber(specData.cost_value) || toNumber(specData.costValue)
|
|
|
formData.description = specData.description || specData.remark || ''
|
|
|
}
|
|
|
|
|
|
@@ -315,6 +354,7 @@ const resetForm = () => {
|
|
|
formData.card_type = ''
|
|
|
formData.unit_value = undefined
|
|
|
formData.points_value = undefined
|
|
|
+ formData.cost_value = undefined
|
|
|
formData.description = ''
|
|
|
}
|
|
|
|
|
|
@@ -326,6 +366,7 @@ const handleCardTypeChange = () => {
|
|
|
}
|
|
|
if (formData.card_type !== '2') {
|
|
|
formData.points_value = undefined
|
|
|
+ formData.cost_value = undefined
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -356,9 +397,14 @@ const onSubmit = async () => {
|
|
|
if (formData.card_type === '1' && formData.unit_value !== undefined && formData.unit_value != null) {
|
|
|
submitData.unit_value = Number(formData.unit_value)
|
|
|
}
|
|
|
- // 当选择积分时必填 points_value,选择其他天数的卡可以不传
|
|
|
- if (formData.card_type === '2' && formData.points_value !== undefined && formData.points_value != null) {
|
|
|
- submitData.points_value = Number(formData.points_value)
|
|
|
+ // 当选择积分时必填 points_value 与 cost_value,选择其他天数的卡可以不传
|
|
|
+ if (formData.card_type === '2') {
|
|
|
+ if (formData.points_value !== undefined && formData.points_value != null) {
|
|
|
+ submitData.points_value = Number(formData.points_value)
|
|
|
+ }
|
|
|
+ if (formData.cost_value !== undefined && formData.cost_value != null) {
|
|
|
+ submitData.cost_value = Number(formData.cost_value)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 调用接口
|
|
|
@@ -468,6 +514,8 @@ defineExpose({ openDialog, editDialog })
|
|
|
font-size: 12px;
|
|
|
color: #909399;
|
|
|
line-height: 1.5;
|
|
|
+ /* 强制占满一行,显示在输入框下方 */
|
|
|
+ width: 100%;
|
|
|
}
|
|
|
|
|
|
:deep(.el-input__wrapper) {
|