Jelajahi Sumber

docs(unlock-gates): 设计升级 v2.1 - 三关递进+沙盘个人/全家切换+增值关卡+六步法关卡总表

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
E2E Test Bot 2 bulan lalu
induk
melakukan
4f26c33224

+ 2 - 2
docs/superpowers/PROJECT-OVERVIEW.md

@@ -82,7 +82,7 @@
 | 行远页重要关系维护(通讯录) | Phase 1 | ✅ 已完成(action/ 5页面 2116行,含OctopusGraph+问卷+互动日志) | `specs/2026-06-14-action-page-relationship-design.md` |
 | 行远页重要关系维护(通讯录) | Phase 1 | ✅ 已完成(action/ 5页面 2116行,含OctopusGraph+问卷+互动日志) | `specs/2026-06-14-action-page-relationship-design.md` |
 | 登录前浏览体验(未登录可见内容) | Phase 1 | ✅ 已完成(多页面游客态+wuxing-sandbox preview模式) | `specs/2026-06-04-pre-login-discovery-design.md` |
 | 登录前浏览体验(未登录可见内容) | Phase 1 | ✅ 已完成(多页面游客态+wuxing-sandbox preview模式) | `specs/2026-06-04-pre-login-discovery-design.md` |
 | 新用户注册引导 + 个人信息按需补充/回写 | Phase 1 | ✅ 已实施(注册解耦最小集 + 个人中心卡片 + 功能场景就地补充自动回写 + 无家庭引导组件) | `specs/2026-08-04-registration-profile-backfill-design.md` + `plans/2026-08-04-registration-profile-backfill.md` |
 | 新用户注册引导 + 个人信息按需补充/回写 | Phase 1 | ✅ 已实施(注册解耦最小集 + 个人中心卡片 + 功能场景就地补充自动回写 + 无家庭引导组件) | `specs/2026-08-04-registration-profile-backfill-design.md` + `plans/2026-08-04-registration-profile-backfill.md` |
-| 通关解锁(测试门禁+引导解锁) | Phase 1 | 🟡 设计稿(书稿《家的算法》理念:测量先行→最小输入→循环→反馈;主线硬门禁=自检解锁能量沙盘,增值关卡=下单测评,后台可配置) | `specs/2026-08-10-unlock-gates-design.md` |
+| 通关解锁(测试门禁+引导解锁) | Phase 1 | 🟡 设计稿 v2.1(三关递进:自检→个人沙盘 / 邀请家人→全家沙盘 / 创建家人→孩子微行动;沙盘加个人/全家切换开关;增值关卡含购物/会员/上传报告,各关均有奖励;后台可配置) | `specs/2026-08-10-unlock-gates-design.md` |
 
 
 ---
 ---
 
 
@@ -349,7 +349,7 @@
 | `2026-08-08-family-challenge-participation-design.md` | ✅ 设计已确认(2026-08-08 拍板:C3 只扣沟通,其余按默认) | 家庭挑战参与机制重构(任意成员发起/可选参与/全体同意后开始/方向性关系评分) |
 | `2026-08-08-family-challenge-participation-design.md` | ✅ 设计已确认(2026-08-08 拍板:C3 只扣沟通,其余按默认) | 家庭挑战参与机制重构(任意成员发起/可选参与/全体同意后开始/方向性关系评分) |
 | `2026-08-08-health-data-center-design.md` | ✅ 已实施(身维度首页改造+在线测评题库扩展+方案汇总页+health_plans后端全栈) | 健康数据中心 — 看见·主动健康闭环(Tab栏+四维雷达图+数据采集+数据查看+方案汇总+认知/心理/关系测评) |
 | `2026-08-08-health-data-center-design.md` | ✅ 已实施(身维度首页改造+在线测评题库扩展+方案汇总页+health_plans后端全栈) | 健康数据中心 — 看见·主动健康闭环(Tab栏+四维雷达图+数据采集+数据查看+方案汇总+认知/心理/关系测评) |
 | `2026-08-08-growth-intervention-center-design.md` | ✅ 已实施(迁移208-209/2实体/2Mapper/SurveyService/SurveyController/AdminSurveyController/调研问卷页/调研历史页/growth-main重构/SurveyTemplates管理端) | 成长页面重构为干预中心(今日干预进度卡+持续追踪Tab+里程碑+定期调研+后端调研系统全栈) |
 | `2026-08-08-growth-intervention-center-design.md` | ✅ 已实施(迁移208-209/2实体/2Mapper/SurveyService/SurveyController/AdminSurveyController/调研问卷页/调研历史页/growth-main重构/SurveyTemplates管理端) | 成长页面重构为干预中心(今日干预进度卡+持续追踪Tab+里程碑+定期调研+后端调研系统全栈) |
-| `2026-08-10-unlock-gates-design.md` | 🟡 设计稿 | 通关解锁功能(自检门禁解锁能量沙盘+增值关卡+软引导+管理端关卡配置,数据驱动) |
+| `2026-08-10-unlock-gates-design.md` | 🟡 设计稿 v2.1 | 通关解锁功能(三关递进:自检→个人沙盘、邀请家人→全家沙盘、创建家人→孩子微行动;沙盘个人/全家切换;增值关卡含购物/会员/上传报告;每关有奖;管理端关卡配置,数据驱动) |
 
 
 ### 实施计划(plans/)
 ### 实施计划(plans/)
 
 

+ 244 - 87
docs/superpowers/specs/2026-08-10-unlock-gates-design.md

@@ -1,6 +1,6 @@
 # 通关解锁功能设计(Unlock Gates)
 # 通关解锁功能设计(Unlock Gates)
 
 
-**版本:** v1.0
+**版本:** v2.0
 **日期:** 2026-08-10
 **日期:** 2026-08-10
 **定位:** 产品设计 + 技术方案
 **定位:** 产品设计 + 技术方案
 **理念依据:** 《家的算法》书稿(`book/` 目录:第2章测量先行 / 第8章最小输入 / 第9章循环执行 / 第10章反馈校验 / 第11章系统升级)
 **理念依据:** 《家的算法》书稿(`book/` 目录:第2章测量先行 / 第8章最小输入 / 第9章循环执行 / 第10章反馈校验 / 第11章系统升级)
@@ -20,9 +20,11 @@
 
 
 | 目标 | 说明 |
 | 目标 | 说明 |
 |------|------|
 |------|------|
