Просмотр исходного кода

docs(需求): 成就成长睡眠打卡需求变更 + SC-P-94~96/SC-C-26/SC-A-27 场景入表

- 新增 docs/需求分析/2026-11-06-成就成长打卡需求变更.md(4 条需求变更锁定)
- 应用场景总览:新增 SC-P-94/95/96(家长成就与成长历史)、SC-C-26(睡眠打卡配置驱动)、SC-A-27(睡眠选项维护),场景总数 236→241
- 入池锚点:task.history.view / growth.history.view / sleep.config.tags / achievement.grid.five-col
Agnes Agent 6 дней назад
Родитель
Сommit
2cc7e3aadb

+ 88 - 0
docs/需求分析/2026-11-06-成就成长打卡需求变更.md

@@ -0,0 +1,88 @@
+# 成效·成长·睡眠打卡 — 需求变更说明(2026-11-06)
+
+> **版本:** v1.0(主理人裁定,TDD 编排器入池依据)
+> **来源:** 用户 2026-11-06 需求(4 条)
+> **关联台账:** `docs/tdd/SRS.md`(能力键 TDD 池源)· `tests/user-scenarios/应用场景总览.md`(SC 场景锚点)
+> **状态:** 已完成现状核查 → 需求变更锁定 → 待入池/派发
+> **入池纪律:** 按 O-2 方案 A,能力键一律合法 `unit.domain.action`;SC 编号/场景文件入 `--requirement`,已合入契约入 `--design`。
+
+---
+
+## 一、需求清单(原话)
+
+1. 我的成就中的「完成任务」,点击应该进入**历史完成任务页面**。
+2. **成长记录**应该进入**成长历史记录页面**,里面有所有通过「今日成长」的打卡记录。
+3. 睡眠打卡**睡眠情况**应该有「正常」一项选项;而且这个睡眠情况应该是**可通过后台维护**的。
+4. 我的成就**固定成五列显示**。
+
+---
+
+## 二、现状核查(只读,2026-11-06)
+
+| # | 需求 | 现状定位 | 关键事实 |
+|---|------|---------|---------|
+| 1 | 完成任务→历史页面 | `cfc-frontend/pages/profile-main/profile.vue` 行 159-165「完成任务」卡 → `goToTasks()`(行 816-818)跳 `/pages/tasks/tasks`(任务列表,含待接受/今日任务/我创建) | **无「历史完成任务」独立页面**;后端 `/api/tasks/history` 已存在(`TaskController.getTaskHistory`,分页+category),前端 `getTaskHistory` 已封装(`utils/api.js:755`)→ 纯前端缺口 |
+| 2 | 成长记录→成长历史记录页 | `profile.vue` 行 173-179「成长记录」卡 → `goToGrowth()`(行 825-827)跳 `/pages/growth-main/index`(成长首页,含「今日成长」打卡网格) | **无「成长历史记录」聚合页**;打卡记录数据源已存在:`HealthCheckinController /api/health/checkin/list`(含饮食/运动/睡眠类型)、`GrowthController /api/growth/record/list`(档案记录)→ 前端缺口为主,需确认聚合口径 |
+| 3 | 睡眠情况「正常」+后台可维护 | `cfc-frontend/pages/growth/sleep-checkin.vue` 行 188 `quickTags` **硬编码 8 项**:入睡困难/夜醒/多梦/打鼾/早醒/赖床/熬夜/午睡过长,**无「正常」**;行 100-101/369-373 选择后 `join(',')` 入 `buildRemark()`(行 409-413)→ 存睡眠记录 `remark` 字段 | 后端 `HealthSleepController` 仅 `/list`+`/create`,**无配置接口**;平台已有配置机制可复用:`sys_config` 表 + `SysConfigController/PublicConfigController /api/config/public/value` + 后台 `AdminGuideConfigController`(get/save 模式)→ 前后端均需变更 |
+| 4 | 我的成就固定五列 | `profile.vue` 行 151-187「我的成就」区块 **5 项卡**(连续打卡/完成任务/收集勋章/成长记录/参加挑战),但 `.ach-item { width: 25% }`(4 列,行 1259-1269)→ 第 5 项换行 | **纯样式缺口**:需「我的成就」区块独占 5 列(width:20%);注意 `.achievement-grid` 同时被「我的团队」/「卡券中心」复用(各 2 项)→ 只能给「我的成就」加独立网格类,不能全局改 |
+
+## 三、需求变更定义(目标态)
+
+### 变更 A · 完成任务 → 历史完成任务页面(需求 1)
+- **入口**:`profile.vue`「我的成就」→「完成任务」卡片点击后,进入**历史完成任务页面**(不再停留任务列表)。
+- **页面**:新增 `cfc-frontend/pages/tasks/history.vue`(或 `/pages/achievement/task-history`,命名随实现定,需在 `pages.json` 注册并设置标题「历史完成任务」)。
+- **数据**:复用已封装的 `getTaskHistory({ memberId, page, size, category })`(`POST /api/tasks/history`,返回分页 `Page<Task>`),展示**已完成**任务(`status === 'completed'`)列表,支持分页/空态。
+- **跳转改造**:`goToTasks()` 由跳 `/pages/tasks/tasks` 改为跳历史页(或新增 `goToTaskHistory()` 由「完成任务」卡单独调用;任务列表入口保持不动,避免破坏现有任务管理功能)。
+- **验收口径**:点「完成任务」→ 进入历史页 → 展示该成员已完成任务分页列表 → 空态「暂无已完成任务」→ 返回正常。
+
+### 变更 B · 成长记录 → 成长历史记录页面(需求 2)
+- **入口**:`profile.vue`「我的成就」→「成长记录」卡片点击后,进入**成长历史记录页面**(不再只跳成长首页)。
+- **页面**:新增成长历史记录页(建议 `pages/growth/history.vue` 或 `pages/growth-main/history`,标题「成长历史记录」)。
+- **内容**:聚合**通过「今日成长」全部打卡记录**——饮食/运动/睡眠/心情等 `HealthCheckinController /api/health/checkin/list` 返回的记录流(按日期倒序、分类型分组或筛选),并提供按类型/时间筛选;成长档案记录(`/api/growth/record/list`)是否并入及合并口径由实现方在设计中明确并回链本文档。
+- **验收口径**:点「成长记录」→ 进入成长历史页 → 看到所有打卡记录(可筛选/分页)→ 单条可查看明细或回链打卡详情 → 空态合理。
+
+### 变更 C · 睡眠情况「正常」选项 + 后台可维护(需求 3)
+- **选项模型**:睡眠情况选项从「前端硬编码数组」改为**后台配置驱动**;默认配置包含 9 项:现 8 项 + **「正常」**。
+- **后端**(新增):
+  - 配置存储:复用 `sys_config`(configKey 建议 `sleep.quality.tags`,value 为 JSON 数组字符串 `["入睡困难","夜醒","多梦","打鼾","早醒","赖床","熬夜","午睡过长","正常"]`);或独立 `sleep_quality_tag` 配置表(由实现方定,回链本文档)。
+  - 读取接口:`/api/health/sleep/tags`(或复用 `/api/config/public/value` 传 `sleep.quality.tags`)→ 供小程序端拉取。
+  - 维护接口(后台):参考 `AdminGuideConfigController`(`/api/admin/guide-config` get/save)新建 `AdminSleepConfigController`(`/api/admin/sleep/tags` get/save + 权限校验 + cfc-web 管理页维护入口)。
+- **前端**(`sleep-checkin.vue`):
+  - `quickTags` 由 `data` 硬编码改为 **onLoad 拉取配置**(失败/未配置时回退上述默认 9 项,含「正常」)。
+  - 标签选择/拼接逻辑(行 369-373、409-413)不动;「正常」被选中时按现状并入 remark(如 `正常,入睡困难`)。
+- **验收口径**:小程序睡眠打卡页睡眠情况区含「正常」;后台修改选项列表(增/删/改/序)后小程序端生效;配置缺失时回退默认 9 项不报错。
+
+### 变更 D · 我的成就固定五列(需求 4)
+- **样式**:`profile.vue`「我的成就」区块网格改为**每行固定 5 列**(`width: 20%`,或其他等分写法)。
+- **隔离**:不得改动 `.achievement-grid` 全局样式(影响「我的团队」/「卡券中心」);为该区块引入独立类(如 `.achievement-grid.cols-5 .ach-item { width: 20% }` 或独立区块类)。
+- **验收口径**:5 张成就卡(连续打卡/完成任务/收集勋章/成长记录/参加挑战)单行等比排布;窄屏不换行错位;其余区块布局不变。
+
+## 四、SC 场景映射(更新 `tests/user-scenarios/应用场景总览.md`)
+
+| SC 编号 | 场景 | 对应变更 | 角色视角 |
+|---------|------|---------|---------|
+| SC-P-94 | 我的成就「完成任务」→ 历史完成任务页面 | 变更 A | 家长 |
+| SC-P-95 | 我的成就「成长记录」→ 成长历史记录页(含今日成长打卡记录) | 变更 B | 家长 |
+| SC-C-26 | 睡眠打卡:睡眠情况含「正常」选项且由后台配置驱动 | 变更 C | 孩子(打卡) |
+| SC-A-27 | 后台维护睡眠情况选项(增删改查)并同步小程序端 | 变更 C | 运营 |
+| SC-P-96 | 我的成就固定五列显示 | 变更 D | 家长 |
+
+> 场景总数 236 → 241(家长 93→96、孩子 25→26、运营 24→25)。派生用例 TC 按 `test-cases/*.md` 惯例后续补充。
+
+## 五、TDD 入池(--add-task,O-2 方案 A)
+
+| 能力键 | 变更 | requirement 溯源 | design 溯源 |
+|--------|------|-----------------|------------|
+| `task.history.view` | A | `应用场景总览.md` SC-P-94 + 本文档变更 A | `TaskController.getTaskHistory`(`/api/tasks/history`,已合入 origin/cfclub)+ `api.js getTaskHistory` |
+| `growth.history.view` | B | `应用场景总览.md` SC-P-95 + 本文档变更 B | `HealthCheckinController /api/health/checkin/list`(已合入)+ `growth-main/index.vue`「今日成长」网格 |
+| `sleep.config.tags` | C | `应用场景总览.md` SC-C-26 + SC-A-27 + 本文档变更 C | `HealthSleepController`(`/api/health/sleep/list|create`,已合入)+ `sys_config` 机制 + `AdminGuideConfigController` 模式 |
+| `achievement.grid.five-col` | D | `应用场景总览.md` SC-P-96 + 本文档变更 D | `profile.vue`「我的成就」区块(行 151-187、行 1259-1269 `.ach-item{width:25%}`) |
+
+> 标注:实现仅在派发分支,不得假定包路径;RED 契约测试以「已合入 origin/cfclub 的接口契约为准」。
+
+## 六、风险与注意事项(主理人核实)
+
+1. **`feature/profile-achievement-restructure` 分支脏**(含 `_surefire_*` 测试脚手架、INTERFACE_* 报告等大堆杂物,未合入):本需求变更 A/B/D 均涉 `profile.vue` / `achievement` 区域,**派发会话严禁基于该脏分支**;一律基于 `origin/cfclub` 新开分支。
+2. **变更 B 聚合口径未定**:打卡记录(checkin)与档案记录(growth record)是否同页合并展示,需实现方设计中明确并回链,避免契约测试与前端口径二义。
+3. **变更 C 默认值**:「正常」加入默认选项后,若运营删掉「正常」,历史 remark 数据不受影响(tag 已落字符串),无迁移需求。
+4. **变更 D 只改「我的成就」区块**:不得触碰「我的团队」「卡券中心」布局。

