// 导航栏交互逻辑 (function () { // 检查是否已登录 function isLoggedIn() { const userAvatarContainer = document.getElementById('userAvatarContainer'); // 如果用户头像容器显示,说明已登录 if (userAvatarContainer) { const computedStyle = window.getComputedStyle(userAvatarContainer); return computedStyle.display !== 'none'; } return false; } // 导航切换功能 function initNavigation() { const navButtons = document.querySelectorAll('.nav-btn'); navButtons.forEach(button => { button.addEventListener('click', function() { const page = this.getAttribute('data-page'); // 如果点击"我的资产"且未登录,显示登录界面 if (page === 'assets' && !isLoggedIn()) { // 恢复按钮状态 navButtons.forEach(btn => btn.classList.remove('active')); const storeBtn = document.querySelector('.nav-btn[data-page="store"]'); if (storeBtn) { storeBtn.classList.add('active'); } // 显示登录界面 if (window.parent !== window) { window.parent.postMessage({ type: 'navigation', page: 'login' }, '*'); } return; } // 更新按钮状态 navButtons.forEach(btn => btn.classList.remove('active')); this.classList.add('active'); // 通知父窗口切换页面 if (window.parent !== window) { window.parent.postMessage({ type: 'navigation', page: page }, '*'); } }); }); // 登录按钮功能 const loginBtn = document.querySelector('.login-btn'); if (loginBtn) { loginBtn.addEventListener('click', function() { // console.log('[1-Navigation] 登录按钮点击'); if (window.parent !== window) { window.parent.postMessage({ type: 'navigation', page: 'login' }, '*'); } }); } // 注册按钮功能 const registerBtn = document.querySelector('.register-btn'); if (registerBtn) { registerBtn.addEventListener('click', function() { // console.log('[1-Navigation] 注册按钮点击'); if (window.parent !== window) { window.parent.postMessage({ type: 'navigation', page: 'register' }, '*'); } }); } // 用户头像点击功能 const userAvatarContainer = document.getElementById('userAvatarContainer'); const userAvatar = document.getElementById('userAvatar'); function handleAvatarClick() { if (window.parent !== window) { window.parent.postMessage({ type: 'navigation', page: 'profile' }, '*'); } } if (userAvatarContainer) { userAvatarContainer.addEventListener('click', handleAvatarClick); userAvatarContainer.style.cursor = 'pointer'; } if (userAvatar) { userAvatar.addEventListener('click', handleAvatarClick); userAvatar.style.cursor = 'pointer'; } } // 更新用户头像显示 function updateUserAvatar(userInfo) { const authButtons = document.getElementById('authButtons'); const userAvatarContainer = document.getElementById('userAvatarContainer'); const userAvatar = document.getElementById('userAvatar'); if (userInfo) { // 有用户信息,说明已登录 - 显示用户头像,隐藏登录/注册按钮 if (authButtons) { authButtons.style.display = 'none'; } if (userAvatarContainer) { userAvatarContainer.style.display = 'flex'; } if (userAvatar) { // 如果头像URL是相对路径,需要转换为完整URL let avatarUrl = userInfo.avatar; if (avatarUrl && !avatarUrl.startsWith('http') && !avatarUrl.startsWith('data:')) { // 如果是相对路径,添加服务器地址前缀 avatarUrl = 'http://localhost:3000' + (avatarUrl.startsWith('/') ? avatarUrl : '/' + avatarUrl); } userAvatar.src = avatarUrl || '../../static/default-avatar.png'; userAvatar.alt = userInfo.username || '用户头像'; } } else { // 没有用户信息,说明未登录 - 隐藏用户头像,显示登录/注册按钮 if (authButtons) { authButtons.style.display = 'flex'; } if (userAvatarContainer) { userAvatarContainer.style.display = 'none'; } } } // 接收来自父窗口的消息,同步导航状态 window.addEventListener('message', function(event) { // 安全检查:确保消息来自同源 if (event.origin !== window.location.origin) { return; } const data = event.data; // 处理页面切换消息(只处理store和assets,不处理login/register) if (data.type === 'navigation' && data.page && (data.page === 'store' || data.page === 'assets')) { const navButtons = document.querySelectorAll('.nav-btn'); navButtons.forEach(btn => { if (btn.getAttribute('data-page') === data.page) { btn.classList.add('active'); } else { btn.classList.remove('active'); } }); } // 处理登录成功消息 if (data.type === 'login-success' && data.user) { updateUserAvatar(data.user); } // 处理登出消息 if (data.type === 'logout') { updateUserAvatar(null); } }); // 检查并恢复登录状态 function checkAndRestoreLogin() { try { const loginDataStr = localStorage.getItem('loginData'); if (!loginDataStr) { return; } const loginData = JSON.parse(loginDataStr); const now = Date.now(); // 检查是否过期 if (now >= loginData.expireTime) { // 已过期,清除登录信息 localStorage.removeItem('loginData'); console.log('[Navigation] 登录信息已过期,已清除'); return; } // 未过期,恢复登录状态 if (loginData.user) { console.log('[Navigation] 恢复登录状态,用户:', loginData.user.username); updateUserAvatar(loginData.user); } } catch (error) { console.error('[Navigation] 恢复登录状态失败:', error); localStorage.removeItem('loginData'); } } // 页面加载完成后初始化 window.addEventListener('DOMContentLoaded', function() { // 先检查并恢复登录状态 checkAndRestoreLogin(); initNavigation(); }); })();