-| 硬门禁 | 未完成五维自检的家庭,**任何入口都看不到能量沙盘**(家长端/孩子端/发现页/成员详情统一加门) |
-| 软引导 | 完成自检后,通过"关卡中心页 + 首页引导条"不断推荐下一步行动(微行动/打卡/复测),不硬锁 |
-| 商业转化 | 增值关卡:下单菌群检测/DAN测评(可先于主线完成),解锁增值内容 |
+| 分粒度门禁 | 沙盘分**个人/全家**两层,各由独立关卡解锁:自检→个人沙盘;邀请家人→全家沙盘 |
+| 递进引导 | 三关递进:看见自己 → 看见全家 → 开始行动(对孩子),步步引导不跳步 |
+| 每关有奖 | 每完成一关即时获得积分+能量奖励,强化正反馈循环 |
+| 软引导 | 完成主线后,通过"关卡中心页 + 首页引导条"推荐下一步行动(微行动/打卡/复测/购物/上传报告/加入会员),不硬锁 |
+| 商业转化 | 增值关卡:下单购物、加入会员、上传报告(可先于主线完成),解锁增值内容,每关同样有奖 |
 | 可配置 | cfc-web 管理端完整配置关卡:开关/顺序/奖励/条件,数据驱动不写死 |
 | 可配置 | cfc-web 管理端完整配置关卡:开关/顺序/奖励/条件,数据驱动不写死 |
 
 
 ### 1.3 已确认的产品决策(澄清结论)
 ### 1.3 已确认的产品决策(澄清结论)
@@ -31,10 +33,11 @@
 |--------|------|
 |--------|------|
 | 小测试 | 复用现有五维自检 15 题(`self-check.vue`),不新建测试 |
 | 小测试 | 复用现有五维自检 15 题(`self-check.vue`),不新建测试 |
 | 驱动方式 | 行为驱动(完成动作解锁),非时间驱动 |
 | 驱动方式 | 行为驱动(完成动作解锁),非时间驱动 |
-| 主线形态 | **单硬关卡**(自检→沙盘)+ 后续**软引导**(推荐不锁死) |
-| 门禁范围 | 全家沙盘统一加门(parent-index / child-index / discover / member-detail / member-home-detail) |
-| 判据粒度 | **家庭级**:家庭内任一成员完成自检即解锁全家 |
-| 增值关卡 | 下单菌群检测/DAN测评,可选,可先于主线关卡完成 |
+| 主线形态 | **三关递进硬门禁**:自检→邀请家人→创建家人,依次解锁个人沙盘→全家沙盘→孩子微行动 |
+| 沙盘UI | 沙盘增加**个人/全家切换开关**,默认显示个人;全家视角需邀请家人关卡解锁 |
+| 判据粒度 | 自检判据为**个人级**(解锁个人沙盘);邀请/创建家人判据为**家庭级** |
+| 每关奖励 | 每完成一关(主线/增值/软引导)均给予积分+能量奖励,即时到账 |
+| 增值关卡 | 可扩展多种类型:下单购物、加入会员、上传健康报告,各关独立判定,可先于主线完成 |
 | 后台配置 | 完整配置页:开关/顺序/奖励/条件 |
 | 后台配置 | 完整配置页:开关/顺序/奖励/条件 |
 
 
 ---
 ---
@@ -49,24 +52,36 @@ cfc-web 管理端 views/admin/gates.vue(关卡配置 CRUD)
 unlock_gates 表(关卡定义,数据驱动)
 unlock_gates 表(关卡定义,数据驱动)
         ↓
         ↓
 GateService(统一判定引擎)
 GateService(统一判定引擎)
-        ├── SELF_CHECK    → 查 five_dimension_self_checks
-        ├── PURCHASE      → 查订单表(支付成功)
-        ├── MICRO_ACTION  → 查 micro_action_records
-        └── STREAK_DAYS   → 查 streak
+        ├── SELF_CHECK            → 查 five_dimension_self_checks + user.family_id
+        ├── INVITE_FAMILY         → 查 user 表(family_id 成员数 ≥ 2)
+        ├── CREATE_FAMILY_MEMBER  → 查 family_member 表(family_id 成员数 ≥ 1)
+        ├── PURCHASE              → 查订单表(支付成功)
+        ├── MEMBERSHIP            → 查 family_memberships / member_subscription
+        ├── REPORT_UPLOAD         → 查 health_reports(family_id 有记录)
+        ├── MICRO_ACTION          → 查 micro_action_records
+        └── STREAK_DAYS           → 查 streak
         ↓ 判定结果写入
         ↓ 判定结果写入
 family_gate_progress 表(家庭通关记录 LOCKED → UNLOCKED)
 family_gate_progress 表(家庭通关记录 LOCKED → UNLOCKED)
         ↓
         ↓
-门禁拦截:/api/energy/sandbox 未通关返回 locked 标记 → 前端渲染锁定态
-状态查询:POST /api/unlock/status → 首页引导条 + 关卡中心页
+门禁拦截:
+  /api/energy/sandbox?view=personal   → 未过 SELF_CHECK 返回 locked
+  /api/energy/sandbox?view=family     → 未过 INVITE_FAMILY 返回 locked
+  /api/unlock/status                  → 首页引导条 + 关卡中心页
 ```
 ```
 
 
 ### 2.2 核心规则
 ### 2.2 核心规则
 
 
-1. **主线硬门禁**:`is_required=1 AND is_soft=0` 的关卡按 `sort_order` **顺序依赖**——必须依次解锁,当前锁定关卡是最小 sort_order 的未通关关卡;其 `unlock_target` 对应模块对全家锁定。
-2. **增值关卡**:`is_required=0`,**无前置依赖**,任何时刻可完成(满足"关2可在关1前完成")。
-3. **软引导**:`is_soft=1` 的关卡不锁任何功能,仅在关卡中心页/首页引导条展示为"推荐解锁",点击直达对应功能。
-4. **判据粒度**:所有判定基于 `family_id`(家庭级),与当前登录人无关。
-5. **可降级**:所有硬门禁关卡均被禁用(`enabled=0`)时,门禁系统整体失效,沙盘对全家开放——保证运营可随时撤回。
+1. **主线硬门禁**:`is_required=1 AND is_soft=0` 的关卡按 `sort_order` **顺序依赖**——必须依次解锁:
+   - 关1(自检)→ 解锁个人沙盘
+   - 关2(邀请家人)→ 解锁全家沙盘切换
+   - 关3(创建家人)→ 解锁孩子微行动
+2. **判据粒度分两层**:
+   - 自检关卡:基于**个人**(当前登录用户完成自检即解锁个人沙盘,不依赖家庭其他成员)
+   - 邀请/创建家人关卡:基于**家庭级**(家庭内任一成员完成即解锁)
+3. **增值/商业关卡**:`is_required=0`(或单独标记为增值),**无前置依赖**,任何时刻可完成。可包含:下单购物(PURCHASE)、加入会员(MEMBERSHIP)、上传报告(REPORT_UPLOAD)。
+4. **软引导**:`is_soft=1` 的关卡不锁任何功能,仅在关卡中心页/首页引导条展示为"推荐解锁"。
+5. **每关有奖**:所有关卡(主线/增值/软引导)通关即发放 `reward_points` + `reward_energy`,通过通用奖励发放服务即时到账。
+6. **可降级**:所有硬门禁关卡均被禁用(`enabled=0`)时,门禁系统整体失效,沙盘对全员开放。
 
 
 ---
 ---
 
 
