import { WebviewTag } from "electron"; // 菜单项 interface MenuItem { ShowName: string; Url: string; IconConfig: IconConfig; Children: MenuItem[] | null; } // 图标配置 interface IconConfig { _1x: { Default: string; Selected: string; }; _2x: { Default: string; Selected: string; }; } // API响应接口 interface ApiResponse { status: number; code: number; msg: string; data: T; } // 检查登录状态 function checkLoginStatus() { const cookie = window.electronAPI.getSessionStorage('cookie'); if (!cookie) { window.location.href = 'login.html'; return; } // 显示用户信息 const userInfo = document.getElementById('userInfo'); if (userInfo) { userInfo.textContent = '欢迎使用'; } } // 处理退出登录 function handleLogout() { window.electronAPI.removeSessionStorage('cookie'); window.location.href = 'login.html'; } // 获取菜单列表 async function getMenuList(): Promise { try { const response = await fetch('http://1.12.73.211:8848/EIAC_Desktop_Api/api/Menu/GetMenu', { method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8' } }); const result = await response.json() as ApiResponse; if (result.status === 0) { return result.data; } else { throw new Error(result.msg || '获取菜单失败'); } } catch (error) { console.error('获取菜单失败:', error); throw error; } } // 创建菜单项 function createMenuItem(item: MenuItem, menuList: MenuItem[]): HTMLLIElement { const li = document.createElement('li'); li.className = 'menu-item'; const icon = document.createElement('img'); icon.src = item.IconConfig._1x.Default; icon.alt = item.ShowName; icon.className = 'menu-icon'; const span = document.createElement('span'); span.textContent = item.ShowName; li.appendChild(icon); li.appendChild(span); if (item.Url) { li.addEventListener('click', async () => { // 移除其他菜单项的选中状态和图标 document.querySelectorAll('.menu-item').forEach(menuItem => { menuItem.classList.remove('active'); const menuIcon = menuItem.querySelector('.menu-icon') as HTMLImageElement; if (menuIcon) { const menuItemData = menuList.find((m: MenuItem) => m.ShowName === menuItem.querySelector('span')?.textContent); if (menuItemData) { menuIcon.src = menuItemData.IconConfig._1x.Default; } } }); // 添加当前菜单项的选中状态和图标 li.classList.add('active'); icon.src = item.IconConfig._1x.Selected; const url: string = item.Url.startsWith("http") ? item.Url : `http://${item.Url}`; const result = await window.electronAPI.checkUrlAvailable(url); if (result.ok && result.status >= 200 && result.status < 400) { console.log('✅ URL 可访问:', result.status); const cookies: string = window.electronAPI.getSessionStorage('cookie'); await window.electronAPI.setWebviewCookie(url, cookies); (document.querySelector("webview") as WebviewTag).src = url; } else { console.warn('❌ URL 不可访问:', result.error ?? `status ${result.status}`); showErrorModal(`无法访问 ${url}\r\n异常原因:${result.error ?? `status ${result.status}`}\r\n请联系10000技术支持。`); } }); } return li; } // 渲染菜单 function renderMenu(menuList: MenuItem[]) { const menuContainer = document.getElementById('menuList'); if (!menuContainer) return; menuList.forEach(item => { const menuItem = createMenuItem(item, menuList); menuContainer.appendChild(menuItem); if (item.Children) { const subMenu = document.createElement('ul'); subMenu.className = 'submenu'; item.Children.forEach(child => { const childItem = createMenuItem(child, menuList); subMenu.appendChild(childItem); }); menuContainer.appendChild(subMenu); } }); } // 显示故障窗口 function showErrorModal(message: string) { const errorModal = document.getElementById('errorModal') as HTMLDivElement; const errorMessage = document.getElementById('errorMessage') as HTMLParagraphElement; errorMessage.textContent = message; errorModal.style.display = 'block'; } // 初始化 async function initialize() { // 检查登录状态 checkLoginStatus(); try { const menuList = await getMenuList(); renderMenu(menuList); // 绑定退出登录事件 const logoutBtn = document.getElementById('btnLogout'); if (logoutBtn) { logoutBtn.addEventListener('click', handleLogout); } const errorModal = document.getElementById('errorModal') as HTMLDivElement; const closeErrorModal = document.getElementById('closeErrorModal') as HTMLButtonElement; // 关闭按钮点击事件 closeErrorModal.addEventListener('click', (event) => { errorModal.style.display = 'none'; }); // 点击窗口外部关闭 window.addEventListener('click', (event) => { if (event.target === errorModal) { errorModal.style.display = 'none'; } }); } catch (error) { console.error('初始化失败:', error); } } // 页面加载完成后初始化 document.addEventListener('DOMContentLoaded', initialize);