diff --git a/backend/internal/api/monitor.go b/backend/internal/api/monitor.go index de8d138..952decb 100644 --- a/backend/internal/api/monitor.go +++ b/backend/internal/api/monitor.go @@ -6,6 +6,7 @@ import ( "strconv" "codex-pool/internal/database" + "codex-pool/internal/logger" ) // MonitorSettings 监控设置 @@ -87,6 +88,11 @@ func HandleSaveMonitorSettings(w http.ResponseWriter, r *http.Request) { database.Instance.SetConfig("monitor_polling_enabled", strconv.FormatBool(settings.PollingEnabled)) database.Instance.SetConfig("monitor_polling_interval", strconv.Itoa(settings.PollingInterval)) + // 输出日志 + logger.Info("监控设置已保存: target="+strconv.Itoa(settings.Target)+ + ", polling="+strconv.FormatBool(settings.PollingEnabled)+ + ", interval="+strconv.Itoa(settings.PollingInterval)+"s", "", "monitor") + Success(w, map[string]interface{}{ "message": "设置已保存", "settings": settings, diff --git a/frontend/src/pages/Monitor.tsx b/frontend/src/pages/Monitor.tsx index 65b0cf5..ab34c1c 100644 --- a/frontend/src/pages/Monitor.tsx +++ b/frontend/src/pages/Monitor.tsx @@ -12,6 +12,7 @@ import { AlertTriangle, CheckCircle, Clock, + Save, } from 'lucide-react' import { Card, CardHeader, CardTitle, CardContent, Button, Input } from '../components/common' import type { DashboardStats } from '../types' @@ -194,6 +195,29 @@ export default function Monitor() { setLoading(false) } + // 保存轮询设置(不切换状态) + const handleSavePollingSettings = async () => { + setLoading(true) + try { + await fetch('/api/monitor/settings/save', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + target: targetInput, + auto_add: autoAdd, + min_interval: minInterval, + polling_enabled: pollingEnabled, + polling_interval: pollingInterval, + }), + }) + // 重置倒计时 + setCountdown(pollingInterval) + } catch (e) { + console.error('保存轮询设置失败:', e) + } + setLoading(false) + } + // 健康检查 - S2A 没有此接口,显示提示 const handleHealthCheck = async (_autoPause: boolean = false) => { setCheckingHealth(true) @@ -471,20 +495,27 @@ export default function Monitor() { - { - const val = parseInt(e.target.value, 10) - if (!isNaN(val)) { - setPollingInterval(val) - } - }} - hint="自动刷新号池状态的间隔时间 (10-300秒)" - /> +
+ + setPollingInterval(Number(e.target.value) || 60)} + className="w-full px-3 py-2 text-sm rounded-lg border transition-colors + bg-white dark:bg-slate-800 + text-slate-900 dark:text-slate-100 + border-slate-300 dark:border-slate-600 + focus:border-blue-500 focus:ring-blue-500 + focus:outline-none focus:ring-2" + /> +

+ 自动刷新号池状态的间隔时间 (10-600秒) +

+
@@ -496,15 +527,26 @@ export default function Monitor() {
- +
+ + +