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
| 文档 | 模块 | 未实现/部分实现项 |
|---|---|---|
| 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 | 规划师基础功能 | 全部 ✅(已在之前实现) |
阻断了 已部署的5-tab自定义导航栏显示(目前引用不存在的图标文件)
Files:
cfc-frontend/static/tab-body.pngcfc-frontend/static/tab-body-active.pngcfc-frontend/static/tab-mind.pngcfc-frontend/static/tab-mind-active.pngcfc-frontend/static/tab-action.pngcfc-frontend/static/tab-action-active.pngcfc-frontend/static/tab-home.pngcfc-frontend/static/tab-home-active.pngcfc-frontend/static/tab-profile.pngCreate: cfc-frontend/static/tab-profile-active.png
[ ] Step 1: 确认已有图标
检查 cfc-frontend/static/ 下已有 logo.png。从设计稿或在线资源生成24x24px PNG图标:
生成规则:未选中 = 灰色线描,选中 = 橙色填充(主色 #F97316)
如果无设计资源,创建纯色简约占位图标(圆形+文字缩写)确保自定义tab-bar不报错。
检查 custom-tab-bar/index.vue 中所有 icon 和 selectedIcon 路径对应的文件均存在。
Files:
cfc-frontend/pages/body/index.vue身体/健康Tab页。展示健康相关内容入口(步数、运动、饮食记录等)。
参考 pages/index/index.vue 风格,从上到下:
底部占位(后续功能)
[ ] Step 2: 实现页面 UI
<template>
<view class="body-page">
<!-- 顶部Banner -->
<swiper class="banner" indicator-dots autoplay interval="3000">
<swiper-item v-for="(item, i) in banners" :key="i">
<image class="banner-img" :src="item.image" mode="scaleToFill" />
</swiper-item>
</swiper>
<!-- 功能入口网格 -->
<view class="grid">
<view class="grid-item" v-for="(item, i) in features" :key="i" @click="navigateTo(item.path)">
<image class="grid-icon" :src="item.icon" mode="aspectFit" />
<text class="grid-label">{{ item.label }}</text>
</view>
</view>
<!-- 健康资讯列表 -->
<view class="section">
<text class="section-title">健康知识</text>
<view class="article-card" v-for="(a, i) in articles" :key="i">
<text class="article-title">{{ a.title }}</text>
<text class="article-desc">{{ a.desc }}</text>
</view>
</view>
</view>
</template>
[ ] Step 3: 添加脚本+样式
使用 rpx 单位,主色调 #F97316,遵循现有首页样式风格。底部预留 safe-area。
lsp_diagnostics 清洁,页面在真机/模拟器可正常渲染,Tab切换流畅。
Files:
cfc-frontend/pages/mind/index.vue心智/心理健康Tab页。
[ ] Step 1: 设计心智Tab页面布局
顶部功能区:心理测评入口、情绪日记
文章列表:心理教育/成长文章,分类筛选
底部:心理热线/求助入口
[ ] Step 2: 实现页面 UI
风格参考body页面,保持视觉一致性。
lsp_diagnostics 清洁。
需求文档: focus-requirements.md FOCUS-004/005/006 - 训练记录存储、数据分析、成果展示
Files:
cfc-backend/src/main/java/com/etotem/cfc/service/GameService.javacfc-backend/src/main/java/com/etotem/cfc/entity/GameRecord.javacfc-backend/src/main/java/com/etotem/cfc/repository/GameRecordRepository.javacfc-frontend/pages/games/records.vueCreate: cfc-frontend/pages/games/statistics.vue
[ ] Step 1: 创建 GameRecord 实体
@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
public interface GameRecordRepository extends JpaRepository<GameRecord, Long> {
List<GameRecord> findByChildIdOrderByCompletedAtDesc(Long childId);
List<GameRecord> findByChildIdAndGameCodeOrderByCompletedAtDesc(Long childId, String gameCode);
Optional<GameRecord> 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
列表展示历史训练记录,支持按游戏筛选。
pages/games/statistics.vue数据卡片 + uCharts趋势图表,展示总分、平均分、最佳成绩。
GET /api/games/ranking/{gameCode} - 游戏排行榜
GET /api/games/ranking/family/{familyId} - 家庭排行榜
后端编译通过,API 返回正确数据,前端图表渲染正常。
需求文档: badge-requirements.md BADGE-001~006 - 勋章定义、解锁、授予、展示、有效期、排行
Files:
cfc-backend/src/main/java/com/etotem/cfc/entity/Badge.javacfc-backend/src/main/java/com/etotem/cfc/entity/ChildBadge.javacfc-backend/src/main/java/com/etotem/cfc/repository/BadgeRepository.javacfc-backend/src/main/java/com/etotem/cfc/repository/ChildBadgeRepository.javacfc-backend/src/main/java/com/etotem/cfc/service/BadgeService.javacfc-backend/src/main/java/com/etotem/cfc/controller/BadgeController.javacfc-frontend/pages/badges/badges.vuecfc-frontend/pages/badges/detail.vueCreate: 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。
对应 child_badge 表,字段:id, childId, badgeId, earnedAt, expireAt, status(1有效/0过期/-1撤销), isFavorite, createdAt, updatedAt。联合唯一索引 (child_id, badge_id)。
方法:
收藏/取消收藏
[ ] 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
展示已获得勋章,按分类/时间排列。未获得显示锁定。
pages/badges/detail.vue展示勋章名称、描述、获得时间、稀有度、等级。
pages/badges/library.vue浏览所有勋章定义,区分已获得/未获得。
后端测试 API 正确,前端勋章墙渲染正常,收藏功能可用。
需求文档: report-requirements.md REPORT-001~004 - 个人任务统计、家庭统计、积分明细、成长趋势
Files:
cfc-backend/src/main/java/com/etotem/cfc/controller/ReportController.javacfc-backend/src/main/java/com/etotem/cfc/service/ReportService.javacfc-frontend/pages/report/child.vuecfc-frontend/pages/report/family.vueCreate: 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
数字卡片 + 条件筛选 + 列表展示。
pages/report/family.vue家庭概览卡片 + 孩子对比表格。
pages/report/trend.vueuCharts 折线图 + 柱状图,支持日/周/月粒度切换。
后端数据正确性验证,前端图表渲染正常。
需求文档: guide-requirements.md 后端服务类型管理、服务内容管理(富文本)、套餐模板、规划师套餐。
Files:
cfc-backend/src/main/java/com/etotem/cfc/entity/ServiceType.javacfc-backend/src/main/java/com/etotem/cfc/entity/ServiceContent.javacfc-backend/src/main/java/com/etotem/cfc/entity/GuidePackageTemplate.javacfc-backend/src/main/java/com/etotem/cfc/entity/PackageTemplateService.javacfc-backend/src/main/java/com/etotem/cfc/entity/GuidePackage.javacfc-backend/src/main/java/com/etotem/cfc/entity/GuidePackageService.javacfc-backend/src/main/java/com/etotem/cfc/service/GuideService.javacfc-backend/src/main/java/com/etotem/cfc/controller/GuideController.javacfc-backend/src/main/java/com/etotem/cfc/controller/AdminServiceController.javacfc-frontend/pages/guide/packages/index.vueModify: 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)
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
AdminServiceController:
GET/POST/PUT/DELETE /api/admin/service-typesGET/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 - 选择模板、自定义名称价格、发布
后端编译通过,套餐CRUD流程完整,前端列表/创建/详情页面正常。
需求文档: dan-requirements.md DAN-001~015 - 测评包管理、指标库、结果录入、查询、趋势、建议
Files:
cfc-backend/src/main/java/com/etotem/cfc/entity/DanPackage.javacfc-backend/src/main/java/com/etotem/cfc/entity/DanIndicator.javacfc-backend/src/main/java/com/etotem/cfc/entity/DanIndicatorTemplate.javacfc-backend/src/main/java/com/etotem/cfc/repository/DanPackageRepository.javacfc-backend/src/main/java/com/etotem/cfc/repository/DanIndicatorRepository.javacfc-backend/src/main/java/com/etotem/cfc/service/DanService.javacfc-backend/src/main/java/com/etotem/cfc/controller/DanController.javacfc-frontend/pages/dan/result.vueCreate: 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) - 按指标生成建议文本
DanService.recommendTasks(childId, assessmentId) - 根据低分指标查询关联任务模板
pages/dan/result.vue - 展示测评结果、指标得分雷达图、等级、成长建议
pages/dan/history.vue - 历史测评列表、趋势对比
完整的测评流程:录入→等级计算→展示→建议→推荐任务
需求文档: task-requirements.md §TASK-016
Files:
cfc-backend/src/main/java/com/etotem/cfc/controller/TaskController.javacfc-backend/src/main/java/com/etotem/cfc/service/TaskService.javaModify: 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
任务列表页增加多选模式 → 底部操作栏(批量完成/批量删除/批量分配)
批量选中的任务状态正确更新,不可恢复的删除操作有确认弹窗。
需求文档: focus-requirements.md §2.7
Files:
cfc-backend/src/main/java/com/etotem/cfc/scheduler/TrainingReminderScheduler.javaModify: cfc-frontend/pages/games/index.vue
[ ] Step 1: 每日训练提醒定时任务
TrainingReminderScheduler - 每日定时检查昨日未训练的孩子,发送订阅消息。
查询 game_record 表统计连续天数,达到里程碑(7天/14天/30天)发放额外积分。
游戏列表页顶部展示连续训练天数、下次激励目标。
| 任务 | 预估工时 | 依赖 |
|---|---|---|
| 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
每个Task完成后需满足:
lsp_diagnostics 清洁(无 error)mvn clean compile 成功