+ 17 - 8
tests/user-scenarios/应用场景总览.md

@@ -13,15 +13,15 @@
 | 角色 | 角色标签 | 业务域 | 场景数 |
 |------|----------|--------|--------|
 | 游客 | `guest` | 进入 / 登录注册 / 浏览转化 / 权限边界 / 环境 / 协议 / H5 兜底 | 12 |
-| 家长 | `parent` | 家庭成员 / 任务激励 / 五维能量健康 / **五维指标变化** / 报告闭环 / 饮食食谱 / 测评规划价值链 / 商城会员 / 联系人 / 设置 / 报告代传 / 精准营养 / 账号数据主权 / 营销活动 / 交易延伸 / 多端 | 93 |
-| 孩子(不能登录用户视角) | `child` | 孩子端登录 / 任务游戏 / 心愿 / 只读报告 / 方案打卡 / 勋章 / 成长 / 消息 / 档案导出 / 舌诊自拍 / 商城兑换 / 反馈 / **五维变化(自身)** | 25 |
+| 家长 | `parent` | 家庭成员 / 任务激励 / 五维能量健康 / **五维指标变化** / 报告闭环 / 饮食食谱 / 测评规划价值链 / 商城会员 / 联系人 / 设置 / 报告代传 / 精准营养 / 账号数据主权 / 营销活动 / 交易延伸 / 多端 / **成就与成长历史** | 96 |
+| 孩子(不能登录用户视角) | `child` | 孩子端登录 / 任务游戏 / 心愿 / 只读报告 / 方案打卡 / 勋章 / 成长 / 消息 / 档案导出 / 舌诊自拍 / 商城兑换 / 反馈 / **五维变化(自身)** / **睡眠打卡** | 26 |
 | 成长规划师 | `teacher` | 登录切换 / 绑定家庭 / 代传报告 / 方案审核激活 / 测评录入 / 成长计划套餐 / DAN / 解绑重分配 / 舌诊 / 精准营养 / 家庭天盘 / 内容安全 / 导出 / **五维变化(录入/手动/自评)** | 32 |
