proposal.md 2.83 KB

Proposal: 添加任务队列系统

:dart: 问题陈述

当前图像生成和款式设计功能是阻塞式的:

  • 用户点击"生成"后必须等待任务完成才能进行其他操作
  • 无法同时提交多个生成任务
  • 生成过程中 UI 被锁定,影响用户体验

真实使用场景:

  1. 用户想生成 3 个不同风格的戒指对比效果
  2. 当前必须等待第一个生成完成,才能提交第二个
  3. 总计等待时间 = 15s × 3 = 45 秒,期间只能干等

:bulb: 解决方案

方案 A: 底部状态栏任务队列(推荐)

在 MainWindow 底部添加可折叠的任务队列状态栏:

  • 默认折叠,显示当前任务摘要和队列长度
  • 点击展开查看详细任务列表
  • 支持排队提交多个任务
  • 后台异步执行,UI 不阻塞
┌─────────────────────────────────────────┐
│ [图片生成] [款式设计] [历史记录]        │
│                                         │
│  (当前 tab 内容)                        │
│                                         │
├─────────────────────────────────────────┤
│ ● 任务队列: [生成x1] [设计x2]          │ ← 新增
│   正在处理: 生成银戒图片...             │
│   [展开▼]                               │
└─────────────────────────────────────────┘

:construction_site:️ 核心组件

  1. Task 数据模型: 统一的任务数据结构
  2. TaskQueueManager: 单例任务队列管理器
  3. TaskQueueWidget: 底部状态栏 UI 组件

详细设计见 design.md

:white_check_mark: 成功标准

  1. 用户可以连续提交多个任务而不阻塞 UI
  2. 任务按提交顺序依次执行
  3. 实时显示任务状态(等待/运行中/完成/失败)
  4. 任务完成后自动更新对应 tab 的显示
  5. 队列满时友好提示用户

:mag: 风险与缓解

风险 缓解措施
Worker 生命周期管理 TaskQueueManager 持有引用直到任务完成
信号连接泄漏 使用 Lambda + 任务 ID 精确匹配
队列无限增长 硬限制最大 10 个任务
破坏现有功能 保留现有 ImageGenerationWorker 不修改

:bar_chart: 影响范围

  • 新增: 3 个类 (~500 行)
  • 修改: MainWindow, GenerationTab, StyleDesignerTab 集成代码 (~50 行)
  • 不影响: 历史记录、数据库、配置文件

:rocket: 实现计划

tasks.md

:question: 待确认问题

  1. 任务完成后是否需要弹窗通知?
  2. 是否自动切换到对应 tab 显示结果?
  3. 失败任务是否支持一键重试?
  4. 队列容量 10 是否合适?
  5. 任务完成后是否自动保存到历史记录?