Files

71 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-555
title: ②AI生成列宽再分配与标题/生图用时计时
phase: 7
deps: [T-554, T-519, T-523]
status: DONE
created: 2026-07-08
---
## 问题 / 背景
T-554 已把②「AI生成」任务表格从一个「状态」列拆成「标题状态 / 图片状态」。实际使用时,两个状态列只展示短文本(如「已生成」「失败」「未启用」),当前列宽偏宽;旧标题和新标题才是运营需要对比阅读的主要内容,应把更多横向空间给标题文本。
②底部已有两条进度条(标题、图片),但右侧原本显示「失败 X」和「cmhub余额:X」。用户在生成标题、生成图片等待时间较长时,更需要看到两个阶段的实时用时变化,尤其生图等待 cmhub 返回可能持续数分钟。失败数量和余额仍可通过表格状态、运行日志、结束汇总、计费日志和设置页查询,不应占用进度条右侧最关键位置。
## 全栈工程分析
- **列宽调整风险低**:当前②表格列宽已经由 GUI 权重控制,不涉及 DB schema、任务状态、AI 生成编排或 Excel/Shopee。只需调整 `GenerateTab.TABLE_COLUMN_WEIGHTS` 和列宽测试。
- **实时用时应在 GUI 层实现**:用 PySide6 `QTimer` 在主线程每秒刷新标签即可;不应让 AI worker 频繁发“秒数”信号,避免后台线程和 UI 过度耦合。
- **用时口径要分阶段**:
- 生标题用时:从本轮开始生成标题阶段开始计时;标题阶段结束后冻结。
- 生图用时:从本轮开始生成图片阶段开始计时;图片阶段结束后冻结。
- 如果本轮没有对应阶段任务,显示 `生标题用时 0 秒` 或 `生图用时 0 秒`,不额外引入空状态文案。
- **不丢失败和余额信息**:底部进度条右侧不再显示失败数和 cmhub 余额;失败仍通过表格「标题状态 / 图片状态」、运行日志、结束弹窗和任务 `last_error` 可见;cmhub 余额仍由计费日志、余额刷新/设置页连接测试等既有入口体现。本任务不改计费 metadata 记录。
## 方案
1. **②表格列宽再分配**
- T-554 当前权重为:`店铺=1.0 / 商品ID=0.5 / 旧标题=1.0 / 新标题=1.0 / 标题状态=1.25 / 图片状态=1.25`。
- 将「标题状态」和「图片状态」列宽缩小到当前宽度的约 `33%`:`1.25 * 0.33 ≈ 0.4125`。
- 两个状态列共释放约 `1.675` 权重,平均分给「旧标题」和「新标题」,每列增加约 `0.8375`。
- 推荐新权重:`店铺=1.0 / 商品ID=0.5 / 旧标题=1.8375 / 新标题=1.8375 / 标题状态=0.4125 / 图片状态=0.4125`。
- 商品ID列继续保持 T-554 的 `0.5` 权重,不再变宽。
2. **进度条右侧改为阶段用时**
- 底部标题进度条右侧新增固定宽度标签:`生标题用时 0 秒`。
- 底部图片进度条右侧显示固定宽度标签:`生图用时 0 秒`。
- 去掉图片进度条右侧原来的 `失败 X` 和 `cmhub余额:X` 展示位置;该位置改为生图用时。
- 两个用时标签宽度保持一致,避免标题/图片两行进度条长度不齐。
- 本轮运行中每秒自动刷新秒数;本轮完成、停止或失败汇总后冻结最终秒数;下一次点击「开始生成」时重置为 0。
3. **计时触发口径**
- 点击「开始生成」后,如果 `title_total > 0`,立即启动标题计时;如果 `title_total == 0`,标题用时保持 0。
- 当标题阶段完成,冻结标题用时。
- 当图片阶段实际开始(可通过首个 cover 事件或进度中 `cover_total > 0` 且标题阶段已结束推导),启动生图计时。
- 当图片阶段完成、停止或失败汇总后,冻结生图用时。
- 计时只用于 GUI 显示,不写入 SQLite、Excel 或运行日志;运行日志已有分阶段耗时明细。
## 验收要点
- ②AI生成表格中「标题状态 / 图片状态」两列宽约为 T-554 当前宽度的 33%。
- 「旧标题 / 新标题」两列平均获得状态列缩出来的宽度,标题文本区域明显变宽。
- 商品ID列仍保持 T-554 的缩窄宽度,不因为本任务变宽。
- 标题进度条右侧显示 `生标题用时 N 秒`,运行中每秒递增。
- 图片进度条右侧显示 `生图用时 N 秒`,运行中每秒递增。
- 图片进度条右侧不再显示 `失败 X` 和 `cmhub余额:X`。
- 生成完成、停止或失败后,两个用时标签冻结最终秒数;再次开始生成时归零。
- 单测覆盖列宽权重变化、两个用时标签初始显示、开始/进度/结束后的计时启停,以及失败数/余额标签不再占用进度条右侧布局。
## 边界(不改什么)
只改②AI生成 GUI 展示和测试;不改 AI 生成流程、cmhub HTTP、并发策略、DB schema、运行日志持久化、计费 metadata、Excel、Shopee/CDP。失败数量和 cmhub 余额不从系统中删除,只是不再显示在两条进度条右侧。
## 执行记录
- 2026-07-08:完成②AI生成表格列宽再分配,权重调整为 `店铺=1.0 / 商品ID=0.5 / 旧标题=1.8375 / 新标题=1.8375 / 标题状态=0.4125 / 图片状态=0.4125`。
- 2026-07-08:底部两条进度条右侧改为固定宽度用时标签 `生标题用时 N 秒` / `生图用时 N 秒`,由 GUI 层 `QTimer` 每秒刷新;开始生成时重置,标题阶段结束后冻结标题用时,图片阶段开始后计生图用时,完成/停止/计费中止后冻结。
- 2026-07-08:`失败 X` 与 `cmhub余额:X` 不再占用进度条右侧;失败数仍保留在进度摘要、表格状态、运行日志和结束汇总,cmhub 余额文本仍在内部按 payload 更新但隐藏展示,后续仍可通过设置页/日志入口查看。
- 2026-07-08:更新 GUI 单测,覆盖列宽比例、初始用时标签、计时启动/切换/冻结,以及隐藏失败数/余额标签。
- 验证通过:`python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`、`git diff --check`。