|
|
@@ -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;
|
|
|
}
|
|
|
}
|
|
|
|