@@ -77,7 +92,7 @@ family_gate_progress 表(家庭通关记录 LOCKED → UNLOCKED)
 ```sql
 ```sql
 CREATE TABLE IF NOT EXISTS unlock_gates (
 CREATE TABLE IF NOT EXISTS unlock_gates (
     id BIGINT AUTO_INCREMENT PRIMARY KEY,
     id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    gate_type VARCHAR(32) NOT NULL COMMENT '关卡类型: SELF_CHECK/PURCHASE/MICRO_ACTION/STREAK_DAYS',
+    gate_type VARCHAR(32) NOT NULL COMMENT '关卡类型: SELF_CHECK/INVITE_FAMILY/CREATE_FAMILY_MEMBER/PURCHASE/MEMBERSHIP/REPORT_UPLOAD/MICRO_ACTION/STREAK_DAYS',
     name VARCHAR(50) NOT NULL COMMENT '关卡名称',
     name VARCHAR(50) NOT NULL COMMENT '关卡名称',
     description VARCHAR(200) COMMENT '关卡说明',
     description VARCHAR(200) COMMENT '关卡说明',
     icon VARCHAR(10) COMMENT '图标emoji',
     icon VARCHAR(10) COMMENT '图标emoji',
@@ -85,7 +100,7 @@ CREATE TABLE IF NOT EXISTS unlock_gates (
     enabled TINYINT DEFAULT 1 COMMENT '启用/禁用: 1启用 0禁用',
     enabled TINYINT DEFAULT 1 COMMENT '启用/禁用: 1启用 0禁用',
     is_required TINYINT DEFAULT 1 COMMENT '归属: 1主线必过 0增值可选',
     is_required TINYINT DEFAULT 1 COMMENT '归属: 1主线必过 0增值可选',
     is_soft TINYINT DEFAULT 0 COMMENT '形态: 1软引导(不锁功能) 0硬门禁(锁定功能)',
     is_soft TINYINT DEFAULT 0 COMMENT '形态: 1软引导(不锁功能) 0硬门禁(锁定功能)',
-    unlock_target VARCHAR(32) COMMENT '解锁目标模块: SANDBOX/MICRO_ACTION_DAILY/BADGE_MILESTONE/TREND_COMPARE/PREMIUM_MODULES',
+    unlock_target VARCHAR(32) COMMENT '解锁目标模块: PERSONAL_SANDBOX/FAMILY_SANDBOX/CHILD_MICRO_ACTION/PREMIUM_MODULES/MICRO_ACTION_DAILY/BADGE_MILESTONE/TREND_COMPARE/HEALTH_INSIGHTS',
     condition_params VARCHAR(500) COMMENT '条件参数JSON: {"count":1} / {"days":3} / {"product_types":["dan","microbiome"]}',
     condition_params VARCHAR(500) COMMENT '条件参数JSON: {"count":1} / {"days":3} / {"product_types":["dan","microbiome"]}',
     reward_points INT DEFAULT 0 COMMENT '通关奖励积分',
     reward_points INT DEFAULT 0 COMMENT '通关奖励积分',
     reward_energy INT DEFAULT 0 COMMENT '通关奖励能量',
     reward_energy INT DEFAULT 0 COMMENT '通关奖励能量',
@@ -120,43 +135,61 @@ CREATE TABLE IF NOT EXISTS family_gate_progress (
 
 
 ```java
 ```java
 public class UnlockGateService {
 public class UnlockGateService {
-    // 核心:判定家庭是否已通关某关卡(幂等,可重复调用)
-    // SELF_CHECK:    five_dimension_self_checks 存在 family 内任一 user 的记录,且记录数 >= condition_params.minCount(默认1)
-    // PURCHASE:      商城商品订单存在支付成功订单,且商品 product_type/domain 命中 condition_params.product_types
-    // MICRO_ACTION:  micro_action_records 中家庭成员的记录数 >= condition_params.count
-    // STREAK_DAYS:   家庭成员 streak >= condition_params.days
+    // 核心:判定某用户是否已通关某关卡
+    // SELF_CHECK:          five_dimension_self_checks 存在该 user_id 的记录,且记录数 ≥ minCount
+    // INVITE_FAMILY:       user 表该 family_id 成员数 ≥ 2(用户本人 + 至少1位家人)
+    // CREATE_FAMILY_MEMBER: family_member 表该 family_id 记录数 ≥ 1
+    // PURCHASE:            商城商品订单存在支付成功订单,且商品类型命中 condition_params
+    // MEMBERSHIP:          family_memberships 或 member_subscription 存在该 family_id 的有效订阅
+    // REPORT_UPLOAD:       health_reports 存在该 family_id 的记录,且记录数 ≥ minCount
+    // MICRO_ACTION:        micro_action_records 中家庭成员的记录数 ≥ count
+    // STREAK_DAYS:         家庭成员 max(streakDays) ≥ days
     public boolean isGateUnlocked(Long familyId, UnlockGate gate);
     public boolean isGateUnlocked(Long familyId, UnlockGate gate);
 
 
-    // 计算家庭门禁状态:当前锁定的硬门禁关卡(无则返回 null)
-    public UnlockGate getCurrentLockGate(Long familyId);
+    // 计算当前用户个人沙盘门禁状态(基于个人判据)
+    public UnlockGate getCurrentPersonalLockGate(Long userId);
 
 
-    // 重算家庭全部关卡进度并写 family_gate_progress(自检提交/支付回调后调用)
+    // 计算家庭门禁状态:当前锁定的家庭级硬门禁关卡
+    public UnlockGate getCurrentFamilyLockGate(Long familyId);
+
+    // 重算家庭全部关卡进度并写 family_gate_progress
     public void refreshFamilyGates(Long familyId);
     public void refreshFamilyGates(Long familyId);
 
 
-    // 查询家庭关卡全景(status 接口数据源)
-    public UnlockStatusDTO getFamilyUnlockStatus(Long familyId);
+    // 查询用户关卡全景(status 接口数据源)
+    public UnlockStatusDTO getUserUnlockStatus(Long userId, Long familyId);
+
+    // 发放关卡通关奖励
+    public void grantGateRewards(Long familyId, Long gateId, Long unlockedByUserId);
 }
 }
 ```
 ```
 
 
 ### 4.2 判定逻辑细节
 ### 4.2 判定逻辑细节
 
 
-| 类型 | 判定依据 | 备注 |
-|------|---------|------|
-| `SELF_CHECK` | `five_dimension_self_checks` 存在该 family 内任一 user_id 的记录,且记录数 ≥ minCount(默认 1) | minCount 来自 condition_params;复测关卡设 `{"minCount":2}` |
-| `PURCHASE` | **商城商品订单表**(ProductOrderController 对应订单表)存在支付成功的订单,且商品 `domain`/`product_type` 命中 condition_params.product_types(多类型 OR 匹配) | DAN测评/菌群检测以商城商品形式购买时走此判定;若 DAN测评走独立流程(`dan-assessment/record`),在实现计划中确认其订单接入点 |
-| `MICRO_ACTION` | `micro_action_records` 家庭内记录数 ≥ count | 按 family 聚合 |
-| `STREAK_DAYS` | 家庭成员最大 streak ≥ days | 复用现有 streak 计算 |
+| 类型 | 判据粒度 | 判定依据 | 备注 |
+|------|---------|---------|------|
+| `SELF_CHECK` | **个人级** | `five_dimension_self_checks` 存在该 user_id 的记录,且记录数 ≥ minCount(默认 1) | 与 family_id 无关,仅看当前用户。minCount 来自 condition_params;复测设 `{"minCount":2}` |
+| `INVITE_FAMILY` | 家庭级 | `user` 表该 family_id 的成员数 ≥ 2(用户本人 + 至少1位被邀请的家人) |  |
+| `CREATE_FAMILY_MEMBER` | 家庭级 | `family_member` 表该 family_id 的记录数 ≥ 1 | 至少创建了一个孩子成员 |
+| `PURCHASE` | 家庭级 | 商城商品订单表存在支付成功的订单,且商品 `domain`/`product_type` 命中 condition_params.product_types | 通用购物关卡,不限于特定商品类型 |
+| `MEMBERSHIP` | 家庭级 | `family_memberships` 或 `member_subscription` 存在该 family_id 的有效(已支付/激活)订阅记录 | 含付费会员、试用会员等 |
+| `REPORT_UPLOAD` | 家庭级 | `health_reports` 存在该 family_id 的记录,且记录数 ≥ minCount(默认 1) | health_reports 已有 family_id 字段,直接查询 |
+| `MICRO_ACTION` | 家庭级 | `micro_action_records` 家庭内记录数 ≥ count | 按 family_id 聚合(需通过 family_member 关联) |
+| `STREAK_DAYS` | 家庭级 | 家庭成员最大 streak ≥ days | 取 FamilyMember.streakDays 最大值 |
 
 
 ### 4.3 触发钩子
 ### 4.3 触发钩子
 
 
 | 触发点 | 位置 | 动作 |
 | 触发点 | 位置 | 动作 |
 |--------|------|------|
 |--------|------|------|
-| 登录成功 | `AuthController` 登录/角色切换 | `unlockGateService.refreshFamilyGates(familyId)`(兜底:老用户已自检但进度表未初始化时自动补齐;同时保证进度新鲜度) |
-| 自检提交成功 | `FiveDimensionSelfCheckController.submit()` | `unlockGateService.refreshFamilyGates(familyId)` |
-| 支付成功回调 | `PaymentController.wechat/callback、alipay/callback、wechat/v3-notify` | `refreshFamilyGates(familyId)` |
+| 登录成功 | `AuthController` 登录/角色切换 | `unlockGateService.refreshFamilyGates(familyId)` |
+| 自检提交成功 | `FiveDimensionSelfCheckController.submit()` | `refreshFamilyGates(familyId)` + 发放奖励 |
+| 邀请家人成功 | 家庭邀请/加入回调 | `refreshFamilyGates(familyId)` + 发放奖励 |
+| 创建家人成功 | 创建家庭成员回调 | `refreshFamilyGates(familyId)` + 发放奖励 |
+| 支付成功回调 | 商城支付回调 | `refreshFamilyGates(familyId)` + 发放奖励(PURCHASE 关卡) |
+| 会员订阅成功 | 会员支付/激活回调 | `refreshFamilyGates(familyId)` + 发放奖励(MEMBERSHIP 关卡) |
+| 报告上传成功 | `HealthReportController.upload/confirm` | `refreshFamilyGates(familyId)` + 发放奖励(REPORT_UPLOAD 关卡) |
 | 管理端人工干预 | `AdminUnlockGateController` | 重置/手动解锁某家庭某关卡 |
 | 管理端人工干预 | `AdminUnlockGateController` | 重置/手动解锁某家庭某关卡 |
 
 
-> **读路径**:`/api/unlock/status` 与 `/api/energy/sandbox` 只读 `family_gate_progress` 冗余表(不实时扫描业务表);`refreshFamilyGates` 由上述钩子触发重算写库,保证进度表与业务数据一致。存量家庭首次登录即被登录钩子预置,无需额外迁移。
+> **读路径**:`/api/unlock/status` 与 `/api/energy/sandbox` 只读 `family_gate_progress` 冗余表;`refreshFamilyGates` 由上述钩子触发重算写库。
 
 
 ---
 ---
 
 
@@ -166,24 +199,41 @@ public class UnlockGateService {
 
 
 ```
 ```
 POST /api/unlock/status
 POST /api/unlock/status
-入参: 无(@RequestAttribute userId 取家庭)
+入参: 无(@RequestAttribute userId 取用户和家庭)
 出参: {
 出参: {
-  currentLockGate: {id, name, description, icon, gateType} | null,   // 当前硬门禁(家庭级)
+  currentLockGate: {id, name, description, icon, gateType} | null,
   gates: [{id, gateType, name, description, icon, isRequired, isSoft,
   gates: [{id, gateType, name, description, icon, isRequired, isSoft,
            status: LOCKED|UNLOCKED|CURRENT, rewardPoints, rewardEnergy}],
            status: LOCKED|UNLOCKED|CURRENT, rewardPoints, rewardEnergy}],
-  sandboxLocked: true/false     // 便捷标记,前端四处沙盘共用
+  personalSandboxLocked: true/false,    // 个人沙盘是否锁定
+  familySandboxLocked: true/false,      // 全家沙盘是否锁定(含邀请/创建家人关卡)
+  childMicroActionLocked: true/false    // 孩子微行动是否锁定
 }
 }
-说明: 未加入家庭时返回 sandboxLocked=false(不拦截,保持现有 noFamily 逻辑)
 ```
 ```
 
 
 ```
 ```
-POST /api/energy/sandbox  (改造)
-现有: 直接返回 EnergySandboxDTO
-改造后: 未通过当前硬门禁时返回:
-  { locked: true, gate: {id, name, description, icon}, code: 0 }
-通过时: 原逻辑 + sandbox 数据
-说明: 保持 code=0(非业务错误),前端以 data.locked 分支渲染锁定态;
-      门禁判定为家庭级,孩子端/发现页/成员详情调用同一接口自动生效
+POST /api/energy/sandbox?view=personal|family
+入参: view 参数(默认 personal)
+逻辑:
+  view=personal:
+    - SELF_CHECK 未通关 → 返回 { locked: true, gate: {id, name, description, icon} }
+    - 已通关 → 返回当前用户个人五维数据
+  view=family:
+    - INVITE_FAMILY 未通关 → 返回 { locked: true, gate: {id, name, description, icon} }
+    - 已通关 → 返回家庭所有成员聚合五维数据
+出参(个人):
+  {
+    locked: false,
+    view: "personal",
+    personalData: { bodyScore, mindScore, wisdomScore, actionScore, wealthScore, ... },
+    familyUnlocked: true/false,   // 全家视角是否可用(前端据此决定是否显示切换开关)
+    familyGate: {id, name} | null  // 未解锁时返回当前锁定关卡信息
+  }
+出参(全家):
+  {
+    locked: false,
+    view: "family",
+    familyData: { members: [...], overallScore, ... }
+  }
 ```
 ```
 
 
 ### 5.2 管理端
 ### 5.2 管理端
@@ -203,40 +253,79 @@ POST /api/admin/unlock-gates/reset-family — 重置某家庭进度(运营干
 
 
 ## 6. 前端设计(小程序)
 ## 6. 前端设计(小程序)
 
 
-### 6.1 锁定态组件 `components/gate-lock.vue`
+### 6.1 WuxingSandbox 组件改造:个人/全家切换开关
 
 
-- 新组件,props: `gate`(当前锁定关卡信息)
-- 视觉:锁图标 + 关卡名 + 引导文案(*"完成五维自检,解锁能量沙盘"*)+ 主按钮(跳转对应功能:自检→`pages/family/self-check.vue`)
-- 替换位置(原 `v-if="sandboxData"` / error-state 逻辑):
+**改造点:**
 
 
-| 页面 | 现状 | 改造 |
-|------|------|------|
-| `pages/home-pages/parent-index.vue` | `v-if="sandboxData"` 渲染沙盘 | 门禁状态 sandboxLocked → 渲染 gate-lock;未加入家庭保持现状 |
-| `pages/home-pages/child-index.vue` | 渲染沙盘 | 同上 |
-| `pages/home-pages/member-home-detail.vue` | 渲染沙盘 | 同上 |
-| `pages/member-detail/member-detail.vue` | 渲染沙盘 | 同上 |
-| `pages/discover/index.vue` | 渲染沙盘 | 同上 |
+| 项目 | 说明 |
+|------|------|
+| 新增 props | `viewMode: 'personal'\|'family'` (默认 'personal') |
+| 新增 props | `familyUnlocked: boolean`(是否显示切换开关) |
+| 新增 props | `personalData` / `familyData`(两套数据源) |
+| 切换开关 | 沙盘顶部加 `switch` 组件,`familyUnlocked=false` 时隐藏 |
+| 默认显示 | 个人数据(登录用户自己的五维) |
+| 全家模式 | 切换后显示家庭所有成员聚合数据(雷达图重叠显示各成员) |
+
+**视觉:**
+```
+┌──────────────────────────────────┐
+│  👤 个人  │  👨‍👩‍👧‍👦 全家          │ ← 开关(仅 familyUnlocked 时显示)
+│                                  │
+│      [雷达图 - 当前模式数据]      │
+│                                  │
+│  身: ████████░░ 80               │
+│  心: ██████░░░░ 60               │
+│  ...                              │
+└──────────────────────────────────┘
+```
+
+### 6.2 锁定态组件 `components/gate-lock.vue`
+
+- 复用组件,props: `gate`(当前锁定关卡信息)
+- 根据 gate.gateType 自动映射跳转目标:
 
 
-### 6.2 首页引导条 `components/gate-guide-bar.vue`
+| gate_type | 按钮文案 | 跳转目标 |
+|-----------|---------|---------|
+| SELF_CHECK | "完成五维自检,解锁个人沙盘" | `pages/family/self-check.vue` |
+| INVITE_FAMILY | "邀请家人加入,解锁全家沙盘" | 家庭邀请页/成员管理 |
+| CREATE_FAMILY_MEMBER | "创建孩子账号,解锁微行动" | 创建家庭成员页 |
 
 
-- 家长首页 `parent-index.vue` 顶部(自检卡附近)展示:"🔓 解锁进度 1/4 · 完成五维自检解锁能量沙盘 →"
+- 各处沙盘统一使用 gate-lock:
+
+| 页面 | 改造 |
+|------|------|
+| `parent-index.vue` | 调用 `/api/energy/sandbox?view=personal`,locked 时渲染 gate-lock;解锁后显示沙盘+切换开关 |
+| `child-index.vue` | 同上(孩子端仅供查看个人沙盘,全家开关是否显示取决于 gate 2 解锁状态) |
+| `member-home-detail.vue` | 同上 |
+| `member-detail/member-detail.vue` | 同上 |
+| `discover/index.vue` | 同上 |
+| `body-detail/index.vue` | 同上 |
+| `mind-detail/index.vue` | 同上 |
+| `wisdom-detail/index.vue` | 同上 |
+
+### 6.3 首页引导条 `components/gate-guide-bar.vue`
+
+- 家长首页 `parent-index.vue` 顶部展示:"🔓 解锁进度 1/3 · 完成五维自检解锁个人沙盘 →"
 - 数据源:`/api/unlock/status` 的 gates 列表(已解锁数/主线总数)
 - 数据源:`/api/unlock/status` 的 gates 列表(已解锁数/主线总数)
-- 全解锁后自动消失(避免打扰老用户)
+- 全解锁后自动消失
 - 点击 → 关卡中心页
 - 点击 → 关卡中心页
 
 
-### 6.3 关卡中心页 `pages/profile-extra/gates.vue`
+### 6.4 关卡中心页 `pages/profile-extra/gates.vue`
 
 
 - 分区展示:
 - 分区展示:
   - **主线关卡**:锁态(🔒 灰)/ 当前(进行中高亮)/ 已解锁(✅)
   - **主线关卡**:锁态(🔒 灰)/ 当前(进行中高亮)/ 已解锁(✅)
+    - 关1:五维自检 → 个人沙盘
+    - 关2:邀请家人 → 全家沙盘
+    - 关3:创建家人 → 孩子微行动
   - **增值关卡**:购买入口(跳商城对应商品/测评),已购显示已解锁
   - **增值关卡**:购买入口(跳商城对应商品/测评),已购显示已解锁
   - **软引导**:推荐卡片(微行动/连续打卡/复测),点击直达
   - **软引导**:推荐卡片(微行动/连续打卡/复测),点击直达
 - 每关展示:图标+名称+说明+奖励(+N 积分 · +N 能量)
 - 每关展示:图标+名称+说明+奖励(+N 积分 · +N 能量)
 - 新页面需在 `pages.json` 注册(分包 profile-extra)
 - 新页面需在 `pages.json` 注册(分包 profile-extra)
 
 
-### 6.4 沙盘叠加自检分数
+### 6.5 沙盘叠加自检分数
 
 
-- 解锁后沙盘数据来源不变(energy/sandbox),新增叠加:自检结果页分数作为雷达叠加层(复用 self-check-result 的雷达图数据)
-- 实现位置:`WuxingSandbox` 组件扩展可选 props(selfCheckScores),首版仅家长端首页叠加,其余位置保持纯能量快照
+- 个人沙盘视角下,雷达图叠加自检结果分数(复用 self-check-result 的雷达图数据)
+- 实现位置:`WuxingSandbox` 组件扩展可选 props(selfCheckScores)
 
 
 ---
 ---
 
 
@@ -248,8 +337,16 @@ POST /api/admin/unlock-gates/reset-family — 重置某家庭进度(运营干
 - 表格列:排序 | 图标 | 名称 | 类型 | 归属(主线/增值) | 形态(硬门禁/软引导) | 解锁目标 | 条件 | 奖励 | 状态 | 操作
 - 表格列:排序 | 图标 | 名称 | 类型 | 归属(主线/增值) | 形态(硬门禁/软引导) | 解锁目标 | 条件 | 奖励 | 状态 | 操作
 - 操作:编辑(弹窗表单)/ 启停开关 / 删除 / 上下移排序(或数字排序)
 - 操作:编辑(弹窗表单)/ 启停开关 / 删除 / 上下移排序(或数字排序)
 - 表单字段(对应 unlock_gates):
 - 表单字段(对应 unlock_gates):
-  - 类型下拉:五维自检 / 购买商品 / 微行动次数 / 连续打卡天数
-  - 条件参数按类型动态渲染:SELF_CHECK 无参数;PURCHASE 选商品类型(DAN测评/菌群检测/自定义 product_types 输入);MICRO_ACTION 填次数;STREAK_DAYS 填天数
+  - 类型下拉:五维自检 / 邀请家人 / 创建家人 / 购买商品 / 加入会员 / 上传报告 / 微行动次数 / 连续打卡天数
+  - 条件参数按类型动态渲染:
+    - SELF_CHECK → 无参数(或 minCount)
+    - INVITE_FAMILY → 无参数(硬编码 ≥2 人)
+    - CREATE_FAMILY_MEMBER → 无参数(硬编码 ≥1 个孩子)
+    - PURCHASE → 选商品类型(不限/多选或自定义 product_types 输入)
+    - MEMBERSHIP → 无参数(硬编码 ≥1 有效订阅)
+    - REPORT_UPLOAD → 无参数(或 minCount)
+    - MICRO_ACTION → 填次数
+    - STREAK_DAYS → 填天数
   - 奖励:积分 + 能量 两个数字输入
   - 奖励:积分 + 能量 两个数字输入
   - 归属/形态:单选
   - 归属/形态:单选
 - 额外区块:**家庭进度管理**(输入 family_id 查看/重置该家庭关卡进度,运营干预)
 - 额外区块:**家庭进度管理**(输入 family_id 查看/重置该家庭关卡进度,运营干预)
@@ -264,13 +361,24 @@ POST /api/admin/unlock-gates/reset-family — 重置某家庭进度(运营干
 
 
 ## 8. 首版默认关卡配置(DatabaseInitializer 种子数据)
 ## 8. 首版默认关卡配置(DatabaseInitializer 种子数据)
 
 
+### 8.1 主线硬门禁(三关递进)
+
+| 关卡 | gate_type | 归属 | 软/硬 | unlock_target | 条件 | 判据粒度 | 奖励 |
+|------|-----------|------|-------|---------------|------|---------|------|
+| ① 五维自检 | SELF_CHECK | 主线 | 硬门禁 | PERSONAL_SANDBOX | 完成1次 | 个人级 | +60积分 +10能量 |
+| ② 邀请家人 | INVITE_FAMILY | 主线 | 硬门禁 | FAMILY_SANDBOX | 家庭≥2人 | 家庭级 | +80积分 +15能量 |
+| ③ 创建家人 | CREATE_FAMILY_MEMBER | 主线 | 硬门禁 | CHILD_MICRO_ACTION | 孩子≥1人 | 家庭级 | +50积分 +10能量 |
+
+### 8.2 软引导与增值关卡
+
 | 关卡 | gate_type | 归属 | 软/硬 | unlock_target | 条件 | 奖励 |
 | 关卡 | gate_type | 归属 | 软/硬 | unlock_target | 条件 | 奖励 |
 |------|-----------|------|-------|---------------|------|------|
 |------|-----------|------|-------|---------------|------|------|
-| 五维自检 | SELF_CHECK | 主线 | 硬门禁 | SANDBOX | 完成1次 | +60积分 +10能量 |
 | 首次微行动 | MICRO_ACTION | 主线 | 软引导 | MICRO_ACTION_DAILY | count≥1 | +50积分 +5能量 |
 | 首次微行动 | MICRO_ACTION | 主线 | 软引导 | MICRO_ACTION_DAILY | count≥1 | +50积分 +5能量 |
 | 连续打卡3天 | STREAK_DAYS | 主线 | 软引导 | BADGE_MILESTONE | days≥3 | +30积分 +5能量 |
 | 连续打卡3天 | STREAK_DAYS | 主线 | 软引导 | BADGE_MILESTONE | days≥3 | +30积分 +5能量 |
 | 复测对比 | SELF_CHECK | 主线 | 软引导 | TREND_COMPARE | minCount=2 | +60积分 +10能量 |
 | 复测对比 | SELF_CHECK | 主线 | 软引导 | TREND_COMPARE | minCount=2 | +60积分 +10能量 |
-| 菌群检测/DAN测评 | PURCHASE | 增值 | 硬门禁(增值) | PREMIUM_MODULES | 任一支付成功 | +100积分 +20能量 |
+| 健康报告上传 | REPORT_UPLOAD | 增值 | 硬门禁(增值) | HEALTH_INSIGHTS | ≥1份报告 | +100积分 +20能量 |
+| 加入会员 | MEMBERSHIP | 增值 | 硬门禁(增值) | PREMIUM_MODULES | ≥1有效订阅 | +200积分 +50能量 |
+| 首次购物 | PURCHASE | 增值 | 硬门禁(增值) | PREMIUM_MODULES | ≥1笔支付成功订单 | +150积分 +30能量 |
 
 
 > 种子数据写入方式:`DatabaseInitializer.runMigrations()` 迁移(参考项目迁移工作流,编号递增、幂等),管理端可随时增删改。
 > 种子数据写入方式:`DatabaseInitializer.runMigrations()` 迁移(参考项目迁移工作流,编号递增、幂等),管理端可随时增删改。
 
 
@@ -281,11 +389,14 @@ POST /api/admin/unlock-gates/reset-family — 重置某家庭进度(运营干
 | 风险 | 缓解 |
 | 风险 | 缓解 |
 |------|------|
 |------|------|
 | 强制自检导致新用户流失 | 自检入口直达 + 首页引导条强调"5分钟";门禁仅锁沙盘,其余功能(任务/心愿/成长)不受影响 |
 | 强制自检导致新用户流失 | 自检入口直达 + 首页引导条强调"5分钟";门禁仅锁沙盘,其余功能(任务/心愿/成长)不受影响 |
-| 老用户(未自检)突然看不到沙盘 | 全部硬门禁关闭可整体失效(运营开关);上线前对存量家庭数据评估,必要时种子迁移按"有自检记录即解锁"批量预置 |
-| 增值关卡商品匹配口径不清 | condition_params.product_types 用商品 domain/product_type 精确匹配;管理端下拉选择避免手输 |
+| 老用户(未自检)突然看不到沙盘 | 全部硬门禁关闭可整体失效(运营开关);上线前对存量家庭数据评估,批量预置完成自检和邀请家人的老用户 |
+| 自检判据需按 user_id 反查 family_id | `five_dimension_self_checks` 表无 `family_id` 字段,SELF_CHECK 判定需通过 `userMapper` 关联查询。评估加冗余列 `family_id` 以简化查询 |
+| 邀请家人判据覆盖不全 | 邀请流程可能有多种入口(邀请码/二维码/手动添加),需确保所有入口都触发 `refreshFamilyGates` |
+| 会员/购物/报告判据口径 | 每种类型需明确对应的状态字段(如会员订阅的有效期、订单的支付成功状态、报告的已确认状态),管理端配置时需提示 |
+| 通关奖励发放一致性 | 奖励发放需与 `refreshFamilyGates` 绑定,确保同一事务内完成"解锁 + 发放";避免解锁但奖励未到账 |
 | 门禁判定性能 | 判定结果冗余到 family_gate_progress(判定后写库),沙盘接口只读进度表,不重复扫描业务表 |
 | 门禁判定性能 | 判定结果冗余到 family_gate_progress(判定后写库),沙盘接口只读进度表,不重复扫描业务表 |
 | 孩子端首次进入无家庭 | 保持现有 noFamily 逻辑,不套门禁(家庭级判定前置条件:有 family_id) |
 | 孩子端首次进入无家庭 | 保持现有 noFamily 逻辑,不套门禁(家庭级判定前置条件:有 family_id) |
-| 多角色用户(parent+teacher) | 判据基于 family_id 与 family 内任一用户的自检记录,不依赖角色,天然兼容 |
+| 多角色用户(parent+teacher) | 自检判据基于个人 user_id,天然兼容;家庭级判据基于 family_id,不受角色影响 |
 
 
 ---
 ---
 
 
@@ -293,10 +404,10 @@ POST /api/admin/unlock-gates/reset-family — 重置某家庭进度(运营干
 
 
 | 层 | 内容 |
 | 层 | 内容 |
 |----|------|
 |----|------|
-| 单元 | UnlockGateService 四类型判定(SELF_CHECK/PURCHASE/MICRO_ACTION/STREAK_DAYS)+ 边界(count=0、无记录、多记录);getCurrentLockGate 顺序依赖;禁用关卡降级 |
-| 集成 | `/api/unlock/status` 返回结构;`/api/energy/sandbox` 未通关返回 locked;自检 submit 后 refresh 生效;支付回调后 PURCHASE 关卡解锁 |
-| 前端 | gate-lock 组件渲染(锁定态/解锁态);gate-guide-bar 进度计算与消失条件;关卡中心页三区展示 |
-| E2E | 新用户注册→首页沙盘锁定→完成自检→沙盘解锁→关卡中心显示已解锁 |
+| 单元 | UnlockGateService 八类型判定(SELF_CHECK/INVITE_FAMILY/CREATE_FAMILY_MEMBER/PURCHASE/MEMBERSHIP/REPORT_UPLOAD/MICRO_ACTION/STREAK_DAYS)+ 边界条件(count=0、无记录、多记录);getCurrentPersonalLockGate 与 getCurrentFamilyLockGate 顺序依赖;禁用关卡降级;奖励发放幂等 |
+| 集成 | `/api/unlock/status` 返回结构;`/api/energy/sandbox?view=personal` 未通关 SELF_CHECK 返回 locked;`/api/energy/sandbox?view=family` 未通关 INVITE_FAMILY 返回 locked;各触发点(自检/邀请/创建/支付/会员/报告)回调后 refresh + 奖励生效 |
+| 前端 | gate-lock 组件渲染(主线3种+增值3种类型+跳转);WuxingSandbox 切换开关显隐控制;gate-guide-bar 进度计算;关卡中心页三区展示 |
+| E2E | 新用户注册→个人沙盘锁定→完成自检→个人沙盘解锁+奖励到账→邀请家人→全家沙盘解锁+奖励→创建孩子→微行动解锁+奖励→购物/会员/报告增值关卡 |
 
 
 ---
 ---
 
 
@@ -304,12 +415,58 @@ POST /api/admin/unlock-gates/reset-family — 重置某家庭进度(运营干
 
 
 | 模块 | 内容 | 估算 |
 | 模块 | 内容 | 估算 |
 |------|------|------|
 |------|------|------|
-| 后端 | 2 张表迁移 + UnlockGateService + UnlockController + AdminUnlockGateController + sandbox 改造 + 2 处钩子 + 种子数据 | 3-4 天 |
-| 小程序 | gate-lock 组件 + gate-guide-bar + gates.vue 关卡中心 + 4 处沙盘替换 + 自检分数叠加 | 3-4 天 |
-| 管理端 | gates.vue 配置页 + 家庭进度管理 | 1-2 天 |
+| 后端 | 2 张表迁移 + UnlockGateService(8 种判定 + 奖励发放)+ UnlockController + AdminUnlockGateController + sandbox 改造(view 参数)+ 7 处钩子 + 种子数据 | 5-6 天 |
+| 小程序 | WuxingSandbox 个人/全家切换 + gate-lock 组件(6 种类型映射)+ gate-guide-bar + gates.vue 关卡中心 + 8+ 处沙盘替换 + 自检分数叠加 | 4-5 天 |
+| 管理端 | gates.vue 配置页(含新类型)+ 家庭进度管理 | 1-2 天 |
 | 测试 | 单测/集成/前端/E2E | 1-2 天 |
 | 测试 | 单测/集成/前端/E2E | 1-2 天 |
 
 
 **里程碑验收:**
 **里程碑验收:**
-- 后端完成:`/api/unlock/status` + sandbox 门禁可用(Postman 验证 locked 分支)
-- 前端完成:新用户动线"注册→沙盘锁定→自检→解锁"全链路走通
-- 管理端完成:新增关卡/调整顺序/禁用关卡实时生效
+- 后端完成:Postman 验证 `sandbox?view=personal` 与 `sandbox?view=family` 的 locked 分支
+- 前端完成:新用户动线"注册→个人沙盘锁定→自检→解锁个人→邀请家人→解锁全家→创建孩子→解锁微行动"全链路走通
+- 管理端完成:新增关卡(含新类型)/调整顺序/禁用关卡实时生效
+
+---
+
+## 12. 六步法关卡总表
+
+根据书稿"看见 → 最小输入 → 循环 → 反馈 → 传播"算法,结合当前系统能力,将关卡组织为六步递进链路(四步行为闭环 + 两步升级转化):
+
+### 12.1 关卡总表
+
+| 步骤 | 关卡 | gate_type | 可见条件 | 判定依据 | 对应打开功能 | 类型 | 奖励 |
+|:----:|------|-----------|---------|---------|-------------|:----:|:----:|
+| **① 看见** | 五维自检 | SELF_CHECK | 注册后始终可见(首页引导条/关卡中心置顶) | five_dimension_self_checks 存在当前 user_id 记录 ≥1 条 | **个人沙盘**(查看自己的五维数据) | 主线硬门禁 | +60积分 +10能量 |
+| **② 凝聚** | 邀请家人 | INVITE_FAMILY | 关①完成后可见 | user 表该 family_id 成员数 ≥2(本人 + ≥1位家人) | **全家沙盘开关**(沙盘顶部出现个人/全家切换) | 主线硬门禁 | +80积分 +15能量 |
+| **③ 养育** | 创建家人 | CREATE_FAMILY_MEMBER | 关②完成后可见 | family_member 表该 family_id 记录 ≥1(≥1个孩子) | **孩子微行动**(给孩子下发微行动、查看孩子个人沙盘) | 主线硬门禁 | +50积分 +10能量 |
+| **④ 习惯** | 首次微行动 | MICRO_ACTION | 关③完成后可见(软引导) | micro_action_records 该 family 记录 ≥1 | 解锁"每日微行动"推荐(微行动卡常驻) | 软引导 | +50积分 +5能量 |
+| | 连续打卡3天 | STREAK_DAYS | 首次微行动完成 + 打卡启用后可见(软引导) | 家庭成员 max(streakDays) ≥3 | 解锁"连续打卡里程碑"(勋章墙展示) | 软引导 | +30积分 +5能量 |
+| **⑤ 反馈** | 复测对比 | SELF_CHECK(复测) | 首次自检 ≥7天后可见(软引导) | five_dimension_self_checks 记录 ≥2 | **趋势对比**(第二次自检后显示前后雷达图对比) | 软引导 | +60积分 +10能量 |
+| **⑥ 升级** | 首次购物 | PURCHASE | 注册后始终可见(增值,无前置依赖) | 商城订单表存在支付成功订单 ≥1笔 | 解锁"增值内容"(健康报告深度解读、AI分析等) | 增值硬门禁 | +150积分 +30能量 |
+| | 加入会员 | MEMBERSHIP | 注册后始终可见(增值,无前置依赖) | family_memberships / member_subscription 存在有效订阅 | 解锁"会员专属模块"(专属徽章、高级分析等) | 增值硬门禁 | +200积分 +50能量 |
+| | 健康报告上传 | REPORT_UPLOAD | 注册后始终可见(增值,无前置依赖) | health_reports 该 family_id 记录 ≥1条 | 解锁"健康洞察"(报告解读、指标趋势、AI建议) | 增值硬门禁 | +100积分 +20能量 |
+
+> **主线**(①②③)是硬门禁、顺序依赖、逐关点亮;**习惯/反馈**(④⑤)是不锁功能的软引导;**升级**(⑥)无前置、可先于主线完成、独立判据。
+
+### 12.2 六步法说明
+
+| 步骤 | 书稿依据 | 用户心理 | 产品目标 | 对应功能模块 |
+|:----:|---------|---------|---------|-------------|
+| ① 看见 | 第2章"测量先行" | 好奇→共鸣 | 15题自检快速"看见"自己的五维,建立初始认知 | self-check → 个人沙盘 |
+| ② 凝聚 | 第7章"家庭关系" | 归属感 | 从单人→家庭,邀请家人共建家庭数据,从"我"到"我们" | 邀请码/二维码 → 全家沙盘 |
+| ③ 养育 | 第8章"最小输入" | 责任感 | 创建孩子后获得"可行动对象",开始家庭互动 | 创建成员 → 孩子微行动 |
+| ④ 习惯 | 第9章"循环执行" | 成就感 | 微行动+打卡形成日常习惯回路,建立使用粘性 | 微行动卡、每日打卡 |
+| ⑤ 反馈 | 第10章"反馈校验" | 获得感 | 复测对比让用户看见进步,强化"我在变好" | 复测 → 雷达图对比 |
+| ⑥ 升级 | 第11章"系统升级" | 深度参与 | 购物/会员/报告完成免费→付费转化,获得更深价值 | 商城订单、会员订阅、健康报告 |
+
+### 12.3 前端可见性规则
+
+| 用户状态 | 关卡中心显示 |
+|---------|-------------|
+| 未登录 | 不显示关卡,显示引导注册内容 |
+| 已登录·无家庭 | 只显示关①(自检),其他家庭级关卡隐藏(无 family_id 无法判定) |
+| 有家庭·关①未完成 | 关① = CURRENT(高亮),其余主线/增值显示 🔒 锁定态 |
+| 关①完成 | 关① = ✅,关② = CURRENT,后续主线/增值 = 🔒 |
+| 关②完成 | 关② = ✅,关③ = CURRENT,软引导④⑤可见,增值 = 🔒 |
+| 关③完成 | 关③ = ✅,软引导④⑤ = CURRENT,增值 = 🔒 |
+| 主线全完成 | ①②③ = ✅,④⑤ = CURRENT,增值 = 🔒 |
+| 增值关完成 | 对应关卡 = ✅(+奖励到账),其余不受影响 |