# 主动健康六阶模型 — 项目改进综合设计文档 > **基准**: 健康界 2026/06/17《主动健康的六阶模型及其神经生理机制》 > **项目**: CFClub 家庭健康小程序 (cfc-web 前端 + cfc-admin 后端) > **阶段**: P0 (微启动) → P1 (即时反馈 + 智能预警) → P2 (身份重塑 + 家庭互动) → P3 (社区扩散) --- ## 背景:六阶模型与项目缺口 ### 六阶模型 | 阶段 | 核心机制 | 神经基础 | |:-----|:---------|:---------| | ① 有效启动 | 最小行动单元<1s,零认知负荷 | 前扣带回-默认模式网络转换 | | ② 持续坚持 | 即时正向反馈,多巴胺递质系统参与 | 纹状体多巴胺D1受体通路 | | ③ 获得感形成 | 阶段性成就显性化,内啡肽/催产素 | 前额叶-边缘系统整合 | | ④ 身份重塑 | 从"被动执行者"到"主动健康实践者" | 内侧前额叶自我参照加工 | | ⑤ 意见领袖化 | 叙事输出,影响他人 | 颞顶联合区-心智化网络 | | ⑥ 社会扩散 | 群体规范形成,家庭为单元扩散 | 镜像神经元-社会脑网络 | ### 项目现状 -> 六阶覆盖 | 原有功能 | 覆盖的阶 | 缺口 | |:---------|:---------|:-----| | 健康打卡 | ② (部分) | 缺有效启动(阶①) | | 身体记录/测评 | — | 无反馈闭环 | | 能量系统 | ② (部分) | 无身份标识(阶④) | | 五行沙盘/情绪打卡 | — | 无社交扩散(阶⑥) | | 家庭关系图 | — | 无家庭健康互动 | | 报告上传/AI问答 | — | 无预警/趋势解读 | ### 改进总清单 | 优先级 | 改进项 | 覆盖阶 | |:-------|:-------|:-------| | **P0** | 微行动系统(最小行为单元) | ① 有效启动 | | **P1-1** | 即时多巴胺反馈(动画/声音/AI鼓励) | ② 持续坚持 | | **P1-2** | 健康行为智能预警(趋势解读+触发建议) | ② 持续坚持 | | **P2-1** | 身份重塑系统(健康等级+称号+叙事) | ④ 身份重塑 | | **P2-2** | 家庭健康互动(点赞/挑战/排行) | ⑤ 意见领袖化 | | **P3** | 健康社区扩散(家庭圈/分享/荣誉墙) | ⑥ 社会扩散 | --- ## P0 — 微启动系统(有效启动) ### 问题 用户注册后的第一道门槛太高——打开小程序面对的是完整的"健康打卡表单",需要填写多项内容,认知负荷大,导致大量用户在首次打开后就流失。 ### 设计 #### 1. 微行动概念 定义 12 个预置的"1秒完成"的健康行动: | 编号 | 微行动 | 交互方式 | 预期完成时间 | |:-----|:-------|:---------|:------------| | A01 | 喝一杯水 ☕️ | 点击 | < 1s | | A02 | 深呼吸 3 次 🫁 | 点击 | < 1s | | A03 | 站起来伸个懒腰 🧘 | 点击 | < 1s | | A04 | 看远处 10 秒 🌿 | 点击 | < 1s | | A05 | 微笑一下 😊 | 点击 | < 1s | | A06 | 转转头颈 5 圈 🔄 | 点击 | < 1s | | A07 | 握拳放松 3 次 ✊ | 点击 | < 1s | | A08 | 喝口水润喉 💧 | 点击 | < 1s | | A09 | 眨眨眼 5 次 👁️ | 点击 | < 1s | | A10 | 按揉合谷穴 3 下 🖐️ | 点击 | < 1s | | A11 | 踮脚尖 5 次 ⬆️ | 点击 | < 1s | | A12 | 耸肩放松 3 次 ↕️ | 点击 | < 1s | #### 2. 前端组件 **`components/MicroActionCard.vue`** — 首页核心组件 ``` ┌──────────────────────────────────┐ │ ☕️ 今天的小行动 · 已完成 0/1 │ │ │ │ [喝一杯水] 点击完成 → +1能量 │ │ │ │ 3s 倒计时后自动翻转下一项 │ │ (或点击立即翻转) │ └──────────────────────────────────┘ ``` - 每次只展示 1 条微行动(降低选择负担) - 每天默认配额 **1 次**(首次使用额外赠送 2 次体验配额) - 完成后 3s 自动切换到下一条 - 用户可手动点击立即切换 - 每日全部完成后卡片变为 ✅ 状态 #### 3. 时间触发机制 在家长端微信订阅消息中增加: > "您今天的小行动还没完成哦!喝杯水只需要 1 秒钟 ☕️" 推送触发条件:当日 18:00 未完成微行动,且最近 3 天有活跃记录。 #### 4. 与健康打卡的互斥 ``` 微行动 (每日1次) 健康打卡 (每日1次) │ │ └── 二选一 ──────────────┘ │ ▼ 都计入连续打卡进度 但同日只能完成其中一种 ``` - 完成微行动 = 当日打卡成功(计入连续打卡天数) - 完成完整健康打卡 = 当日打卡成功 + 额外数据记录 - 两者不可同日重复 #### 5. 后端 | 文件 | 说明 | |:-----|:------| | `entity/MicroAction.java` | 微行动定义表 | | `entity/MicroActionRecord.java` | 用户完成记录表 | | `mapper/MicroActionMapper.java` | | | `mapper/MicroActionRecordMapper.java` | | | `service/MicroActionService.java` | 分配+完成+配额校验 | | `controller/MicroActionController.java` | `/api/micro-action/today`, `/api/micro-action/complete` | #### 6. 现有文件扩展 | 文件 | 改动 | |:-----|:------| | `store/index.js` | 新增 microAction 模块 | | `utils/api.js` | 新增微行动 API | | `service/EnergyRuleEngine.java` | 增加微行动 +1 能量规则 | | `service/TaskReminderService.java` | 增加微行动定时提醒 | --- ## P1-1 — 即时多巴胺反馈系统 ### 问题 用户完成健康行为后,只看到"保存成功"或纯文字提示,缺乏即时情感反馈。多巴胺闭环缺失,持行为缺乏"爽点"支撑。 ### 设计 #### 1. 反馈分层 | 层级 | 响应速度 | 内容来源 | 使用场景 | |:-----|:---------|:---------|:---------| | **L1 即时反馈** | < 200ms | CSS动画 + 预设文案 | 每次点击"完成"/"打卡" | | **L2 深度反馈** | 异步 | AI 生成 (Dify) | 每日摘要/每周报告 | #### 2. L1 即时反馈触发点 | 触发动作 | 动画 | 文案 | 音效 | |:---------|:-----|:-----|:-----| | 完成微行动 | ✅ 绿色勾缩放 + 能量+1飞入 | "太棒了!🎉" | 叮当声 | | 健康打卡 | 能量粒子迸发 | "今天又是健康的一天!" | 叮当声 | | 运动记录 | 运动图标脉冲 | "今天动了 XX 分钟!💪" | 轻快音 | | 睡眠记录 | 月亮图标动画 | "优质睡眠!😴" | 轻快音 | | 饮水记录 | 水杯灌满 | "补水成功 💧" | 轻快音 | | 里程碑达成 | 全屏彩带 (Canvas) | "连续7天!🔥" | 上升音阶 | | 首次使用 | 引导光晕 | "你的健康之旅开始了!" | 叮当声 | #### 3. 预设文案库 | 阶段 | 文案 | |:-----|:-----| | 第1天 | "第一步!最有意义的一步 🎉" | | 连续3天 | "连续3天!你已经超过了50%的新手 💪" | | 连续7天 | "一周了!习惯正在形成 🌱" | | 连续14天 | "两周!坚持就是你的超能力 ⚡" | | 连续21天 | "21天法则!习惯几乎自动化了 🔥" | | 连续30天 | "一个月!你是健康行动派 🏆" | | 首次运动 | "运动让大脑更聪明 🧠" | | 首次睡眠记录 | "好睡眠是最好的免疫力 😴" | | 恢复打卡(断后) | "欢迎回来!每一次重启都是勇敢的 🌟" | #### 4. 前端技术方案 - **CSS Animation** 为主(微信小程序兼容) - **Canvas** 仅用于里程碑彩带效果(1.5s,30粒子) - **`wx.createInnerAudioContext()`** 播放音效(< 1s, 体积 < 50KB) - 所有动画资源预加载,打包为 base64 或雪碧图,避免网络延迟 #### 5. AI 深度反馈 (L2) 通过已有 `Dify AI Gateway` 每天 22:00 定时任务: > "你是一个温暖的家庭健康教练。根据以下用户数据,生成1-2句鼓励语(不超过50字):[当日行为数据]" 展示位置:次日首次打开小程序时的"早安健康摘要"横幅。 #### 6. 涉及文件 **前端**: | 文件 | 说明 | |:-----|:------| | `components/FeedbackToast.vue` | **新建** — L1即时反馈弹层 | | `components/MilestoneCelebration.vue` | **新建** — 全屏彩带动画组件 | | `components/DailySummary.vue` | **新建** — AI每日摘要卡片 | | `utils/feedback-presets.js` | **新建** — 预设文案+音效映射表 | | `utils/feedback-engine.js` | **新建** — 反馈触发引擎 | | `store/feedback.js` | **新建** — 反馈状态模块 | | `pages/index/index.vue` | 嵌入 DailySummary | **后端**: | 文件 | 说明 | |:-----|:------| | `service/DailyFeedbackService.java` | **新建** — 每日AI反馈生成 | | `controller/DailyFeedbackController.java` | **新建** — `/api/feedback/today` | | `entity/DailyFeedback.java` | **新建** — `daily_feedback` 表 | | `mapper/DailyFeedbackMapper.java` | **新建** | | `service/AiGateway.java` | 扩展 — 新增 health-coach prompt 类型 | --- ## P1-2 — 健康行为智能预警 ### 问题 用户行为数据已入库,但系统不做任何解读。数据只是"死记录",用户不知道自己的行为趋势是好是坏,也不知道该改进什么。 ### 设计 #### 1. 预警规则(6条) | ID | 条件 | 预警文案 | 行动建议 | |:----|:-----|:---------|:---------| | R001 | 连续3天睡眠评分↓ | "您已连续3天睡眠质量下降" | "睡前1小时放下手机,喝杯温牛奶" | | R002 | 连续5天无运动 | "您已经5天没有运动了" | "站起来走3分钟就是好的开始!" | | R003 | 饮水<500ml 连续2天 | "近2天饮水量偏低" | "每1小时喝一杯水,设置定时提醒" | | R004 | 运动强度突增>50% | "今天运动量比平时多一半" | "适当拉伸,不要过度训练" | | R005 | 连续7天无打卡 | "您已经7天没有健康打卡" | "从最小的动作开始:喝一杯水 ☕️" | | R006 | 今日未打卡(18:00) | "今天的健康打卡还没完成哦" | "点我完成今日微行动" | #### 2. 引擎架构 ``` 定时任务 (cron: 0 0 8,12,18 * * ?) │ ▼ HealthAlertEngine.evaluate(userId) ├── 读取近X天记录 ├── 逐条匹配规则 ├── 去重 (同规则24h内不重复) └── 生成 HealthAlert 记录 │ ▼ 前端拉取 GET /api/health/alert │ ▼ 首页预警横幅展示 ``` #### 3. 前端展示 首页微行动卡片下方: ``` ┌──────────────────────────────────┐ │ ⚠️ 健康小提醒 │ │ 您已连续3天睡眠质量下降 │ │ 今晚试试:睡前1小时放下手机 │ │ [我知道了] │ └──────────────────────────────────┘ ``` - 最多展示 2 条(按严重程度) - 点击"我知道了" → `POST /api/health/alert/dismiss` → 24h内不再展示 #### 4. 涉及文件 **后端**: | 文件 | 说明 | |:-----|:------| | `service/HealthAlertEngine.java` | **新建** — 规则引擎 | | `service/HealthAlertService.java` | **新建** — CRUD + 去重 | | `controller/HealthAlertController.java` | **新建** — `/api/health/alert` | | `entity/HealthAlert.java` | **新建** — `health_alerts` 表 | | `mapper/HealthAlertMapper.java` | **新建** | **前端**: | 文件 | 说明 | |:-----|:------| | `components/HealthAlertBanner.vue` | **新建** — 预警横幅 | | `pages/index/index.vue` | 嵌入横幅 | | `store/health-alert.js` | **新建** — 预警状态 | --- ## P2-1 — 身份重塑系统 ### 问题 用户完成健康行为后看到的只是打卡次数增加、能量值变化,没有"我是谁"的身份认同——缺少从"执行者"到"健康践行者"的身份跃迁感。 ### 设计 #### 1. 等级体系(5级) | 等级 | 称号 | 所需健康积分 | 视觉标识 | |:-----|:-----|:------------|:---------| | L1 | 健康探索者 🌱 | 0 | 绿色幼苗徽章 | | L2 | 健康践行者 🌿 | 100 | 绿叶徽章 | | L3 | 家庭健康官 🏡 | 300 | 房屋徽章 | | L4 | 健康达人 ⭐ | 700 | 金星徽章 | | L5 | 健康领航者 👑 | 1500 | 皇冠徽章 | #### 2. 综合健康积分公式 ``` 健康积分 = 打卡(每次+2, 上限每日1次) + 微行动(每次+1, 上限每日1次) + 运动记录(每次+3, 上限每日1次) + 睡眠记录(每次+2, 上限每日1次) + 饮水记录(每次+1, 上限每日3次) + 饮食记录(每次+2, 上限每日1次) + 健康报告上传(每次+10) + 连续打卡加成(连续7天+5, 连续30天+20) + 互动积分(点赞他人+1, 被赞+1) ``` **与 Energy 能量的关系**: | | 健康积分 (Health Score) | 能量 (Energy) | |:--|:-----------------------|:--------------| | 用途 | 等级晋升(不可消费) | 兑换心愿/任务(可消费) | | 来源 | 长期健康行为积累 | 健康行为+互动 | | 重置 | 永不重置 | 可重置/消耗 | #### 3. 展示位置 - **首页侧边/抽屉** — 用户头像旁显示称号徽章 - **个人中心页** — 完整等级+进度条+健康故事时间线 - **健康打卡页** — 称号徽章 #### 4. "我的健康故事"时间线 从用户行为数据自动生成: ``` 🏁 2026/06/01 — 开始了健康之旅的第一步 🔥 第7天 — 突破了第一周! 📋 第一次上传健康报告 🌟 晋升为"健康践行者"! 🏆 连续30天!坚韧不拔! 👨‍👩‍👧‍👦 第一次为家人点赞 ``` 时间线事件存储在 `health_timeline` 表,行为触发生成。 #### 5. 涉及文件 **后端**: | 文件 | 说明 | |:-----|:------| | `entity/HealthLevel.java` | **新建** — 等级定义表 | | `entity/HealthTimelineEvent.java` | **新建** — 时间线事件表 | | `service/HealthScoreService.java` | **新建** — 积分计算引擎 | | `service/HealthLevelService.java` | **新建** — 等级判定+升级通知 | | `service/HealthTimelineService.java` | **新建** — 时间线生成 | | `controller/HealthScoreController.java` | **新建** — `/api/health/score` | | `controller/HealthTimelineController.java` | **新建** — `/api/health/timeline` | **前端**: | 文件 | 说明 | |:-----|:------| | `components/HealthBadge.vue` | **新建** — 等级称号组件 | | `components/HealthTimeline.vue` | **新建** — 健康故事时间线组件 | | `pages/profile/profile.vue` | 展示等级+进度+时间线 | | `store/health-score.js` | **新建** — 积分/等级状态 | --- ## P2-2 — 家庭健康互动 ### 问题 现有"家庭关系图"只是静态结构展示,家庭功能完全是信息传递,没有任何健康行为层面的协同和激励。 ### 设计 #### 1. 家庭健康排行榜 家长端首页新增区域: ``` ┌──────────────────────────────────┐ │ 👨‍👩‍👧‍👦 家庭健康榜 │ │ │ │ 🥇 妈妈 2,350分 🔥 15天 │ │ 🥈 爸爸 1,820分 🔥 8天 │ │ 🥉 小明 980分 🔥 3天 │ │ │ │ 全家总积分: 5,150分 │ │ [查看全家健康详情 →] │ └──────────────────────────────────┘ ``` - 基于健康积分排名 - 每个成员显示头像+等级称号+连续打卡天数🔥 - 角色差异:家长端看到全部成员,儿童端只看到自己排名 #### 2. 点赞系统 ``` 用户A完成打卡 → 通知其他家庭成员 │ ▼ 首页提示 → "妈妈刚刚完成了健康打卡 👍" │ ▼ 点击👍 → POST /api/health/interact/like │ ▼ 双方收到反馈 (点赞者"点赞成功"+1积分, 被赞者下次打开看到通知) ``` - 每个行为 24h 内可被点赞 1 次 - 点赞双方均 +1 健康积分 #### 3. 家庭挑战 | 类型 | 内容 | 期限 | 奖励 | |:-----|:-----|:-----|:-----| | 全员打卡 | 全员连续打卡3天 | 3天 | +50 积分 | | 运动PK | 家庭总运动时长>300min | 7天 | +100 积分 | | 健康周 | 全员每日完成微行动 | 7天 | 限时徽章"健康之家" | 流程: ``` 系统发起(每月首日) → 首页挑战卡片 → 每日进度更新 → 到期自动结算 → 达标发奖 ``` #### 4. 涉及文件 **后端**: | 文件 | 说明 | |:-----|:------| | `controller/FamilyHealthController.java` | **新建** — `/api/health/family/ranking` | | `controller/HealthInteractionController.java` | **新建** — `/api/health/interact/like` | | `controller/FamilyChallengeController.java` | **新建** — 挑战CRUD/进度/结算 | | `service/FamilyHealthScoreService.java` | **新建** — 家庭排行计算 | | `service/HealthInteractionService.java` | **新建** — 点赞+通知 | | `service/FamilyChallengeService.java` | **新建** — 挑战引擎 | | `entity/FamilyChallenge.java` | **新建** — `family_challenge` 表 | | `entity/FamilyChallengeProgress.java` | **新建** — `family_challenge_progress` 表 | | `entity/HealthInteraction.java` | **新建** — `health_interaction` 表 | **前端**: | 文件 | 说明 | |:-----|:------| | `components/FamilyHealthRanking.vue` | **新建** — 家庭健康榜 | | `components/FamilyChallengeCard.vue` | **新建** — 挑战卡片 | | `components/HealthLikeButton.vue` | **新建** — 点赞按钮 | | `pages/index/index.vue` | 嵌入排行榜+挑战卡片 | --- ## P3 — 健康社区扩散 ### 问题 家庭健康数据完全封闭——每个家庭只看得到自己,没有社交动力激发用户向他人传递健康行为,六阶模型第⑥阶"社会扩散"缺失。 ### 设计 #### 1. 家庭同盟(健康圈) ``` 家庭A(2-6人)── 发起邀请 ──→ 家庭B(2-6人) │ │ └────────── 组成健康圈 ─────────┘ (6-20人 / 圈) │ ▼ ┌──────────────────┐ │ 圈总积分排行榜 │ │ 圈挑战(半月一次) │ │ 圈内排行(家庭级) │ └──────────────────┘ ``` - 一个家庭最多加入 3 个健康圈 - 退出冷却期 7 天 - 排行以"家庭"为单位,不暴露个人数据 #### 2. 圈挑战 | 类型 | 周期 | 规则 | |:-----|:-----|:-----| | 全员达标赛 | 每周 | 圈内家庭全员打卡 ≥ 5天 | | 运动总动员 | 每两周 | 圈内运动时长前3家庭 | | 健康新秀榜 | 每月 | 圈内积分增长最快家庭 | #### 3. 健康足迹分享页 通过微信分享的 H5 页面(只读快照,无需登录): ``` ───────────────────────────────── XX家庭 · 健康足迹 ───────────────────────────────── 妈妈 打卡 30 天 🏆 爸爸 打卡 22 天 小明 微行动 15 次 🎯 ───────────────────────────────── "我们坚持健康打卡30天了!" ───────────────────────────────── [扫码加入我们一起健康] ───────────────────────────────── ``` 底部小程序码 → 扫码进入小程序 #### 4. 涉及文件 **后端**: | 文件 | 说明 | |:-----|:------| | `controller/HealthCircleController.java` | **新建** — 圈CRUD | | `controller/CircleChallengeController.java` | **新建** — 圈挑战管理 | | `controller/ShareController.java` | **新建** — 分享页接口 | | `service/HealthCircleService.java` | **新建** | | `service/CircleChallengeService.java` | **新建** | | `service/ShareService.java` | **新建** | | `entity/HealthCircle.java` | **新建** — 健康圈表 | | `entity/HealthCircleMember.java` | **新建** — 圈成员表(家庭级) | | `entity/CircleChallenge.java` | **新建** — 圈挑战表 | **前端**: | 文件 | 说明 | |:-----|:------| | `pages/share/index.vue` | **新建** — 分享H5页面 | | `components/CircleRanking.vue` | **新建** — 圈排行组件 | --- ## 数据表总览 | 优先级 | 表名 | 说明 | |:-------|:-----|:------| | P0 | `micro_action` | 预定义微行动字典 | | P0 | `micro_action_record` | 用户完成记录 | | P1-1 | `daily_feedback` | AI每日反馈 | | P1-2 | `health_alerts` | 健康预警记录 | | P2-1 | `health_level` | 等级定义 | | P2-1 | `health_timeline_event` | 健康时间线事件 | | P2-2 | `family_challenge` | 家庭挑战 | | P2-2 | `family_challenge_progress` | 挑战进度 | | P2-2 | `health_interaction` | 点赞记录 | | P3 | `health_circle` | 健康圈 | | P3 | `health_circle_member` | 圈成员 | | P3 | `circle_challenge` | 圈挑战(扩展自家庭挑战) | --- ## 实现顺序依赖图 ``` P0 微启动 ──────────────────────────────────┐ │ P1-1 即时反馈 ────┐ │ ├── (P1-2 预警依赖行为数据) │ P1-2 智能预警 ────┘ │ ├── 所有阶段独立可实施 P2-1 身份重塑 ────┐ │ ├── (P2-2 依赖积分系统) │ P2-2 家庭互动 ────┘ │ │ P3 社区扩散 ──── 依赖 P2-2 的家庭概念完整 │ ``` **关键原则**:四个阶段之间无阻塞依赖,可按照 P0→P1→P2→P3 顺序逐步实施,也可根据工期并行开发互不影响的模块。