--- 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`。