-| 平台运营 | `admin` | 登录统计 / 报告解析中台 / 文章审核 / 配置CRUD / 知识库 / 迁移校验 / 监控 / 报告自学习 / 优惠券活动 / 内容安全队列 / 注销导出工单 / 限流 / 模型 / 精准营养知识库 / **五维配置治理** | 24 |
+| 平台运营 | `admin` | 登录统计 / 报告解析中台 / 文章审核 / 配置CRUD / 知识库 / 迁移校验 / 监控 / 报告自学习 / 优惠券活动 / 内容安全队列 / 注销导出工单 / 限流 / 模型 / 精准营养知识库 / **五维配置治理** / **睡眠情况选项维护** | 25 |
 | 商品服务商 | `vendor` | 入驻 / 商品 / 订单履约 / 售后 / 解析接入 / 食谱供给 / 合规 | 11 |
 | 跨角色 | `cross` | 测评全链路 / 报告闭环 / 双角色隔离 / 商城履约 / 消息通知 / 代传 / 解绑 / 注销 / 并发 / 会话 / 推送 / **五维隔离·对账·并发** / **CF 值预估规范** | 22 |
 | AI 成长教练(AI管家) | `butler` | 问题解答(咨询/报告解读/追问)/任务跟踪(提醒/推荐采纳/方案同步/家庭看板)/安全韧性 | 10(空号 03、08) |
 | 真人管家 | `human-butler` | 人工介入/一对一陪跑/多方协调/升级应急/线下对接/AI协同闭环/服务质检 | 7 |
