fix:修复模板问题,修复系统操作逻辑,修复系统的一些BUG

This commit is contained in:
2025-12-31 08:28:45 +08:00
parent d3c0121632
commit 54398e2cbe
12 changed files with 342 additions and 172 deletions

View File

@@ -5,25 +5,35 @@ from ui.core.task_runner import run_task, select_folder
# 导入业务函数
from utils.generate_utils import (
generate_template, generate_comment_all,
batch_convert_folder, generate_report, generate_zodiac, generate_signature
generate_template,
generate_comment_all,
batch_convert_folder,
generate_report,
generate_zodiac,
generate_signature,
)
from utils.file_utils import export_templates_folder, initialize_project, export_data
from utils.file_utils import initialize_project, open_folder
config = load_config("config.toml")
def create_header():
with ui.header().classes('app-header items-center justify-between shadow-md'):
with ui.header().classes("app-header items-center justify-between shadow-md"):
# 左侧:图标和标题
with ui.row().classes('items-center gap-2'):
ui.image('/assets/icon.ico').classes('w-8 h-8').props('fit=contain')
ui.label('尚城幼儿园成长报告助手').classes('text-xl font-bold')
with ui.row().classes("items-center gap-2"):
ui.image("/assets/icon.ico").classes("w-8 h-8").props("fit=contain")
ui.label("尚城幼儿园成长报告助手").classes("text-xl font-bold")
# 右侧:署名 + 配置按钮
with ui.row().classes('items-center gap-4'):
ui.label('By 寒寒 | 这里的每一份评语都充满爱意').classes('text-xs opacity-90')
with ui.row().classes("items-center gap-4"):
ui.label("By 寒寒 | 这里的每一份评语都充满爱意").classes(
"text-xs opacity-90"
)
# 添加配置按钮
ui.button(icon='settings', on_click=lambda: ui.navigate.to('/config')).props('flat round color=white').tooltip('系统配置')
ui.button(
icon="settings", on_click=lambda: ui.navigate.to("/config")
).props("flat round color=white").tooltip("系统配置")
def create_home_page():
# 1. 引入外部 CSS
@@ -32,62 +42,70 @@ def create_home_page():
create_header()
# 主容器
with ui.column().classes('w-full max-w-4xl mx-auto p-4 gap-4 thin-scrollbar'):
with ui.column().classes("w-full max-w-4xl mx-auto p-4 gap-4 thin-scrollbar"):
# === 进度条区域 ===
with ui.card().classes('func-card'):
app_state.progress_label = ui.label('⛳ 任务进度: 待命').classes('font-bold text-gray-700 mb-1')
with ui.card().classes("func-card"):
app_state.progress_label = ui.label("⛳ 任务进度: 待命").classes(
"font-bold text-gray-700 mb-1"
)
# 使用 NiceGUI 原生属性配合 CSS 类
app_state.progress_bar = ui.linear_progress(value=0, show_value=False).classes('h-4 rounded')
app_state.progress_bar.props('color=positive') # 使用 Quasar 颜色变量
app_state.progress_bar = ui.linear_progress(
value=0, show_value=False
).classes("h-4 rounded")
app_state.progress_bar.props("color=positive") # 使用 Quasar 颜色变量
# === 核心功能区 ===
with ui.card().classes('func-card card-core'):
ui.label('🛠️ 核心功能').classes('section-title text-green')
with ui.card().classes("func-card card-core"):
ui.label("🛠️ 核心功能").classes("section-title text-green")
with ui.grid(columns=3).classes('w-full gap-3'):
with ui.grid(columns=3).classes("w-full gap-3"):
# 辅助函数:快速创建按钮
def func_btn(text, icon, func):
ui.button(text, on_click=lambda: run_task(func)).props(f'outline').classes('w-full')
ui.button(text, on_click=lambda: run_task(func)).props(
f"outline"
).classes("w-full")
func_btn("📁 生成图片路径", "image", generate_template)
func_btn("🤖 生成评语 (AI)", "smart_toy", generate_comment_all)
func_btn("📊 生成报告 (PPT)", "analytics", generate_report)
func_btn('📁 生成图片路径', 'image', generate_template)
func_btn('🤖 生成评语 (AI)', 'smart_toy', generate_comment_all)
func_btn('📊 生成报告 (PPT)', 'analytics', generate_report)
# 特殊处理带参数的
async def run_convert():
await run_task(batch_convert_folder, config.get("output_folder"))
ui.button('📑 格式转换 (PDF)', on_click=run_convert).props('outline')
func_btn('🐂 生肖转化 (生日)', 'pets', generate_zodiac)
func_btn('💴 园长一键签名', 'refresh', generate_signature)
ui.button("📑 格式转换 (PDF)", on_click=run_convert).props("outline")
func_btn("🐂 生肖转化 (生日)", "pets", generate_zodiac)
func_btn("💴 园长一键签名", "refresh", generate_signature)
# === 下方双栏布局 ===
with ui.grid(columns=2).classes('w-full gap-4'):
# 数据管理
with ui.card().classes('func-card card-data'):
ui.label('📦 数据管理').classes('section-title text-blue')
with ui.row().classes('w-full'):
async def do_export(func):
path = await select_folder()
if path: await run_task(func, path)
# 数据管理
with ui.card().classes("func-card card-data"):
ui.label("⚙️ 系统操作").classes("section-title text-blue")
ui.button('📦 导出模板', on_click=lambda: do_export(export_templates_folder)).props(f'outline')
ui.button('📤 导出备份', on_click=lambda: do_export(export_data)).props(f'outline')
# 系统操作
with ui.card().classes('func-card card-system'):
ui.label('⚙️ 系统操作').classes('section-title text-red')
with ui.row().classes('w-full'):
def stop_now():
if app_state.is_running:
app_state.stop_event.set()
ui.notify("发送停止信号...", type="warning")
def stop_now():
if app_state.is_running:
app_state.stop_event.set()
ui.notify("发送停止信号...", type="warning")
ui.button('⛔ 停止', on_click=stop_now).props('color=negative').classes('flex-1')
with ui.row().classes("w-full"):
ui.button(
"📦 打开输出文件夹",
on_click=lambda: open_folder(config.get("output_folder")),
).props(f"outline")
ui.button(
"📤 打开数据文件夹",
on_click=lambda: open_folder(config.get("data_folder")),
).props(f"outline")
ui.button("⛔ 停止", on_click=stop_now).props("color=negative").classes(
"flex-1"
)
async def reset_sys():
await run_task(initialize_project)
ui.button('⚠️ 初始化', on_click=reset_sys).props('outline color=warning').classes('flex-1')
# === 日志区 ===
with ui.card().classes('func-card card-logging'):
with ui.expansion('📝 系统实时日志',value=True).classes('w-full bg-white shadow-sm rounded'):
app_state.log_element = ui.log(max_lines=200).classes('w-full h-40 font-mono text-xs bg-gray-100 p-2')
with ui.card().classes("func-card card-logging"):
with ui.expansion("📝 系统实时日志", value=True).classes(
"w-full bg-white shadow-sm rounded"
):
app_state.log_element = ui.log(max_lines=200).classes(
"w-full h-40 font-mono text-xs bg-gray-100 p-2"
)