From 262920b8b3954ecea135eabc4cb9bdae4ca560c6 Mon Sep 17 00:00:00 2001 From: xiaji Date: Sat, 9 May 2026 10:33:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=B8=89=E6=A0=8F?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=98=BE=E7=A4=BA=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flomo-ai-desktop/src/app.rs | 125 ++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 63 deletions(-) diff --git a/flomo-ai-desktop/src/app.rs b/flomo-ai-desktop/src/app.rs index adbe723..1fa211d 100644 --- a/flomo-ai-desktop/src/app.rs +++ b/flomo-ai-desktop/src/app.rs @@ -288,79 +288,78 @@ impl FlomoAiApp { ui.add_space(6.0); let available_width = ui.available_width(); - let column_width = (available_width - 10.0) / 3.0; + let column_width = (available_width - 16.0) / 3.0; ui.horizontal(|ui| { + ui.set_height(200.0); for (i, display) in self.model_displays.iter().enumerate() { if i > 0 { - ui.add_space(5.0); + ui.add_space(8.0); } ui.set_min_width(column_width); - ui.set_max_width(column_width); - ui.vertical(|ui| { - ui.set_width(column_width); - - let bg_color = if display.enabled { - ui.style().visuals.widgets.inactive.bg_fill - } else { - egui::Color32::from_rgb(240, 240, 240) - }; - - egui::Frame::none() - .fill(bg_color) - .stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(200, 200, 210))) - .rounding(6.0) - .inner_margin(egui::Margin::same(8.0)) - .show(ui, |ui| { - let status_color = match &display.status { - ModelStatus::Waiting => egui::Color32::GRAY, - ModelStatus::Loading => egui::Color32::from_rgb(255, 165, 0), - ModelStatus::Completed => egui::Color32::from_rgb(0, 180, 0), - ModelStatus::Error(_) => egui::Color32::RED, - }; - - let enabled_dot = if display.enabled { "●" } else { "○" }; - ui.label(egui::RichText::new(format!("{} {}", enabled_dot, display.name)) - .size(12.0).strong() - .color(if display.enabled { egui::Color32::from_rgb(100, 100, 255) } else { egui::Color32::GRAY })); - - ui.label(egui::RichText::new(&display.model).size(10.0).color(egui::Color32::GRAY)); - - ui.add_space(4.0); - ui.add_sized([ui.available_width(), 1.0], egui::Separator::default()); - ui.add_space(4.0); - - if display.result.is_empty() { - ui.label(egui::RichText::new("等待结果...").size(11.0).color(egui::Color32::GRAY)); - } else { - ui.add_sized( - [ui.available_width(), 120.0], - egui::TextEdit::multiline(&mut display.result.clone()) - .desired_rows(5) - .frame(false), - ); + egui::Frame::none() + .fill(ui.style().visuals.widgets.inactive.bg_fill) + .stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(180, 180, 200))) + .rounding(8.0) + .inner_margin(egui::Margin::same(10.0)) + .show(ui, |ui| { + ui.set_min_width(column_width - 20.0); + + let enabled_color = if display.enabled { + egui::Color32::from_rgb(80, 80, 220) + } else { + egui::Color32::GRAY + }; + + let enabled_dot = if display.enabled { "●" } else { "○" }; + ui.label(egui::RichText::new(format!("{} {}", enabled_dot, display.name)) + .size(13.0).strong().color(enabled_color)); + + ui.label(egui::RichText::new(&display.model).size(10.0).color(egui::Color32::GRAY)); + + ui.add_space(6.0); + ui.add_sized([ui.available_width(), 1.0], egui::Separator::default()); + + ui.add_space(6.0); + + let status_color = match &display.status { + ModelStatus::Waiting => egui::Color32::GRAY, + ModelStatus::Loading => egui::Color32::from_rgb(255, 140, 0), + ModelStatus::Completed => egui::Color32::from_rgb(0, 160, 0), + ModelStatus::Error(_) => egui::Color32::RED, + }; + + ui.label(egui::RichText::new(match &display.status { + ModelStatus::Waiting => "● 就绪", + ModelStatus::Loading => "◐ 生成中...", + ModelStatus::Completed => "✓ 完成", + ModelStatus::Error(_) => "✗ 错误", + }).size(10.0).color(status_color)); + + ui.add_space(4.0); + + if display.result.is_empty() { + ui.label(egui::RichText::new("等待结果...").size(11.0).color(egui::Color32::GRAY)); + } else { + let mut result_text = display.result.clone(); + ui.add_sized( + [ui.available_width(), 120.0], + egui::TextEdit::multiline(&mut result_text) + .desired_rows(5) + .frame(false), + ); + } + + ui.add_space(6.0); + + ui.horizontal(|ui| { + if ui.small_button("复制").clicked() && !display.result.is_empty() { + self.copy_to_clipboard(&display.result); } - - ui.add_space(4.0); - ui.add_sized([ui.available_width(), 1.0], egui::Separator::default()); - ui.add_space(4.0); - - ui.horizontal(|ui| { - ui.label(egui::RichText::new(match &display.status { - ModelStatus::Waiting => "就绪", - ModelStatus::Loading => "生成中...", - ModelStatus::Completed => "完成", - ModelStatus::Error(_) => "错误", - }).size(10.0).color(status_color)); - - if ui.small_button("复制").clicked() && !display.result.is_empty() { - self.copy_to_clipboard(&display.result); - } - }); }); - }); + }); } }); });