-| **合计** | | | **236** |
+| **合计** | | | **241** |
 
 ---
 
@@ -335,9 +335,15 @@
 - **SC-P-92 · 五维权重/来源比例配置变更后重算** — 目标:`configure`/权重变更后概览/沙盘/天盘按新口径重算并提示存量影响。边界:权重和≠100% 报警;配置未同步兜底旧值;非 admin 改全局 403;比例非法 400。模块:`EnergyController`/`维度配置`。
 - **SC-P-93 · 文章互动与活动参与触发五维能量** — 目标:发布/评论/活动参与按规则加对应维度能量、受 `DailyLimit` 约束。边界:刷量风控拦截;触顶不累加;内容下架按规则回收;活动满/结束拒。模块:`ArticleService`/`ActivityService`。
 
+### 业务域 M:成就与成长历史(2026-11-06 需求变更)
+- **SC-P-94 · 我的成就「完成任务」→ 历史完成任务页面** — 目标:点击成就区「完成任务」卡片进入历史完成任务页面,展示该成员全部已完成任务(分页)。边界:无完成记录展示空态「暂无已完成任务」;分页/返回正常;与任务管理入口(/pages/tasks/tasks)互不干扰。模块:`TaskController.getTaskHistory`(`/api/tasks/history`)+ `profile.vue`「完成任务」卡。
+- **SC-P-95 · 我的成就「成长记录」→ 成长历史记录页面** — 目标:点击成就区「成长记录」卡片进入成长历史记录页面,聚合展示「今日成长」全部打卡记录(饮食/运动/睡眠/心情等,按日期倒序、可筛选/分页)。边界:无记录空态合理;单条可查看明细/回链;打卡与档案记录合并口径一致。模块:`HealthCheckinController /api/health/checkin/list` + `GrowthController /api/growth/record/list`。
+- **SC-P-96 · 我的成就固定五列显示** — 目标:成就区 5 张卡(连续打卡/完成任务/收集勋章/成长记录/参加挑战)单行五列等比排布,不换行错位。边界:仅成就区改五列,「我的团队」「卡券中心」布局不变。模块:`profile.vue`「我的成就」区块样式。
+
 ### 业务域(孩子):自身五维变化
 - **SC-C-24 · 小游戏/任务得分触发五维增长(仅自身可见)** — 目标:成绩上报对应维度+并只加自身。边界:异常分数拦截;重复上报幂等;越权看他人 403;孩子端无编辑/扣减入口。模块:`GameRecordService`/`TaskController`。
 - **SC-C-25 · 方案任务打卡触发五维增长** — 目标:`GrowthTaskService` 打卡对应维度+并同步进度/能量。边界:逾期限按业务;重复打卡幂等;非本人方案 403;并发不重复计分。模块:`GrowthTaskService`。
