feat(export): 批量导出后生成 AI 穿搭 Excel,每印花子目录一行 (§17.23)

添加印花批量导出完成后,自动在输出目录生成与时间戳目录同名的 xlsx
文件(docs/02 §6.12);每个有效印花子目录一行,C 列指向该子目录路径,
AI 穿搭页直接选取即可触发目录扇出逻辑(§19.12),无需手工填写 Excel。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 09:33:28 +08:00
co-authored by Claude Sonnet 4.6
parent e83dd07dc0
commit a3f4c39821
5 changed files with 144 additions and 3 deletions
+28
View File
@@ -1006,6 +1006,34 @@
- [x] 导出面板默认值随之变化(沿用 `get_output_dir()`,无需单独改)
- [ ] GUI 实测:打包运行后默认导出到 `<安装根>\合并后的图片`,且更新后仍在
### 17.23 批量导出后生成 AI 穿搭 Excel — docs/02 §6.12 / §9
前置阅读:
- `docs/02-prd.md`(§6.9 批量合成导出、§6.12 AI 穿搭 Excel、§9 目录结构)
- `docs/11-ai-outfit.md`(§4 列定义、§4.1 目录行、§9.1 目录行输出)
- `src/app/widgets/queue_panel.py`(`_start_batch`、`_new_run_dir`、`_export_item`)
- `src/services/excel_service.py`(`write_outfit_result`,了解现有 openpyxl 写法)
背景:
添加印花批量导出后,输出到 `<合并后的图片>/<时间戳>/<印花名>/`。AI 穿搭的「C 列支持目录」(§19.12)可直接消费这些子目录,只缺一个指向它们的 Excel 文件。批量结束后自动生成 `<合并后的图片>/<时间戳>.xlsx`(六列格式,每印花子目录一行),用户切到「AI 穿搭」页、选该 Excel,即可直接对合成图批量生成穿搭效果图。
任务:
- [ ] `src/services/excel_service.py`:新增 `write_outfit_source_excel(excel_path, rows)`
- `rows` 为有序列表,每项为 `(print_name: str, subdir_path: str)`
- 写表头 `["标题","货号","衣服图路径","生成结果图片路径","完成状态","失败原因"]`,数据从第 2 行起
- A=`print_name`,B=空,C=`subdir_path`(末尾含 `/`),D/E/F=空
- 用 openpyxl 创建新工作簿并保存;不抛出、不改动 AI 穿搭现有函数
- [ ] `src/app/widgets/queue_panel.py`:`_start_batch` 完成后
- 扫描 `run_dir` 的直接子目录,过滤出**包含至少一个图片文件**的(即有成功合成图),按目录名排序
- 若有效子目录 > 0,调用 `write_outfit_source_excel` 生成 `<run_dir>.xlsx`(`Path(run_dir).with_suffix(".xlsx")`)
- 写入失败只记日志,不影响批量完成的交互反馈
- [ ] `tests/test_excel_service.py`:
- `write_outfit_source_excel` 生成的文件表头正确、行数 = 传入 rows 数、A/B/C 列值正确(A=print_name,B=空,C=subdir 末尾有 `/`)、D/E/F 为空
- [ ] 验收:批量导出完成后 `<合并后的图片>/` 下出现 `<时间戳>.xlsx`;打开 AI 穿搭、选该文件,预览下拉显示各印花名行(货号列显示「无货号」);「开始生成」触发目录扇出,正常输出穿搭图
## 18. 后续暂缓任务
以下任务第一阶段暂不做,后续需要时再新增设计文档: