From 1826d4e34a165a416a9bf7c2c729f008c0d4ee06 Mon Sep 17 00:00:00 2001 From: CN-JS-HuiBai Date: Sat, 11 Apr 2026 00:06:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=95=B0=E6=8D=AE=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/js/app.js | 59 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index 5771390..d98fb6a 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -285,43 +285,44 @@ dom.btnCancelEditRoute.onclick = cancelEditRoute; } - dom.settingsModal.addEventListener('click', (e) => { - if (e.target === dom.settingsModal) closeSettings(); - }); - dom.btnTest.addEventListener('click', testConnection); - dom.btnAdd.addEventListener('click', addSource); - // Auth & Theme listeners - dom.themeToggle.addEventListener('change', toggleTheme); - - // System Theme Listener (Real-time) - const systemThemeMedia = window.matchMedia('(prefers-color-scheme: light)'); - if (systemThemeMedia.addEventListener) { - systemThemeMedia.addEventListener('change', () => { - const savedTheme = localStorage.getItem('theme') || (window.SITE_SETTINGS && window.SITE_SETTINGS.default_theme) || 'dark'; - if (savedTheme === 'auto') { - applyTheme('auto'); - } + if (dom.themeToggle) dom.themeToggle.addEventListener('change', toggleTheme); + if (dom.btnSettings) dom.btnSettings.addEventListener('click', openSettings); + if (dom.modalClose) dom.modalClose.addEventListener('click', closeSettings); + if (dom.btnTest) dom.btnTest.addEventListener('click', testConnection); + if (dom.btnAdd) dom.btnAdd.addEventListener('click', addSource); + if (dom.btnRefreshNetwork) dom.btnRefreshNetwork.addEventListener('click', fetchNetworkHistory); + + // Auth & Login + if (dom.btnLogin) dom.btnLogin.addEventListener('click', openLoginModal); + if (dom.closeLoginModal) dom.closeLoginModal.addEventListener('click', closeLoginModal); + if (dom.loginForm) dom.loginForm.addEventListener('submit', handleLogin); + if (dom.loginModal) { + dom.loginModal.addEventListener('click', (e) => { + if (e.target === dom.loginModal) closeLoginModal(); }); } - dom.btnLogin.addEventListener('click', openLoginModal); - dom.closeLoginModal.addEventListener('click', closeLoginModal); - dom.loginForm.addEventListener('submit', handleLogin); - dom.loginModal.addEventListener('click', (e) => { - if (e.target === dom.loginModal) closeLoginModal(); - }); // Tab switching - dom.modalTabs.forEach(tab => { - tab.addEventListener('click', () => { - const targetTab = tab.getAttribute('data-tab'); - switchTab(targetTab); + if (dom.modalTabs) { + dom.modalTabs.forEach(tab => { + tab.addEventListener('click', () => { + const targetTab = tab.getAttribute('data-tab'); + switchTab(targetTab); + }); }); - }); + } // Site settings - dom.btnSaveSiteSettings.addEventListener('click', saveSiteSettings); - dom.btnAddRoute.addEventListener('click', addLatencyRoute); + if (dom.btnSaveSiteSettings) { + dom.btnSaveSiteSettings.addEventListener('click', saveSiteSettings); + } + if (dom.btnSaveCustomMetrics) { + dom.btnSaveCustomMetrics.onclick = saveSiteSettings; + } + if (dom.btnAddRoute) { + dom.btnAddRoute.addEventListener('click', addLatencyRoute); + } // Auth password change if (dom.btnChangePassword) {