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

323 lines
11 KiB
JavaScript

// 等级编辑页面的JavaScript逻辑
let currentShopName = '';
let currentLevels = [];
// 获取URL参数
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
const regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
const results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}
// 页面初始化
document.addEventListener('DOMContentLoaded', function() {
currentShopName = getUrlParameter('shop');
if (currentShopName) {
document.getElementById('page-title').textContent = `${currentShopName} - 等级编辑`;
loadLevelEditData();
}
});
// 加载等级编辑数据
function loadLevelEditData() {
// 模拟等级编辑数据
currentLevels = [
{
level: 'LV1',
name: '铜牌会员',
growthMin: 0,
growthMax: 100,
memberDiscount: true,
discountRate: 5,
pointExchange: false,
birthdayCoupon: false,
birthdayDoublePoints: false
},
{
level: 'LV2',
name: '银牌会员',
growthMin: 101,
growthMax: 500,
memberDiscount: true,
discountRate: 10,
pointExchange: true,
birthdayCoupon: true,
birthdayDoublePoints: true
},
{
level: 'LV3',
name: '金牌会员',
growthMin: 501,
growthMax: 1200,
memberDiscount: true,
discountRate: 15,
pointExchange: true,
birthdayCoupon: true,
birthdayDoublePoints: true
},
{
level: 'LV4',
name: '钻石会员',
growthMin: 1201,
growthMax: 9999,
memberDiscount: true,
discountRate: 20,
pointExchange: true,
birthdayCoupon: true,
birthdayDoublePoints: true
}
];
renderLevelEditTable();
}
// 渲染等级编辑表格
function renderLevelEditTable() {
const tableBody = document.getElementById('level-edit-table-body');
tableBody.innerHTML = currentLevels.map((level, index) => `
<tr>
<td class="px-3 py-3 text-sm text-gray-900">${level.level}</td>
<td class="px-3 py-3">
<input type="text" value="${level.name}" class="w-full text-sm border border-gray-300 rounded px-2 py-1 focus:border-green-500 focus:outline-none" id="levelName_${index}">
</td>
<td class="px-3 py-3">
<div class="flex items-center gap-1">
<input type="number" value="${level.growthMin}" class="w-16 text-sm border border-gray-300 rounded px-2 py-1 focus:border-green-500 focus:outline-none" id="growthMin_${index}">
<span class="text-gray-500">-</span>
<input type="number" value="${level.growthMax}" class="w-16 text-sm border border-gray-300 rounded px-2 py-1 focus:border-green-500 focus:outline-none" id="growthMax_${index}">
</div>
</td>
<td class="px-3 py-3">
<input type="checkbox" ${level.memberDiscount ? 'checked' : ''} id="memberDiscount_${index}" onchange="toggleDiscountRate(${index})">
</td>
<td class="px-3 py-3">
<input type="number" value="${level.discountRate}" class="w-16 text-sm border border-gray-300 rounded px-2 py-1 focus:border-green-500 focus:outline-none ${!level.memberDiscount ? 'bg-gray-100' : ''}" id="discountRate_${index}" ${!level.memberDiscount ? 'disabled' : ''}>
</td>
<td class="px-3 py-3">
<input type="checkbox" ${level.pointExchange ? 'checked' : ''} id="pointExchange_${index}">
</td>
<td class="px-3 py-3">
<input type="checkbox" ${level.birthdayCoupon ? 'checked' : ''} id="birthdayCoupon_${index}" onchange="toggleCouponButton(${index})">
</td>
<td class="px-3 py-3">
<button class="px-3 py-1 text-xs text-green-600 border border-green-600 rounded hover:bg-green-50 transition-colors ${!level.birthdayCoupon ? 'hidden' : ''}" id="addCouponBtn_${index}" onclick="addBirthdayCoupon(${index})">
添加优惠券
</button>
</td>
<td class="px-3 py-3">
<input type="checkbox" ${level.birthdayDoublePoints ? 'checked' : ''} id="birthdayDoublePoints_${index}">
</td>
<td class="px-3 py-3">
<div class="flex gap-2">
${index === currentLevels.length - 1 ? `
<button class="px-2 py-1 text-xs bg-green-600 text-white rounded hover:bg-green-700" onclick="addNewLevel()">
添加
</button>
` : ''}
<button class="px-2 py-1 text-xs bg-red-600 text-white rounded hover:bg-red-700" onclick="deleteLevel(${index})">
删除
</button>
</div>
</td>
</tr>
`).join('');
}
// 切换折扣率输入框状态
function toggleDiscountRate(index) {
const checkbox = document.getElementById(`memberDiscount_${index}`);
const discountInput = document.getElementById(`discountRate_${index}`);
if (checkbox && discountInput) {
if (checkbox.checked) {
discountInput.disabled = false;
discountInput.classList.remove('bg-gray-100');
} else {
discountInput.disabled = true;
discountInput.classList.add('bg-gray-100');
}
}
}
// 切换优惠券按钮显示
function toggleCouponButton(index) {
const checkbox = document.getElementById(`birthdayCoupon_${index}`);
const addButton = document.getElementById(`addCouponBtn_${index}`);
if (checkbox && addButton) {
if (checkbox.checked) {
addButton.classList.remove('hidden');
} else {
addButton.classList.add('hidden');
}
}
}
// 添加生日优惠券
function addBirthdayCoupon(index) {
// 显示弹窗
const modal = document.getElementById('coupon-modal');
if (modal) {
modal.classList.remove('hidden');
resetCouponForm();
console.log('显示添加生日优惠券弹窗,等级索引:', index);
}
}
// 关闭优惠券弹窗
function closeCouponModal(event) {
// 如果点击的是弹窗背景,则关闭弹窗
if (event && event.target !== event.currentTarget) {
return;
}
const modal = document.getElementById('coupon-modal');
if (modal) {
modal.classList.add('hidden');
console.log('关闭优惠券弹窗');
}
}
// 重置优惠券表单
function resetCouponForm() {
const form = document.getElementById('coupon-form');
if (form) {
// 重置为默认值
document.getElementById('coupon-name').value = '生日优惠券';
document.getElementById('coupon-threshold').value = '10';
document.getElementById('coupon-discount').value = '1';
document.getElementById('coupon-validity').value = '1';
}
}
// 调整门槛金额
function adjustThreshold(delta) {
const input = document.getElementById('coupon-threshold');
if (input) {
const currentValue = parseInt(input.value) || 0;
const newValue = Math.max(0, currentValue + delta);
input.value = newValue;
}
}
// 调整减免金额
function adjustDiscount(delta) {
const input = document.getElementById('coupon-discount');
if (input) {
const currentValue = parseInt(input.value) || 0;
const newValue = Math.max(0, currentValue + delta);
input.value = newValue;
}
}
// 提交优惠券
function submitCoupon() {
const form = document.getElementById('coupon-form');
if (!form) return;
// 获取表单数据
const couponData = {
name: document.getElementById('coupon-name').value,
threshold: document.getElementById('coupon-threshold').value,
discount: document.getElementById('coupon-discount').value,
validity: document.getElementById('coupon-validity').value
};
// 验证表单
if (!couponData.name.trim()) {
showNotification('请输入优惠券名称', 'error');
return;
}
if (!couponData.threshold || couponData.threshold < 0) {
showNotification('请输入有效的门槛金额', 'error');
return;
}
if (!couponData.discount || couponData.discount < 0) {
showNotification('请输入有效的减免金额', 'error');
return;
}
if (parseInt(couponData.discount) >= parseInt(couponData.threshold)) {
showNotification('减免金额不能大于或等于门槛金额', 'error');
return;
}
// 提交成功
console.log('提交优惠券数据:', couponData);
showNotification(`成功添加优惠券:${couponData.name}`, 'success');
// 关闭弹窗
closeCouponModal();
}
// 删除等级行
function deleteLevel(index) {
if (currentLevels.length <= 1) {
showNotification('至少需要保留一个等级', 'warning');
return;
}
currentLevels.splice(index, 1);
// 重新编号等级
currentLevels.forEach((level, i) => {
level.level = `LV${i + 1}`;
});
renderLevelEditTable();
showNotification(`删除等级 ${index + 1}`, 'success');
console.log('删除等级:', index);
}
// 添加新等级
function addNewLevel() {
const newLevelNum = currentLevels.length + 1;
const lastLevel = currentLevels[currentLevels.length - 1];
const newLevel = {
level: `LV${newLevelNum}`,
name: `${getLevelName(newLevelNum)}会员`,
growthMin: lastLevel.growthMax + 1,
growthMax: lastLevel.growthMax + 1000,
memberDiscount: true,
discountRate: Math.min(lastLevel.discountRate + 5, 50),
pointExchange: true,
birthdayCoupon: true,
birthdayDoublePoints: true
};
currentLevels.push(newLevel);
renderLevelEditTable();
showNotification(`添加新等级 LV${newLevelNum}`, 'success');
console.log('添加新等级:', newLevel);
}
// 获取等级名称
function getLevelName(levelNum) {
const names = ['铜牌', '银牌', '金牌', '钻石', '黑钻', '至尊', '王者', '传奇'];
return names[levelNum - 1] || `LV${levelNum}`;
}
// 提交等级编辑
function submitLevelEdit() {
showNotification(`${currentShopName} 等级编辑已提交`, 'success');
console.log('提交等级编辑:', currentShopName);
}
// 导出函数
window.toggleDiscountRate = toggleDiscountRate;
window.toggleCouponButton = toggleCouponButton;
window.addBirthdayCoupon = addBirthdayCoupon;
window.closeCouponModal = closeCouponModal;
window.resetCouponForm = resetCouponForm;
window.adjustThreshold = adjustThreshold;
window.adjustDiscount = adjustDiscount;
window.addCouponThreshold = addCouponThreshold;
window.submitCoupon = submitCoupon;
window.deleteLevel = deleteLevel;
window.addNewLevel = addNewLevel;
window.submitLevelEdit = submitLevelEdit;