spec.md 5.46 KB

Capability: Task Queue Management

ADDED Requirements

Requirement: 用户可以提交多个图像生成任务到队列

系统 SHALL 允许用户在使用图片生成或款式设计功能时连续提交多个任务,而不需要等待前一个任务完成。

Scenario: 用户连续提交 3 个图片生成任务

Given 用户在"图片生成" Tab 中 When 用户输入 prompt "银戒指" 并点击"生成图片" And 立即输入 prompt "金项链" 并再次点击"生成图片" And 立即输入 prompt "钻石耳环" 并第三次点击"生成图片" Then 三个任务都被添加到队列中 And 任务按提交顺序依次执行 And UI 不阻塞,用户可以继续操作

Scenario: 用户提交任务时队列已满

Given 队列中已有 10 个等待任务(队列容量限制) When 用户尝试提交第 11 个任务 Then 显示警告对话框 "任务队列已满 (最大 10 个)" And 任务不被添加到队列


Requirement: 用户可以实时查看任务队列状态

系统 SHALL 通过底部状态栏向用户显示当前任务队列的状态,包括正在执行的任务和等待中的任务数量。

Scenario: 查看折叠状态的任务摘要

Given 队列中有 1 个运行中任务和 2 个等待任务 And 底部状态栏处于折叠状态(默认) When 用户查看状态栏 Then 显示 "● 运行中" (橙色图标) And 显示 "正在处理: 生成银戒指图片... | 等待: 2" And 显示 "[展开▼]" 按钮

Scenario: 展开查看详细任务列表

Given 队列中有多个任务 And 底部状态栏处于折叠状态 When 用户点击 "[展开▼]" 按钮 Then 状态栏展开显示详细任务列表 And 每个任务显示状态图标和 prompt 摘要 And 运行中任务显示 "●" (橙色) And 等待中任务显示 "○" (灰色) And 按钮文本变为 "[折叠▲]"

Scenario: 折叠任务列表

Given 底部状态栏处于展开状态 When 用户点击 "[折叠▲]" 按钮 Then 状态栏折叠,只显示摘要信息 And 按钮文本变为 "[展开▼]"


Requirement: 任务完成后自动更新对应 Tab 的显示

系统 MUST 在队列中的任务完成时自动更新提交该任务的 Tab 的图片显示和历史记录。

Scenario: 图片生成任务完成后更新显示

Given 用户从"图片生成" Tab 提交了一个任务 And 任务正在队列中执行 When 任务成功完成 Then "图片生成" Tab 中的预览区域显示生成的图片 And 下载按钮被启用 And 任务被保存到历史记录 And 底部状态栏显示 "✓ 完成: 生成银戒指..." 3 秒后恢复

Scenario: 款式设计任务完成后更新显示

Given 用户从"款式设计" Tab 提交了一个任务 And 任务正在队列中执行 When 任务成功完成 Then "款式设计" Tab 中的预览区域显示生成的图片 And 任务被保存到历史记录 And 底部状态栏显示完成通知

Scenario: 任务失败后显示错误信息

Given 用户提交了一个任务 And 任务在执行过程中失败(如 API 错误) When 任务失败 Then 底部状态栏显示 "✗ 失败: API 连接超时..." (红色) And 3 秒后恢复显示队列状态 And 队列继续处理下一个任务


Requirement: 任务按提交顺序依次执行

系统 SHALL 按照先进先出(FIFO)的顺序依次执行队列中的任务,确保任务执行的可预测性。

Scenario: 多个任务按顺序执行

Given 用户依次提交任务 A、B、C When 队列开始处理 Then 任务 A 首先执行 When 任务 A 完成 Then 任务 B 开始执行 When 任务 B 完成 Then 任务 C 开始执行

Scenario: 任务失败不影响后续任务

Given 队列中有任务 A、B、C And 任务 A 正在执行 When 任务 A 失败 Then 队列自动开始处理任务 B And 任务 B 和 C 正常执行


Requirement: 状态栏显示实时任务进度

系统 SHALL 在任务正在执行时通过状态栏实时显示任务的进度信息。

Scenario: 显示任务执行进度

Given 队列中有一个正在执行的任务 When Worker 发出进度信号 "正在连接 Gemini API..." Then 状态栏摘要显示 "正在处理: 生成银戒指... - 正在连接 Gemini API..."

Scenario: 无任务时显示就绪状态

Given 队列中没有任务 When 用户查看状态栏 Then 显示 "● 就绪" (绿色) And 显示 "任务队列: 无任务"


Implementation Notes

核心数据结构

  • Task dataclass: 包含任务的所有输入参数、状态和结果
  • TaskQueueManager (单例): 管理队列和 Worker 生命周期
  • TaskQueueWidget: 底部状态栏 UI 组件

技术约束

  • 队列最大容量: 10 个任务
  • 任务执行方式: 串行(一次只执行一个)
  • Worker 类型: 复用现有的 ImageGenerationWorker (QThread)
  • 信号机制: 使用 Qt Signals 实现松耦合

兼容性

  • 不修改现有 ImageGenerationWorker 实现
  • 不破坏现有历史记录功能
  • 不影响现有配置和数据库

性能要求

  • UI 更新不阻塞主线程
  • 队列操作时间复杂度 O(1)
  • 内存占用: 任务完成后及时释放 Worker 引用

Cross-References

  • 依赖: 现有的 ImageGenerationWorker
  • 依赖: 现有的 HistoryManager
  • 关联: image_generator.py 中的 MainWindow, GenerationTab, StyleDesignerTab