diff --git a/docs/superpowers/plans/2026-10-14-config-center-ux-visual.md b/docs/superpowers/plans/2026-10-14-config-center-ux-visual.md index 19a88e9..9b5ebdf 100644 --- a/docs/superpowers/plans/2026-10-14-config-center-ux-visual.md +++ b/docs/superpowers/plans/2026-10-14-config-center-ux-visual.md @@ -11,7 +11,9 @@ **执行环境注意(Windows):** - 所有命令在仓库根 `D:\refactor\all-kefu` 下执行;前端命令先 `cd admin` - 单测:`cd admin && pnpm exec vitest run src/views/config/center/__tests__/model.test.ts`(全量:`pnpm test`) -- 构建:`cd admin && pnpm build`(vue-tsc --noEmit && vite build);build 后若 `components.d.ts`/`auto-imports.d.ts` 出现行尾漂移:`git diff --ignore-cr-at-eol` 为空则 `git checkout -- admin/src/types/import/components.d.ts admin/types/auto-imports.d.ts` 还原(入库版优先纪律) +- 构建:`cd admin && pnpm build`(vue-tsc --noEmit && vite build);build 后若 `components.d.ts`/`auto-imports.d.ts` 出现行尾漂移:`git diff --ignore-cr-at-eol` 为空则 `git checkout -- admin/src/types/import/components.d.ts admin/src/types/import/auto-imports.d.ts` 还原(入库版优先纪律) +- **新组件须显式 import**:view 内新组件(ConfigCard/SecretField/KeyValueEditor/ContactFormPane/EngineFormPane/MiscFormPane/wall/ScenarioCard/wall/WallAdvanced)不被 unplugin-vue-components 自动注册(它只扫 src/components)——消费方 SFC 必须 `import ConfigCard from './ConfigCard.vue'` 等(与 index.vue 显式 import 既有 panes 同款);漏 import 构建不报错但渲染空白,dev 走查必看 +- **ElMessageBox 非 auto-import**(auto-imports 只有 ElMessage):用到 `ElMessageBox.confirm` 的文件顶部 `import { ElMessageBox } from 'element-plus'`(reset.ts 同款) - 本地验收环境:Docker 容器 all-kefu-app-1(8018,`/admin/`)跑的是**构建产物**——前端改动本地验收用 dev server:`cd admin && pnpm dev`(默认 3006,代理已配好);超管 admin / 密码 12345678(本机测试值);登录滑块为纯前端校验可直接拖 - 每个任务收尾 `git status --short` 应只剩本任务相关文件;截图等临时产物放 `.superpowers/`(已 gitignore),收尾删净 @@ -409,7 +411,7 @@ export function secretFieldState( ] ``` -`activeGroupLabel` 改为 `ALL_NAV_ITEMS.find((i) => i.key === activeGroup.value)?.label ?? ''`;删除 `IMPLEMENTED_GROUPS`。 +`activeGroupLabel` 改为 `ALL_NAV_ITEMS.find((i) => i.key === activeGroup.value)?.label ?? ''`;删除 `IMPLEMENTED_GROUPS`。**GroupKey 类型重定义**(原 `typeof GROUP_NAV` 已删):`type GroupKey = (typeof ALL_NAV_ITEMS)[number]['key']`——须放在 ALL_NAV_ITEMS 之后;`activeGroup`/`onGroupSelect` 等既有引用不变。 - [ ] **Step 2: 重写导航模板**——`` 内的 ElMenu 区改为: @@ -450,7 +452,7 @@ export function secretFieldState( **Files:** - Modify: `admin/src/views/config/center/CredsPane.vue`(三卡模板重排,脚本层函数全部保留) -- [ ] **Step 1: 邮件卡改造**——`` 换 ``;表单区改双列 grid(`
` 包 ElFormItem:服务器/端口同排、账号/发件人同排、密码独占、通知邮箱独占——样式 `.form-grid { display:grid; grid-template-columns:1fr 1fr; gap:0 16px; .span-2 { grid-column:span 2 } }`);SMTP 密码整块换 ``(原 secret-row/清除按钮/field-warn 模板删除);底部操作条: +- [ ] **Step 1: 邮件卡改造**——`` 换 ``;表单区改双列 grid(`
` 包 ElFormItem:服务器/端口同排、账号/发件人同排、密码独占、通知邮箱独占——样式 `.form-grid { display:grid; grid-template-columns:1fr 1fr; gap:0 16px; .span-2 { grid-column:span 2 } }`);SMTP 密码整块换 ``(**masked 传原始掩码值**——SecretField 内部 v-if 按 masked===哨兵 渲染清除按钮,传 `cleared ? '' : masked` 会让按钮在清除态消失、恢复保持不可达;徽章优先级 secretFieldState 已处理 cleared>masked)。原 secret-row/清除按钮/field-warn 模板删除。**提交路径不动**:onSaveEmail 里 buildEmailCredsPayload(form, emailPasswordCleared ? '' : emailPasswordMasked) 维持现状(脚本层三元,与模板 prop 无关);底部操作条: ```html