3.5 KiB
3.5 KiB
id, title, phase, deps, status, created
| id | title | phase | deps | status | created | ||
|---|---|---|---|---|---|---|---|
| T-550 | ①②③ 批次下拉默认选中最新批次 | 7 |
|
DONE | 2026-07-08 |
问题 / 背景
①导入采集、②AI生成、③更新蝦皮 三个 Tab 的「批次」下拉,当前在没有已记住选择时默认选「全部批次」(index 0)。
- 批次按
created_at DESC排序,下拉里「全部批次」之后第一个就是最新批次。 - ①导入后会把
current_batch_id设成刚导入的新批次(app/gui/tabs/collect.py),所以①导完已聚焦新批次;但②③默认仍是「全部批次」。 - 运营真实工作流是"导一批 → ①采集 → ②生成 → ③更新"处理同一批,默认「全部批次」导致每次切 Tab 都要手动再选一次;且③「开始更新」作用于当前筛选结果,默认「全部批次」时一不小心会更新所有历史批次,范围偏大。
方案
①②③ 批次下拉在无有效已记住选择时,默认选最新批次(下拉 index 1),而不是「全部批次」(index 0)。
- 改点:三个 Tab 的
_populate_batch_filter(app/gui/tabs/collect.py/generate.py/apply.py)里setCurrentIndex(index if index >= 0 else 0)的兜底分支。 - 规则(不破坏现有好行为):
- 保留"记住上次选择":
previous有效(findData(previous) >= 0)→ 沿用。 - 保留①导入自动选新批次:
current_batch_id逻辑不动。 - 只改兜底:没有有效
previous、且存在批次 → 选最新批次(「全部批次」之后的第一项);没有批次 → 「全部批次」/空,照旧。
- 保留"记住上次选择":
- 三个 Tab 统一同一规则。
验收要点
- ②③ 首次打开(无记住选择)且有批次时,批次下拉默认选中最新批次,不是「全部批次」。
- 用户手动选过某批次后,切走再回来仍是该批次(记住优先,不被兜底覆盖)。
- 没有任何批次时,回退「全部批次」/空,不报错。
- ①导入后仍自动聚焦刚导入的新批次。
- ③ 的安全收益:默认作用域收窄到最新批次(确认弹窗仍显示范围,无回归)。
tests/test_gui.py覆盖:有批次时默认 index=最新、无批次回退、已记住选择优先、①导入自动选新批次不受影响。
边界(不改什么)
只改三个 Tab 的批次下拉默认选中逻辑 + GUI 单测;不改批次排序、list_batches、软删除过滤、筛选联动、采集/生成/更新执行流程、DB、Excel、CDP/Shopee。「全部批次」仍是可手动选择的选项。
执行记录
- 2026-07-08:完成 T-550。
- 代码:
app/gui/widgets.py新增批次下拉默认索引 helper;①CollectTab、②GenerateTab、③ApplyTab的_populate_batch_filter改为“有效已选批次优先;用户手动选过全部批次则保留;无有效已记住选择且存在批次时默认选 index 1 最新批次;无批次回退 index 0”。 - 测试:
tests/test_gui.py新增 ①②③ 批次下拉默认最新批次、无批次回退、已记住批次优先、手动全部批次保留的覆盖;导入测试补充断言 ① 导入后仍自动选中新批次;原②③列表筛选测试显式手动选择「全部批次」,保持原测试目标。 - 验证:
py -3.10 -m unittest discover -s tests -p "test_gui.py"通过(103 tests);python -m ruff check app tests main.py通过;py -3.10 -m compileall app main.py通过;git diff --check通过;py -3.10 -m unittest discover -s tests通过(253 tests)。