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; } });