/** * 认证相关功能 */ document.addEventListener('DOMContentLoaded', function () { // 检查是否已登录 checkLogin(); // 登录按钮点击事件 document.getElementById('btn-login').addEventListener('click', login); // 退出按钮点击事件 document.getElementById('btn-logout').addEventListener('click', logout); // 页面加载时自动刷新账号名 updateAccountName(); }); /** * 检查是否已登录 */ function checkLogin() { const token = localStorage.getItem('token'); if (!token) { // 未登录,显示登录模态框 showLoginModal(); } } /** * 登录 */ async function login() { const username = document.getElementById('login-username').value; const password = document.getElementById('login-password').value; if (!username || !password) { showToast('请输入用户名和密码', 'danger'); return; } try { const response = await fetch('/adminLogin', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ account: username, password: password }) }); if (!response.ok) { const error = await response.text(); throw new Error(error || '登录失败'); } const data = await response.json(); // 保存token和账号名到本地存储 localStorage.setItem('token', data.token); localStorage.setItem('account', username); // 关闭登录模态框 const loginModal = bootstrap.Modal.getInstance(document.getElementById('loginModal')); loginModal.hide(); // 显示成功消息 showToast('登录成功', 'success'); // 切换到版本管理页面并加载数据 switchPage('version'); // 加载数据 loadCategories(); loadResources(); // 移除所有modal-backdrop元素 document.querySelectorAll('.modal-backdrop.fade.show').forEach(el => el.remove()); // 登录后刷新账号名显示 updateAccountName(); } catch (error) { showToast(error.message, 'danger'); } } /** * 退出登录 */ async function logout() { try { const token = localStorage.getItem('token'); if (token) { await fetch('/logout', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify({ token: token }) }); showToast("退出登录成功", 'success'); } else { showToast("程序异常", 'danger'); } } catch (error) { showToast("退出登录失败", 'danger'); console.error('退出登录失败:', error); } finally { // 清除本地存储的token和账号名 localStorage.removeItem('token'); localStorage.removeItem('account'); // 清除分类和资源列表 const categoryList = document.getElementById('category-list'); if (categoryList) categoryList.innerHTML = ''; const resourceList = document.getElementById('resource-list'); if (resourceList) resourceList.innerHTML = ''; const versionList = document.getElementById('version-list'); if (versionList) versionList.innerHTML = ''; const totalCountEl = document.getElementById('total-count'); if (totalCountEl) totalCountEl.textContent = '0'; // 退出后刷新账号名显示 updateAccountName(); location.reload(); } } // 新增:页面加载和登录/退出后自动刷新账号名显示 function updateAccountName() { const account = localStorage.getItem('account'); const accountNameSpan = document.getElementById('account-name'); if (accountNameSpan) { accountNameSpan.textContent = account ? account : '未登录'; } } // 页面加载时自动刷新账号名 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', updateAccountName); } else { updateAccountName(); }