dm-design/web/merchant/js/batch-level-edit.js

233 lines
7.8 KiB
JavaScript
Raw Normal View History

2025-08-01 08:40:17 +00:00
/**
* 批量会员等级编辑功能模块
* 提供批量编辑多个摊位的会员等级配置
*/
// 页面初始化函数
function initBatchLevelEdit() {
console.log('批量等级编辑页面已初始化');
// 初始化摊位选择状态
updateStallSelection();
// 绑定表单事件
bindFormEvents();
// 初始化新增功能区域的交互事件
initBatchPointRatioSettings();
2025-08-01 08:40:17 +00:00
}
// 绑定表单事件
function bindFormEvents() {
// 可以在这里添加其他表单事件绑定
console.log('表单事件已绑定');
}
// 全选/取消全选摊位
function selectAllStalls(checkbox) {
const stallCheckboxes = document.querySelectorAll('.stall-checkbox input[type="checkbox"]:not([value="all"])');
stallCheckboxes.forEach(cb => {
cb.checked = checkbox.checked;
});
updateStallSelection();
}
// 更新摊位选择状态
function updateStallSelection() {
const stallCheckboxes = document.querySelectorAll('.stall-checkbox input[type="checkbox"]:not([value="all"])');
const allCheckbox = document.querySelector('.stall-checkbox input[value="all"]');
const countElement = document.getElementById('selectedStallsCount');
let selectedCount = 0;
let selectedStalls = [];
stallCheckboxes.forEach(cb => {
if (cb.checked) {
selectedCount++;
selectedStalls.push(cb.value);
}
});
// 更新全选状态
if (allCheckbox) {
allCheckbox.checked = selectedCount === stallCheckboxes.length;
allCheckbox.indeterminate = selectedCount > 0 && selectedCount < stallCheckboxes.length;
}
// 更新选择计数显示
if (countElement) {
countElement.textContent = `已选择 ${selectedCount} 个摊位`;
if (selectedCount > 0) {
countElement.textContent += `${selectedStalls.join('、')}`;
}
}
}
// 保存批量等级编辑
function saveBatchLevelEdit() {
const selectedStalls = getSelectedStalls();
if (selectedStalls.length === 0) {
alert('请至少选择一个摊位');
return;
}
// 获取等级配置数据
const levelConfig = getLevelConfigData();
// 模拟保存过程
console.log('保存批量等级编辑:', {
stalls: selectedStalls,
config: levelConfig
});
// 显示保存成功提示
alert(`已成功为 ${selectedStalls.length} 个摊位(${selectedStalls.join('、')})批量更新等级配置!`);
// 可以在这里添加实际的保存逻辑比如发送到后端API
}
// 获取选中的摊位列表
function getSelectedStalls() {
const selectedStalls = [];
const stallCheckboxes = document.querySelectorAll('.stall-checkbox input[type="checkbox"]:not([value="all"])');
stallCheckboxes.forEach(cb => {
if (cb.checked) {
selectedStalls.push(cb.value);
}
});
return selectedStalls;
}
// 获取等级配置数据
function getLevelConfigData() {
const tbody = document.getElementById('batchLevelEditBody');
const rows = tbody.querySelectorAll('tr');
const levelConfig = [];
2025-08-01 08:40:17 +00:00
rows.forEach(row => {
const cells = row.cells;
const level = cells[0].textContent;
const levelData = {
level: level,
name: cells[1].querySelector('input').value,
growthRange: {
start: parseInt(cells[2].querySelectorAll('input')[0].value),
end: parseInt(cells[2].querySelectorAll('input')[1].value)
},
memberDiscount: {
enabled: cells[3].querySelector('input[type="checkbox"]').checked,
rate: parseInt(cells[4].querySelector('input').value)
},
pointExchange: cells[5].querySelector('input[type="checkbox"]').checked,
birthdayCoupon: cells[6].querySelector('input[type="checkbox"]').checked,
birthdayDoublePoints: cells[8].querySelector('input[type="checkbox"]').checked
};
levelConfig.push(levelData);
2025-08-01 08:40:17 +00:00
});
// 收集积分有效期设置
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)
}
};
2025-08-01 08:40:17 +00:00
}
// 添加优惠券(重用现有功能)
function addCoupon(level) {
// 这里可以调用现有的优惠券添加功能
// 或者实现新的批量优惠券添加逻辑
console.log(`为等级 ${level} 添加优惠券`);
// 检查是否已经加载了优惠券弹窗相关功能
if (typeof showCouponModal === 'function') {
showCouponModal(level);
} else {
// 如果没有加载,可以动态加载相关功能
loadCouponModalFunction().then(() => {
if (typeof showCouponModal === 'function') {
showCouponModal(level);
}
});
}
}
// 动态加载优惠券弹窗功能
async function loadCouponModalFunction() {
try {
// 这里可以动态加载优惠券相关的JavaScript
console.log('动态加载优惠券功能...');
// 实际项目中可以通过import或script标签动态加载
} catch (error) {
console.error('加载优惠券功能失败:', error);
}
}
// 初始化积分兑换比例设置的交互逻辑
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';
}
});
});
}
2025-08-01 08:40:17 +00:00
// 页面清理函数
function cleanupBatchLevelEdit() {
console.log('清理批量等级编辑页面');
// 清理事件监听器等资源
}
// 暴露到全局作用域供HTML调用
window.selectAllStalls = selectAllStalls;
window.updateStallSelection = updateStallSelection;
window.saveBatchLevelEdit = saveBatchLevelEdit;
window.addCoupon = addCoupon;