2026-07-11 11:10:43 +08:00
|
|
|
|
---
|
|
|
|
|
|
id: T-592
|
|
|
|
|
|
title: AI工场主图/详情图终选拖放、插入排序与比例轻提示
|
|
|
|
|
|
phase: 7
|
|
|
|
|
|
deps: [T-591]
|
2026-07-11 14:20:56 +08:00
|
|
|
|
status: DONE
|
2026-07-11 11:10:43 +08:00
|
|
|
|
created: 2026-07-11
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 问题 / 背景
|
|
|
|
|
|
|
|
|
|
|
|
照片池是候选集合,导出需要有序的主图和详情图集合。终选必须支持从池拖入、落在占用槽时插入顺延、槽内重排、移出终选和跨类别复用,同时保证数据库与 UI 顺序一致。
|
|
|
|
|
|
|
|
|
|
|
|
## 方案
|
|
|
|
|
|
|
|
|
|
|
|
- 底部全宽终选盘显示目标和当前数量,默认主图 9、详情 12,目标可配置。
|
|
|
|
|
|
- 从池拖到空槽直接放入;拖到占用槽按位置插入并顺延;满额时拒绝超出并提示。
|
|
|
|
|
|
- 槽内拖动原子重排;Delete/右键只移出终选,不删除 pool asset。
|
|
|
|
|
|
- 同一 asset 在同类别最多一次,可同时各用于一次 main/detail。
|
|
|
|
|
|
- 主图/详情图推荐比例不匹配显示黄色边框+tooltip,不硬拦。
|
|
|
|
|
|
- 所有槽位保持连续,无中间空洞;双击槽图查看大图。
|
|
|
|
|
|
- 使用 T-586 service 事务更新 selection,拖放失败时 UI 回滚到 DB 顺序。
|
|
|
|
|
|
|
|
|
|
|
|
## 验收要点
|
|
|
|
|
|
|
|
|
|
|
|
- empty insert、occupied insert+shift、same-list reorder、remove、满额和重复拖入均有测试。
|
|
|
|
|
|
- 跨 main/detail 允许,同类别重复拒绝;比例提示不阻止保存。
|
|
|
|
|
|
- 重启后顺序与退出前一致;并发/异常不产生重复 position 或空洞。
|
|
|
|
|
|
- 运行中图片尚未可用时不能拖入;文件缺失资产有明确禁用状态。
|
|
|
|
|
|
|
|
|
|
|
|
## 边界(不改什么)
|
|
|
|
|
|
|
|
|
|
|
|
- 不导出文件、不删除照片池资产、不上传蝦皮。
|
|
|
|
|
|
- 不自动裁剪、转比例或替用户决定主图/详情图。
|
|
|
|
|
|
- 不实现撤销历史;失败只恢复当前持久化顺序。
|
|
|
|
|
|
|
|
|
|
|
|
## 执行记录
|
|
|
|
|
|
|
2026-07-11 14:20:56 +08:00
|
|
|
|
- 2026-07-11:完成 AI工场主图/详情图终选盘。
|
|
|
|
|
|
- `ImageStudioTab` 底部终选占位升级为主图/详情图两个可拖放列表;照片池可用图片提供 asset_id 拖拽,终选列表支持外部拖入、落点插入顺延、列表内重排、Delete/右键移出。
|
|
|
|
|
|
- 写库统一走 `image_studio.replace_selections()`;同类别重复拖入、满额、文件未下载/缺失会中文提示并拒绝;主图/详情图跨类别复用允许。
|
|
|
|
|
|
- 主图非 1:1 比例显示黄色轻提示和 tooltip,不阻止加入;运行中禁用终选列表,避免生成/下载时状态并发修改。
|
|
|
|
|
|
- 更新 `docs/routes.md` 的 ⑥ AI工场底部终选说明,明确 T-593 才做导出。
|
|
|
|
|
|
- 验证:当前主工作区仍有无关默认提示词脏文件会影响全量 unittest;已在干净 worktree 仅套用 T-592 diff 后运行 `python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`(363 tests)和 `git diff --check`,全部通过。主工作区也运行了 T-592 相关 targeted unittest,已通过。
|