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

233 lines
7.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 批量会员等级编辑功能模块
* 提供批量编辑多个摊位的会员等级配置
*/
// 页面初始化函数
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;