fix: 修复输入框内容丢失问题,直接操作state

This commit is contained in:
xiaji
2026-04-13 22:03:12 +08:00
parent ca8ff39d32
commit a0d670030e

View File

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