2026-07-11 17:35:22 +08:00
|
|
|
|
---
|
|
|
|
|
|
id: T-609
|
|
|
|
|
|
title: AI工场终选区改为主图与详情图双单行轨道
|
|
|
|
|
|
phase: 7
|
|
|
|
|
|
deps: [T-608]
|
2026-07-11 17:46:58 +08:00
|
|
|
|
status: DONE
|
2026-07-11 17:35:22 +08:00
|
|
|
|
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 17:46:58 +08:00
|
|
|
|
- 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`。主工作区另有未提交默认提示词文件变更,未纳入本任务修改。
|