From a0d670030e98acb5f53e2ee00d5d31dc98aa22fc Mon Sep 17 00:00:00 2001 From: xiaji Date: Mon, 13 Apr 2026 22:03:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=A1=86=E5=86=85=E5=AE=B9=E4=B8=A2=E5=A4=B1=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E7=9B=B4=E6=8E=A5=E6=93=8D=E4=BD=9Cstate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gui.rs | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/src/gui.rs b/src/gui.rs index 4633f71..7cac286 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -378,14 +378,7 @@ impl eframe::App for App { // 设置窗口 let show_settings = st.show_settings; - let mut host = st.host.clone(); - let mut port = st.port; - let mut token_id = st.token_id.clone(); - let mut token_secret = st.token_secret.clone(); let state_clone = state.clone(); - let ctx_clone = ctx.clone(); - - drop(st); if show_settings { egui::Window::new("设置") @@ -400,66 +393,63 @@ impl eframe::App for App { ui.separator(); ui.add_space(8.0); + let mut state = state_clone.write().unwrap(); + // Base URL 显示 ui.label("API 地址:"); - ui.colored_label(egui::Color32::GRAY, format!("https://{}:{}/api2/json/", host, port)); + ui.colored_label(egui::Color32::GRAY, format!("https://{}:{}/api2/json/", state.host, state.port)); ui.add_space(8.0); // Host 输入 ui.horizontal(|ui| { ui.label("Host:"); - ui.add(egui::TextEdit::singleline(&mut host).desired_width(200.0)); + ui.add(egui::TextEdit::singleline(&mut state.host).desired_width(200.0)); }); // Port 输入 ui.horizontal(|ui| { ui.label("端口:"); - ui.add(egui::DragValue::new(&mut port).range(1..=65535).speed(1)); + ui.add(egui::DragValue::new(&mut state.port).range(1..=65535).speed(1)); }); // 令牌ID 输入 ui.horizontal(|ui| { ui.label("令牌ID:"); - ui.add(egui::TextEdit::singleline(&mut token_id).desired_width(200.0)); + ui.add(egui::TextEdit::singleline(&mut state.token_id).desired_width(200.0)); }); // 密钥 输入(密码框) ui.horizontal(|ui| { ui.label("密钥:"); - ui.add(egui::TextEdit::singleline(&mut token_secret).password(true).desired_width(200.0)); + ui.add(egui::TextEdit::singleline(&mut state.token_secret).password(true).desired_width(200.0)); }); ui.add_space(12.0); // 按钮 ui.horizontal(|ui| { - if ui.button("💾 保存").clicked() { - let ts = token_secret.clone(); - let tid = token_id.clone(); - let h = host.clone(); - let p = port; + let save_clicked = ui.button("💾 保存").clicked(); + let cancel_clicked = ui.button("取消").clicked(); + + if save_clicked { + let h = state.host.clone(); + let p = state.port; + let tid = state.token_id.clone(); + let ts = state.token_secret.clone(); if !h.is_empty() && !tid.is_empty() && !ts.is_empty() { - let mut state = state_clone.write().unwrap(); - state.host = h.clone(); - state.port = p; - state.token_id = tid.clone(); - state.token_secret = ts.clone(); - let client = ProxmoxClient::new(&h, p, &tid, &ts); state.client = Arc::new(Mutex::new(Some(client))); state.is_connected = true; state.save_config(); state.add_log("配置已保存"); - state_clone.write().unwrap().show_settings = false; - ctx_clone.request_repaint(); + state.show_settings = false; } } - if ui.button("取消").clicked() { - state_clone.write().unwrap().show_settings = false; - ctx_clone.request_repaint(); + if cancel_clicked { + state.show_settings = false; } });