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

5.8 KiB
Raw Blame History

id, title, phase, deps, status, created
id title phase deps status created
T-609 AI工场终选区改为主图与详情图双单行轨道 7
T-608
TODO 2026-07-11

问题 / 背景

⑥AI工场的「终选与排序」当前使用“主图列 + 详情图列 + 导出列”的横向三栏布局。主图、详情图各自的 QListWidget 保持默认列表展示,终选槽会纵向占用较大高度;在主图与详情图数量增多时,底部区域挤占照片池和生成设置的可见空间,也不符合 docs/ui/tab6-ai-studio-v3.svg 中“主图、详情图各一条横向排序轨道”的工作流表达。

运营在终选阶段的主要动作是:从照片池拖入、查看顺序、拖动重排和导出。主图(最多 9 张)与详情图(最多 12 张)应各自保持独立顺序,但应在同一终选区内以两条清晰、紧凑的横向轨道展示。

本任务目标:把终选区改为主图一行、详情图一行的横向轨道,固定并压缩其垂直高度,将释放的空间交给上方照片池与生成设置区域,同时不改变终选数据和拖拽排序语义。

方案

1. 终选区改为双单行轨道

修改 app/gui/tabs/image_studio.py 的终选区布局:

  • 外层从横向三栏布局改为纵向结构:顶部为「终选与排序」标题与简短提示,下方依次为「主图终选」和「详情图终选」两条横向轨道。
  • 每条轨道左侧保留固定宽度的中文类型/数量 label,例如 主图 5/9、详情 3/12;中间为对应的终选列表;右侧保留导出状态与「导出到文件夹」按钮,纵向跨两条轨道。
  • ImageStudioSelectionList 明确设置为图标视图、从左到右流向、不换行、固定 item/grid 尺寸;不足数量仍显示稳定的「空位」槽,不因文字、状态或缩略图变化导致跳动。
  • 主图轨道缩略图约 48px,详情图约 36~40px;在 1280px 宽的常用窗口下,9 个主图槽和 12 个详情图槽均应优先完整可见。更窄窗口允许轨道本身横向滚动,不得换为多行、重叠或压缩文字。
  • 保持现有拖入、落在已占槽时插入顺延、同轨道拖动排序、Delete 移出终选和双击预览行为;主图、详情图仍为两套互不混淆的排序序列。

2. 将释放的垂直空间让给上方工作区

  • 终选区设为稳定的紧凑高度目标约 150~170px,避免 QListWidget 按纵向内容撑高底部。
  • 保留根布局中上方 main_splitter 的 stretch 行为,让终选区压缩后释放的高度自动增加到上方工作区,优先扩大照片池可见区域;不额外创建浮动卡片或滚动嵌套。
  • 导出区域改为紧凑、可扫读的右侧区域:保留部分导出提示、主图/详情图计数和导出按钮;不因布局改动隐藏现有导出冲突处理语义。
  • 在 1280×820 和较窄窗口验证:两条终选轨道、导出按钮、照片池和生成设置均不重叠;窄窗口下列表能独立横向滚动,页面整体不出现不可达控件。

3. 不改变业务数据与导出语义

  • 继续使用已有 image_studio_selections 数据、main / detail 两类 selection、顺序字段、拖拽处理和导出服务。
  • 不修改项目、资产、任务、终选 SQLite schema,不迁移历史数据。
  • 不改变照片池、生成、原图下载队列、cmhub、蝦皮 CDP、导出文件名或覆盖/新建目录确认逻辑。
  • 所有新增或调整的用户可见文案保持中文。

验收要点

  • 「终选与排序」内主图与详情图分别只显示一条横向轨道,不再是左右分栏的两个纵向列表。
  • 主图最多 9 个槽、详情图最多 12 个槽;空位、缩略图、顺序标识和比例警示在单行内稳定显示。
  • 在 1280×820 下,两条轨道与导出区域均完整可见,终选区高度约 150~170px;释放出的高度由上方照片池/生成设置区域获得。
  • 在窄窗口下,单条终选轨道使用自身横向滚动,不换行、不重叠、不挤压为不可读文字。
  • 从照片池拖到主图/详情图、拖动重排、插入顺延、删除移出、双击预览和状态禁用逻辑保持原行为;两类终选顺序写入 SQLite 后重启仍正确。
  • 导出按钮、部分导出提示、终选数量和导出冲突处理仍可用,且不被终选轨道遮挡。
  • 不改 SQLite schema、图片文件、cmhub、生图、原图下载、导出服务、CDP 或①至⑤模块。

测试要求

更新或新增 tests/test_gui.py:

  • 覆盖终选区结构为标题 + 主图单行轨道 + 详情图单行轨道 + 导出区,不再依赖左右分栏。
  • 覆盖主图 9 槽、详情图 12 槽的固定数量、图标尺寸、单行/不换行和稳定 grid 尺寸。
  • 覆盖已有的拖入、插入顺延、同轨重排、Delete 移出和持久化顺序在新布局下仍正确。
  • 覆盖 1280×820 与较窄宽度下的尺寸约束:终选区不异常撑高、控件不重叠,窄宽时横向滚动可用。
  • 覆盖运行中禁用与导出按钮/提示仍可访问。

验证命令:

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

人工验收建议:

  • 准备主图 9 张、详情图 12 张的项目,在 1280×820 下确认两条轨道的槽位、顺序、导出区域和照片池可见面积。
  • 缩窄窗口后分别横向滚动主图和详情图轨道,验证不换行、不遮挡,并验证拖入、排序、删除和导出。

边界(不改什么)

  • 不新增终选类型、批量导出模式、拖拽跨类型自动转换或本地图片导入。
  • 不修改 app/image_studio.py、app/image_studio_export.py、SQLite schema 或历史终选记录。
  • 不调整原图区、照片池缩略图尺寸、原图下载并发/重试或生成参数。
  • 不改①至⑤模块、cmhub 协议、蝦皮 CDP 流程和登录策略。

执行记录

  • 待执行。