308 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			308 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								// 等级设置页面的Tab系统JavaScript逻辑
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 初始化页面
							 | 
						|||
| 
								 | 
							
								document.addEventListener('DOMContentLoaded', function() {
							 | 
						|||
| 
								 | 
							
								    initializeSidebar();
							 | 
						|||
| 
								 | 
							
								    initializeSidebarSearch();
							 | 
						|||
| 
								 | 
							
								    // 默认打开等级设置Tab
							 | 
						|||
| 
								 | 
							
								    openLevelSettingsTab();
							 | 
						|||
| 
								 | 
							
								});
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 打开等级设置Tab(从member-tabs.js调用)
							 | 
						|||
| 
								 | 
							
								function openLevelSettingsTab() {
							 | 
						|||
| 
								 | 
							
								    if (typeof memberTabManager !== 'undefined') {
							 | 
						|||
| 
								 | 
							
								        memberTabManager.showDefaultContent();
							 | 
						|||
| 
								 | 
							
								        // 创建等级设置tab
							 | 
						|||
| 
								 | 
							
								        const content = generateLevelSettingsContent();
							 | 
						|||
| 
								 | 
							
								        memberTabManager.createTab('level-settings', '等级设置', content, false);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 生成等级设置表格内容
							 | 
						|||
| 
								 | 
							
								function generateLevelSettingsContent() {
							 | 
						|||
| 
								 | 
							
								    return `
							 | 
						|||
| 
								 | 
							
								        <div class="p-6">
							 | 
						|||
| 
								 | 
							
								            <div class="flex items-center justify-between mb-6">
							 | 
						|||
| 
								 | 
							
								                <h2 class="text-lg font-medium text-gray-900">等级设置</h2>
							 | 
						|||
| 
								 | 
							
								            </div>
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            <!-- 摊位名称筛选器 -->
							 | 
						|||
| 
								 | 
							
								            <div class="mb-6 flex items-center gap-4">
							 | 
						|||
| 
								 | 
							
								                <div class="flex-1 max-w-md">
							 | 
						|||
| 
								 | 
							
								                    <label class="block text-sm font-medium text-gray-700 mb-2">摊位名称</label>
							 | 
						|||
| 
								 | 
							
								                    <div class="relative">
							 | 
						|||
| 
								 | 
							
								                        <button id="stall-dropdown-btn" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-green-500 bg-white text-left flex items-center justify-between" onclick="toggleStallDropdown()">
							 | 
						|||
| 
								 | 
							
								                            <span id="dropdown-text">请选择摊位名称...</span>
							 | 
						|||
| 
								 | 
							
								                            <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
							 | 
						|||
| 
								 | 
							
								                                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
							 | 
						|||
| 
								 | 
							
								                            </svg>
							 | 
						|||
| 
								 | 
							
								                        </button>
							 | 
						|||
| 
								 | 
							
								                        <div id="stall-dropdown-list" class="absolute z-10 w-full mt-1 bg-white border border-gray-300 rounded-md shadow-lg hidden">
							 | 
						|||
| 
								 | 
							
								                            <label class="flex items-center px-3 py-2 hover:bg-gray-50 cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                <input type="checkbox" value="时尚服装店" class="mr-2" onchange="updateSelectedStalls()">
							 | 
						|||
| 
								 | 
							
								                                时尚服装店
							 | 
						|||
| 
								 | 
							
								                            </label>
							 | 
						|||
| 
								 | 
							
								                            <label class="flex items-center px-3 py-2 hover:bg-gray-50 cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                <input type="checkbox" value="数码电子城" class="mr-2" onchange="updateSelectedStalls()">
							 | 
						|||
| 
								 | 
							
								                                数码电子城
							 | 
						|||
| 
								 | 
							
								                            </label>
							 | 
						|||
| 
								 | 
							
								                            <label class="flex items-center px-3 py-2 hover:bg-gray-50 cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                <input type="checkbox" value="美食餐厅" class="mr-2" onchange="updateSelectedStalls()">
							 | 
						|||
| 
								 | 
							
								                                美食餐厅
							 | 
						|||
| 
								 | 
							
								                            </label>
							 | 
						|||
| 
								 | 
							
								                            <label class="flex items-center px-3 py-2 hover:bg-gray-50 cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                <input type="checkbox" value="家居生活馆" class="mr-2" onchange="updateSelectedStalls()">
							 | 
						|||
| 
								 | 
							
								                                家居生活馆
							 | 
						|||
| 
								 | 
							
								                            </label>
							 | 
						|||
| 
								 | 
							
								                            <label class="flex items-center px-3 py-2 hover:bg-gray-50 cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                <input type="checkbox" value="运动健身店" class="mr-2" onchange="updateSelectedStalls()">
							 | 
						|||
| 
								 | 
							
								                                运动健身店
							 | 
						|||
| 
								 | 
							
								                            </label>
							 | 
						|||
| 
								 | 
							
								                        </div>
							 | 
						|||
| 
								 | 
							
								                        <div id="selected-stalls" class="mt-2 flex flex-wrap gap-2"></div>
							 | 
						|||
| 
								 | 
							
								                    </div>
							 | 
						|||
| 
								 | 
							
								                </div>
							 | 
						|||
| 
								 | 
							
								                <div class="mt-7 flex gap-3">
							 | 
						|||
| 
								 | 
							
								                    <button id="query-btn" class="px-4 py-2 bg-green-600 text-white rounded-md hover:bg-green-700 transition-colors" onclick="filterStallTable()">
							 | 
						|||
| 
								 | 
							
								                        查询
							 | 
						|||
| 
								 | 
							
								                    </button>
							 | 
						|||
| 
								 | 
							
								                    <button id="batch-edit-btn" class="px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors" onclick="openBatchLevelEditTab()">
							 | 
						|||
| 
								 | 
							
								                        批量会员等级编辑
							 | 
						|||
| 
								 | 
							
								                    </button>
							 | 
						|||
| 
								 | 
							
								                </div>
							 | 
						|||
| 
								 | 
							
								            </div>
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            <div class="overflow-x-auto">
							 | 
						|||
| 
								 | 
							
								                <table class="w-full">
							 | 
						|||
| 
								 | 
							
								                    <thead class="bg-gray-50">
							 | 
						|||
| 
								 | 
							
								                        <tr>
							 | 
						|||
| 
								 | 
							
								                            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
							 | 
						|||
| 
								 | 
							
								                                摊位名称
							 | 
						|||
| 
								 | 
							
								                            </th>
							 | 
						|||
| 
								 | 
							
								                            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
							 | 
						|||
| 
								 | 
							
								                                是否启用会员
							 | 
						|||
| 
								 | 
							
								                            </th>
							 | 
						|||
| 
								 | 
							
								                            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
							 | 
						|||
| 
								 | 
							
								                                会员等级
							 | 
						|||
| 
								 | 
							
								                            </th>
							 | 
						|||
| 
								 | 
							
								                            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
							 | 
						|||
| 
								 | 
							
								                                操作
							 | 
						|||
| 
								 | 
							
								                            </th>
							 | 
						|||
| 
								 | 
							
								                        </tr>
							 | 
						|||
| 
								 | 
							
								                    </thead>
							 | 
						|||
| 
								 | 
							
								                    <tbody class="bg-white divide-y divide-gray-200">
							 | 
						|||
| 
								 | 
							
								                        <tr>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">时尚服装店</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <label class="relative inline-flex items-center cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                    <input type="checkbox" class="sr-only peer" checked onchange="toggleSwitch(this)">
							 | 
						|||
| 
								 | 
							
								                                    <div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-green-600"></div>
							 | 
						|||
| 
								 | 
							
								                                </label>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">lv1, lv2, lv3, lv4</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <button class="text-green-600 hover:text-green-900 text-sm font-medium" onclick="openLevelDetailTab('时尚服装店')">
							 | 
						|||
| 
								 | 
							
								                                    设置等级明细
							 | 
						|||
| 
								 | 
							
								                                </button>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                        </tr>
							 | 
						|||
| 
								 | 
							
								                        <tr>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">数码电子城</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <label class="relative inline-flex items-center cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                    <input type="checkbox" class="sr-only peer" onchange="toggleSwitch(this)">
							 | 
						|||
| 
								 | 
							
								                                    <div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-green-600"></div>
							 | 
						|||
| 
								 | 
							
								                                </label>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">lv1, lv2, lv3</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <button class="text-green-600 hover:text-green-900 text-sm font-medium" onclick="openLevelDetailTab('数码电子城')">
							 | 
						|||
| 
								 | 
							
								                                    设置等级明细
							 | 
						|||
| 
								 | 
							
								                                </button>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                        </tr>
							 | 
						|||
| 
								 | 
							
								                        <tr>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">美食餐厅</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <label class="relative inline-flex items-center cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                    <input type="checkbox" class="sr-only peer" checked onchange="toggleSwitch(this)">
							 | 
						|||
| 
								 | 
							
								                                    <div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-green-600"></div>
							 | 
						|||
| 
								 | 
							
								                                </label>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">lv1, lv2, lv3, lv4</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <button class="text-green-600 hover:text-green-900 text-sm font-medium" onclick="openLevelDetailTab('美食餐厅')">
							 | 
						|||
| 
								 | 
							
								                                    设置等级明细
							 | 
						|||
| 
								 | 
							
								                                </button>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                        </tr>
							 | 
						|||
| 
								 | 
							
								                        <tr>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">家居生活馆</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <label class="relative inline-flex items-center cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                    <input type="checkbox" class="sr-only peer" onchange="toggleSwitch(this)">
							 | 
						|||
| 
								 | 
							
								                                    <div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-green-600"></div>
							 | 
						|||
| 
								 | 
							
								                                </label>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">lv1, lv2</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <button class="text-green-600 hover:text-green-900 text-sm font-medium" onclick="openLevelDetailTab('家居生活馆')">
							 | 
						|||
| 
								 | 
							
								                                    设置等级明细
							 | 
						|||
| 
								 | 
							
								                                </button>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                        </tr>
							 | 
						|||
| 
								 | 
							
								                        <tr>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">运动健身店</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <label class="relative inline-flex items-center cursor-pointer">
							 | 
						|||
| 
								 | 
							
								                                    <input type="checkbox" class="sr-only peer" checked onchange="toggleSwitch(this)">
							 | 
						|||
| 
								 | 
							
								                                    <div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-green-600"></div>
							 | 
						|||
| 
								 | 
							
								                                </label>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">lv1, lv2, lv3, lv4</td>
							 | 
						|||
| 
								 | 
							
								                            <td class="px-6 py-4 whitespace-nowrap">
							 | 
						|||
| 
								 | 
							
								                                <button class="text-green-600 hover:text-green-900 text-sm font-medium" onclick="openLevelDetailTab('运动健身店')">
							 | 
						|||
| 
								 | 
							
								                                    设置等级明细
							 | 
						|||
| 
								 | 
							
								                                </button>
							 | 
						|||
| 
								 | 
							
								                            </td>
							 | 
						|||
| 
								 | 
							
								                        </tr>
							 | 
						|||
| 
								 | 
							
								                    </tbody>
							 | 
						|||
| 
								 | 
							
								                </table>
							 | 
						|||
| 
								 | 
							
								            </div>
							 | 
						|||
| 
								 | 
							
								        </div>
							 | 
						|||
| 
								 | 
							
								    `;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 摊位筛选相关功能
							 | 
						|||
| 
								 | 
							
								let selectedStalls = [];
							 | 
						|||
| 
								 | 
							
								let dropdownOpen = false;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								function toggleStallDropdown() {
							 | 
						|||
| 
								 | 
							
								    const dropdown = document.getElementById('stall-dropdown-list');
							 | 
						|||
| 
								 | 
							
								    const button = document.getElementById('stall-dropdown-btn');
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    if (dropdown && button) {
							 | 
						|||
| 
								 | 
							
								        dropdownOpen = !dropdownOpen;
							 | 
						|||
| 
								 | 
							
								        if (dropdownOpen) {
							 | 
						|||
| 
								 | 
							
								            dropdown.classList.remove('hidden');
							 | 
						|||
| 
								 | 
							
								            // 添加点击外部关闭功能
							 | 
						|||
| 
								 | 
							
								            setTimeout(() => {
							 | 
						|||
| 
								 | 
							
								                document.addEventListener('click', closeDropdownOnClickOutside);
							 | 
						|||
| 
								 | 
							
								            }, 0);
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            dropdown.classList.add('hidden');
							 | 
						|||
| 
								 | 
							
								            document.removeEventListener('click', closeDropdownOnClickOutside);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								function closeDropdownOnClickOutside(event) {
							 | 
						|||
| 
								 | 
							
								    const dropdown = document.getElementById('stall-dropdown-list');
							 | 
						|||
| 
								 | 
							
								    const button = document.getElementById('stall-dropdown-btn');
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    if (dropdown && button && !dropdown.contains(event.target) && !button.contains(event.target)) {
							 | 
						|||
| 
								 | 
							
								        dropdown.classList.add('hidden');
							 | 
						|||
| 
								 | 
							
								        dropdownOpen = false;
							 | 
						|||
| 
								 | 
							
								        document.removeEventListener('click', closeDropdownOnClickOutside);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								function updateSelectedStalls() {
							 | 
						|||
| 
								 | 
							
								    const checkboxes = document.querySelectorAll('#stall-dropdown-list input[type="checkbox"]');
							 | 
						|||
| 
								 | 
							
								    selectedStalls = [];
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    checkboxes.forEach(checkbox => {
							 | 
						|||
| 
								 | 
							
								        if (checkbox.checked) {
							 | 
						|||
| 
								 | 
							
								            selectedStalls.push(checkbox.value);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    });
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    updateDropdownText();
							 | 
						|||
| 
								 | 
							
								    updateSelectedStallsDisplay();
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								function updateDropdownText() {
							 | 
						|||
| 
								 | 
							
								    const dropdownText = document.getElementById('dropdown-text');
							 | 
						|||
| 
								 | 
							
								    if (dropdownText) {
							 | 
						|||
| 
								 | 
							
								        if (selectedStalls.length === 0) {
							 | 
						|||
| 
								 | 
							
								            dropdownText.textContent = '请选择摊位名称...';
							 | 
						|||
| 
								 | 
							
								        } else if (selectedStalls.length === 1) {
							 | 
						|||
| 
								 | 
							
								            dropdownText.textContent = selectedStalls[0];
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            dropdownText.textContent = `已选择 ${selectedStalls.length} 个摊位`;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								function updateSelectedStallsDisplay() {
							 | 
						|||
| 
								 | 
							
								    const selectedDiv = document.getElementById('selected-stalls');
							 | 
						|||
| 
								 | 
							
								    if (!selectedDiv) return;
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    selectedDiv.innerHTML = '';
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    selectedStalls.forEach(stall => {
							 | 
						|||
| 
								 | 
							
								        const tag = document.createElement('span');
							 | 
						|||
| 
								 | 
							
								        tag.className = 'inline-flex items-center px-2 py-1 rounded-md text-xs font-medium bg-green-100 text-green-800';
							 | 
						|||
| 
								 | 
							
								        tag.innerHTML = `
							 | 
						|||
| 
								 | 
							
								            ${stall}
							 | 
						|||
| 
								 | 
							
								            <button type="button" class="ml-1 inline-flex items-center justify-center w-4 h-4 rounded-full hover:bg-green-200" onclick="removeSelectedStall('${stall}')">
							 | 
						|||
| 
								 | 
							
								                <svg class="w-2 h-2" fill="currentColor" viewBox="0 0 20 20">
							 | 
						|||
| 
								 | 
							
								                    <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"></path>
							 | 
						|||
| 
								 | 
							
								                </svg>
							 | 
						|||
| 
								 | 
							
								            </button>
							 | 
						|||
| 
								 | 
							
								        `;
							 | 
						|||
| 
								 | 
							
								        selectedDiv.appendChild(tag);
							 | 
						|||
| 
								 | 
							
								    });
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								function removeSelectedStall(stallName) {
							 | 
						|||
| 
								 | 
							
								    selectedStalls = selectedStalls.filter(stall => stall !== stallName);
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    // 更新checkbox状态
							 | 
						|||
| 
								 | 
							
								    const checkboxes = document.querySelectorAll('#stall-dropdown-list input[type="checkbox"]');
							 | 
						|||
| 
								 | 
							
								    checkboxes.forEach(checkbox => {
							 | 
						|||
| 
								 | 
							
								        if (checkbox.value === stallName) {
							 | 
						|||
| 
								 | 
							
								            checkbox.checked = false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    });
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    updateDropdownText();
							 | 
						|||
| 
								 | 
							
								    updateSelectedStallsDisplay();
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								function filterStallTable() {
							 | 
						|||
| 
								 | 
							
								    const tableRows = document.querySelectorAll('#tab-content-area tbody tr');
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    if (selectedStalls.length === 0) {
							 | 
						|||
| 
								 | 
							
								        // 如果没有选择任何摊位,显示所有行
							 | 
						|||
| 
								 | 
							
								        tableRows.forEach(row => {
							 | 
						|||
| 
								 | 
							
								            row.style.display = '';
							 | 
						|||
| 
								 | 
							
								        });
							 | 
						|||
| 
								 | 
							
								        showNotification('已显示所有摊位', 'info');
							 | 
						|||
| 
								 | 
							
								    } else {
							 | 
						|||
| 
								 | 
							
								        // 根据选择的摊位筛选表格行
							 | 
						|||
| 
								 | 
							
								        let visibleCount = 0;
							 | 
						|||
| 
								 | 
							
								        tableRows.forEach(row => {
							 | 
						|||
| 
								 | 
							
								            const stallNameCell = row.querySelector('td:first-child');
							 | 
						|||
| 
								 | 
							
								            if (stallNameCell) {
							 | 
						|||
| 
								 | 
							
								                const stallName = stallNameCell.textContent.trim();
							 | 
						|||
| 
								 | 
							
								                if (selectedStalls.includes(stallName)) {
							 | 
						|||
| 
								 | 
							
								                    row.style.display = '';
							 | 
						|||
| 
								 | 
							
								                    visibleCount++;
							 | 
						|||
| 
								 | 
							
								                } else {
							 | 
						|||
| 
								 | 
							
								                    row.style.display = 'none';
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        });
							 | 
						|||
| 
								 | 
							
								        showNotification(`已筛选显示 ${visibleCount} 个摊位`, 'success');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 导出函数
							 | 
						|||
| 
								 | 
							
								window.openLevelSettingsTab = openLevelSettingsTab;
							 | 
						|||
| 
								 | 
							
								window.generateLevelSettingsContent = generateLevelSettingsContent;
							 | 
						|||
| 
								 | 
							
								window.openBatchLevelEditTab = openBatchLevelEditTab;
							 | 
						|||
| 
								 | 
							
								window.toggleStallDropdown = toggleStallDropdown;
							 | 
						|||
| 
								 | 
							
								window.updateSelectedStalls = updateSelectedStalls;
							 | 
						|||
| 
								 | 
							
								window.removeSelectedStall = removeSelectedStall;
							 | 
						|||
| 
								 | 
							
								window.filterStallTable = filterStallTable;
							 |