+- **SC-C-26 · 睡眠打卡:睡眠情况含「正常」选项且由后台配置驱动** — 目标:睡眠打卡页「睡眠情况」区含「正常」选项;选项列表由后台配置(`sleep.quality.tags`)驱动,非前端硬编码。边界:配置缺失回退默认 9 项(原 8 项+「正常」)不报错;后台增删改序后小程序端生效;选中后按现状并入 remark。模块:`HealthSleepController` + `sleep-checkin.vue` `quickTags`。
 
 ### 业务域(规划师):五维变化录入
 - **SC-T-30 · 测评录入触发五维维度变化** — 目标:录入八类分→规则引擎刷新五维并生成方案。边界:必填缺失 400;重复录入覆盖非新增;非绑定家庭 403;分值越界 400。模块:`AssessmentAppointmentService`。
@@ -347,6 +353,7 @@
 ### 业务域(运营):五维配置治理
 - **SC-A-25 · 维度/权重/每日上限配置 CRUD 与生效** — 目标:`DimensionConfigController`/`DimensionWeightController` 维度/权重/`DailyLimit` CRUD 安全生效。边界:删除被引用维度需确认;权重/上限非法 400;非 admin 403;并发改版本控制。
 - **SC-A-26 · 能量来源比例与归因权重治理** — 目标:`AttributionWeights`/`configureSourceRatios` 全局生效并审计。边界:非 admin 403;比例非法 400;未同步兜底。
+- **SC-A-27 · 后台维护睡眠情况选项并同步小程序端** — 目标:运营在管理后台维护睡眠打卡「睡眠情况」选项列表(增/删/改/序),保存后小程序睡眠打卡页生效。边界:非 admin 403;空列表/非法值 400;未配置时小程序端回退默认 9 项。模块:`AdminSleepConfigController`(参考 `AdminGuideConfigController` 模式)+ `sleep.quality.tags`。
 ### 业务域(跨角色):五维隔离·对账·并发
 - **SC-X-19 · 五维能量跨角色数据隔离** — 目标:各方仅访问本家庭/绑定家庭成员能量与流水。边界:孩子查家长/规划师/运营 401/403;家长查他人 403;规划师查非绑定 F9 403;运营需工单授权。模块:`JwtInterceptor`+role 检查。
 - **SC-X-20 · 五维能量流水溯源一致性(对账)** — 目标:逐条 `balanceAfter==prev+amount`;`totalEarned-totalSpent==balance`。边界:不一致报警定位;负流水必有对应负记录且余额不为负;并发顺序一致。模块:`EnergyLog`/`EnergyBalance`。
@@ -418,15 +425,15 @@
 | 角色 | 场景数 | 文档化用例(TC) 现状 | 状态 |
 |------|--------|---------------------|------|
 | 游客 | 12 | 12(TC-G-01~12) | ✅ 已覆盖 SC-G-01~12 |
