233 lines
7.8 KiB
JavaScript
233 lines
7.8 KiB
JavaScript
/**
|
||
* 批量会员等级编辑功能模块
|
||
* 提供批量编辑多个摊位的会员等级配置
|
||
*/
|
||
|
||
// 页面初始化函数
|
||
function initBatchLevelEdit() {
|
||
console.log('批量等级编辑页面已初始化');
|
||
|
||
// 初始化摊位选择状态
|
||
updateStallSelection();
|
||
|
||
// 绑定表单事件
|
||
bindFormEvents();
|
||
|
||
// 初始化新增功能区域的交互事件
|
||
initBatchPointRatioSettings();
|
||
}
|
||
|
||
// 绑定表单事件
|
||
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 = [];
|
||
|
||
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);
|
||
});
|
||
|
||
// 收集积分有效期设置
|
||
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)
|
||
}
|
||
};
|
||
}
|
||
|
||
// 添加优惠券(重用现有功能)
|
||
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';
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
// 页面清理函数
|
||
function cleanupBatchLevelEdit() {
|
||
console.log('清理批量等级编辑页面');
|
||
// 清理事件监听器等资源
|
||
}
|
||
|
||
// 暴露到全局作用域供HTML调用
|
||
window.selectAllStalls = selectAllStalls;
|
||
window.updateStallSelection = updateStallSelection;
|
||
window.saveBatchLevelEdit = saveBatchLevelEdit;
|
||
window.addCoupon = addCoupon; |