“陈博论” 8 сар өмнө
parent
commit
016d816107

+ 4 - 2
web/src/views/backend/package/package/detail.vue

@@ -143,7 +143,7 @@
                         <el-table-column
                             label="次数/积分"
                             align="center"
-                            min-width="120"
+                            min-width="175"
                         >
                             <template #default="{ row }">
                                 <span v-if="String(row.card_type) === '1'">
@@ -152,7 +152,9 @@
                                 </span>
                                 <span v-else-if="String(row.card_type) === '2'">
                                     <span class="points-value">{{ row.points_value || '-' }}</span>
-                                    <span class="unit-label">分</span>
+                                    <span class="unit-label">积分</span>/
+                                    <span class="points-value">{{ row.cost_value || '-' }}</span>
+                                    <span class="unit-label">消耗积分</span>
                                 </span>
                                 <span v-else class="no-value">-</span>
                             </template>

+ 3 - 3
web/src/views/backend/package/package/popupForm.vue

@@ -1,7 +1,7 @@
 <template>
 	<!-- 对话框表单 -->
 	<el-dialog class="ba-operate-dialog" :close-on-click-modal="false" :destroy-on-close="true" v-model="dialogVisible"
-		@close="handleClose" width="880px">
+		@close="handleClose" width="1100px">
 		<template #header>
 			<div class="title" v-drag="['.ba-operate-dialog', '.el-dialog__header']" v-zoom="'.ba-operate-dialog'">
 				套餐配置
@@ -56,13 +56,13 @@
 											{{ getCardTypeLabel(scope.row.card_type) }}
 										</template>
 									</el-table-column>
-									<el-table-column label="次数/积分" align="center" min-width="100">
+									<el-table-column label="次数/积分" align="center" min-width="160">
 										<template #default="scope">
 											<span v-if="scope.row.card_type == '1' && scope.row.unit_value">
 												{{ scope.row.unit_value }}次
 											</span>
 											<span v-else-if="scope.row.card_type == '2' && scope.row.points_value">
-												{{ scope.row.points_value }}分
+												{{ scope.row.points_value }}积分/{{ scope.row.cost_value }}消耗积分
 											</span>
 											<span v-else>-</span>
 										</template>

+ 68 - 20
web/src/views/backend/package/package/specDialog.vue

@@ -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) {