// 后台管理JavaScript - 支持服务器和本地双模式 // 状态管理 let isLoggedIn = sessionStorage.getItem('isAdminLoggedIn') === 'true'; let authToken = sessionStorage.getItem('authToken') || ''; // DOM元素 const loginSection = document.getElementById('loginSection'); const adminPanel = document.getElementById('adminPanel'); const loginForm = document.getElementById('loginForm'); const logoutBtn = document.getElementById('logoutBtn'); const createListForm = document.getElementById('createListForm'); const rollCallListsDiv = document.getElementById('rollCallLists'); const rollCallRecordsDiv = document.getElementById('rollCallRecords'); const qrModal = document.getElementById('qrModal'); const qrCodeDiv = document.getElementById('qrCode'); const rollCallCodeSpan = document.getElementById('rollCallCode'); // QRCode实例 const qrCode = new SimpleQRCode(); // 初始化 document.addEventListener('DOMContentLoaded', () => { // 显示运行模式 const modeText = dataStorage.isServerMode ? '服务器模式' : '本地模式'; const modeIndicator = document.getElementById('modeIndicator'); if (modeIndicator) { modeIndicator.textContent = `当前运行模式: ${modeText}`; if (!dataStorage.isServerMode) { modeIndicator.textContent += ' (数据保存在浏览器本地)'; } } console.log(`点名系统运行在: ${modeText}`); if (isLoggedIn) { showAdminPanel(); loadLists(); loadRecords(); } }); // 登录 loginForm.addEventListener('submit', async (e) => { e.preventDefault(); const username = document.getElementById('username').value; const password = document.getElementById('password').value; try { const result = await dataStorage.login(username, password); isLoggedIn = true; authToken = result.token; sessionStorage.setItem('isAdminLoggedIn', 'true'); sessionStorage.setItem('authToken', authToken); showAdminPanel(); await loadLists(); await loadRecords(); } catch (error) { alert('登录失败:' + error.message); } }); // 退出登录 logoutBtn.addEventListener('click', () => { isLoggedIn = false; authToken = ''; sessionStorage.removeItem('isAdminLoggedIn'); sessionStorage.removeItem('authToken'); loginSection.style.display = 'block'; adminPanel.style.display = 'none'; }); // 显示管理面板 function showAdminPanel() { loginSection.style.display = 'none'; adminPanel.style.display = 'block'; } // 加载点名列表 async function loadLists() { try { const lists = await dataStorage.getLists(); renderLists(lists); } catch (error) { console.error('加载列表失败:', error); rollCallListsDiv.innerHTML = '
加载失败:' + error.message + '
'; } } // 加载点名记录 async function loadRecords() { try { const records = await dataStorage.getRecords(); renderRecords(records); } catch (error) { console.error('加载记录失败:', error); rollCallRecordsDiv.innerHTML = '加载失败:' + error.message + '
'; } } // 创建点名名单 createListForm.addEventListener('submit', async (e) => { e.preventDefault(); const listName = document.getElementById('listName').value; const memberListText = document.getElementById('memberList').value; const members = memberListText.split('\n').filter(name => name.trim() !== '').map(name => name.trim()); try { const newList = await dataStorage.createList(listName, members); // 清空表单 createListForm.reset(); // 重新加载列表 await loadLists(); // 显示二维码 showQRCode(newList); } catch (error) { alert('创建失败:' + error.message); } }); // 显示二维码 function showQRCode(list) { qrModal.style.display = 'block'; rollCallCodeSpan.textContent = list.code; // 生成二维码URL let url; if (dataStorage.isServerMode) { // 服务器模式:使用当前域名 url = `${window.location.origin}${window.location.pathname.replace('admin.html', 'index.html')}?code=${list.code}`; } else { // 本地模式:使用相对路径 url = `index.html?code=${list.code}`; } qrCodeDiv.innerHTML = ''; // 创建canvas元素 const canvas = document.createElement('canvas'); qrCodeDiv.appendChild(canvas); // 使用本地QRCode生成器 try { qrCode.toCanvas(canvas, url, { width: 200, margin: 2 }); } catch (error) { console.error('二维码生成错误:', error); qrCodeDiv.innerHTML = '二维码生成失败
'; } } // 关闭弹窗 document.querySelector('.close').addEventListener('click', () => { qrModal.style.display = 'none'; }); window.addEventListener('click', (e) => { if (e.target === qrModal) { qrModal.style.display = 'none'; } }); // 渲染点名列表 function renderLists(lists) { if (!lists || lists.length === 0) { rollCallListsDiv.innerHTML = '暂无点名列表
'; return; } rollCallListsDiv.innerHTML = lists.map(list => `创建时间:${list.createdAt}
成员数:${list.members.length} | 已点名:${list.members.filter(m => m.completed).length}
暂无点名记录
'; return; } rollCallRecordsDiv.innerHTML = records.map(record => `名单:${record.listName}
编号:${record.code}