Files
cmshoppe/docs/tasks/T-554.md
T

5.3 KiB

id, title, phase, deps, status, created
id title phase deps status created
T-554 ②AI生成表格拆分标题/图片状态列并调整列宽 7
T-533
T-519
T-552
T-523
DONE 2026-07-08

问题 / 背景

②「AI生成」现在是两步流程:先生成标题,再按本轮开关可选生成图片。但右侧任务表格只有一个「状态」列,显示的是整条任务的整体 stage/status,例如「待生成 / 已生成 / 生成失败」。

这会带来两个使用问题:

  • 用户看不出当前任务到底是「标题没生成」「图片没生成」,还是「标题成功但图片失败」。
  • 标题成功后当前逻辑会先写入 new_title 并把任务设为 generated/success;若本轮还在生成图片,表格整体状态可能先显示为「已生成」,需要去看底部进度条或运行日志才能知道图片仍在处理。

同时,②表格中商品 ID 通常较短,当前列宽偏大;拆分出两个状态列后,应把商品 ID 列宽缩小,把空间让给状态信息。

方案

  1. 表格列拆分

    • 将②AI生成表格原列:店铺 / 商品ID / 旧标题 / 新标题 / 状态。
    • 改为:店铺 / 商品ID / 旧标题 / 新标题 / 标题状态 / 图片状态。
    • 第一版只改 GUI 展示层和单测,不改 SQLite schema,不新增 title_status / cover_status 字段。
  2. 状态推导口径

    • new_title 有值:标题状态显示「已生成」。
    • new_cover_path 有值:图片状态显示「已生成」。
    • last_error 或失败步骤指向标题阶段(如 title_*、请求生成标题、标题):标题状态显示「失败」。
    • last_error 或失败步骤指向封面/图片阶段(如 cover_*、请求生成封面、封面、图片、下载):图片状态显示「失败」。
    • stage=collected 且无标题:标题状态显示「待生成」。
    • 本轮未启用生成封面,或任务已生成标题但没有新封面且没有图片失败时,图片状态显示「未启用」;若需要生成封面但还没生成,则显示「待生成」。第一版可通过 ②当前「生成封面图片(成本较高)」开关参与推导,不写入 DB。
    • stage=imported:两个状态均显示「未采集」。
    • 若任务是采集阶段失败(有 collect_attempts、无 generate_attempts),两个状态列显示「采集失败」,避免旧整体状态的信息丢失。
    • stage=applied:按已有结果显示,标题/图片已有值则显示「已生成」,没有图片则显示「未启用」。
  3. 列宽调整

    • ②表格原本使用等宽 Stretch。拆分列后,需要自定义列宽。
    • 商品ID列宽按“原等分状态下商品ID列宽”的 50% 计算,即从 1.0 权重降为 0.5 权重。
    • 商品ID列缩出来的 0.5 权重,平均分给「标题状态」和「图片状态」两列,每个状态列额外 0.25 权重。
    • 推荐权重:店铺=1.0 / 商品ID=0.5 / 旧标题=1.0 / 新标题=1.0 / 标题状态=1.25 / 图片状态=1.25。
    • 在表格 resize、刷新后重新应用列宽;避免商品ID过宽,也避免状态文字显示不全。

验收要点

  • ②AI生成表格列头显示为:店铺 / 商品ID / 旧标题 / 新标题 / 标题状态 / 图片状态。
  • 标题成功但图片未生成时,能显示「标题状态=已生成」「图片状态=待生成/未启用」。
  • 图片失败时,能显示「标题状态=已生成」「图片状态=失败」。
  • 标题失败时,能显示「标题状态=失败」「图片状态=未开始/未启用」。
  • tooltip 仍保留完整 last_error,不丢失 T-552 的失败步骤。
  • 商品ID列宽约为原等分宽度的 50%;标题状态和图片状态平均接收缩出来的宽度。
  • 单测覆盖表头、状态推导、列宽权重或 resize 后列宽关系。

边界(不改什么)

只改②AI生成表格展示、状态推导和列宽;不改 DB schema、tasks.stage/status 语义、AI 生成编排、cmhub HTTP、运行日志、底部进度条、Excel、Shopee/CDP。

执行记录

  • 2026-07-08:完成 T-554。
  • 代码:app/gui/models.py 将 GenerateTaskTableModel 表头改为 店铺 / 商品ID / 旧标题 / 新标题 / 标题状态 / 图片状态,新增标题/图片组件状态推导;采集失败保留显示「采集失败」,生成阶段标题失败/图片失败分别显示在对应状态列,tooltip 继续显示完整 last_error。
  • 代码:app/gui/tabs/generate.py 将②表格表头从等宽 Stretch 改为权重列宽,权重为 1.0 / 0.5 / 1.0 / 1.0 / 1.25 / 1.25;刷新、窗口 resize、splitter 移动时重新应用列宽;当前「生成封面图片(成本较高)」开关联动图片状态的「待生成 / 未启用」展示。
  • 测试:tests/test_gui.py 更新表头断言、旧整体状态断言和 tooltip 列号,新增 test_generate_table_splits_title_and_cover_statuses_and_widths 覆盖采集失败、标题失败、图片失败、标题成功图片未启用、开启封面后的待生成状态,以及商品ID列宽小于普通列、两个状态列宽基本相等且大于普通列。
  • 验证:py -3.10 -m unittest tests.test_gui 通过(105 tests);python -m ruff check app tests main.py 通过;py -3.10 -m compileall app main.py 通过;git diff --check 通过;py -3.10 -m unittest discover -s tests 通过(258 tests)。