Files
cmshoppe/docs/tasks/T-569.md
T
chengmaandClaude Opus 4.8 fa27134f7c docs(tasks): add T-566~T-569 cover gallery tasks (archive, gallery, regen, nav)
封面历史对比挑选功能拆四任务:T-566 数据层(重置归档改名、
update_generated_cover 状态语义、候选枚举排序、维持批次软删);
T-567 画廊查看+单选保存+原图弹窗;T-568 单任务重生+并发守卫
(含 fresh task 防跳过);T-569 上下条切换+未保存三态拦截。
含 Codex 评审修正与 title/cover committed 处理不对称的设计说明。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 11:13:21 +08:00

3.3 KiB

id, title, phase, deps, status, created
id title phase deps status created
T-569 ②封面画廊上下条切换与未保存选择拦截 7
T-567
TODO 2026-07-09

问题 / 背景

T-567 的封面画廊只处理当前单条任务。运营批量检查时需要在弹窗内连续查看上一条/下一条商品,而不是关闭弹窗后回到列表再双击。切换记录时,如果当前画廊已经勾选了另一张候选但尚未保存,必须避免静默丢失选择。

方案(改哪个文件、改成什么)

上一条/下一条按钮

  • 在 T-567 封面画廊弹窗底部增加「上一条」「下一条」。
  • 目标任务来自②当前表格模型的相邻可见行,必须尊重当前筛选结果和排序。
  • 第一条时「上一条」置灰;最后一条时「下一条」置灰。
  • 切换记录时只刷新弹窗内容区和内部当前 task,不重建整个窗口;窗口大小和位置保持不变。

键盘切换

  • 支持 ↑ / ↓ 键切换上一条/下一条,和按钮走同一个切换函数。
  • 画廊内 QRadioButton 设置 ClickFocus 或 NoFocus,避免方向键在 radio 组内改变候选选择而不是切换记录。
  • 输入框/按钮等获得焦点时如不适合消费方向键,应保持 Qt 默认行为;不为键盘切换破坏可访问性。

未保存选择拦截

  • 判断条件:当前 radio 选中路径 != DB 当前 task.new_cover_path。
  • 在按钮切换、方向键切换、关闭弹窗前都必须进入同一套拦截流程。
  • 弹三态确认框,按钮必须是中文:
    • 「保存」:调用 db.update_generated_cover();如任务已提交线上,先弹 T-567 同款“本地换封面不会回滚蝦皮,重复更新会再次提交线上”确认;保存成功后继续切换/关闭。
    • 「不保存」:丢弃当前勾选,继续切换/关闭。
    • 「取消」:留在当前任务,不切换、不关闭。
  • 保存失败时保留当前任务和弹窗,显示中文错误。

与 T-568 的关系

  • 如果 T-568 已完成且当前任务正在单任务重生:
    • 可允许切换到其它任务,但切回时必须刷新最新 DB/候选;
    • 当前任务运行中时画廊显示“生成中”状态,不显示旧 new_cover_path 为当前有效图误导用户。
  • 如果 T-568 尚未完成,本任务只需保证 T-567 基础画廊切换逻辑正确。

验收要点

  • 上一条/下一条按钮按当前②可见列表相邻行切换;边界按钮置灰。
  • ↑ / ↓ 与按钮共用切换逻辑;方向键不会改变 radio 选中。
  • 切换记录不改变弹窗尺寸和屏幕位置。
  • 当前有未保存选择时,按钮切换、键盘切换、关闭弹窗都会弹中文三态确认。
  • 「保存 / 不保存 / 取消」三种路径行为正确;保存失败不切换。
  • 已提交线上任务保存前仍弹二次警示。
  • 验证命令:
    • py -3.10 -m unittest tests.test_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

边界(不改什么)

  • 不改 T-566 数据层契约。
  • 不改 T-568 单任务重新生成逻辑。
  • 不改 cmhub/AI 请求、DB schema、Excel、③更新、CDP/Shopee。

执行记录

(做完在这里写:改了什么文件、跑了什么验证命令及结果、遇到的阻塞、关键决策。)