From 1f44325d7fad7a192db86a9a26b3e37eb5d62bc8 Mon Sep 17 00:00:00 2001 From: xiaji Date: Sun, 5 Apr 2026 20:09:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=E9=80=89=E6=8B=A9=E5=8C=BA=E5=B8=83=E5=B1=80=EF=BC=8C?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E6=8C=89=E9=92=AE=E4=B8=8E=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86=E5=90=8C=E6=8E=92=EF=BC=8C=E6=98=BE=E7=A4=BA=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E5=90=8D=E7=A7=B0=E5=92=8C=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=8C=E7=BB=93=E6=9E=9C=E5=8C=BA=E6=94=B9=E4=B8=BA'?= =?UTF-8?q?=E5=A4=A7=E6=A8=A1=E5=9E=8B=E8=BF=94=E5=9B=9E=E7=BB=93=E6=9E=9C?= =?UTF-8?q?'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flomo-ai-desktop/src/app.rs | 95 +++++---- .../java/com/example/flomo_ai/MainActivity.kt | 7 +- .../app/src/main/res/layout/activity_main.xml | 185 ++++++++++-------- 3 files changed, 163 insertions(+), 124 deletions(-) diff --git a/flomo-ai-desktop/src/app.rs b/flomo-ai-desktop/src/app.rs index 4497511..bcbf7b6 100644 --- a/flomo-ai-desktop/src/app.rs +++ b/flomo-ai-desktop/src/app.rs @@ -190,36 +190,57 @@ impl FlomoAiApp { ui.separator(); - ui.label(egui::RichText::new("快速操作").size(11.0).color(egui::Color32::GRAY)); - ui.add_space(6.0); - + // 提示词选择区:左侧标签+下拉框,右侧快捷按钮 ui.horizontal(|ui| { - let buttons = vec![ - ("🔍", "检查错别字"), - ("📋", "总结"), - ("🌐", "翻译"), - ("✨", "润色"), - ]; + ui.vertical(|ui| { + ui.label(egui::RichText::new("提示词").size(11.0).color(egui::Color32::GRAY)); + ui.add_space(4.0); - for (emoji, name) in buttons { - let btn = egui::Button::new(egui::RichText::new(emoji).size(16.0)) - .fill(ui.style().visuals.widgets.inactive.bg_fill) - .stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(210, 210, 220))) - .rounding(6.0) - .min_size(egui::vec2(36.0, 36.0)); + let selected_text = if self.selected_prompt_index == 0 { + "无系统提示词".to_string() + } else if self.selected_prompt_index <= self.settings.prompt_configs.len() { + self.settings.prompt_configs[self.selected_prompt_index - 1].title.clone() + } else { + "无系统提示词".to_string() + }; - if ui.add(btn).on_hover_text(name).clicked() { - self.select_prompt_by_name(name, ctx); + egui::ComboBox::from_id_salt("prompt_selector") + .selected_text(&selected_text) + .width(180.0) + .show_ui(ui, |ui| { + ui.selectable_value(&mut self.selected_prompt_index, 0, "无系统提示词"); + for (i, prompt) in self.settings.prompt_configs.iter().enumerate() { + ui.selectable_value(&mut self.selected_prompt_index, i + 1, &prompt.title); + } + }); + }); + + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + let buttons = vec![ + ("🔍", "检查错别字"), + ("📋", "总结"), + ("🌐", "翻译"), + ("✨", "润色"), + ]; + + for (emoji, name) in buttons { + let btn = egui::Button::new(egui::RichText::new(emoji).size(16.0)) + .fill(ui.style().visuals.widgets.inactive.bg_fill) + .stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(210, 210, 220))) + .rounding(6.0) + .min_size(egui::vec2(36.0, 36.0)); + + if ui.add(btn).on_hover_text(name).clicked() { + self.select_prompt_by_name(name, ctx); + } } - } + }); }); ui.add_space(14.0); - ui.label(egui::RichText::new("提示词").size(11.0).color(egui::Color32::GRAY)); - ui.add_space(6.0); - - let selected_text = if self.selected_prompt_index == 0 { + // 提示词详情:显示名称和内容 + let prompt_name = if self.selected_prompt_index == 0 { "无系统提示词".to_string() } else if self.selected_prompt_index <= self.settings.prompt_configs.len() { self.settings.prompt_configs[self.selected_prompt_index - 1].title.clone() @@ -227,17 +248,6 @@ impl FlomoAiApp { "无系统提示词".to_string() }; - egui::ComboBox::from_id_salt("prompt_selector") - .selected_text(&selected_text) - .show_ui(ui, |ui| { - ui.selectable_value(&mut self.selected_prompt_index, 0, "无系统提示词"); - for (i, prompt) in self.settings.prompt_configs.iter().enumerate() { - ui.selectable_value(&mut self.selected_prompt_index, i + 1, &prompt.title); - } - }); - - ui.separator(); - let prompt_content = if self.selected_prompt_index == 0 { "无特殊指令".to_string() } else if self.selected_prompt_index <= self.settings.prompt_configs.len() { @@ -246,10 +256,23 @@ impl FlomoAiApp { "无特殊指令".to_string() }; - ui.label(egui::RichText::new(&prompt_content).size(11.0).color(egui::Color32::GRAY)); + egui::Frame::none() + .fill(ui.style().visuals.widgets.inactive.bg_fill) + .stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(210, 210, 220))) + .rounding(6.0) + .inner_margin(egui::Margin::same(12.0)) + .show(ui, |ui: &mut egui::Ui| { + ui.label(egui::RichText::new(&prompt_name).size(13.0).strong()); + ui.add_space(6.0); + ui.add_sized([ui.available_width(), 1.0], egui::Separator::default()); + ui.add_space(6.0); + ui.label(egui::RichText::new(&prompt_content).size(11.0).color(egui::Color32::GRAY)); + }); + ui.add_space(14.0); - ui.label(egui::RichText::new("输入").size(11.0).color(egui::Color32::GRAY)); + // 大模型返回结果 + ui.label(egui::RichText::new("大模型返回结果").size(11.0).color(egui::Color32::GRAY)); ui.add_space(4.0); egui::Frame::none() @@ -293,7 +316,7 @@ impl FlomoAiApp { ui.add_space(14.0); - ui.label(egui::RichText::new("优化结果").size(11.0).color(egui::Color32::GRAY)); + ui.label(egui::RichText::new("大模型返回结果").size(11.0).color(egui::Color32::GRAY)); ui.add_space(6.0); let status_text = match &self.status { diff --git a/flomo-ai/app/src/main/java/com/example/flomo_ai/MainActivity.kt b/flomo-ai/app/src/main/java/com/example/flomo_ai/MainActivity.kt index 276808b..cd0b714 100644 --- a/flomo-ai/app/src/main/java/com/example/flomo_ai/MainActivity.kt +++ b/flomo-ai/app/src/main/java/com/example/flomo_ai/MainActivity.kt @@ -38,6 +38,7 @@ class MainActivity : AppCompatActivity() { private lateinit var outputStatusLabel: TextView private lateinit var outputTextView: TextView private lateinit var promptSelector: Spinner + private lateinit var promptNameText: TextView private lateinit var promptContentText: TextView // Data classes matching SecondActivity @@ -61,6 +62,7 @@ class MainActivity : AppCompatActivity() { Log.d("MainActivity", "onCreate: Layout set") promptSelector = findViewById(R.id.promptSelector) + promptNameText = findViewById(R.id.promptNameText) promptContentText = findViewById(R.id.promptContentText) inputEditText = findViewById(R.id.inputEditText) val sendButton = findViewById