Parcourir la source

修改优惠券

付晓文。 il y a 1 mois
Parent
commit
8584b14390
1 fichiers modifiés avec 75 ajouts et 22 suppressions
  1. 75 22
      pages/topUp/settings.vue

+ 75 - 22
pages/topUp/settings.vue

@@ -221,6 +221,14 @@
 		return `t_${Date.now()}_${Math.floor(Math.random() * 1000)}`;
 	}
 
+	/** 默认固定档位:档位1金额100、档位2金额200,赠送与优惠券均为0 */
+	function createDefaultTiers() {
+		return [
+			{ id: createId(), amount: 100, giftAmount: 0, coupons: [] },
+			{ id: createId(), amount: 200, giftAmount: 0, coupons: [] }
+		];
+	}
+
 	function formatValidText(beginTime, endTime) {
 		if (!beginTime && !endTime) return '长期有效';
 		const begin = beginTime ? String(beginTime).slice(0, 10) : '';
@@ -229,6 +237,51 @@
 		return begin || end || '长期有效';
 	}
 
+	function isPlainAmount(val) {
+		return /^[\d.]+$/.test(String(val || '').trim());
+	}
+
+	function pickAmount(val) {
+		const matched = String(val || '').match(/[\d.]+/);
+		return matched ? matched[0] : '';
+	}
+
+	/** 折扣券 / 满减券左侧面额与使用条件文案(接口多为纯数字,需补「元」「折」) */
+	function formatCouponTexts(item) {
+		const isDiscount = String(item.couponType) === '2';
+		const info = String(item.contentInfo || '').trim();
+		const cond = String(item.contentConditions || '').trim();
+		const infoNum = isPlainAmount(info) ? info : pickAmount(info);
+		const condNum = isPlainAmount(cond) ? cond : pickAmount(cond);
+		const noThreshold = !condNum || condNum === '0';
+
+		if (isDiscount) {
+			const display = infoNum ? `${infoNum}折` : info || '折扣';
+			const condition = noThreshold
+				? '不限制条件使用'
+				: `满${condNum}元可使用`;
+			return { display, condition };
+		}
+
+		// 满减:左侧「满X元 / 减Y元」
+		let display = '';
+		if (infoNum && condNum) {
+			display = `满${condNum}元\n减${infoNum}元`;
+		} else if (infoNum) {
+			display = `${infoNum}元`;
+		} else if (info) {
+			display = info
+				.replace(/满\s*([\d.]+)\s*元?/g, '满$1元')
+				.replace(/减\s*([\d.]+)\s*元?/g, '减$1元');
+		} else {
+			display = '优惠';
+		}
+		const condition = noThreshold
+			? '不限制条件使用'
+			: `满${condNum}元可抵扣`;
+		return { display, condition };
+	}
+
 	export default {
 		data() {
 			return {
@@ -237,8 +290,8 @@
 				configVersion: null,
 				form: {
 					acceptShare: true,
-					minAmount: '',
-					tiers: []
+					minAmount: '100',
+					tiers: createDefaultTiers()
 				},
 				tierVisible: false,
 				tierEditIndex: -1,
@@ -327,29 +380,29 @@
 						const data = res.data.result;
 						this.configVersion = data.version;
 						const tiers = Array.isArray(data.tiers) ? data.tiers : [];
-						const mappedTiers = tiers.map((tier) => ({
-							id: tier.tierId || createId(),
-							amount: Number(tier.rechargeAmount) || 0,
-							giftAmount: Number(tier.giftAmount) || 0,
-							coupons: (tier.coupons || []).map((c) => ({
-								id: c.couponId,
-								name: c.couponName || '',
-								type: String(c.couponType) === '2' ? 'discount' : 'reduce',
-								qty: Number(c.quantity) || 1
-							}))
-						}));
+						const mappedTiers = tiers.length
+							? tiers.map((tier) => ({
+									id: tier.tierId || createId(),
+									amount: Number(tier.rechargeAmount) || 0,
+									giftAmount: Number(tier.giftAmount) || 0,
+									coupons: (tier.coupons || []).map((c) => ({
+										id: c.couponId,
+										name: c.couponName || '',
+										type: String(c.couponType) === '2' ? 'discount' : 'reduce',
+										qty: Number(c.quantity) || 1
+									}))
+								}))
+							: createDefaultTiers();
 						const lowest = mappedTiers
 							.map((t) => Number(t.amount))
 							.filter((n) => n > 0);
-						const defaultMin = lowest.length ? Math.min(...lowest) : '';
+						const defaultMin = lowest.length ? Math.min(...lowest) : 100;
 						this.form = {
 							acceptShare: data.acceptSharedPrepaid !== false,
 							minAmount:
 								data.customMinAmount != null && data.customMinAmount !== ''
 									? String(data.customMinAmount)
-									: defaultMin !== ''
-										? String(defaultMin)
-										: '',
+									: String(defaultMin),
 							tiers: mappedTiers
 						};
 					})
@@ -426,13 +479,12 @@
 				this.tierVisible = false;
 			},
 			mapCouponItem(item) {
-				const type = String(item.couponType);
-				const isDiscount = type === '2';
+				const { display, condition } = formatCouponTexts(item);
 				return {
 					id: item.couponId,
 					name: item.couponName || '',
-					display: item.contentInfo || (isDiscount ? '折扣' : '优惠'),
-					condition: item.contentConditions || '',
+					display,
+					condition,
 					validText: formatValidText(item.beginTime, item.endTime),
 					remainingQuantity: Number(item.remainingQuantity) || 0
 				};
@@ -1084,7 +1136,8 @@
 
 			&.multi {
 				font-size: 26rpx;
-				line-height: 1.35;
+				line-height: 1.45;
+				white-space: pre-line;
 			}
 		}