|
|
@@ -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 只改「我的成就」区块**:不得触碰「我的团队」「卡券中心」布局。
|