From 1130141ddf6cacab2eb6d3ea8cb6cdb7838e2c1f Mon Sep 17 00:00:00 2001 From: linbin <495561397@qq.com> Date: Fri, 1 Aug 2025 22:32:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=BC=96=E8=BE=91=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A7=AF=E5=88=86=E6=9C=89=E6=95=88=E6=9C=9F?= =?UTF-8?q?=EF=BC=8C=E7=A7=AF=E5=88=86=E5=85=91=E6=8D=A2=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/merchant/js/batch-level-edit.js | 64 ++++++- web/merchant/js/level-edit.js | 69 ++++++- web/merchant/pages/batch-level-edit.html | 232 ++++++++++++++++++++++ web/merchant/pages/level-edit.html | 234 +++++++++++++++++++++++ 4 files changed, 591 insertions(+), 8 deletions(-) diff --git a/web/merchant/js/batch-level-edit.js b/web/merchant/js/batch-level-edit.js index 6fe6e8d..bee3e0b 100644 --- a/web/merchant/js/batch-level-edit.js +++ b/web/merchant/js/batch-level-edit.js @@ -12,6 +12,9 @@ function initBatchLevelEdit() { // 绑定表单事件 bindFormEvents(); + + // 初始化新增功能区域的交互事件 + initBatchPointRatioSettings(); } // 绑定表单事件 @@ -104,7 +107,7 @@ function getSelectedStalls() { function getLevelConfigData() { const tbody = document.getElementById('batchLevelEditBody'); const rows = tbody.querySelectorAll('tr'); - const config = []; + const levelConfig = []; rows.forEach(row => { const cells = row.cells; @@ -126,10 +129,38 @@ function getLevelConfigData() { birthdayDoublePoints: cells[8].querySelector('input[type="checkbox"]').checked }; - config.push(levelData); + levelConfig.push(levelData); }); - return config; + // 收集积分有效期设置 + const validityDays = document.getElementById('batchValidityDays')?.value || 365; + + // 收集积分兑换比例设置 + const spendAmount = document.getElementById('batchSpendAmount')?.value || 1; + const earnPoints = document.getElementById('batchEarnPoints')?.value || 1; + const deductPoints = document.getElementById('batchDeductPoints')?.value || 100; + const deductAmount = document.getElementById('batchDeductAmount')?.value || 1; + + // 收集单笔订单最大积分使用限制 + const limitType = document.querySelector('input[name="batchLimitType"]:checked')?.value || 'none'; + const limitPercentage = document.getElementById('batchLimitPercentage')?.value || 50; + const limitAmount = document.getElementById('batchLimitAmount')?.value || 100; + + return { + levels: levelConfig, + pointValidity: { + validityDays: parseInt(validityDays) + }, + pointRatio: { + spendAmount: parseFloat(spendAmount), + earnPoints: parseInt(earnPoints), + deductPoints: parseInt(deductPoints), + deductAmount: parseFloat(deductAmount), + limitType: limitType, + limitPercentage: parseInt(limitPercentage), + limitAmount: parseFloat(limitAmount) + } + }; } // 添加优惠券(重用现有功能) @@ -162,6 +193,33 @@ async function loadCouponModalFunction() { } } +// 初始化积分兑换比例设置的交互逻辑 +function initBatchPointRatioSettings() { + const limitTypeRadios = document.querySelectorAll('input[name="batchLimitType"]'); + const percentageContainer = document.querySelector('.batch-percentage-container'); + const fixedContainer = document.querySelector('.batch-fixed-container'); + + if (limitTypeRadios.length === 0) return; + + // 积分使用限制类型变化事件 + limitTypeRadios.forEach(radio => { + radio.addEventListener('change', function() { + const value = this.value; + + // 隐藏所有容器 + if (percentageContainer) percentageContainer.style.display = 'none'; + if (fixedContainer) fixedContainer.style.display = 'none'; + + // 显示对应的容器 + if (value === 'percentage' && percentageContainer) { + percentageContainer.style.display = 'flex'; + } else if (value === 'fixed' && fixedContainer) { + fixedContainer.style.display = 'flex'; + } + }); + }); +} + // 页面清理函数 function cleanupBatchLevelEdit() { console.log('清理批量等级编辑页面'); diff --git a/web/merchant/js/level-edit.js b/web/merchant/js/level-edit.js index ebf4dc0..1df459d 100644 --- a/web/merchant/js/level-edit.js +++ b/web/merchant/js/level-edit.js @@ -97,6 +97,9 @@ function initLevelEdit() { if (merchantName) { updateEditPageContent(merchantName); } + + // 初始化新增功能区域的交互事件 + initPointRatioSettings(); } // 获取当前商户名称 @@ -260,13 +263,13 @@ function saveLevelEdit() { // 收集表单数据 function collectFormData() { const tbody = document.getElementById('levelEditBody'); - if (!tbody) return []; + if (!tbody) return {}; const rows = tbody.querySelectorAll('tr'); - const data = []; + const levelData = []; rows.forEach((row, index) => { - const levelData = { + const data = { level: row.cells[0].textContent, name: row.querySelector('input[type="text"]').value, growthStart: parseInt(row.querySelector('.range-start').value), @@ -277,10 +280,66 @@ function collectFormData() { birthdayCouponEnabled: row.querySelectorAll('input[type="checkbox"]')[2].checked, birthdayPointsEnabled: row.querySelectorAll('input[type="checkbox"]')[3].checked }; - data.push(levelData); + levelData.push(data); }); - return data; + // 收集积分有效期设置 + const validityDays = document.getElementById('validityDays')?.value || 365; + + // 收集积分兑换比例设置 + const spendAmount = document.getElementById('spendAmount')?.value || 1; + const earnPoints = document.getElementById('earnPoints')?.value || 1; + const deductPoints = document.getElementById('deductPoints')?.value || 100; + const deductAmount = document.getElementById('deductAmount')?.value || 1; + + // 收集单笔订单最大积分使用限制 + const limitType = document.querySelector('input[name="limitType"]:checked')?.value || 'none'; + const limitPercentage = document.getElementById('limitPercentage')?.value || 50; + const limitAmount = document.getElementById('limitAmount')?.value || 100; + + return { + levels: levelData, + pointValidity: { + validityDays: parseInt(validityDays) + }, + pointRatio: { + spendAmount: parseFloat(spendAmount), + earnPoints: parseInt(earnPoints), + deductPoints: parseInt(deductPoints), + deductAmount: parseFloat(deductAmount), + limitType: limitType, + limitPercentage: parseInt(limitPercentage), + limitAmount: parseFloat(limitAmount) + } + }; +} + + +// 初始化积分兑换比例设置的交互逻辑 +function initPointRatioSettings() { + const limitTypeRadios = document.querySelectorAll('input[name="limitType"]'); + const percentageContainer = document.querySelector('.percentage-container'); + const fixedContainer = document.querySelector('.fixed-container'); + + if (limitTypeRadios.length === 0) return; + + // 积分使用限制类型变化事件 + limitTypeRadios.forEach(radio => { + radio.addEventListener('change', function() { + const value = this.value; + + // 隐藏所有容器 + if (percentageContainer) percentageContainer.style.display = 'none'; + if (fixedContainer) fixedContainer.style.display = 'none'; + + // 显示对应的容器 + if (value === 'percentage' && percentageContainer) { + percentageContainer.style.display = 'flex'; + } else if (value === 'fixed' && fixedContainer) { + fixedContainer.style.display = 'flex'; + } + }); + }); } // 将需要在HTML中调用的函数暴露到全局作用域 diff --git a/web/merchant/pages/batch-level-edit.html b/web/merchant/pages/batch-level-edit.html index 611c3c1..969a72c 100644 --- a/web/merchant/pages/batch-level-edit.html +++ b/web/merchant/pages/batch-level-edit.html @@ -229,6 +229,78 @@ + + +
+
+

积分有效期设置

+
+
+
+ +
+ + +
+
+
+
+ + +
+
+

金额与积分兑换比例设置

+
+
+
+ +
+ 消费 + + 元 = + + 积分 +
+
+
+ +
+ + 积分 = + + +
+
+
+ +
+ + + + + +
+
+
+
\ No newline at end of file diff --git a/web/merchant/pages/level-edit.html b/web/merchant/pages/level-edit.html index 5239f08..09875f0 100644 --- a/web/merchant/pages/level-edit.html +++ b/web/merchant/pages/level-edit.html @@ -195,6 +195,78 @@ + + +
+
+

积分有效期设置

+
+
+
+ +
+ + +
+
+
+
+ + +
+
+

金额与积分兑换比例设置

+
+
+
+ +
+ 消费 + + 元 = + + 积分 +
+
+
+ +
+ + 积分 = + + +
+
+
+ +
+ + + + + +
+
+
+
\ No newline at end of file