fix(ai-outfit): 标题生成对「标题(A)空」的印花表不再误报无行 (§19.27)
catch-22:「生成标题」用 read_all_rows 取行,而它要求 标题(A)+原始图片路径(C) 都非空;但标题生成的目的就是填 A。印花导出表若 A 空(被清空/早期导出), 所有行被跳过 → 误报「该表没有可处理的行」。实测 output/20260623_094529.xlsx: A 全空、C 是印花子目录。 - excel_service.read_all_rows 增 require_title=True 开关:False 时只在 原始图片路径(C) 空时跳过、允许 标题(A) 空;默认 True 行为不变(预览/ 无待处理统计/图片生成 load_outfit_tasks 仍要求 A) - ai_outfit_panel._TitleWorker.run 改调 read_all_rows(..., require_title=False) 测试:A 空+C 有的行 require_title=False 收录、默认跳过;C 空两种都跳过。 全套 py37 通过(test_config_service 的 packaging 模板失败属并行 §19.13,无关)。 离屏冒烟:真表 20260623_094529.xlsx 默认 0 行→require_title=False 加载 6 行; worker 把 6 条标题按序回填 A、C(印花目录)不动。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1474,4 +1474,24 @@
|
||||
|
||||
- [x] `ai_outfit_panel.py` `_configure_detail_table_columns`:把「衣服图」(col 3) 初值 150→约 90、「结果 / 原因」(col 5) 初值 220→约 130(仍 `Interactive` 可手拖);「行/货号/状态」固定窄列与「标题」Stretch 不变 → 标题自动更宽
|
||||
- [x] `test_ai_outfit_panel.py`:在既有列宽用例补断言——`columnWidth(3) <= 90`、`columnWidth(5) <= 130`(标题仍 Stretch、短列仍 Fixed 不变)
|
||||
- [x] 验证:`test_ai_outfit_panel.py` + 全套 py37 通过(`test_config_service` 的 packaging 模板失败属并行 §19.13,无关);离屏断言新列宽
|
||||
- [x] 验证:`test_ai_outfit_panel.py` + 全套 py37 通过(`test_config_service` 的 packaging 模板失败属并行 §19.13,无关);离屏断言新列宽
|
||||
|
||||
### 19.27 修复:标题生成对「标题(A) 空」的印花表误报无行 — docs/11 §17.1
|
||||
|
||||
前置阅读:
|
||||
|
||||
- `docs/11-ai-outfit.md`(§17.1 行来源)
|
||||
- `src/services/excel_service.py`(`read_all_rows` 有效性判定 `_is_empty(title) or _is_empty(garment_path)`)
|
||||
- `src/app/widgets/ai_outfit_panel.py`(`_TitleWorker.run` 调 `read_all_rows`、`_on_title_finished` 的「该表没有可处理的行」)
|
||||
- `tests/test_excel_service.py`(`read_all_rows` 用例)
|
||||
|
||||
背景(catch-22):
|
||||
|
||||
「生成标题」用 `read_all_rows` 取行,而它要求 标题(A)+原始图片路径(C) 都非空;但标题生成的目的就是**填 A**。印花导出表若 A 为空(被清空/早期导出),6 行全被跳过 → 误报「该表没有可处理的行」。实测 `output/20260623_094529.xlsx`:A 全空、C 是印花子目录。修复:标题生成的行来源只要求 C 非空、A 可空。
|
||||
|
||||
任务:
|
||||
|
||||
- [x] `excel_service.py`:`read_all_rows(excel_path, require_title=True)` 加开关——`require_title=False` 时只在 `_is_empty(garment_path)` 跳过(允许 A 空);默认 `True` 行为不变。更新 docstring
|
||||
- [x] `ai_outfit_panel.py`:`_TitleWorker.run` 改调 `read_all_rows(self._excel_path, require_title=False)`;`_reload_after_titles` 仍可用默认(重载后 A 已填);图片生成/预览/`_show_no_pending_message` 不动(仍要求 A)
|
||||
- [x] `tests/test_excel_service.py`:补用例——A 空、C 非空的行:`require_title=False` 收录、默认(True)跳过;既有用例保持绿
|
||||
- [x] 验证:相关单测 + 全套 py37 通过;离屏冒烟:A 全空、C=印花目录的表,标题生成能加载 N 行(不再「无可处理行」),mock 文本模型 → 按序回填 A
|
||||
Reference in New Issue
Block a user