From 6a0069947264beded8b884d11ceface00d98a879 Mon Sep 17 00:00:00 2001 From: carry <2641257231@qq.com> Date: Wed, 9 Apr 2025 11:08:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E5=AE=9E=E7=8E=B0=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加获取、添加、编辑和删除提示词功能 - 实现数据表格展示和操作 --- frontend/prompt_manage_page.py | 117 +++++++++++++++++++++++++++++++-- 1 file changed, 112 insertions(+), 5 deletions(-) diff --git a/frontend/prompt_manage_page.py b/frontend/prompt_manage_page.py index 7f05327..e52576d 100644 --- a/frontend/prompt_manage_page.py +++ b/frontend/prompt_manage_page.py @@ -1,9 +1,116 @@ import gradio as gr - +from typing import List +from global_var import prompt_store +from schema.prompt import promptTempleta def prompt_manage_page(): + def get_prompts() -> List[List[str]]: + selected_row = None + try: + db = prompt_store + prompts = db.all() + return [ + [p["id"], p["name"], p["description"], p["content"]] + for p in prompts + ] + except Exception as e: + raise gr.Error(f"获取提示词失败: {str(e)}") + + def add_prompt(name, description, content): + try: + db = prompt_store + new_prompt = promptTempleta( + name=name if name else "", + description=description if description else "", + content=content if content else "" + ) + prompt_id = db.insert(new_prompt.model_dump()) + # 更新ID + db.update({"id": prompt_id}, doc_ids=[prompt_id]) + return get_prompts(), "", "", "" # 返回清空后的输入框值 + except Exception as e: + raise gr.Error(f"添加失败: {str(e)}") + + def edit_prompt(): + global selected_row + if not selected_row: + raise gr.Error("请先选择要编辑的行") + try: + db = prompt_store + db.update({ + "name": selected_row[1] if selected_row[1] else "", + "description": selected_row[2] if selected_row[2] else "", + "content": selected_row[3] if selected_row[3] else "" + }, doc_ids=[selected_row[0]]) + return get_prompts() + except Exception as e: + raise gr.Error(f"编辑失败: {str(e)}") + + def delete_prompt(): + global selected_row + if not selected_row: + raise gr.Error("请先选择要删除的行") + try: + db = prompt_store + db.remove(doc_ids=[selected_row[0]]) + return get_prompts() + except Exception as e: + raise gr.Error(f"删除失败: {str(e)}") + + selected_row = None # 保存当前选中行的全局变量 + + def select_record(evt: gr.SelectData): + global selected_row + selected_row = evt.row_value + with gr.Blocks() as demo: - gr.Markdown("## 提示词管理") + gr.Markdown("## 提示词模板管理") + with gr.Row(): - with gr.Column(): - pass - return demo \ No newline at end of file + with gr.Column(scale=1): + name_input = gr.Textbox(label="模板名称") + description_input = gr.Textbox(label="模板描述") + content_input = gr.Textbox(label="模板内容", lines=10) + add_button = gr.Button("添加新模板", variant="primary") + + with gr.Column(scale=3): + prompt_table = gr.DataFrame( + headers=["id", "名称", "描述", "内容"], + datatype=["number", "str", "str", "str"], + interactive=True, + value=get_prompts(), + wrap=True, + col_count=(4, "auto") + ) + + with gr.Row(): + refresh_button = gr.Button("刷新数据", variant="secondary") + edit_button = gr.Button("编辑选中行", variant="primary") + delete_button = gr.Button("删除选中行", variant="stop") + + refresh_button.click( + fn=get_prompts, + outputs=[prompt_table], + queue=False + ) + + add_button.click( + fn=add_prompt, + inputs=[name_input, description_input, content_input], + outputs=[prompt_table, name_input, description_input, content_input] + ) + + prompt_table.select(select_record, [], [], show_progress="hidden") + + edit_button.click( + fn=edit_prompt, + inputs=[], + outputs=[prompt_table] + ) + + delete_button.click( + fn=delete_prompt, + inputs=[], + outputs=[prompt_table] + ) + + return demo \ No newline at end of file