docs: Task10 补 Task8 评审折入项(空白行预警/×键盘可达/正则注记)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-14 19:16:55 +08:00
parent ab0cf9f64e
commit 79374a5c1d
@@ -854,7 +854,7 @@ props `{ model: WallEditModel }`;迁移块内的 section-note 保留但首行
- Modify: `admin/src/views/config/center/WallPane.vue`(大改:主体模板换结构)
- Modify: `admin/src/views/config/center/index.vue`(wall pane 挂载处加 `@navigate`)
- [ ] **Step 1: 主体重排**——外层换 `ConfigCard icon="solar:chat-round-line-duotone" title="AI 话术" subtitle="AI 回复客户时用的标准句与引擎规则——改动保存后立即对线上对话生效" info="保存前自动跑试金石预演;正则与 AI 指令在下方「高级」区"`;主面顺序:`<WallScenarioCard v-for="s in WALL_SCENARIOS" :key="s.key" :def="s" :model="model" />` → no_contact 卡(三键行编辑,NO_CONTACT_KEYS 白话标签:web=网页会话(有按钮)/ app=App 会话(无按钮)/ already=客户已留过)→ cc_templates 卡(四组 × CC_TEMPLATE_VARIANTS 封闭语言直接渲染,标注 `{intl}` 为运行期回填变量、不可删除)→ 试金石面板(现状保留)→ `<WallAdvanced :model="model" />`(默认折叠)。旧模板的池区/正则区/提醒区删除(已迁移)
- [ ] **Step 1: 主体重排**——外层换 `ConfigCard icon="solar:chat-round-line-duotone" title="AI 话术" subtitle="AI 回复客户时用的标准句与引擎规则——改动保存后立即对线上对话生效" info="保存前自动跑试金石预演;正则与 AI 指令在下方「高级」区"`;主面顺序:`<WallScenarioCard v-for="s in WALL_SCENARIOS" :key="s.key" :def="s" :model="model" />` → no_contact 卡(三键行编辑,NO_CONTACT_KEYS 白话标签:web=网页会话(有按钮)/ app=App 会话(无按钮)/ already=客户已留过)→ cc_templates 卡(四组 × CC_TEMPLATE_VARIANTS 封闭语言直接渲染,标注 `{intl}` 为运行期回填变量、不可删除)→ 试金石面板(现状保留)→ `<WallAdvanced :model="model" />`(默认折叠)。旧模板的池区/正则区/提醒区删除(已迁移)。**Task 8 评审折入三件**:① ScenarioCard 的 requiredMissing 收紧为「语言缺失或两池全部行皆空白」——`.some((p) => !(model.pools[p.field][l]?.some((t) => t.trim() !== '')))`(空白行保留但全空也预警,与 cleanPool 序列化语义对齐);② 场景卡 × 删除钮补键盘可达:`role="button" tabindex="0" aria-label="删除此语言" @keydown.enter.prevent="removeLang(lang)" @keydown.space.prevent="removeLang(lang)"`;③ 添加语言正则保持严格 `^[a-z]{2,3}$`(WallPane 旧池编辑器的宽正则随 Task 10 退役;异常存量码可显示可删不可重加——注释注记即可)
- [ ] **Step 2: 保存路径加变量保护**——onSave 组装 payload 后(ElMessageBox 须在 WallPane 顶部 `import { ElMessageBox } from 'element-plus'`——非 auto-import):
```ts