# 全模块开发实施计划 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 根据已验证的需求文档,按优先级完成所有未实现/部分实现的功能模块开发 **Architecture:** 前端 uni-app Vue 2(微信小程序),后端 Spring Boot + JPA + MySQL。后端 API 优先开发,前端页面随后跟进。新功能继承现有代码风格(无可选链、rpx 单位、JWT 认证)。 **Tech Stack:** 前端 uni-app + Vue 2,后端 Spring Boot + JPA + MySQL,图表 uCharts,富文本编辑器 uParse --- ## 一、现状总览 ### 已完成(本轮会话) - ✅ 品牌改名:汐艾福→浠艾福,汐福俱乐部→浠艾福俱乐部(8文件) - ✅ TabBar重构:首页/发现/商城/我的 → 首页/身体/心智/行动/我的(5 tabs) - ✅ 新建占位页:pages/body/index.vue,pages/mind/index.vue - ✅ 未登录可浏览:入口页 = discover/index(非 login) - ✅ 自定义底部导航:未登录时2-tab(首页+行动) - ✅ 后端编译修复:StreakService(mvn clean compile) ### 需求文档状态 | 文档 | 模块 | 未实现/部分实现项 | |------|------|-------------------| | task-requirements.md | 任务管理 | TASK-016(批量操作)❌ | | focus-requirements.md | 专注训练 | FOCUS-005/006/007 ❌,FOCUS-004/008 ⚠️ | | guide-requirements.md | 成长规划师套餐 | 全部后端+前端 ❌(不含已实现的需求分析文档中的规划师基础功能) | | badge-requirements.md | 勋章系统 | BADGE-001~006 全部 ❌ | | report-requirements.md | 报表统计 | REPORT-001~004 全部 ❌ | | dan-requirements.md | DAN测评 | DAN-001~019 大部分 ❌ | | requirements-analysis.md | 规划师基础功能 | 全部 ✅(已在之前实现) | --- ## 二、优先级分组 ### P0 - 阻塞项(必须先完成) 1. Tab图标资源文件缺失 2. 身体/心智Tab占位页补全内容 ### P1 - 核心功能 3. 专注训练模块剩余功能(记录分析+成果展示+排行) 4. 勋章系统全功能(定义→解锁→展示→排行) 5. 报表统计模块(个人+家庭统计+趋势图表) 6. 成长规划师套餐模块(后端API+前端管理) ### P2 - 高级功能 7. DAN测评模块(大部分P0/P1需求) 8. 任务批量操作(TASK-016) 9. 训练提醒与激励(FOCUS-007) ### P3 - 扩展功能 10. DAN测评集成支付(DAN-016) 11. 数据导出PDF/Excel 12. 同龄对比数据 --- ## 三、实施任务分解 --- ### Task 1: Tab图标资源文件(P0) **阻断了** 已部署的5-tab自定义导航栏显示(目前引用不存在的图标文件) **Files:** - Create: `cfc-frontend/static/tab-body.png` - Create: `cfc-frontend/static/tab-body-active.png` - Create: `cfc-frontend/static/tab-mind.png` - Create: `cfc-frontend/static/tab-mind-active.png` - Create: `cfc-frontend/static/tab-action.png` - Create: `cfc-frontend/static/tab-action-active.png` - Create: `cfc-frontend/static/tab-home.png` - Create: `cfc-frontend/static/tab-home-active.png` - Create: `cfc-frontend/static/tab-profile.png` - Create: `cfc-frontend/static/tab-profile-active.png` - [ ] **Step 1: 确认已有图标** 检查 `cfc-frontend/static/` 下已有 `logo.png`。从设计稿或在线资源生成24x24px PNG图标: - tab-home, tab-home-active:首页/房子图标 - tab-body, tab-body-active:身体/健康图标 - tab-mind, tab-mind-active:心智/大脑图标 - tab-action, tab-action-active:行动/靶心图标 - tab-profile, tab-profile-active:我的/人物图标 生成规则:未选中 = 灰色线描,选中 = 橙色填充(主色 #F97316) - [ ] **Step 2: 生成或创建占位图标** 如果无设计资源,创建纯色简约占位图标(圆形+文字缩写)确保自定义tab-bar不报错。 - [ ] **Step 3: 验证** 检查 `custom-tab-bar/index.vue` 中所有 `icon` 和 `selectedIcon` 路径对应的文件均存在。 --- ### Task 2: 身体Tab内容页(P0) **Files:** - Modify: `cfc-frontend/pages/body/index.vue` 身体/健康Tab页。展示健康相关内容入口(步数、运动、饮食记录等)。 - [ ] **Step 1: 设计身体Tab页面布局** 参考 `pages/index/index.vue` 风格,从上到下: - 顶部轮播/推荐区(健康文章推荐) - 功能入口网格(4-6个):我的运动、饮食记录、睡眠监测、健康知识等 - 底部占位(后续功能) - [ ] **Step 2: 实现页面 UI** ```vue ``` - [ ] **Step 3: 添加脚本+样式** 使用 rpx 单位,主色调 #F97316,遵循现有首页样式风格。底部预留 safe-area。 - [ ] **Step 4: 验证** `lsp_diagnostics` 清洁,页面在真机/模拟器可正常渲染,Tab切换流畅。 --- ### Task 3: 心智Tab内容页(P0) **Files:** - Modify: `cfc-frontend/pages/mind/index.vue` 心智/心理健康Tab页。 - [ ] **Step 1: 设计心智Tab页面布局** - 顶部功能区:心理测评入口、情绪日记 - 文章列表:心理教育/成长文章,分类筛选 - 底部:心理热线/求助入口 - [ ] **Step 2: 实现页面 UI** 风格参考body页面,保持视觉一致性。 - [ ] **Step 3: 验证** `lsp_diagnostics` 清洁。 --- ### Task 4: 专注训练 - 训练记录与数据分析(P1) **需求文档:** focus-requirements.md **FOCUS-004/005/006** - 训练记录存储、数据分析、成果展示 **Files:** - Modify: `cfc-backend/src/main/java/com/etotem/cfc/service/GameService.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/GameRecord.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/repository/GameRecordRepository.java` - Create: `cfc-frontend/pages/games/records.vue` - Create: `cfc-frontend/pages/games/statistics.vue` - [ ] **Step 1: 创建 GameRecord 实体** ```java @Entity @Table(name = "game_record") public class GameRecord { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long childId; private String gameCode; private Integer score; private Integer duration; // 秒 private String level; // easy/medium/hard private Integer rank; private Integer pointsEarned; private Date completedAt; private Date createdAt; private Date updatedAt; } ``` - [ ] **Step 2: 创建 GameRecordRepository** ```java public interface GameRecordRepository extends JpaRepository { List findByChildIdOrderByCompletedAtDesc(Long childId); List findByChildIdAndGameCodeOrderByCompletedAtDesc(Long childId, String gameCode); Optional findTopByChildIdAndGameCodeOrderByScoreDesc(Long childId, String gameCode); Long countByChildId(Long childId); Long countByChildIdAndCompletedAtBetween(Long childId, Date start, Date end); @Query("SELECT AVG(g.score) FROM GameRecord g WHERE g.childId = :childId AND g.gameCode = :gameCode") Double avgScoreByChildIdAndGameCode(@Param("childId") Long childId, @Param("gameCode") String gameCode); } ``` - [ ] **Step 3: 实现训练统计 API** `GameController` 新增: - `POST /api/games/record` - 记录成绩(孩子) - `GET /api/games/records/{childId}` - 记录列表(分页) - `GET /api/games/best/{childId}/{gameCode}` - 最佳成绩 - `GET /api/games/statistics/{childId}` - 训练统计(总次数、平均分、趋势) - [ ] **Step 4: 实现训练记录前端页面 `pages/games/records.vue`** 列表展示历史训练记录,支持按游戏筛选。 - [ ] **Step 5: 实现训练统计前端页面 `pages/games/statistics.vue`** 数据卡片 + uCharts趋势图表,展示总分、平均分、最佳成绩。 - [ ] **Step 6: 后端 API 榜单** `GET /api/games/ranking/{gameCode}` - 游戏排行榜 `GET /api/games/ranking/family/{familyId}` - 家庭排行榜 - [ ] **Step 7: 验证** 后端编译通过,API 返回正确数据,前端图表渲染正常。 --- ### Task 5: 勋章系统(P1) **需求文档:** badge-requirements.md **BADGE-001~006** - 勋章定义、解锁、授予、展示、有效期、排行 **Files:** - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/Badge.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ChildBadge.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/repository/BadgeRepository.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/repository/ChildBadgeRepository.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/service/BadgeService.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/BadgeController.java` - Create: `cfc-frontend/pages/badges/badges.vue` - Create: `cfc-frontend/pages/badges/detail.vue` - Create: `cfc-frontend/pages/badges/library.vue` - [ ] **Step 1: 创建 Badge 实体** 对应 `badge` 表,字段:id, badgeId(唯一标识), name, description, icon, category(学习/运动/家务/阅读/打卡/综合), level(铜牌/银牌/金牌/钻石), rarity(普通/稀有/史诗/传说), triggerType(task_count/streak_days/points_total/reward_count/custom), threshold, needApproval, expireDays, sortOrder, isActive, createdAt, updatedAt。 - [ ] **Step 2: 创建 ChildBadge 实体** 对应 `child_badge` 表,字段:id, childId, badgeId, earnedAt, expireAt, status(1有效/0过期/-1撤销), isFavorite, createdAt, updatedAt。联合唯一索引 (child_id, badge_id)。 - [ ] **Step 3: 创建 BadgeService 实现** 方法: - 创建/更新/删除勋章定义 - 检查并授予勋章(按 triggerType 检查条件) - 定时任务:勋章过期检查 - 获取孩子的勋章列表 - 收藏/取消收藏 - [ ] **Step 4: 实现勋章管理 API** `BadgeController`: - `POST /api/badges` - 创建勋章(管理员) - `GET /api/badges` - 列表(公开) - `GET /api/badges/{id}` - 详情(公开) - `PUT /api/badges/{id}` - 编辑(管理员) - `DELETE /api/badges/{id}` - 删除(管理员) - `POST /api/badges/grant` - 手动授予(家长/管理员) - `POST /api/badges/check` - 检查并授予(系统) - `GET /api/badges/child/{childId}` - 孩子勋章列表 - `PUT /api/badges/{id}/favorite` - 收藏切换 - `GET /api/badges/statistics/child/{childId}` - 统计 - `GET /api/badges/statistics/family/{familyId}` - 家庭统计 - `GET /api/badges/ranking/family/{familyId}` - 家庭排行 - [ ] **Step 5: 实现勋章墙前端页面 `pages/badges/badges.vue`** 展示已获得勋章,按分类/时间排列。未获得显示锁定。 - [ ] **Step 6: 实现勋章详情页 `pages/badges/detail.vue`** 展示勋章名称、描述、获得时间、稀有度、等级。 - [ ] **Step 7: 实现勋章库页面 `pages/badges/library.vue`** 浏览所有勋章定义,区分已获得/未获得。 - [ ] **Step 8: 验证** 后端测试 API 正确,前端勋章墙渲染正常,收藏功能可用。 --- ### Task 6: 报表统计模块(P1) **需求文档:** report-requirements.md **REPORT-001~004** - 个人任务统计、家庭统计、积分明细、成长趋势 **Files:** - Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/ReportController.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/service/ReportService.java` - Create: `cfc-frontend/pages/report/child.vue` - Create: `cfc-frontend/pages/report/family.vue` - Create: `cfc-frontend/pages/report/trend.vue` - [ ] **Step 1: 实现 ReportService 统计逻辑** 方法: - `getChildTaskStats(childId, startDate, endDate, category)` - 个人任务统计:任务总数、完成数、超时数、驳回数、完成率、平均耗时 - `getChildPointsStats(childId, startDate, endDate)` - 个人积分统计:余额、获得、扣除、净变化、各来源占比 - `getFamilyTaskStats(familyId, startDate, endDate)` - 家庭任务统计 - `getFamilyRanking(familyId)` - 家庭排行 - `getChildTrend(childId, granularity)` - 成长趋势数据 - [ ] **Step 2: 实现报表 API** `ReportController`: - `GET /api/reports/child/{childId}/tasks` - 个人任务统计 - `GET /api/reports/child/{childId}/points` - 个人积分统计 - `GET /api/reports/child/{childId}/trend` - 个人成长趋势 - `GET /api/reports/family/{familyId}/tasks` - 家庭任务统计 - `GET /api/reports/family/{familyId}/ranking` - 家庭排行 - [ ] **Step 3: 实现个人统计前端页面 `pages/report/child.vue`** 数字卡片 + 条件筛选 + 列表展示。 - [ ] **Step 4: 实现家庭统计页面 `pages/report/family.vue`** 家庭概览卡片 + 孩子对比表格。 - [ ] **Step 5: 实现成长趋势页面 `pages/report/trend.vue`** uCharts 折线图 + 柱状图,支持日/周/月粒度切换。 - [ ] **Step 6: 验证** 后端数据正确性验证,前端图表渲染正常。 --- ### Task 7: 成长规划师套餐模块(P1) **需求文档:** guide-requirements.md 后端服务类型管理、服务内容管理(富文本)、套餐模板、规划师套餐。 **Files:** - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ServiceType.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ServiceContent.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/GuidePackageTemplate.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/PackageTemplateService.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/GuidePackage.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/GuidePackageService.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/service/GuideService.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/GuideController.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/AdminServiceController.java` - Modify: `cfc-frontend/pages/guide/packages/index.vue` - Modify: `cfc-frontend/pages/guide/packages/create.vue` - [ ] **Step 1: 创建服务类型/服务内容实体** `ServiceType`:id, name, icon, description, sortOrder, status(ACTIVE/DISABLED) `ServiceContent`:id, typeId, title, content(Html), duration, ageRange, price, status(DRAFT/ACTIVE) - [ ] **Step 2: 创建套餐模板/规划师套餐实体** `GuidePackageTemplate`:id, name, validityMonths, referencePrice, minPrice, description, status `PackageTemplateService`:id, templateId, contentId, quantity, unit `GuidePackage`:id, teacherId, templateId, name, price, validityMonths, description, status(DRAFT/PUBLISHED/PAUSED), salesCount `GuidePackageService`:id, packageId, contentId, quantity, unit - [ ] **Step 3: 实现服务管理 API** `AdminServiceController`: - `GET/POST/PUT/DELETE /api/admin/service-types` - `GET/POST/PUT/DELETE /api/admin/service-contents` - [ ] **Step 4: 实现套餐管理 API** `GuideController`: - `GET /api/guide/package-templates` - 模板列表 - `GET /api/guide/package-templates/{id}` - 模板详情(含服务项) - `GET /api/guide/packages` - 我的套餐 - `POST /api/guide/packages` - 创建套餐 - `PUT /api/guide/packages/{id}` - 更新套餐 - `PUT /api/guide/packages/{id}/status` - 更新状态 - `DELETE /api/guide/packages/{id}` - 删除套餐 - [ ] **Step 5: 更新套餐前端页面** `pages/guide/packages/index.vue` - 展示套餐列表,支持状态筛选 `pages/guide/packages/create.vue` - 选择模板、自定义名称价格、发布 - [ ] **Step 6: 验证** 后端编译通过,套餐CRUD流程完整,前端列表/创建/详情页面正常。 --- ### Task 8: DAN测评模块(P1/P2) **需求文档:** dan-requirements.md **DAN-001~015** - 测评包管理、指标库、结果录入、查询、趋势、建议 **Files:** - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/DanPackage.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/DanIndicator.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/DanIndicatorTemplate.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/repository/DanPackageRepository.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/repository/DanIndicatorRepository.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/service/DanService.java` - Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/DanController.java` - Create: `cfc-frontend/pages/dan/result.vue` - Create: `cfc-frontend/pages/dan/history.vue` - [ ] **Step 1: 创建测评包+指标库实体** `DanPackage`:id, packageCode(A1/A2/B1-B6), packageName, ageRangeMin, ageRangeMax, category, indicators(JSON), isActive `DanIndicator`:id, indicatorCode, indicatorName, dimension(COG/EMI/SOC/PHY), description, levelThresholds(JSON), sortOrder, isActive `DanIndicatorTemplate`:id, indicatorCode, templateId, weight, isActive - [ ] **Step 2: 实现测评包/指标库 API** - `GET/POST/PUT/DELETE /api/dan/packages` - `GET/POST/PUT/DELETE /api/dan/indicators` - `GET/POST/PUT/DELETE /api/dan/indicator-templates` - [ ] **Step 3: 实现测评结果 API** 利用已有的 `DanAssessmentResult` 实体: - `POST /api/dan/assessments` - 录入结果 - `GET /api/dan/assessments?childId=` - 结果列表 - `GET /api/dan/assessments/{id}` - 结果详情 - `GET /api/dan/assessments/{id}/trend` - 历史趋势 - [ ] **Step 4: 实现指标等级计算+成长建议生成** `DanService.calculateLevel(score, thresholds)` - 等级计算 `DanService.generateSuggestions(indicatorScores)` - 按指标生成建议文本 - [ ] **Step 5: 实现任务自动推荐** `DanService.recommendTasks(childId, assessmentId)` - 根据低分指标查询关联任务模板 - [ ] **Step 6: 实现测评结果前端页面** `pages/dan/result.vue` - 展示测评结果、指标得分雷达图、等级、成长建议 `pages/dan/history.vue` - 历史测评列表、趋势对比 - [ ] **Step 7: 验证** 完整的测评流程:录入→等级计算→展示→建议→推荐任务 --- ### Task 9: 任务批量操作 TASK-016(P2) **需求文档:** task-requirements.md §TASK-016 **Files:** - Modify: `cfc-backend/src/main/java/com/etotem/cfc/controller/TaskController.java` - Modify: `cfc-backend/src/main/java/com/etotem/cfc/service/TaskService.java` - Modify: `cfc-frontend/pages/tasks/tasks.vue` - [ ] **Step 1: 后端批量操作 API** `TaskController` 新增: - `POST /api/tasks/batch-create` - 批量创建任务 - `PUT /api/tasks/batch-status` - 批量更新状态(完成/暂停/删除) - `PUT /api/tasks/batch-assign` - 批量分配孩子 - [ ] **Step 2: 前端批量操作 UI** 任务列表页增加多选模式 → 底部操作栏(批量完成/批量删除/批量分配) - [ ] **Step 3: 验证** 批量选中的任务状态正确更新,不可恢复的删除操作有确认弹窗。 --- ### Task 10: 训练提醒与激励 FOCUS-007(P2) **需求文档:** focus-requirements.md §2.7 **Files:** - Create: `cfc-backend/src/main/java/com/etotem/cfc/scheduler/TrainingReminderScheduler.java` - Modify: `cfc-frontend/pages/games/index.vue` - [ ] **Step 1: 每日训练提醒定时任务** `TrainingReminderScheduler` - 每日定时检查昨日未训练的孩子,发送订阅消息。 - [ ] **Step 2: 连续训练激励逻辑** 查询 `game_record` 表统计连续天数,达到里程碑(7天/14天/30天)发放额外积分。 - [ ] **Step 3: 前端展示激励信息** 游戏列表页顶部展示连续训练天数、下次激励目标。 --- ## 四、预计工作量 | 任务 | 预估工时 | 依赖 | |------|----------|------| | Task 1: Tab图标 | 0.5h | 无 | | Task 2: 身体Tab | 2h | 无 | | Task 3: 心智Tab | 2h | 无 | | Task 4: 训练记录分析 | 6h | 无 | | Task 5: 勋章系统 | 10h | 无 | | Task 6: 报表统计 | 8h | 任务/积分数据 | | Task 7: 规划师套餐 | 12h | 无 | | Task 8: DAN测评 | 16h | 任务模板 | | Task 9: 批量操作 | 3h | 任务模块 | | Task 10: 训练提醒 | 3h | 训练记录 | **总计预估:约 62.5h** --- ## 五、风险与注意事项 1. **Tab图标** - 如果无设计资源,先用纯色占位图标,收集后可替换 2. **富文本编辑器** - 服务内容管理(guide-requirements.md 2.1.2)依赖 uParse 或 uni-app 富文本组件,小程序环境对 HTML 支持有限 3. **勋章触发引擎** - BADGE-003 的定时任务与事件触发双模式,需要考虑事务一致性和性能 4. **图表组件** - 小程序端 uCharts 兼容性需要验证,备选方案:f2 或 echarts 微信版 5. **DAN测评** - 涉及较多实体关联,建议先完成数据模型定义再开发API 6. **Shop(行动Tab)** - 已有 pages/shop/index.vue,当前未登录用户可浏览(products API 公开),无需额外修改 --- ## 六、验证标准 每个Task完成后需满足: - [ ] `lsp_diagnostics` 清洁(无 error) - [ ] 后端 `mvn clean compile` 成功 - [ ] 核心业务流程端到端可用 - [ ] 已有功能未受影响(回归)