From 348c7d42dd15d37247a25877dc30b00a351a2b85 Mon Sep 17 00:00:00 2001 From: xuans Date: Fri, 16 Oct 2026 19:01:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(settings):=20=E7=B3=BB=E7=BB=9F=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=8D=95=E9=A1=B9=E7=8B=AC=E7=AB=8B=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E4=B8=94=E8=A7=A3=E5=86=B3=E6=8C=89=E9=92=AE=E7=A6=81=E7=94=A8?= =?UTF-8?q?=E5=85=89=E6=A0=87=E8=BD=AC=E5=9C=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/Dashboard/Dashboard.css | 2 +- frontend/src/views/Dashboard/SettingsModal.js | 27 ++++++++++++------- .../src/views/Dashboard/SettingsModal.vue | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/frontend/src/views/Dashboard/Dashboard.css b/frontend/src/views/Dashboard/Dashboard.css index dbe04e1..5472638 100644 --- a/frontend/src/views/Dashboard/Dashboard.css +++ b/frontend/src/views/Dashboard/Dashboard.css @@ -62,7 +62,7 @@ h2 { } .primary-button:disabled, .secondary-button:disabled { - cursor: wait; + cursor: not-allowed; opacity: 0.6; } .status-dot { diff --git a/frontend/src/views/Dashboard/SettingsModal.js b/frontend/src/views/Dashboard/SettingsModal.js index 8a6bf47..effc0c2 100644 --- a/frontend/src/views/Dashboard/SettingsModal.js +++ b/frontend/src/views/Dashboard/SettingsModal.js @@ -6,18 +6,26 @@ export function useSettingsModal(saveSettings) { const activeSection = ref(sections[0]); async function submitSettings(event) { - const invalid = event.currentTarget.querySelector( - "input:invalid, select:invalid, textarea:invalid", - ); + const form = event && event.currentTarget ? event.currentTarget : null; + let invalid = null; + const currentPanel = form && form.querySelector ? form.querySelector(`[data-settings-section="${activeSection.value}"]`) : null; + if (currentPanel && typeof currentPanel.querySelector === "function") { + invalid = currentPanel.querySelector("input:invalid, select:invalid, textarea:invalid"); + } else if (form && typeof form.querySelector === "function") { + invalid = form.querySelector("input:invalid, select:invalid, textarea:invalid"); + } + if (invalid) { - const section = invalid.closest("[data-settings-section]"); - if (section) activeSection.value = section.dataset.settingsSection; + const section = invalid.closest && invalid.closest("[data-settings-section]"); + if (section && section.dataset && section.dataset.settingsSection) { + activeSection.value = section.dataset.settingsSection; + } await nextTick(); - invalid.focus(); - invalid.reportValidity(); + if (invalid.focus) invalid.focus(); + if (invalid.reportValidity) invalid.reportValidity(); return; } - await saveSettings(); + await saveSettings(activeSection.value); } async function navigateTabs(event) { @@ -32,7 +40,8 @@ export function useSettingsModal(saveSettings) { const tablist = event.currentTarget.parentElement; activeSection.value = sections[next]; await nextTick(); - tablist.querySelector(`#settings-tab-${sections[next]}`)?.focus(); + const targetTab = tablist && tablist.querySelector ? tablist.querySelector('#settings-tab-' + sections[next]) : null; + if (targetTab && targetTab.focus) targetTab.focus(); } return { activeSection, submitSettings, navigateTabs }; diff --git a/frontend/src/views/Dashboard/SettingsModal.vue b/frontend/src/views/Dashboard/SettingsModal.vue index afa5854..281889c 100644 --- a/frontend/src/views/Dashboard/SettingsModal.vue +++ b/frontend/src/views/Dashboard/SettingsModal.vue @@ -381,7 +381,7 @@ const { activeSection, submitSettings, navigateTabs } = useSettingsModal(saveSet