--- id: T-592 title: AI工场主图/详情图终选拖放、插入排序与比例轻提示 phase: 7 deps: [T-591] status: DONE 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:完成 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,已通过。