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

91 lines
6.8 KiB
Markdown
Raw 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-609
title: AI工场终选区改为主图与详情图双单行轨道
phase: 7
deps: [T-608]
status: DONE
created: 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 与较窄宽度下的尺寸约束:终选区不异常撑高、控件不重叠,窄宽时横向滚动可用。
- 覆盖运行中禁用与导出按钮/提示仍可访问。
验证命令:
```bash
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 流程和登录策略。
## 执行记录
- 2026-07-11:将 AI工场终选区改为标题行 + 主图单行轨道 + 详情图单行轨道;右侧导出状态和导出按钮跨两条轨道,终选区高度限制为 150~170px,释放的高度由上方工作区获得。
- 2026-07-11:终选列表明确使用图标模式、从左到右、不换行、固定 grid 和独立横向滚动;主图 9 槽使用 48px 缩略图,详情图 12 槽使用 38px 缩略图。空位保留可落入语义并以虚线槽稳定显示。
- 2026-07-11:保留拖入、插入顺延、同轨重排、Delete 移出、双击预览、SQLite 顺序持久化和导出逻辑;新增动态终选计数提示与 GUI 布局回归测试。
- 2026-07-11:人工截图检查 1280×820 下双轨道、导出区与照片池无重叠。干净 worktree 验证通过:`python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`(387 项)、`git diff --check`。主工作区另有未提交默认提示词文件变更,未纳入本任务修改。