-| 家长 | 93 | 93(TC-P-01~93) | ✅ 已覆盖(含价值链 + 五维变化 SC-P-87~93) |
-| 孩子 | 25 | 25(TC-C-01~25) | ✅ 已覆盖(含五维变化 SC-C-24~25) |
+| 家长 | 96 | 93(TC-P-01~93,94~96 待补) | ⏳ 已覆盖 SC-P-01~93;94~96 待用例 |
+| 孩子 | 26 | 25(TC-C-01~25,26 待补) | ⏳ 已覆盖 SC-C-01~25;26 待用例 |
 | 规划师 | 32 | 32(TC-T-01~32) | ✅ 已覆盖(含五维变化 SC-T-30~32) |
-| 运营 | 24 | 24(TC-A-01~23 + 25~26,空号 24) | ✅ 已覆盖(含五维配置治理 SC-A-25~26) |
+| 运营 | 25 | 24(TC-A-01~23 + 25~26,空号 24,27 待补) | ⏳ 已覆盖 SC-A-01~26;27 待用例 |
 | 服务商 | 11 | 11(TC-S-01~11) | ✅ 已覆盖 SC-S-01~11 |
 | 跨角色 | 22 | 22(TC-X-01~22) | ✅ 已覆盖 SC-X-01~22(含 CF 预估三流 + 能量侧反向隔离用例) |
 | AI 成长教练(AI管家) | 10 | 10(TC-B-01~12,空号 03、08) | ✅ 已覆盖 SC-B-01~12(空号 03、08),三流 30 条 |
 | 真人管家 | 7 | 7(TC-H-01~07) | ✅ 已覆盖 SC-H-01~07,三流 21 条 |
-| **合计** | **236** | **236(正常流)×3 流 = 708** | ✅ 文档化用例已对齐全部 236 个场景(TC 共 767 条) |
+| **合计** | **241** | **236(正常流)×3 流 = 708(已文档化);241 场景含 5 待补** | ✅ 已对齐 236 个场景;SC-P-94~96 / SC-C-26 / SC-A-27 用例待补 |
 
 > 统计口径:文档化用例来自 `../test-cases/*.md` 的 `TC-` 编号去重;自动化来自 `../e2e/**/*.spec.js` 的 `test()` 计数。详见巡检脚本 `run_interface_tests_cron.sh` 的「测试用例完成情况」检查。
 >
@@ -439,3 +446,5 @@
 > **本轮扩展(+12 健康管家角色 · 2026-11-05)**:新增独立角色「健康管家 / butler」,新建 `08-butler.md`,场景 SC-B-01~12(对话咨询/主动提醒/异常预警/报告解读/个性化推荐/健康简报/转接规划师/家庭看板/报告追问/同步规划师建议/敏感拦截/Fallback)。收敛家长端重复的 P-11 与 P-49(P-49 保留为入口引用指向 08-butler.md),场景总数由 218 升至 230。用例 TC-B-01~12 待下轮在 `test-cases/butler.md` 补。
 
 > **本轮修订(2026-11-05 二次 · AI管家聚焦 + 真人管家)**:AI 管家定位由「健康管家」聚焦为「AI 成长教练」,核心职责收敛为「问题解答 + 任务跟踪」,移出弱相关场景 SC-B-03(异常指标预警)、SC-B-08(健康简报),butler 实编降至 10(空号 03、08)。新增独立角色「真人管家 / human-butler」,新建 `09-human-butler.md`,场景 SC-H-01~07(M4/S2/C1)。场景总数 230 → 235。用例 TC-B-/TC-H- 待下轮补。
+
+> **本轮扩展(+5 成就成长睡眠打卡 · 2026-11-06)**:用户 2026-11-06 需求变更(4 条:完成任务→历史页 / 成长记录→成长历史页 / 睡眠情况含「正常」+后台可维护 / 我的成就固定五列),新增 SC-P-94~96(家长·成就与成长历史)、SC-C-26(孩子·睡眠打卡配置驱动)、SC-A-27(运营·睡眠情况选项维护),场景总数 235 → 241。完整需求变更见 `docs/需求分析/2026-11-06-成就成长打卡需求变更.md`;用例 TC-P-94~96 / TC-C-26 / TC-A-27 待下轮在 `test-cases/*.md` 补(含正常/异常/权限三类)。