import { WebviewTag } from "electron"; // 菜单项接口 interface MenuItem { ShowName: string; Url: string; Icon: string; Children: MenuItem[] | null; } // API响应接口 interface ApiResponse { status: number; code: number; msg: string; data: T; } // 检查登录状态 function checkLoginStatus() { const auth = document.cookie.split('; ').find(row => row.startsWith('EACToken=') || row.startsWith('MssSsoToken=')); if (!auth) { window.location.href = 'login.html'; return; } // 显示用户信息 const userInfo = document.getElementById('userInfo'); if (userInfo) { userInfo.textContent = '欢迎使用'; } } // 处理退出登录 function handleLogout() { document.cookie = 'expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'; 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' }); 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): HTMLLIElement { const li = document.createElement('li'); li.className = 'menu-item'; const icon = document.createElement('img'); //icon.src = `./assets/${item.Icon}`; icon.src = `./assets/list.png`; 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.querySelector("webview") as WebviewElement).src = "https://www.baidu.com"; //(document.querySelector("webview") as WebviewTag).src = item.Url; // 需要明确url是否指定http协议或https协议,如果没有指定,则默认使用http协议。因为没有指定协议会导致webview无法加载。 const url: string = item.Url.startsWith("http") ? item.Url : `http://${item.Url}`; /** * 无法访问的错误有很多种,但总的来说可以分为两大类: * 1. 网络错误:DNS解析错误、连接超时、SSL证书错误等。 * 2. 服务器错误:服务器拒绝连接、服务器无响应、404、500等。 */ const result = await window.electronAPI.checkUrl(url); if (result.ok && result.status >= 200 && result.status < 400) { console.log('✅ URL 可访问:', result.status); (document.querySelector("webview") as WebviewTag).src = url; } else { console.warn('❌ URL 不可访问:', result.error ?? `status ${result.status}`); } }); } return li; } // 渲染菜单 function renderMenu(menuList: MenuItem[]) { const menuContainer = document.getElementById('menuList'); if (!menuContainer) return; menuList.forEach(item => { const menuItem = createMenuItem(item); menuContainer.appendChild(menuItem); if (item.Children) { const subMenu = document.createElement('ul'); subMenu.className = 'submenu'; item.Children.forEach(child => { const childItem = createMenuItem(child); subMenu.appendChild(childItem); }); menuContainer.appendChild(subMenu); } }); } // 初始化 async function initialize() { // 检查登录状态 checkLoginStatus(); try { const menuList = await getMenuList(); renderMenu(menuList); // 绑定退出登录事件 const logoutBtn = document.getElementById('btnLogout'); if (logoutBtn) { logoutBtn.addEventListener('click', handleLogout); } } catch (error) { console.error('初始化失败:', error); } } // 页面加载完成后初始化 document.addEventListener('DOMContentLoaded', initialize);