194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								// 批量编辑第三步 - 确认预览页面
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let selectedShops = [];
							 | 
						||
| 
								 | 
							
								let levelData = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 页面初始化
							 | 
						||
| 
								 | 
							
								document.addEventListener('DOMContentLoaded', function() {
							 | 
						||
| 
								 | 
							
								    loadStoredData();
							 | 
						||
| 
								 | 
							
								    generatePreview();
							 | 
						||
| 
								 | 
							
								    updateSummaryStats();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 加载存储的数据
							 | 
						||
| 
								 | 
							
								function loadStoredData() {
							 | 
						||
| 
								 | 
							
								    // 加载选中的店铺
							 | 
						||
| 
								 | 
							
								    const storedShops = sessionStorage.getItem('batchEditSelectedShops');
							 | 
						||
| 
								 | 
							
								    if (storedShops) {
							 | 
						||
| 
								 | 
							
								        selectedShops = JSON.parse(storedShops);
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        showNotification('未找到选中的店铺数据,请重新操作', 'error');
							 | 
						||
| 
								 | 
							
								        setTimeout(() => {
							 | 
						||
| 
								 | 
							
								            navigateTo('batch-edit-step1.html');
							 | 
						||
| 
								 | 
							
								        }, 2000);
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 加载等级设置数据
							 | 
						||
| 
								 | 
							
								    const storedLevels = sessionStorage.getItem('batchEditLevelData');
							 | 
						||
| 
								 | 
							
								    if (storedLevels) {
							 | 
						||
| 
								 | 
							
								        levelData = JSON.parse(storedLevels);
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        showNotification('未找到等级设置数据,请重新设置', 'error');
							 | 
						||
| 
								 | 
							
								        setTimeout(() => {
							 | 
						||
| 
								 | 
							
								            navigateTo('batch-edit-step2.html');
							 | 
						||
| 
								 | 
							
								        }, 2000);
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 生成预览表格
							 | 
						||
| 
								 | 
							
								function generatePreview() {
							 | 
						||
| 
								 | 
							
								    const tableBody = document.getElementById('preview-table-body');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    const html = selectedShops.map(shop => {
							 | 
						||
| 
								 | 
							
								        const beforeLevels = shop.levels.join(', ');
							 | 
						||
| 
								 | 
							
								        const afterLevels = levelData.map(level => level.level).join(', ');
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        return `
							 | 
						||
| 
								 | 
							
								            <tr>
							 | 
						||
| 
								 | 
							
								                <td>
							 | 
						||
| 
								 | 
							
								                    <div class="shop-name">${shop.name}</div>
							 | 
						||
| 
								 | 
							
								                </td>
							 | 
						||
| 
								 | 
							
								                <td>
							 | 
						||
| 
								 | 
							
								                    <div class="levels-before">${beforeLevels}</div>
							 | 
						||
| 
								 | 
							
								                </td>
							 | 
						||
| 
								 | 
							
								                <td>
							 | 
						||
| 
								 | 
							
								                    <div class="levels-after">${afterLevels}</div>
							 | 
						||
| 
								 | 
							
								                    <div class="change-indicator">
							 | 
						||
| 
								 | 
							
								                        <span class="change-arrow">→</span>
							 | 
						||
| 
								 | 
							
								                        <span>新设置</span>
							 | 
						||
| 
								 | 
							
								                    </div>
							 | 
						||
| 
								 | 
							
								                </td>
							 | 
						||
| 
								 | 
							
								                <td>
							 | 
						||
| 
								 | 
							
								                    <div class="member-count">${shop.memberCount} 人</div>
							 | 
						||
| 
								 | 
							
								                </td>
							 | 
						||
| 
								 | 
							
								            </tr>
							 | 
						||
| 
								 | 
							
								        `;
							 | 
						||
| 
								 | 
							
								    }).join('');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    tableBody.innerHTML = html;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 更新摘要统计
							 | 
						||
| 
								 | 
							
								function updateSummaryStats() {
							 | 
						||
| 
								 | 
							
								    const shopCount = selectedShops.length;
							 | 
						||
| 
								 | 
							
								    const totalMembers = selectedShops.reduce((sum, shop) => sum + shop.memberCount, 0);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    document.getElementById('shop-count').textContent = shopCount;
							 | 
						||
| 
								 | 
							
								    document.getElementById('member-count').textContent = totalMembers.toLocaleString();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 上一步 - 返回修改
							 | 
						||
| 
								 | 
							
								function previousStep() {
							 | 
						||
| 
								 | 
							
								    navigateTo('batch-edit-step2.html');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 确认提交
							 | 
						||
| 
								 | 
							
								function confirmSubmit() {
							 | 
						||
| 
								 | 
							
								    const shopCount = selectedShops.length;
							 | 
						||
| 
								 | 
							
								    const totalMembers = selectedShops.reduce((sum, shop) => sum + shop.memberCount, 0);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    const message = `确定要为 ${shopCount} 个店铺的 ${totalMembers.toLocaleString()} 名会员应用新的等级设置吗?\n\n此操作不可撤销,请谨慎确认。`;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    confirmAction(message, () => {
							 | 
						||
| 
								 | 
							
								        executeSubmit();
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 执行提交
							 | 
						||
| 
								 | 
							
								function executeSubmit() {
							 | 
						||
| 
								 | 
							
								    // 隐藏操作按钮,显示进度
							 | 
						||
| 
								 | 
							
								    document.getElementById('action-buttons').style.display = 'none';
							 | 
						||
| 
								 | 
							
								    document.getElementById('submit-progress').style.display = 'block';
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    simulateSubmitProgress();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 模拟提交进度
							 | 
						||
| 
								 | 
							
								function simulateSubmitProgress() {
							 | 
						||
| 
								 | 
							
								    const progressFill = document.getElementById('progress-fill');
							 | 
						||
| 
								 | 
							
								    const progressText = document.getElementById('progress-text');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    const steps = [
							 | 
						||
| 
								 | 
							
								        { progress: 10, text: '验证店铺数据...' },
							 | 
						||
| 
								 | 
							
								        { progress: 25, text: '备份现有设置...' },
							 | 
						||
| 
								 | 
							
								        { progress: 40, text: '应用等级设置...' },
							 | 
						||
| 
								 | 
							
								        { progress: 60, text: '更新会员等级...' },
							 | 
						||
| 
								 | 
							
								        { progress: 80, text: '发送通知消息...' },
							 | 
						||
| 
								 | 
							
								        { progress: 95, text: '清理缓存数据...' },
							 | 
						||
| 
								 | 
							
								        { progress: 100, text: '操作完成!' }
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    let currentStep = 0;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    const updateProgress = () => {
							 | 
						||
| 
								 | 
							
								        if (currentStep < steps.length) {
							 | 
						||
| 
								 | 
							
								            const step = steps[currentStep];
							 | 
						||
| 
								 | 
							
								            progressFill.style.width = step.progress + '%';
							 | 
						||
| 
								 | 
							
								            progressText.textContent = step.text;
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            currentStep++;
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            // 模拟不同步骤的处理时间
							 | 
						||
| 
								 | 
							
								            const delay = currentStep === steps.length ? 1000 : Math.random() * 1000 + 500;
							 | 
						||
| 
								 | 
							
								            setTimeout(updateProgress, delay);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            // 提交完成
							 | 
						||
| 
								 | 
							
								            onSubmitComplete();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    updateProgress();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 提交完成处理
							 | 
						||
| 
								 | 
							
								function onSubmitComplete() {
							 | 
						||
| 
								 | 
							
								    // 清理存储的数据
							 | 
						||
| 
								 | 
							
								    sessionStorage.removeItem('batchEditSelectedShops');
							 | 
						||
| 
								 | 
							
								    sessionStorage.removeItem('batchEditLevelData');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 显示成功消息
							 | 
						||
| 
								 | 
							
								    const shopCount = selectedShops.length;
							 | 
						||
| 
								 | 
							
								    const totalMembers = selectedShops.reduce((sum, shop) => sum + shop.memberCount, 0);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    showNotification(
							 | 
						||
| 
								 | 
							
								        `批量设置成功!已为 ${shopCount} 个店铺的 ${totalMembers.toLocaleString()} 名会员应用新的等级设置。`, 
							 | 
						||
| 
								 | 
							
								        'success',
							 | 
						||
| 
								 | 
							
								        5000
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 延迟跳转回等级设置主页
							 | 
						||
| 
								 | 
							
								    setTimeout(() => {
							 | 
						||
| 
								 | 
							
								        navigateTo('level-settings.html');
							 | 
						||
| 
								 | 
							
								    }, 3000);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 生成操作日志(用于后续可能的撤销功能)
							 | 
						||
| 
								 | 
							
								function generateOperationLog() {
							 | 
						||
| 
								 | 
							
								    const operationLog = {
							 | 
						||
| 
								 | 
							
								        timestamp: new Date().toISOString(),
							 | 
						||
| 
								 | 
							
								        operation: 'batch_level_edit',
							 | 
						||
| 
								 | 
							
								        affectedShops: selectedShops.map(shop => ({
							 | 
						||
| 
								 | 
							
								            shopId: shop.id,
							 | 
						||
| 
								 | 
							
								            shopName: shop.name,
							 | 
						||
| 
								 | 
							
								            beforeLevels: shop.levels,
							 | 
						||
| 
								 | 
							
								            afterLevels: levelData.map(level => level.level),
							 | 
						||
| 
								 | 
							
								            memberCount: shop.memberCount
							 | 
						||
| 
								 | 
							
								        })),
							 | 
						||
| 
								 | 
							
								        newLevelSettings: levelData,
							 | 
						||
| 
								 | 
							
								        summary: {
							 | 
						||
| 
								 | 
							
								            shopCount: selectedShops.length,
							 | 
						||
| 
								 | 
							
								            totalMembers: selectedShops.reduce((sum, shop) => sum + shop.memberCount, 0)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 在实际项目中,这里会将日志发送到服务器
							 | 
						||
| 
								 | 
							
								    console.log('操作日志:', operationLog);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    return operationLog;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 导出函数到全局
							 | 
						||
| 
								 | 
							
								window.previousStep = previousStep;
							 | 
						||
| 
								 | 
							
								window.confirmSubmit = confirmSubmit;
							 |