From 01634eea9a1eea18a0fac7cc5db577a7a6ea39c7 Mon Sep 17 00:00:00 2001 From: pmc <740076875@qq.com> Date: Thu, 7 May 2026 16:47:48 +0800 Subject: [PATCH] =?UTF-8?q?docs(qy-lty-admin):=20=E5=AE=9A=E4=B9=89=20Mile?= =?UTF-8?q?stone=20v1.0=20=E9=9C=80=E6=B1=82=EF=BC=88CRED-FE-01~05?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通用凭据槽位前端集成 5 项 Active 需求: - CRED-FE-01 API 客户端 lib/api/credential-slot.ts(GET/PUT + adapter + 类型) - CRED-FE-02 RBAC 模块声明(lib/permissions.ts 加 credential-slot key,分配给超级管理员 + AI模型管理员) - CRED-FE-03 /ai-model 页面入口(按钮/卡片,按权限可见) - CRED-FE-04 编辑对话框(RHF + Zod + 留空保留旧值语义,避免回写脱敏假值) - CRED-FE-05 提交反馈(Sonner toast 成功 + error-handler 失败处理) 候选优先级段保留为下一周期参考。 --- qy-lty-admin/.planning/REQUIREMENTS.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/qy-lty-admin/.planning/REQUIREMENTS.md b/qy-lty-admin/.planning/REQUIREMENTS.md index 506fbd4..d3a92f9 100644 --- a/qy-lty-admin/.planning/REQUIREMENTS.md +++ b/qy-lty-admin/.planning/REQUIREMENTS.md @@ -80,19 +80,22 @@ ## Active(当前 milestone 目标) -**(暂无)** +**Milestone v1.0:通用凭据槽位前端集成** +启动日期:2026-05-07 +联动:qy_lty 后端 Milestone v1.0(3 个 phase,API 契约已锁定) +目标:在 `/ai-model` 页面集成 APP ID + Access Token 录入/编辑窗口,调用后端管理接口完成读写。 -本次 `/gsd-new-project` 是 brownfield 文档化,没有指定新 milestone。 +### 通用凭据槽位前端集成(CRED-FE) -下一次启动新功能开发时,请用: +- [ ] **CRED-FE-01** API 客户端 `lib/api/credential-slot.ts`:导出 `getCredentialSlot()`、`updateCredentialSlot({ app_id, access_token })`;含响应适配器 `mapBackendCredentialSlot()`(snake_case → camelCase);共享类型 `CredentialSlot { appId, accessTokenMasked, updatedAt }`;从 `lib/api/index.ts` 导出 +- [ ] **CRED-FE-02** RBAC 模块声明:`lib/permissions.ts` 加入 `credential-slot` 模块 key(`PermissionModule` 类型扩充);`PERMISSION_MATRIX` 把该模块分配给"超级管理员"和"AI模型管理员"两个角色;`getModuleFromPath()` 不需要新映射(凭据槽位是内嵌于 `/ai-model` 的子能力,不占独立路由) +- [ ] **CRED-FE-03** `/ai-model` 页面入口:在合适位置(如页头工具栏 / Header 右侧)渲染"凭据槽位"按钮或卡片;仅当 `hasPermission('credential-slot')` 为 true 时可见;点击触发对话框打开 +- [ ] **CRED-FE-04** 编辑对话框组件 `components/ai-model/CredentialSlotDialog.tsx`:基于 `components/ui/dialog.tsx`;表单 React Hook Form + Zod 校验;预填态显示后端返回的 `app_id` 明文 + `access_token` 末 4 位掩码 + 不可改的 `updated_at`;表单语义为"留空保留旧值,重新输入才覆写"(避免把脱敏掩码当真值回写);提交触发 `updateCredentialSlot()`,仅提交用户实际输入的字段 +- [ ] **CRED-FE-05** 提交反馈:成功调用 `useToast()` 弹 Sonner 成功 toast 并自动关闭对话框、重新触发 GET 刷新预填;失败走 `lib/api/error-handler.ts` 统一映射后端错误并 toast 提示 -``` -/gsd-new-milestone -``` +### 候选优先级(已转移自 brownfield 文档化阶段,本期不消化) -GSD 会引导你确认 milestone 目标、把新需求加到本段(带 REQ-ID),然后 `/gsd-plan-phase` 拆 phase。 - -**候选优先级**(来自 CONCERNS.md 与项目活动信号,按风险/价值排序,仅供参考): +下面是从 CONCERNS.md 转过来的潜在 milestone 候选,本期 v1.0 不处理,留作下一周期参考: 1. **极高** 验证 qy_lty 后端是否对所有 `/api/v1/admin/*` 接口独立校验角色(PERM-06)— 否则当前 RBAC 仅是 UI 礼貌,是真实安全漏洞 2. **高** 移除 `lib/api/client.ts`、`lib/api/upload.ts` 等的 console.log/warn/error 调试残留(暴露 token 前缀) @@ -130,4 +133,4 @@ GSD 会引导你确认 milestone 目标、把新需求加到本段(带 REQ-ID --- -*Last updated: 2026-05-07 after brownfield documentation pass* +*Last updated: 2026-05-07 启动 Milestone v1.0「通用凭据槽位前端集成」*