297 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			297 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								// 会员查看页面 - H5版本
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let memberData = [];
							 | 
						||
| 
								 | 
							
								let filteredData = [];
							 | 
						||
| 
								 | 
							
								let sortOrder = {};
							 | 
						||
| 
								 | 
							
								let selectedMembers = new Set();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 页面初始化
							 | 
						||
| 
								 | 
							
								document.addEventListener('DOMContentLoaded', function() {
							 | 
						||
| 
								 | 
							
								    loadMemberData();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 加载会员数据
							 | 
						||
| 
								 | 
							
								function loadMemberData() {
							 | 
						||
| 
								 | 
							
								    // 使用模拟数据
							 | 
						||
| 
								 | 
							
								    memberData = [
							 | 
						||
| 
								 | 
							
								        { id: 1, name: '张三', phone: '138****1234', level: 'LV2', points: 1250, joinDate: '2024-01-15' },
							 | 
						||
| 
								 | 
							
								        { id: 2, name: '李四', phone: '139****5678', level: 'LV3', points: 2800, joinDate: '2024-02-20' },
							 | 
						||
| 
								 | 
							
								        { id: 3, name: '王五', phone: '137****9012', level: 'LV1', points: 580, joinDate: '2024-03-10' },
							 | 
						||
| 
								 | 
							
								        { id: 4, name: '赵六', phone: '136****3456', level: 'LV4', points: 5200, joinDate: '2024-01-08' },
							 | 
						||
| 
								 | 
							
								        { id: 5, name: '钱七', phone: '135****7890', level: 'LV2', points: 1580, joinDate: '2024-02-15' },
							 | 
						||
| 
								 | 
							
								        { id: 6, name: '孙八', phone: '134****2345', level: 'LV1', points: 420, joinDate: '2024-03-20' },
							 | 
						||
| 
								 | 
							
								        { id: 7, name: '周九', phone: '133****6789', level: 'LV3', points: 3200, joinDate: '2024-01-25' },
							 | 
						||
| 
								 | 
							
								        { id: 8, name: '吴十', phone: '132****0123', level: 'LV4', points: 4800, joinDate: '2024-02-10' }
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    filteredData = [...memberData];
							 | 
						||
| 
								 | 
							
								    renderTable();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 渲染表格
							 | 
						||
| 
								 | 
							
								function renderTable() {
							 | 
						||
| 
								 | 
							
								    const tableBody = document.getElementById('member-table-body');
							 | 
						||
| 
								 | 
							
								    tableBody.innerHTML = filteredData.map(member => `
							 | 
						||
| 
								 | 
							
								        <tr>
							 | 
						||
| 
								 | 
							
								            <td>
							 | 
						||
| 
								 | 
							
								                <input type="checkbox" class="member-checkbox" value="${member.id}" 
							 | 
						||
| 
								 | 
							
								                       onchange="toggleMemberSelection(${member.id})"
							 | 
						||
| 
								 | 
							
								                       ${selectedMembers.has(member.id) ? 'checked' : ''}>
							 | 
						||
| 
								 | 
							
								            </td>
							 | 
						||
| 
								 | 
							
								            <td>${member.name}</td>
							 | 
						||
| 
								 | 
							
								            <td>${member.phone}</td>
							 | 
						||
| 
								 | 
							
								            <td>${member.level}</td>
							 | 
						||
| 
								 | 
							
								            <td>${member.points}</td>
							 | 
						||
| 
								 | 
							
								            <td>${member.joinDate}</td>
							 | 
						||
| 
								 | 
							
								            <td>
							 | 
						||
| 
								 | 
							
								                <button class="btn btn-small btn-primary" onclick="viewMemberDetail(${member.id})">
							 | 
						||
| 
								 | 
							
								                    查看详情
							 | 
						||
| 
								 | 
							
								                </button>
							 | 
						||
| 
								 | 
							
								            </td>
							 | 
						||
| 
								 | 
							
								        </tr>
							 | 
						||
| 
								 | 
							
								    `).join('');
							 | 
						||
| 
								 | 
							
								    updateSelectedCount();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 筛选会员
							 | 
						||
| 
								 | 
							
								function filterMembers() {
							 | 
						||
| 
								 | 
							
								    const levelFilter = document.getElementById('level-filter').value;
							 | 
						||
| 
								 | 
							
								    const searchText = document.getElementById('member-search').value.toLowerCase();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    filteredData = memberData.filter(member => {
							 | 
						||
| 
								 | 
							
								        const matchLevel = !levelFilter || member.level === levelFilter;
							 | 
						||
| 
								 | 
							
								        const matchSearch = !searchText || 
							 | 
						||
| 
								 | 
							
								            member.name.toLowerCase().includes(searchText) ||
							 | 
						||
| 
								 | 
							
								            member.phone.includes(searchText);
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        return matchLevel && matchSearch;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    renderTable();
							 | 
						||
| 
								 | 
							
								    updateSelectAllState();
							 | 
						||
| 
								 | 
							
								    showNotification(`筛选结果:${filteredData.length} 名会员`, 'info');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 表格排序
							 | 
						||
| 
								 | 
							
								function sortTable(column) {
							 | 
						||
| 
								 | 
							
								    const isAscending = sortOrder[column] !== 'asc';
							 | 
						||
| 
								 | 
							
								    sortOrder = {}; // 重置其他列的排序状态
							 | 
						||
| 
								 | 
							
								    sortOrder[column] = isAscending ? 'asc' : 'desc';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    filteredData.sort((a, b) => {
							 | 
						||
| 
								 | 
							
								        let valueA = a[column];
							 | 
						||
| 
								 | 
							
								        let valueB = b[column];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 处理数字类型
							 | 
						||
| 
								 | 
							
								        if (column === 'points') {
							 | 
						||
| 
								 | 
							
								            valueA = parseInt(valueA);
							 | 
						||
| 
								 | 
							
								            valueB = parseInt(valueB);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        // 处理日期类型
							 | 
						||
| 
								 | 
							
								        if (column === 'joinDate') {
							 | 
						||
| 
								 | 
							
								            valueA = new Date(valueA);
							 | 
						||
| 
								 | 
							
								            valueB = new Date(valueB);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (valueA < valueB) {
							 | 
						||
| 
								 | 
							
								            return isAscending ? -1 : 1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (valueA > valueB) {
							 | 
						||
| 
								 | 
							
								            return isAscending ? 1 : -1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return 0;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    renderTable();
							 | 
						||
| 
								 | 
							
								    updateSelectAllState();
							 | 
						||
| 
								 | 
							
								    showNotification(`按${getColumnName(column)}${isAscending ? '升序' : '降序'}排列`, 'info');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 获取列名中文
							 | 
						||
| 
								 | 
							
								function getColumnName(column) {
							 | 
						||
| 
								 | 
							
								    const names = {
							 | 
						||
| 
								 | 
							
								        'name': '姓名',
							 | 
						||
| 
								 | 
							
								        'phone': '手机号',
							 | 
						||
| 
								 | 
							
								        'level': '等级',
							 | 
						||
| 
								 | 
							
								        'points': '积分',
							 | 
						||
| 
								 | 
							
								        'joinDate': '加入时间'
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return names[column] || column;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 查看会员详情
							 | 
						||
| 
								 | 
							
								function viewMemberDetail(memberId) {
							 | 
						||
| 
								 | 
							
								    const member = memberData.find(m => m.id === memberId);
							 | 
						||
| 
								 | 
							
								    if (member) {
							 | 
						||
| 
								 | 
							
								        // 这里可以跳转到会员详情页面,或者显示弹窗
							 | 
						||
| 
								 | 
							
								        showNotification(`查看会员:${member.name} 的详情`, 'info');
							 | 
						||
| 
								 | 
							
								        console.log('会员详情:', member);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 批量选择相关功能
							 | 
						||
| 
								 | 
							
								function toggleSelectAll() {
							 | 
						||
| 
								 | 
							
								    const selectAllCheckbox = document.getElementById('select-all');
							 | 
						||
| 
								 | 
							
								    const memberCheckboxes = document.querySelectorAll('.member-checkbox');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    if (selectAllCheckbox.checked) {
							 | 
						||
| 
								 | 
							
								        // 全选当前页面显示的会员
							 | 
						||
| 
								 | 
							
								        filteredData.forEach(member => {
							 | 
						||
| 
								 | 
							
								            selectedMembers.add(member.id);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        memberCheckboxes.forEach(checkbox => {
							 | 
						||
| 
								 | 
							
								            checkbox.checked = true;
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        // 取消全选
							 | 
						||
| 
								 | 
							
								        selectedMembers.clear();
							 | 
						||
| 
								 | 
							
								        memberCheckboxes.forEach(checkbox => {
							 | 
						||
| 
								 | 
							
								            checkbox.checked = false;
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    updateSelectedCount();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 切换单个会员选择状态
							 | 
						||
| 
								 | 
							
								function toggleMemberSelection(memberId) {
							 | 
						||
| 
								 | 
							
								    console.log('toggleMemberSelection called, memberId:', memberId);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    if (selectedMembers.has(memberId)) {
							 | 
						||
| 
								 | 
							
								        selectedMembers.delete(memberId);
							 | 
						||
| 
								 | 
							
								        console.log('Member removed from selection');
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        selectedMembers.add(memberId);
							 | 
						||
| 
								 | 
							
								        console.log('Member added to selection');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    console.log('Selected members:', Array.from(selectedMembers));
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    updateSelectedCount();
							 | 
						||
| 
								 | 
							
								    updateSelectAllState();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 更新选中数量显示
							 | 
						||
| 
								 | 
							
								function updateSelectedCount() {
							 | 
						||
| 
								 | 
							
								    const selectedCount = selectedMembers.size;
							 | 
						||
| 
								 | 
							
								    const countElement = document.getElementById('selected-count');
							 | 
						||
| 
								 | 
							
								    const batchEditBtn = document.getElementById('batch-edit-btn');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    countElement.textContent = `已选择 ${selectedCount} 位会员`;
							 | 
						||
| 
								 | 
							
								    batchEditBtn.disabled = selectedCount === 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 更新全选checkbox状态
							 | 
						||
| 
								 | 
							
								function updateSelectAllState() {
							 | 
						||
| 
								 | 
							
								    const selectAllCheckbox = document.getElementById('select-all');
							 | 
						||
| 
								 | 
							
								    const currentPageMemberIds = filteredData.map(member => member.id);
							 | 
						||
| 
								 | 
							
								    const selectedCurrentPageCount = currentPageMemberIds.filter(id => selectedMembers.has(id)).length;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    if (selectedCurrentPageCount === 0) {
							 | 
						||
| 
								 | 
							
								        selectAllCheckbox.checked = false;
							 | 
						||
| 
								 | 
							
								        selectAllCheckbox.indeterminate = false;
							 | 
						||
| 
								 | 
							
								    } else if (selectedCurrentPageCount === currentPageMemberIds.length) {
							 | 
						||
| 
								 | 
							
								        selectAllCheckbox.checked = true;
							 | 
						||
| 
								 | 
							
								        selectAllCheckbox.indeterminate = false;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        selectAllCheckbox.checked = false;
							 | 
						||
| 
								 | 
							
								        selectAllCheckbox.indeterminate = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 打开批量编辑弹窗
							 | 
						||
| 
								 | 
							
								function openBatchEditModal() {
							 | 
						||
| 
								 | 
							
								    console.log('openBatchEditModal called, selectedMembers size:', selectedMembers.size);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    if (selectedMembers.size === 0) {
							 | 
						||
| 
								 | 
							
								        showNotification('请先选择要编辑的会员', 'warning');
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 显示选中的会员列表
							 | 
						||
| 
								 | 
							
								    const selectedMembersList = document.getElementById('selected-members-list');
							 | 
						||
| 
								 | 
							
								    const selectedMembersData = memberData.filter(member => selectedMembers.has(member.id));
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    console.log('selectedMembersData:', selectedMembersData);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    selectedMembersList.innerHTML = selectedMembersData.map(member => 
							 | 
						||
| 
								 | 
							
								        `<div style="margin-bottom: 5px;">${member.name} (${member.phone}) - 当前等级: ${member.level}</div>`
							 | 
						||
| 
								 | 
							
								    ).join('');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 重置表单
							 | 
						||
| 
								 | 
							
								    document.getElementById('new-level').value = '';
							 | 
						||
| 
								 | 
							
								    document.getElementById('batch-edit-remark').value = '';
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 显示弹窗
							 | 
						||
| 
								 | 
							
								    const modal = document.getElementById('batch-edit-modal');
							 | 
						||
| 
								 | 
							
								    console.log('Modal element:', modal);
							 | 
						||
| 
								 | 
							
								    if (modal) {
							 | 
						||
| 
								 | 
							
								        modal.style.display = 'flex';
							 | 
						||
| 
								 | 
							
								        console.log('Modal display set to flex');
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        console.error('Modal element not found!');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 关闭批量编辑弹窗
							 | 
						||
| 
								 | 
							
								function closeBatchEditModal() {
							 | 
						||
| 
								 | 
							
								    document.getElementById('batch-edit-modal').style.display = 'none';
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 确认批量编辑
							 | 
						||
| 
								 | 
							
								function confirmBatchEdit() {
							 | 
						||
| 
								 | 
							
								    const newLevel = document.getElementById('new-level').value;
							 | 
						||
| 
								 | 
							
								    const remark = document.getElementById('batch-edit-remark').value;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    if (!newLevel) {
							 | 
						||
| 
								 | 
							
								        showNotification('请选择新的会员等级', 'warning');
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 执行批量编辑
							 | 
						||
| 
								 | 
							
								    const selectedMembersData = memberData.filter(member => selectedMembers.has(member.id));
							 | 
						||
| 
								 | 
							
								    let updatedCount = 0;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    selectedMembersData.forEach(member => {
							 | 
						||
| 
								 | 
							
								        if (member.level !== newLevel) {
							 | 
						||
| 
								 | 
							
								            member.level = newLevel;
							 | 
						||
| 
								 | 
							
								            updatedCount++;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 重新渲染表格
							 | 
						||
| 
								 | 
							
								    renderTable();
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 关闭弹窗
							 | 
						||
| 
								 | 
							
								    closeBatchEditModal();
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 清除选择
							 | 
						||
| 
								 | 
							
								    selectedMembers.clear();
							 | 
						||
| 
								 | 
							
								    document.getElementById('select-all').checked = false;
							 | 
						||
| 
								 | 
							
								    updateSelectedCount();
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 显示成功消息
							 | 
						||
| 
								 | 
							
								    const message = remark ? 
							 | 
						||
| 
								 | 
							
								        `批量编辑完成:${updatedCount}位会员等级已更新为${newLevel}。备注:${remark}` :
							 | 
						||
| 
								 | 
							
								        `批量编辑完成:${updatedCount}位会员等级已更新为${newLevel}`;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    showNotification(message, 'success');
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    console.log('批量编辑完成:', {
							 | 
						||
| 
								 | 
							
								        updatedCount,
							 | 
						||
| 
								 | 
							
								        newLevel,
							 | 
						||
| 
								 | 
							
								        remark,
							 | 
						||
| 
								 | 
							
								        selectedMembers: selectedMembersData.map(m => ({ id: m.id, name: m.name }))
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 导出函数到全局
							 | 
						||
| 
								 | 
							
								window.filterMembers = filterMembers;
							 | 
						||
| 
								 | 
							
								window.sortTable = sortTable;
							 | 
						||
| 
								 | 
							
								window.viewMemberDetail = viewMemberDetail;
							 | 
						||
| 
								 | 
							
								window.toggleSelectAll = toggleSelectAll;
							 | 
						||
| 
								 | 
							
								window.toggleMemberSelection = toggleMemberSelection;
							 | 
						||
| 
								 | 
							
								window.openBatchEditModal = openBatchEditModal;
							 | 
						||
| 
								 | 
							
								window.closeBatchEditModal = closeBatchEditModal;
							 | 
						||
| 
								 | 
							
								window.confirmBatchEdit = confirmBatchEdit;
							 |