From bfc36d3ad3ef4dac2a28621c48f2ccd1e962aaa3 Mon Sep 17 00:00:00 2001 From: xuans Date: Fri, 16 Oct 2026 18:50:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(settings):=20=E6=94=AF=E6=8C=81=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=AE=BE=E7=BD=AE=E6=8C=89=E6=A8=A1=E5=9D=97=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=E4=BF=9D=E5=AD=98=E8=B4=9F=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/Dashboard/Dashboard.js | 10 +++++----- frontend/src/views/Dashboard/SettingsPayload.js | 17 ++++++++++------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/frontend/src/views/Dashboard/Dashboard.js b/frontend/src/views/Dashboard/Dashboard.js index b7007ff..6bfc112 100644 --- a/frontend/src/views/Dashboard/Dashboard.js +++ b/frontend/src/views/Dashboard/Dashboard.js @@ -820,20 +820,21 @@ export function useDashboard() { } } - async function saveSettings() { + async function saveSettings(section) { settingsError.value = ""; if (!canManageSystemSettings.value) { settingsError.value = "只有超级管理员可以保存系统设置"; return; } verificationClock.value = Date.now(); - if (!dnsReadyToSave.value) { + // 只有在保存全部或保存 DNS 配置时才强依赖 DNS API 测试 + if ((!section || section === "dns") && !dnsReadyToSave.value) { settingsError.value = "DNS 服务商配置尚未通过在线测试,请先完成测试"; return; } settingsSaving.value = true; try { - const payload = settingsPayload(settingsForm.value); + const payload = settingsPayload(settingsForm.value, section); const response = await fetchAdmin("/api/v1/settings", { method: "PUT", headers: { "Content-Type": "application/json" }, @@ -842,8 +843,7 @@ export function useDashboard() { const result = await response.json().catch(() => ({})); if (!response.ok) throw new Error(result.error || "保存系统设置失败"); settings.value = result.settings; - showSettings.value = false; - notice.value = result.message || "系统设置已保存"; + notice.value = result.message || "设置已保存"; await loadData(); } catch (err) { settingsError.value = err.message || "保存系统设置失败"; diff --git a/frontend/src/views/Dashboard/SettingsPayload.js b/frontend/src/views/Dashboard/SettingsPayload.js index 113dcfd..96189ab 100644 --- a/frontend/src/views/Dashboard/SettingsPayload.js +++ b/frontend/src/views/Dashboard/SettingsPayload.js @@ -19,21 +19,24 @@ const requestFields = { ], }; -export function settingsPayload(current) { +export function settingsPayload(current, targetSection) { const payload = {}; for (const [section, fields] of Object.entries(requestFields)) { + if (targetSection && targetSection !== section) continue; const source = current[section] || {}; payload[section] = Object.fromEntries( fields.filter((field) => source[field] !== undefined) .map((field) => [field, source[field]]), ); } - const dns = current.dns || {}; - payload.dns = { provider: dns.provider }; - if (dns.credential_ref && dns.verification_token) { - payload.dns.credential_ref = dns.credential_ref; - payload.dns.verification_token = dns.verification_token; - payload.dns.test_domain = dns.test_domain; + if (!targetSection || targetSection === "dns") { + const dns = current.dns || {}; + payload.dns = { provider: dns.provider }; + if (dns.credential_ref && dns.verification_token) { + payload.dns.credential_ref = dns.credential_ref; + payload.dns.verification_token = dns.verification_token; + payload.dns.test_domain = dns.test_domain; + } } return payload; }