feat(ai-outfit): multiple named prompt templates (§19.8)
- config_service: outfit_prompts.json load/save (utf-8-sig read, no-BOM write, corrupt/empty -> migrate legacy outfit_prompt.txt or seed 默认; always >=1; _normalize_prompts drops invalid). app_config gains outfit_prompt_name. - ai_outfit_panel: 通用话术 group gets a template dropdown + 新建/另存为/重命名/ 删除 (keeps 插入标题/保存). Switching loads the template + refreshes preview; dirty edits prompt Save/Discard/Cancel before switching/new/save-as (cancel reverts the combo); unique names; can't delete the last one; selection persisted via config_changed; 开始生成 stores the editor into the template. - tests: +6 config cases (14 total); offscreen CRUD/dirty/rename/delete verified; full suite (12 files) green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1109,8 +1109,8 @@
|
||||
|
||||
需求:把单一话术升级为多套命名话术(下拉切换 / 新建 / 另存为 / 重命名 / 删除 / 保存,记住上次)。决策:**全部自定义**(不分内置,播种一套「默认」);**切换前脏数据弹窗**提醒是否保存;**含重命名**。
|
||||
|
||||
- [ ] `config_service`:`outfit_prompts.json` 读写 `load_outfit_prompts()` / `save_outfit_prompts(list)`(utf-8-sig 读 / 无 BOM 写 / 损坏回退「默认」;始终 ≥1 套);`app_config` 加 `outfit_prompt_name`(当前选中名);首次迁移旧 `outfit_prompt.txt` → 一套「默认」,否则 `DEFAULT_OUTFIT_PROMPT`
|
||||
- [ ] `ai_outfit_panel.py`:「通用话术」组加 模板下拉 + 新建 / 另存为 / 重命名 / 删除(保留 插入标题 / 保存);切换载入文本 + 刷新预览;记住上次所选并启动恢复(经 `config_changed` 回主窗口集中存)
|
||||
- [ ] 脏数据保护:编辑框与当前套已存文本不同则在切换/重命名/删除/新建/另存为前弹「保存 / 不保存 / 取消」(取消还原下拉);名字唯一;删后选邻近、不可删到 0
|
||||
- [ ] 「开始生成」前把当前编辑存回所选套;生成/预览仍走 `render_prompt`(§7.1 尾巴不变)
|
||||
- [ ] 单测 `tests/test_config_service.py`:prompts 读写、迁移(有/无旧 txt)、损坏回退、≥1 套;离屏验证切换/脏弹窗/重命名/删除
|
||||
- [x] `config_service`:`outfit_prompts.json` 读写 `load_outfit_prompts()` / `save_outfit_prompts(list)`(utf-8-sig 读 / 无 BOM 写 / 损坏回退「默认」;始终 ≥1 套;`_normalize_prompts` 丢弃非法项);`app_config` 加 `outfit_prompt_name`(当前选中名);首次迁移旧 `outfit_prompt.txt` → 一套「默认」,否则 `DEFAULT_OUTFIT_PROMPT`
|
||||
- [x] `ai_outfit_panel.py`:「通用话术」组加 模板下拉 + 新建 / 另存为 / 重命名 / 删除(保留 插入标题 / 保存);切换载入文本 + 刷新预览;记住上次所选并启动恢复(经 `config_changed` 回主窗口集中存 `outfit_prompt_name`)
|
||||
- [x] 脏数据保护:编辑框与当前套已存文本不同则在切换/新建/另存为前弹「保存 / 不保存 / 取消」(取消还原下拉);名字唯一(空/重名拒绝);删后选邻近、不可删到 0(删除单独二次确认)
|
||||
- [x] 「开始生成」前把当前编辑存回所选套(`_store_current_text`);生成/预览仍走 `render_prompt`(§7.1 尾巴不变)
|
||||
- [x] 单测 `tests/test_config_service.py` +6(seed/迁移/损坏回退/roundtrip 无 BOM/丢弃非法/BOM 容错,共 14);离屏验证 新建·另存为·切换·脏保存持久化·重命名·删除·不可删到 0;全套 12 文件绿
|
||||
|
||||
Reference in New Issue
Block a user