Преглед на файлове

fix: 恢复 f18dd86e 误删为 0 字节的 710 个文件内容(来源 c975fa82,docs/tests/ppt-output/cfc-langgraph 等)

E2E Test Bot преди 1 месец
родител
ревизия
554c403f42
променени са 100 файла, в които са добавени 21511 реда и са изтрити 0 реда
  1. 77 0
      .anchored-summary.md
  2. 5 0
      .codegraph/.gitignore
  3. 23 0
      .debug-journal.md
  4. 90 0
      .superpowers/brainstorm/1930451-1784242411/content/data-sections.html
  5. 1 0
      .superpowers/brainstorm/1930451-1784242411/state/server-info
  6. 80 0
      .superpowers/brainstorm/3087381-1785506477/content/overview.html
  7. 1 0
      .superpowers/brainstorm/3087381-1785506477/state/server-info
  8. 56 0
      .superpowers/brainstorm/436318-1778938086/content/color-schemes.html
  9. 1 0
      .superpowers/brainstorm/436318-1778938086/state/server-stopped
  10. 1 0
      .superpowers/brainstorm/436318-1778938086/state/server.pid
  11. 89 0
      .superpowers/brainstorm/440090-1778940565/content/abstract-logo.html
  12. 56 0
      .superpowers/brainstorm/440090-1778940565/content/color-schemes.html
  13. 59 0
      .superpowers/brainstorm/440090-1778940565/content/layout-variants.html
  14. 86 0
      .superpowers/brainstorm/440090-1778940565/content/lineart-logo.html
  15. 40 0
      .superpowers/brainstorm/440090-1778940565/content/logo-concepts.html
  16. 1 0
      .superpowers/brainstorm/440090-1778940565/state/server-stopped
  17. 1 0
      .superpowers/brainstorm/440090-1778940565/state/server.pid
  18. 82 0
      .superpowers/brainstorm/443055-1778945176/content/abstract-logo-v3.html
  19. 106 0
      .superpowers/brainstorm/443055-1778945176/content/abstract-logo-v4.html
  20. 89 0
      .superpowers/brainstorm/443055-1778945176/content/abstract-logo.html
  21. 114 0
      .superpowers/brainstorm/443055-1778945176/content/chinese-roof-v5.html
  22. 79 0
      .superpowers/brainstorm/443055-1778945176/content/clear-v9.html
  23. 76 0
      .superpowers/brainstorm/443055-1778945176/content/flowing-v10.html
  24. 105 0
      .superpowers/brainstorm/443055-1778945176/content/house-v11.html
  25. 104 0
      .superpowers/brainstorm/443055-1778945176/content/house-v6.html
  26. 129 0
      .superpowers/brainstorm/443055-1778945176/content/huizhou-v7.html
  27. 66 0
      .superpowers/brainstorm/443055-1778945176/content/minimal-v8.html
  28. 103 0
      .superpowers/brainstorm/443055-1778945176/content/redesign-v1.html
  29. 93 0
      .superpowers/brainstorm/443055-1778945176/content/reference-style.html
  30. 1 0
      .superpowers/brainstorm/443055-1778945176/state/server-stopped
  31. 1 0
      .superpowers/brainstorm/443055-1778945176/state/server.pid
  32. 1 0
      .superpowers/brainstorm/450935-1778975399/state/server-info
  33. 1 0
      .superpowers/brainstorm/450935-1778975399/state/server.pid
  34. 103 0
      .superpowers/brainstorm/451752-1778976227/content/redesign-v1.html
  35. 1 0
      .superpowers/brainstorm/451752-1778976227/state/server-stopped
  36. 1 0
      .superpowers/brainstorm/451752-1778976227/state/server.pid
  37. 103 0
      .superpowers/brainstorm/460003-1779016953/content/redesign-v1.html
  38. 1 0
      .superpowers/brainstorm/460003-1779016953/state/server-stopped
  39. 1 0
      .superpowers/brainstorm/460003-1779016953/state/server.pid
  40. 103 0
      .superpowers/brainstorm/471855-1779075369/content/redesign-v1.html
  41. 1 0
      .superpowers/brainstorm/471855-1779075369/state/server-stopped
  42. 1 0
      .superpowers/brainstorm/471855-1779075369/state/server.pid
  43. 103 0
      .superpowers/brainstorm/472748-1779077453/content/redesign-v1.html
  44. 1 0
      .superpowers/brainstorm/472748-1779077453/state/server-stopped
  45. 1 0
      .superpowers/brainstorm/472748-1779077453/state/server.pid
  46. 93 0
      .superpowers/brainstorm/474146-1779079636/content/reference-style.html
  47. 1 0
      .superpowers/brainstorm/474146-1779079636/state/server-stopped
  48. 1 0
      .superpowers/brainstorm/474146-1779079636/state/server.pid
  49. 136 0
      .superpowers/brainstorm/9864-1780551730/content/approaches.html
  50. 234 0
      .superpowers/brainstorm/9864-1780551730/content/user-flow.html
  51. 1 0
      .superpowers/brainstorm/9864-1780551730/state/server-stopped
  52. 184 0
      DEPLOYMENT.md
  53. 218 0
      DESIGN.md
  54. 97 0
      articles/D11-draft_v1.md
  55. 108 0
      articles/D11-draft_v2.md
  56. 66 0
      articles/D12-draft_v1.md
  57. 67 0
      articles/D13-draft_v1.md
  58. 45 0
      articles/D14-draft_v1.md
  59. 47 0
      articles/D14-draft_v2.md
  60. 53 0
      articles/D14-draft_v3.md
  61. 54 0
      articles/D15-draft_v1.md
  62. 51 0
      articles/D16-draft_v1.md
  63. 43 0
      articles/D16-draft_v2.md
  64. 58 0
      articles/draft_songchi_mom_v2.md
  65. 5090 0
      book-all.txt
  66. 241 0
      book/design/coaching-integration-design.md
  67. 28 0
      book/design/coaching-integration-plan.md
  68. 81 0
      clear-opencode-sessions.bat
  69. 30 0
      clear_sessions.ps1
  70. 17 0
      create-role-users.sql
  71. 83 0
      docs/CHANGELOG.md
  72. 110 0
      docs/E2E-DEPLOYMENT-GUIDE.md
  73. 198 0
      docs/analysis/article-detail-features.md
  74. 193 0
      docs/analysis/dimension-filter-design.md
  75. 245 0
      docs/analysis/energy-behavior-integration.md
  76. 256 0
      docs/analysis/energy-config-system-design.md
  77. 83 0
      docs/analysis/energy-sources-analysis.md
  78. 410 0
      docs/analysis/family-member-card-fix-plan.md
  79. 164 0
      docs/analysis/family-member-card-gap-analysis.md
  80. 287 0
      docs/analysis/member-selection-analysis.md
  81. 922 0
      docs/architecture/2026-07-20-SB3-upgrade-plan.md
  82. 691 0
      docs/assessment-market-plan.md
  83. 17 0
      docs/backup/README.md
  84. 113 0
      docs/backup/root/API-INTEGRATION.md
  85. 306 0
      docs/backup/root/badge-requirements.md
  86. 792 0
      docs/backup/root/dan-requirements.md
  87. 327 0
      docs/backup/root/focus-requirements.md
  88. 224 0
      docs/backup/root/guide-requirements.md
  89. 188 0
      docs/backup/root/plans/2026-04-17-minigame-as-task-type-design.md
  90. 209 0
      docs/backup/root/report-requirements.md
  91. 366 0
      docs/backup/root/requirements-analysis.md
  92. 209 0
      docs/backup/root/requirements-completion-report.md
  93. 748 0
      docs/backup/root/task-requirements.md
  94. 87 0
      docs/backup/superpowers/plans/2026-05-11-phase3-map-to-dto.md
  95. 354 0
      docs/backup/superpowers/plans/2026-05-13-priority-groups-sfms-migration-parent-tasks.md
  96. 109 0
      docs/backup/superpowers/plans/2026-05-16-parent-redesign.md
  97. 134 0
      docs/backup/superpowers/plans/2026-05-19-guide-invite-code-flow.md
  98. 824 0
      docs/backup/superpowers/plans/2026-05-24-parent-homepage-system-points.md
  99. 1018 0
      docs/backup/superpowers/plans/2026-05-25-invite-card-sharing.md
  100. 2563 0
      docs/backup/superpowers/plans/2026-06-02-care-family-club-design.md

+ 77 - 0
.anchored-summary.md

@@ -0,0 +1,77 @@
+# CFC 膳食管理模块部署 — Session Summary
+
+## Goal
+- 部署 LangGraph meal 路由到 ai.etotem.com.cn,修复 404 错误
+- 验证食材识别和菜单生成 API 正常工作
+
+## Progress
+### Done
+- ✅ 修复 LangGraph 服务缺少 meal 路由的问题
+- ✅ 将 meal.py 和 models/meal.py 复制到服务器容器
+- ✅ 修改 main.py 添加 `app.include_router(meal.router)`
+- ✅ 重启容器并验证端点正常
+- ✅ 测试食材识别 API:成功识别番茄、鸡蛋、洋葱等食材
+- ✅ 测试菜单生成 API:成功生成一日三餐菜单
+
+### Key Files Updated
+- `/app/cfc/cfc-langgraph/app/api/meal.py` - 食材识别和菜单生成端点
+- `/app/cfc/cfc-langgraph/app/models/meal.py` - Pydantic 模型定义
+- `/app/cfc/cfc-langgraph/app/main.py` - 添加 meal 路由注册
+
+### API Endpoints
+| Method | Path | 说明 |
+|--------|------|------|
+| POST | `/api/v1/food/recognize` | 食材识别 - 上传图片 URL,返回识别食材列表 |
+| POST | `/api/v1/menu/generate` | 菜单生成 - 根据食材生成一日三餐菜单 |
+
+### Test Results
+**食材识别** - 成功识别图片中的食材:
+```json
+{
+  "foods": [
+    {"name": "西红柿", "confidence": 0.96, "category": "蔬菜"},
+    {"name": "鸡蛋", "confidence": 0.93, "category": "蛋奶"},
+    {"name": "洋葱", "confidence": 0.88, "category": "蔬菜"},
+    {"name": "青椒", "confidence": 0.85, "category": "蔬菜"},
+    {"name": "大蒜", "confidence": 0.79, "category": "调味"},
+    {"name": "食用油", "confidence": 0.65, "category": "调味"}
+  ]
+}
+```
+
+**菜单生成** - 成功生成一日三餐菜单(含营养信息)
+
+## Deployment Commands
+```bash
+# 复制文件到容器
+scp meal.py root@111.228.6.214:/tmp/
+scp models_meal.py root@111.228.6.214:/tmp/
+sudo docker cp /tmp/meal.py cfc-langgraph-langgraph-svc-1:/app/app/api/meal.py
+sudo docker cp /tmp/models_meal.py cfc-langgraph-langgraph-svc-1:/app/app/models/meal.py
+
+# 修改 main.py 添加路由
+sudo docker exec cfc-langgraph-langgraph-svc-1 sed -i 's/from app.api import health, recommend, chat, analyze, tongue, adapter/from app.api import health, recommend, chat, analyze, tongue, adapter, meal/' /app/app/main.py
+sudo docker exec cfc-langgraph-langgraph-svc-1 sed -i '/app.include_router(report_parse.router)/a app.include_router(meal.router)' /app/app/main.py
+
+# 重启服务
+sudo docker restart cfc-langgraph-langgraph-svc-1
+```
+
+## Current Status
+- ✅ LangGraph 服务运行正常 (端口 9000)
+- ✅ 后端服务运行正常 (端口 9082)
+- ✅ 前端代码已包含膳食管理模块 (7 个新页面)
+- ✅ API 端点可正常访问
+
+## Next Steps
+- 前端测试膳食管理模块完整流程
+- 验证后端 AiGateway 正确调用 LangGraph 服务
+
+## Key Decisions
+- 直接在服务器上修改容器内的文件(因为 Docker 镜像重建需要修改 Dockerfile)
+- meal.py 使用 `/api/v1` 前缀与其他路由保持一致
+
+## Critical Context
+- 后端配置 `python.base-url: https://ai.etotem.com.cn`
+- LangGraph 服务通过 Docker 容器运行
+- 前端通过 `config.js` 自动适配环境(develop/trial/release)

+ 5 - 0
.codegraph/.gitignore

@@ -0,0 +1,5 @@
+# CodeGraph data files — local to each machine, not for committing.
+# Ignore everything in .codegraph/ except this file itself, so transient
+# files (the database, daemon.pid, sockets, logs) never show up in git.
+*
+!.gitignore

+ 23 - 0
.debug-journal.md

@@ -0,0 +1,23 @@
+# Debug Journal — product-edit scroll
+Started: 2026-07-29T08:00:00+08:00
+Goal: Fix product-edit page so long form content can scroll to reveal the save button.
+
+## Environment snapshot (Phase 0)
+- Runtime: Node/Vue CLI web app (exact launcher pending)
+- Entry: pending
+- Ports / sockets: pending
+- Git HEAD: pending
+- References read: debugging/references/runtimes/node.md, debugging/references/methodology/00-setup.md, frontend skill, playwright skill
+
+## Hypotheses
+1. [OPEN] Wrong element owns the scroll container — distinguishing evidence: computed overflow/scrollHeight show body/main not scrollable while inner wrapper clips — if true, fix is: move overflow
+2. [OPEN] Flex min-height / height chain prevents any child from becoming scroll container — distinguishing evidence: ancestor clientHeight equals content height or overflow hidden on chain — if true, fix is: relax height chain
+3. [OPEN] Route/page component itself disables scrolling with scoped/global style or Element component body wrapper — distinguishing evidence: product-edit specific DOM differs from other working pages — if true, fix is: page wrapper patch
+
+## Failed hypothesis round counter
+
+## Artifacts to revert
+- [ ] .debug-journal.md — remove before done if not requested. Revert: rm /app/cfc/.debug-journal.md
+- [ ] local dev server process/session for cfc-web. Revert: kill spawned process/session
+
+## Findings

+ 90 - 0
.superpowers/brainstorm/1930451-1784242411/content/data-sections.html

@@ -0,0 +1,90 @@
+<h2>📊 菌群报告 JSON 数据结构总览</h2>
+<p class="subtitle">从参考 JSON 中提取了以下数据板块</p>
+
+<div class="section">
+  <h3>📋 报告概述(10项评分)</h3>
+  <p>健康总分、菌群健康、慢病控制、营养均衡、肠道预测年龄、肠型、菌群平衡、多样性、有益菌、有害菌、核心菌属</p>
+</div>
+
+<div class="section">
+  <h3>📐 评估板块(7大类)</h3>
+  <ul>
+    <li><strong>疾病风险评估</strong> — 12项(炎症性肠炎、结直肠癌、抑郁症等)</li>
+    <li><strong>主要营养评估</strong> — 5项(碳水/蛋白/脂肪/纤维素/乳制品)</li>
+    <li><strong>氨基酸评估</strong> — 10项(胱氨酸、苯丙氨酸、缬氨酸等)</li>
+    <li><strong>维生素评估</strong> — 9项(A/B1/B2/B5/B6/B12/C/D/叶酸)</li>
+    <li><strong>微量元素评估</strong> — 2项(铁、锌)</li>
+  </ul>
+</div>
+
+<div class="section">
+  <h3>🦠 菌群检出(12个功能分类,共 200+ 菌属条目)</h3>
+  <ul>
+    <li><strong>核心菌属</strong> ~15种(梭菌属、普雷沃氏菌属、拟杆菌属等)</li>
+    <li><strong>益生菌门</strong> — 5个菌门(拟杆菌门、厚壁菌门、变形菌门等)</li>
+    <li><strong>有害菌属</strong> ~5种</li>
+    <li><strong>其它重要菌属</strong></li>
+    <li><strong>病原菌</strong> + 6类疾病相关菌(肥胖/便秘/抑郁/过敏/腹胀/失眠)</li>
+  </ul>
+</div>
+
+<div class="section">
+  <h3>🔬 肠道功能指标(4大类)</h3>
+  <ul>
+    <li><strong>肠道屏障及代谢物</strong> — 炎症、产气、屏障、LPS、胆汁酸等</li>
+    <li><strong>短链脂肪酸</strong> — 丁酸、丙酸、乙酸、异戊酸</li>
+    <li><strong>神经递质及激素</strong> — 血清素、GABA、多巴胺、组胺等</li>
+    <li><strong>抗生素风险评估</strong> — 9类抗生素</li>
+  </ul>
+</div>
+
+<div class="section">
+  <h3>🍽️ 个体化食物推荐表</h3>
+  <p>224种食物,含推荐指数、能量、蛋白、脂肪、碳水、纤维等</p>
+</div>
+
+<hr style="margin: 24px 0;">
+
+<h2>现有的 gut-flora-detail.vue 只展示了:</h2>
+<ul>
+  <li>5个评分圆环(综合评分/肠道健康/营养评分/有益菌/多样性)</li>
+  <li>3组菌群分类(有益菌/有害菌/中性菌)</li>
+  <li>饮食推荐列表</li>
+</ul>
+<p><strong>大量数据未使用</strong> — 疾病风险、营养评估、氨基酸/维生素、代谢物、神经递质、疾病相关菌群等</p>
+
+<hr style="margin: 24px 0;">
+
+<h2>🎯 设计目标?</h2>
+<p class="subtitle">请选择你这次想要的设计范围</p>
+
+<div class="options">
+  <div class="option" data-choice="full" onclick="toggleSelect(this)">
+    <div class="letter">A</div>
+    <div class="content">
+      <h3>全部展示(长页面)</h3>
+      <p>一个完整的长页面展示所有数据板块,用户可查看所有报告维度。带 Tab 导航或区块索引。</p>
+    </div>
+  </div>
+  <div class="option" data-choice="key" onclick="toggleSelect(this)">
+    <div class="letter">B</div>
+    <div class="content">
+      <h3>关键指标聚焦</h3>
+      <p>精选最重要的 5-6 个板块(评分概览、核心菌属、疾病风险、食物推荐、肠道功能),其余折叠或二级导航。</p>
+    </div>
+  </div>
+  <div class="option" data-choice="edit" onclick="toggleSelect(this)">
+    <div class="letter">C</div>
+    <div class="content">
+      <h3>编辑模式优先</h3>
+      <p>页面核心是编辑/修改报告数据(调整菌属值、状态、食物推荐等),查看为辅。</p>
+    </div>
+  </div>
+  <div class="option" data-choice="mixed" onclick="toggleSelect(this)">
+    <div class="letter">D</div>
+    <div class="content">
+      <h3>查看 + 可编辑(混合)</h3>
+      <p>默认查看模式,但可通过编辑按钮进入编辑模式,修改菌群/指标数据后再保存。</p>
+    </div>
+  </div>
+</div>

+ 1 - 0
.superpowers/brainstorm/1930451-1784242411/state/server-info

@@ -0,0 +1 @@
+{"type":"server-started","port":65507,"host":"127.0.0.1","url_host":"localhost","url":"http://localhost:65507","screen_dir":"/sc-data/cfc/.superpowers/brainstorm/1930451-1784242411/content","state_dir":"/sc-data/cfc/.superpowers/brainstorm/1930451-1784242411/state"}

+ 80 - 0
.superpowers/brainstorm/3087381-1785506477/content/overview.html

@@ -0,0 +1,80 @@
+<h2>5 项分享功能改造 — 整体地图</h2>
+<p class="subtitle">先看全局,再逐项细化。下面 5 个位置对应你的 5 条需求</p>
+
+<div class="options">
+  <div class="option" data-choice="1">
+    <div class="letter">1</div>
+    <div class="content">
+      <h3>商品详情 · 增加分享海报</h3>
+      <p>当前无任何分享功能(pages/discover-detail/product-detail)</p>
+    </div>
+  </div>
+  <div class="option" data-choice="2">
+    <div class="letter">2</div>
+    <div class="content">
+      <h3>文章详情 · 改用微信原生分享 + 邀请码</h3>
+      <p>当前有两个按钮:分享(微信原生) + 海报(canvas)</p>
+    </div>
+  </div>
+  <div class="option" data-choice="3">
+    <div class="letter">3</div>
+    <div class="content">
+      <h3>文章海报弹窗 · 重新设计</h3>
+      <p>当前:全屏遮罩 + 保存/取消;目标:不覆盖全屏、可点周边关闭、带简介+邀请语、重新配色</p>
+    </div>
+  </div>
+  <div class="option" data-choice="4">
+    <div class="letter">4</div>
+    <div class="content">
+      <h3>家庭邀请卡海报 · 缩小 + 加文案</h3>
+      <p>当前 500x750 canvas,"XXX邀请你来XXX家"(需家庭名)</p>
+    </div>
+  </div>
+  <div class="option" data-choice="5">
+    <div class="letter">5</div>
+    <div class="content">
+      <h3>财富中心 · 分享给好友</h3>
+      <p>当前已有 onShareAppMessage(原生转发),需确认入口/形式</p>
+    </div>
+  </div>
+</div>
+
+<div class="section">
+  <h3>现有海报长这样(作为对比基线)</h3>
+  <div class="split">
+    <div class="mockup">
+      <div class="mockup-header">家庭邀请卡 SharePoster 500x750</div>
+      <div class="mockup-body" style="text-align:center;padding:16px">
+        <div style="display:inline-block;width:220px;height:330px;border-radius:8px;background:linear-gradient(180deg,#F97316,#EA580C,#D94F0A);position:relative;color:#fff;font-size:11px">
+          <div style="padding-top:10px">浠艾福</div>
+          <div style="opacity:.8;font-size:9px">给全家的一站式幸福提案</div>
+          <div style="background:#FFFCF5;border-radius:8px;margin:26px 10px 0;padding:14px 0;color:#1C1917">
+            <div style="width:56px;height:56px;border-radius:50%;background:#FDE68A;margin:0 auto 6px;display:flex;align-items:center;justify-content:center">👤</div>
+            <div style="font-size:12px">昵称</div>
+            <div style="color:#A8A29E;font-size:9px;margin-top:6px">我的邀请码</div>
+            <div style="color:#F97316;font-size:20px;font-weight:700">ABC123</div>
+            <div style="color:#D6D3D1;font-size:8px;margin-top:8px">长按识别二维码 · 一起加入浠艾福</div>
+            <div style="width:80px;height:80px;background:repeating-conic-gradient(#1C1917 0 25%,#fff 0 50%) 50%/16px 16px;border-radius:6px;margin:8px auto 0"></div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="mockup">
+      <div class="mockup-header">文章海报 ContentSharePoster 500x800</div>
+      <div class="mockup-body" style="text-align:center;padding:16px">
+        <div style="display:inline-block;width:220px;height:352px;border-radius:8px;background:linear-gradient(180deg,#F97316,#EA580C,#D94F0A);position:relative;color:#fff;font-size:11px">
+          <div style="padding-top:10px">浠艾福</div>
+          <div style="opacity:.8;font-size:9px">给全家的一站式幸福提案</div>
+          <div style="background:#FFFCF5;border-radius:8px;margin:26px 10px 0;padding:10px;color:#1C1917;text-align:left">
+            <div style="background:#FEF3C7;border-radius:6px;height:80px;display:flex;align-items:center;justify-content:center;color:#F97316;font-size:10px">封面图</div>
+            <div style="color:#F97316;font-size:9px;margin-top:8px">好文推荐</div>
+            <div style="font-size:11px;margin-top:4px">文章标题标题标题…</div>
+            <div style="color:#A8A29E;font-size:8px;text-align:center;margin-top:10px">长按识别二维码 · 查看详情</div>
+            <div style="width:70px;height:70px;background:repeating-conic-gradient(#1C1917 0 25%,#fff 0 50%) 50%/14px 14px;border-radius:6px;margin:8px auto 0"></div>
+            <div style="color:#F97316;font-size:11px;text-align:center;margin-top:8px">扫码查看详情</div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>

+ 1 - 0
.superpowers/brainstorm/3087381-1785506477/state/server-info

@@ -0,0 +1 @@
+{"type":"server-started","port":50886,"host":"0.0.0.0","url_host":"localhost","url":"http://localhost:50886","screen_dir":"/sc-data/cfc/.superpowers/brainstorm/3087381-1785506477/content","state_dir":"/sc-data/cfc/.superpowers/brainstorm/3087381-1785506477/state"}

+ 56 - 0
.superpowers/brainstorm/436318-1778938086/content/color-schemes.html

@@ -0,0 +1,56 @@
+<h2>选择主色调</h2>
+<p class="subtitle">哪个配色更符合"知行益家"的品牌感觉?<br>(可多选,点击选中/取消)</p>
+
+<div class="options" data-multiselect>
+  <div class="option" data-choice="a" onclick="toggleSelect(this)">
+    <div class="letter">A</div>
+    <div class="content">
+      <h3>温暖橙 + 活力橙红</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FF8C42;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FF6B6B;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FFD93D;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">温暖、活力、亲切 —— 家庭氛围</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="b" onclick="toggleSelect(this)">
+    <div class="letter">B</div>
+    <div class="content">
+      <h3>森林绿 + 青绿</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#4ECDC4;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#44B09E;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#A8E063;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">成长、自然、健康 —— 教育成长</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="c" onclick="toggleSelect(this)">
+    <div class="letter">C</div>
+    <div class="content">
+      <h3>天空蓝 + 紫色</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#667eea;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#764ba2;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#74B9FF;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">智慧、信任、专业 —— 教育科技</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="d" onclick="toggleSelect(this)">
+    <div class="letter">D</div>
+    <div class="content">
+      <h3>暖橙 + 绿色 双色搭配</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FF8C42;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#4ECDC4;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FFD93D;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">家庭温暖 + 成长活力 —— 兼顾两个维度</p>
+    </div>
+  </div>
+</div>

+ 1 - 0
.superpowers/brainstorm/436318-1778938086/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1778939907806}

+ 1 - 0
.superpowers/brainstorm/436318-1778938086/state/server.pid

@@ -0,0 +1 @@
+436326

+ 89 - 0
.superpowers/brainstorm/440090-1778940565/content/abstract-logo.html

@@ -0,0 +1,89 @@
+<h2>抽象艺术风格 Logo (V2)</h2>
+<p class="subtitle">用负空间和曲线,含蓄传达"家·爱·成长"</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="260" viewBox="0 0 240 260" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="mainGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="lightGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#8B9DF6;stop-opacity:0.6" />
+        <stop offset="100%" style="stop-color:#A78BFA;stop-opacity:0.6" />
+      </linearGradient>
+    </defs>
+
+    <!-- 抽象的房子轮廓 — 只用两条流畅弧线勾勒屋顶 -->
+    <path d="M120 15 C60 30, 25 60, 25 75 L25 130 L215 130 L215 75 C215 60, 180 30, 120 15 Z"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3.5" stroke-linecap="round"/>
+
+    <!-- 负空间爱心 — 房子内部自然形成的爱心形状 -->
+    <!-- 左侧弧线 -->
+    <path d="M120 60 C110 50, 88 48, 80 58 C68 73, 80 85, 120 105"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3" stroke-linecap="round" opacity="0.85"/>
+    <!-- 右侧弧线 -->
+    <path d="M120 60 C130 50, 152 48, 160 58 C172 73, 160 85, 120 105"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3" stroke-linecap="round" opacity="0.85"/>
+
+    <!-- 爱心内部填色(半透明渐变) -->
+    <path d="M120 60 C110 50, 88 48, 80 58 C68 73, 80 85, 120 105 C160 85, 172 73, 160 58 C152 48, 130 50, 120 60 Z"
+          fill="url(#lightGrad)"/>
+
+    <!-- 抽象幼苗 — 以书法般流畅线条表现 -->
+    <path d="M175 130 C173 110, 165 85, 158 72"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M158 72 C152 65, 145 68, 142 74"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M158 72 C162 63, 160 56, 155 50"
+          fill="none" stroke="url(#mainGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 抽象星星 — 用三个渐变的圆点代替传统五角星 -->
+    <circle cx="55" cy="55" r="5" fill="url(#mainGrad)" opacity="0.9"/>
+    <circle cx="48" cy="65" r="3" fill="url(#mainGrad)" opacity="0.6"/>
+    <circle cx="62" cy="63" r="3.5" fill="url(#mainGrad)" opacity="0.7"/>
+
+    <!-- 装饰性飘浮圆点 — 增加艺术感 -->
+    <circle cx="40" cy="95" r="2" fill="url(#mainGrad)" opacity="0.25"/>
+    <circle cx="185" cy="50" r="2.5" fill="url(#mainGrad)" opacity="0.3"/>
+    <circle cx="195" cy="70" r="1.5" fill="url(#mainGrad)" opacity="0.2"/>
+    <circle cx="35" cy="110" r="1.5" fill="url(#mainGrad)" opacity="0.2"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家庭 · 成长 · 未来</div>
+</div>
+
+<div style="margin-top:24px;display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">流畅弧线勾勒屋顶</h4>
+    <p style="margin:0;font-size:14px;color:#666;">两条弧线自然形成房子轮廓,简洁而有韵律</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#764ba2;">负空间爱心</h4>
+    <p style="margin:0;font-size:14px;color:#666;">两个弧线在房子内部自然交汇成爱心形状</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">书法式幼苗线条</h4>
+    <p style="margin:0;font-size:14px;color:#666;">一笔呵成的流畅曲线,有毛笔的力度感</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#764ba2;">抽象星点</h4>
+    <p style="margin:0;font-size:14px;color:#666;">三颗渐变圆点代替五角星,更现代简约</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>✨ 改进点:</strong></p>
+  <ul style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    <li>房子用流畅弧线而非直线,更有韵律感</li>
+    <li>爱心通过负空间自然形成(两条弧线交汇),不直接画心形</li>
+    <li>幼苗线条更接近书法笔触,有力量感</li>
+    <li>星星改为抽象圆点组合,更现代</li>
+    <li>加入装饰性小圆点,增加整体艺术氛围</li>
+  </ul>
+</div>

+ 56 - 0
.superpowers/brainstorm/440090-1778940565/content/color-schemes.html

@@ -0,0 +1,56 @@
+<h2>选择主色调</h2>
+<p class="subtitle">哪个配色更符合"知行益家"的品牌感觉?(可多选)</p>
+
+<div class="options" data-multiselect>
+  <div class="option" data-choice="a" onclick="toggleSelect(this)">
+    <div class="letter">A</div>
+    <div class="content">
+      <h3>温暖橙 + 橙红</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FF8C42;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FF6B6B;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FFD93D;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">温暖、活力、亲切 — 家庭氛围</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="b" onclick="toggleSelect(this)">
+    <div class="letter">B</div>
+    <div class="content">
+      <h3>森林绿 + 青绿</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#4ECDC4;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#44B09E;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#A8E063;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">成长、自然、健康 — 教育成长</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="c" onclick="toggleSelect(this)">
+    <div class="letter">C</div>
+    <div class="content">
+      <h3>天空蓝 + 紫色</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#667eea;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#764ba2;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#74B9FF;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">智慧、信任、专业 — 教育科技</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="d" onclick="toggleSelect(this)">
+    <div class="letter">D</div>
+    <div class="content">
+      <h3>暖橙 + 绿色 双色搭配</h3>
+      <div style="display:flex;gap:8px;margin-top:8px;">
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FF8C42;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#4ECDC4;"></span>
+        <span style="display:inline-block;width:40px;height:40px;border-radius:8px;background:#FFD93D;"></span>
+      </div>
+      <p style="margin-top:8px;color:#666;font-size:14px;">家庭温暖 + 成长活力 — 兼顾两个维度</p>
+    </div>
+  </div>
+</div>

+ 59 - 0
.superpowers/brainstorm/440090-1778940565/content/layout-variants.html

@@ -0,0 +1,59 @@
+<h2>B 方案细化:布局与风格</h2>
+<p class="subtitle">房子+爱心+树苗,蓝紫配色。选择你喜欢的布局</p>
+
+<div class="options">
+  <div class="option" data-choice="a" onclick="toggleSelect(this)">
+    <div class="letter">A</div>
+    <div class="content">
+      <h3>竖向布局 — Logo在上</h3>
+      <div style="text-align:center;padding:16px;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:16px;margin:8px 0;">
+        <div style="display:inline-flex;align-items:center;justify-content:center;width:80px;height:80px;background:rgba(255,255,255,0.2);border-radius:20px;">
+          <span style="font-size:48px;">🏡</span>
+        </div>
+        <div style="margin-top:8px;color:#fff;font-weight:bold;font-size:20px;">知行益家</div>
+        <div style="color:rgba(255,255,255,0.8);font-size:12px;">家庭·成长·未来</div>
+      </div>
+      <p style="color:#666;font-size:14px;">适合小程序头像、App icon</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="b" onclick="toggleSelect(this)">
+    <div class="letter">B</div>
+    <div class="content">
+      <h3>横向布局 — 图标在左</h3>
+      <div style="display:flex;align-items:center;gap:16px;padding:16px;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:16px;margin:8px 0;">
+        <div style="display:flex;align-items:center;justify-content:center;width:64px;height:64px;background:rgba(255,255,255,0.2);border-radius:16px;flex-shrink:0;">
+          <span style="font-size:40px;">🏡</span>
+        </div>
+        <div style="text-align:left;">
+          <div style="color:#fff;font-weight:bold;font-size:22px;">知行益家</div>
+          <div style="color:rgba(255,255,255,0.8);font-size:12px;">家庭·成长·未来</div>
+        </div>
+      </div>
+      <p style="color:#666;font-size:14px;">适合网页 header、小程序导航栏</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="c" onclick="toggleSelect(this)">
+    <div class="letter">C</div>
+    <div class="content">
+      <h3>纯图形 — 无文字</h3>
+      <div style="text-align:center;padding:16px;">
+        <div style="display:inline-flex;align-items:center;justify-content:center;width:96px;height:96px;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:24px;">
+          <span style="font-size:56px;">🏡</span>
+        </div>
+      </div>
+      <p style="color:#666;font-size:14px;">适合 favicon、小尺寸场景</p>
+    </div>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;"><strong>关于图形细化</strong> — 最终 logo 图形不是 emoji,而是将房子、爱心、树苗融合为一个简洁的矢量图形:</p>
+  <ul style="font-size:14px;color:#666;">
+    <li>🏠 房子的屋顶采用蓝紫渐变</li>
+    <li>💜 房子正面融入一颗爱心(代表家庭的爱)</li>
+    <li>🌱 房子底部或旁边有一片新芽(代表孩子的成长)</li>
+    <li>⭐ 屋顶上方可加一颗小星星(代表积分成就)</li>
+  </ul>
+</div>

+ 86 - 0
.superpowers/brainstorm/440090-1778940565/content/lineart-logo.html

@@ -0,0 +1,86 @@
+<h2>简洁线条风格 Logo 设计</h2>
+<p class="subtitle">蓝紫渐变 + 简单线条,房子融合爱心与幼苗</p>
+
+<div style="text-align:center;padding:20px;">
+  <svg width="200" height="220" viewBox="0 0 200 220" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="bluePurpleGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="lightGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#8B9DF6;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#A78BFA;stop-opacity:1" />
+      </linearGradient>
+    </defs>
+
+    <!-- 房子主体 - 简约线条风格 -->
+    <!-- 屋顶 -->
+    <path d="M100 10 L20 75 L40 75 L40 110 L160 110 L160 75 L180 75 Z"
+          fill="none" stroke="url(#bluePurpleGrad)" stroke-width="4" stroke-linejoin="round"/>
+
+    <!-- 屋顶内部线条(增加层次感) -->
+    <line x1="100" y1="10" x2="100" y2="60" stroke="url(#lightGrad)" stroke-width="2" stroke-dasharray="4,4"/>
+
+    <!-- 烟囱 -->
+    <rect x="130" y="30" width="20" height="35" rx="3"
+          fill="none" stroke="url(#bluePurpleGrad)" stroke-width="3"/>
+
+    <!-- 爱心 (在房子正中间) -->
+    <path d="M100 72 C100 65, 85 55, 78 62 C71 69, 78 78, 100 90 C122 78, 129 69, 122 62 C115 55, 100 65, 100 72 Z"
+          fill="url(#bluePurpleGrad)" opacity="0.9"/>
+
+    <!-- 幼苗 (在房子右侧底部) -->
+    <path d="M155 110 C155 95, 148 85, 142 82"
+          fill="none" stroke="url(#bluePurpleGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M142 82 C138 78, 133 80, 130 85"
+          fill="none" stroke="url(#bluePurpleGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M142 82 C145 76, 142 72, 138 70"
+          fill="none" stroke="url(#bluePurpleGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 星星 (屋顶上方) -->
+    <polygon points="60,25 63,35 73,35 65,42 68,52 60,46 52,52 55,42 47,35 57,35"
+             fill="url(#bluePurpleGrad)" opacity="0.8"/>
+
+    <!-- 地面线 -->
+    <line x1="25" y1="110" x2="175" y2="110" stroke="url(#bluePurpleGrad)" stroke-width="2" opacity="0.3"/>
+
+    <!-- 门 -->
+    <rect x="85" y="90" width="30" height="20" rx="3"
+          fill="url(#bluePurpleGrad)" opacity="0.15"/>
+  </svg>
+
+  <div style="margin-top:12px;">
+    <span style="font-size:28px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:14px;margin-top:4px;">家庭 · 成长 · 未来</div>
+</div>
+
+<hr style="margin:24px 0;border:none;border-top:1px solid #eee;">
+
+<h3>设计说明</h3>
+<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 8px 0;color:#667eea;">🏠 房子</h4>
+    <p style="margin:0;font-size:14px;color:#666;">简洁屋顶线条,代表家庭的温暖港湾</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 8px 0;color:#764ba2;">💜 爱心</h4>
+    <p style="margin:0;font-size:14px;color:#666;">房子正中的爱心,象征父母对孩子的爱</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 8px 0;color:#667eea;">🌱 幼苗</h4>
+    <p style="margin:0;font-size:14px;color:#666;">房子旁的新芽,代表孩子的成长与希望</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 8px 0;color:#764ba2;">⭐ 星星</h4>
+    <p style="margin:0;font-size:14px;color:#666;">屋顶的星星,寓意积分奖励与成就目标</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>✅ 当前设计确认</strong> — 竖向布局 / 蓝紫渐变 / 简洁线条 / 房子+爱心+幼苗+星星</p>
+  <p style="font-size:14px;color:#666;margin-top:8px;">如果你觉得这个方向不错,我下一步会整理为正式的设计文档。</p>
+</div>

+ 40 - 0
.superpowers/brainstorm/440090-1778940565/content/logo-concepts.html

@@ -0,0 +1,40 @@
+<h2>Logo 设计方案(A/B/C)</h2>
+<p class="subtitle">房子元素 + 蓝紫配色。哪种更有感觉?点击选中</p>
+
+<div class="options">
+  <div class="option" data-choice="a" onclick="toggleSelect(this)">
+    <div class="letter">A</div>
+    <div class="content">
+      <h3>🏠 房子 + 星星</h3>
+      <div style="font-size:64px;text-align:center;margin:12px 0;">🏠✨</div>
+      <p><strong>房子 + 星星/勋章</strong> — 房子代表家庭,屋顶上一颗星星代表成长目标和成就</p>
+      <p style="color:#666;font-size:14px;">下方:<strong>知⾏益家</strong> 文字</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="b" onclick="toggleSelect(this)">
+    <div class="letter">B</div>
+    <div class="content">
+      <h3>🏡 房子 + 爱心 + 树苗</h3>
+      <div style="font-size:64px;text-align:center;margin:12px 0;">🏡💚🌱</div>
+      <p><strong>房子融合爱心和幼苗</strong> — 家庭的爱承载孩子的成长</p>
+      <p style="color:#666;font-size:14px;">下方:<strong>知⾏益家</strong> 文字</p>
+    </div>
+  </div>
+
+  <div class="option" data-choice="c" onclick="toggleSelect(this)">
+    <div class="letter">C</div>
+    <div class="content">
+      <h3>🔤 房子形状的"知"字</h3>
+      <div style="text-align:center;margin:12px 0;">
+        <span style="display:inline-block;font-size:48px;font-weight:bold;color:#667eea;border:3px solid #667eea;border-radius:16px;padding:8px 20px;">知</span>
+      </div>
+      <p><strong>汉字"知"融于房子轮廓</strong> — 品牌名首字与房子结合,简洁有辨识度</p>
+      <p style="color:#666;font-size:14px;">下方:<strong>⾏益家</strong> 文字(或完整四字)</p>
+    </div>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;"><strong>💡 我的推荐:方案 C</strong> — "知"字房子设计最独特,兼具图形识别度和文字含义,适合小程序头像和品牌传播。方案 A 更直观亲和,适合家庭用户。</p>
+</div>

+ 1 - 0
.superpowers/brainstorm/440090-1778940565/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1778944568942}

+ 1 - 0
.superpowers/brainstorm/440090-1778940565/state/server.pid

@@ -0,0 +1 @@
+440098

+ 82 - 0
.superpowers/brainstorm/443055-1778945176/content/abstract-logo-v3.html

@@ -0,0 +1,82 @@
+<h2>抽象艺术风格 Logo (V3 — 红心)</h2>
+<p class="subtitle">蓝紫房子 + 红色爱心,冷暖对比更有层次</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="260" viewBox="0 0 240 260" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="mainGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="heartGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="heartLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.25" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.25" />
+      </linearGradient>
+    </defs>
+
+    <path d="M120 15 C60 30, 25 60, 25 75 L25 130 L215 130 L215 75 C215 60, 180 30, 120 15 Z"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3.5" stroke-linecap="round"/>
+
+    <path d="M120 60 C110 50, 88 48, 80 58 C68 73, 80 85, 120 105"
+          fill="none" stroke="url(#heartGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M120 60 C130 50, 152 48, 160 58 C172 73, 160 85, 120 105"
+          fill="none" stroke="url(#heartGrad)" stroke-width="3" stroke-linecap="round"/>
+
+    <path d="M120 60 C110 50, 88 48, 80 58 C68 73, 80 85, 120 105 C160 85, 172 73, 160 58 C152 48, 130 50, 120 60 Z"
+          fill="url(#heartLight)"/>
+
+    <path d="M175 130 C173 110, 165 85, 158 72"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M158 72 C152 65, 145 68, 142 74"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M158 72 C162 63, 160 56, 155 50"
+          fill="none" stroke="url(#mainGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <circle cx="55" cy="55" r="5" fill="url(#mainGrad)" opacity="0.9"/>
+    <circle cx="48" cy="65" r="3" fill="url(#mainGrad)" opacity="0.6"/>
+    <circle cx="62" cy="63" r="3.5" fill="url(#mainGrad)" opacity="0.7"/>
+
+    <circle cx="40" cy="95" r="2" fill="url(#mainGrad)" opacity="0.25"/>
+    <circle cx="185" cy="50" r="2.5" fill="url(#mainGrad)" opacity="0.3"/>
+    <circle cx="195" cy="70" r="1.5" fill="url(#mainGrad)" opacity="0.2"/>
+    <circle cx="35" cy="110" r="1.5" fill="url(#mainGrad)" opacity="0.2"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家庭 · 成长 · 未来</div>
+</div>
+
+<div style="margin-top:24px;display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">蓝紫房子</h4>
+    <p style="margin:0;font-size:14px;color:#666;">流畅弧线勾勒,代表家庭的温暖港湾</p>
+  </div>
+  <div style="background:#fff0f0;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#FF6B6B;">红色爱心</h4>
+    <p style="margin:0;font-size:14px;color:#666;">负空间形成,冷暖对比突出,代表父母的爱</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">蓝紫幼苗</h4>
+    <p style="margin:0;font-size:14px;color:#666;">书法笔触线条,代表孩子的成长</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#764ba2;">抽象星点</h4>
+    <p style="margin:0;font-size:14px;color:#666;">三颗渐变圆点,寓意积分成就</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>配色方案:</strong></p>
+  <div style="display:flex;gap:16px;margin-top:12px;flex-wrap:wrap;">
+    <span style="display:flex;align-items:center;gap:6px;font-size:13px;"><span style="display:inline-block;width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,#667eea,#764ba2);"></span> 蓝紫渐变 #667eea → #764ba2</span>
+    <span style="display:flex;align-items:center;gap:6px;font-size:13px;"><span style="display:inline-block;width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,#FF6B6B,#FF4757);"></span> 红色渐变 #FF6B6B → #FF4757</span>
+  </div>
+</div>

+ 106 - 0
.superpowers/brainstorm/443055-1778945176/content/abstract-logo-v4.html

@@ -0,0 +1,106 @@
+<h2>Logo V4 — "家是小国,国是大家"</h2>
+<p class="subtitle">传统中式屋顶线条,圆形圆满构图,家国一体</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="260" viewBox="0 0 240 260" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="blueGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.2" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.2" />
+      </linearGradient>
+    </defs>
+
+    <!-- 外层圆形 — 象征天圆地方、家国一体、圆满和谐 -->
+    <circle cx="120" cy="75" r="62"
+            fill="none" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.2" stroke-dasharray="4,4"/>
+
+    <!-- 中式屋顶 — 飞檐翘角,家与国的连接 -->
+    <!-- 屋顶主体:传统中式弧线屋顶 -->
+    <path d="M120 18 C80 25, 40 50, 30 65
+             L30 68 C35 60, 55 50, 70 48
+             C55 52, 40 58, 35 65
+             L35 130 L205 130 L205 65
+             C200 58, 185 52, 170 48
+             C185 50, 205 60, 210 68
+             L210 65 C200 50, 160 25, 120 18 Z"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3" stroke-linejoin="round"/>
+
+    <!-- 屋顶下方横梁 — 家国根基 -->
+    <line x1="30" y1="68" x2="210" y2="68" stroke="url(#blueGrad)" stroke-width="2.5" opacity="0.6"/>
+
+    <!-- 房子主体轮廓(简洁) -->
+    <rect x="35" y="68" width="170" height="62" rx="4"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+
+    <!-- 爱心 — 家国情怀的核心 -->
+    <path d="M120 78 C110 68, 90 66, 82 76 C70 90, 82 102, 120 118"
+          fill="none" stroke="url(#redGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M120 78 C130 68, 150 66, 158 76 C170 90, 158 102, 120 118"
+          fill="none" stroke="url(#redGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M120 78 C110 68, 90 66, 82 76 C70 90, 82 102, 120 118 C158 102, 170 90, 158 76 C150 66, 130 68, 120 78 Z"
+          fill="url(#redLight)"/>
+
+    <!-- 幼苗 — 从爱心中生长,代表家庭的未来、国家的希望 -->
+    <path d="M120 118 C120 108, 118 100, 115 95"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M115 95 C110 90, 108 92, 106 96"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M115 95 C118 88, 120 85, 118 80"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 三颗星 — 从左到右,代表家庭的阶段性成就,也呼应国旗的星 -->
+    <circle cx="58" cy="82" r="4" fill="url(#redGrad)" opacity="0.7"/>
+    <circle cx="52" cy="90" r="2.5" fill="url(#redGrad)" opacity="0.5"/>
+    <circle cx="64" cy="89" r="2" fill="url(#redGrad)" opacity="0.4"/>
+
+    <!-- 装饰点 — 艺术氛围 -->
+    <circle cx="175" cy="55" r="2" fill="url(#blueGrad)" opacity="0.2"/>
+    <circle cx="185" cy="75" r="1.5" fill="url(#blueGrad)" opacity="0.15"/>
+    <circle cx="55" cy="110" r="1.5" fill="url(#blueGrad)" opacity="0.15"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">中式飞檐屋顶</h4>
+    <p style="margin:0;font-size:14px;color:#666;">传统中式建筑弧线,连接家庭与民族文化根脉</p>
+  </div>
+  <div style="background:#fff0f0;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#FF6B6B;">红色爱心</h4>
+    <p style="margin:0;font-size:14px;color:#666;">家国情怀的核心,小家的爱汇聚成大家的情</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">爱心中的幼苗</h4>
+    <p style="margin:0;font-size:14px;color:#666;">从爱心中生长出的新芽,代表孩子的成长也是国家的未来</p>
+  </div>
+  <div style="background:#fff0f0;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#FF6B6B;">三颗红星</h4>
+    <p style="margin:0;font-size:14px;color:#666;">左侧三颗红星,既代表家庭阶段性成就,也呼应家国情怀</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#fffbe6;border-radius:12px;border:1px solid #ffe58f;">
+  <p style="font-size:14px;color:#b8860b;margin:0;"><strong>💡 理念解读:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    圆形外框 → 天圆地方,家国圆满<br>
+    中式飞檐 → 传统文化根脉,家与国的精神连接<br>
+    红心 + 幼苗 → 小家的爱孕育未来的希望<br>
+    三颗红星 → 家庭成就,也暗合家国情怀<br>
+    整体 → 家是最小国,国是千万家
+  </p>
+</div>

+ 89 - 0
.superpowers/brainstorm/443055-1778945176/content/abstract-logo.html

@@ -0,0 +1,89 @@
+<h2>抽象艺术风格 Logo (V2)</h2>
+<p class="subtitle">用负空间和曲线,含蓄传达"家·爱·成长"</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="260" viewBox="0 0 240 260" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="mainGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="lightGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#8B9DF6;stop-opacity:0.6" />
+        <stop offset="100%" style="stop-color:#A78BFA;stop-opacity:0.6" />
+      </linearGradient>
+    </defs>
+
+    <!-- 抽象的房子轮廓 — 只用两条流畅弧线勾勒屋顶 -->
+    <path d="M120 15 C60 30, 25 60, 25 75 L25 130 L215 130 L215 75 C215 60, 180 30, 120 15 Z"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3.5" stroke-linecap="round"/>
+
+    <!-- 负空间爱心 — 房子内部自然形成的爱心形状 -->
+    <!-- 左侧弧线 -->
+    <path d="M120 60 C110 50, 88 48, 80 58 C68 73, 80 85, 120 105"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3" stroke-linecap="round" opacity="0.85"/>
+    <!-- 右侧弧线 -->
+    <path d="M120 60 C130 50, 152 48, 160 58 C172 73, 160 85, 120 105"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3" stroke-linecap="round" opacity="0.85"/>
+
+    <!-- 爱心内部填色(半透明渐变) -->
+    <path d="M120 60 C110 50, 88 48, 80 58 C68 73, 80 85, 120 105 C160 85, 172 73, 160 58 C152 48, 130 50, 120 60 Z"
+          fill="url(#lightGrad)"/>
+
+    <!-- 抽象幼苗 — 以书法般流畅线条表现 -->
+    <path d="M175 130 C173 110, 165 85, 158 72"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M158 72 C152 65, 145 68, 142 74"
+          fill="none" stroke="url(#mainGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M158 72 C162 63, 160 56, 155 50"
+          fill="none" stroke="url(#mainGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 抽象星星 — 用三个渐变的圆点代替传统五角星 -->
+    <circle cx="55" cy="55" r="5" fill="url(#mainGrad)" opacity="0.9"/>
+    <circle cx="48" cy="65" r="3" fill="url(#mainGrad)" opacity="0.6"/>
+    <circle cx="62" cy="63" r="3.5" fill="url(#mainGrad)" opacity="0.7"/>
+
+    <!-- 装饰性飘浮圆点 — 增加艺术感 -->
+    <circle cx="40" cy="95" r="2" fill="url(#mainGrad)" opacity="0.25"/>
+    <circle cx="185" cy="50" r="2.5" fill="url(#mainGrad)" opacity="0.3"/>
+    <circle cx="195" cy="70" r="1.5" fill="url(#mainGrad)" opacity="0.2"/>
+    <circle cx="35" cy="110" r="1.5" fill="url(#mainGrad)" opacity="0.2"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家庭 · 成长 · 未来</div>
+</div>
+
+<div style="margin-top:24px;display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">流畅弧线勾勒屋顶</h4>
+    <p style="margin:0;font-size:14px;color:#666;">两条弧线自然形成房子轮廓,简洁而有韵律</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#764ba2;">负空间爱心</h4>
+    <p style="margin:0;font-size:14px;color:#666;">两个弧线在房子内部自然交汇成爱心形状</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">书法式幼苗线条</h4>
+    <p style="margin:0;font-size:14px;color:#666;">一笔呵成的流畅曲线,有毛笔的力度感</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#764ba2;">抽象星点</h4>
+    <p style="margin:0;font-size:14px;color:#666;">三颗渐变圆点代替五角星,更现代简约</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>✨ 改进点:</strong></p>
+  <ul style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    <li>房子用流畅弧线而非直线,更有韵律感</li>
+    <li>爱心通过负空间自然形成(两条弧线交汇),不直接画心形</li>
+    <li>幼苗线条更接近书法笔触,有力量感</li>
+    <li>星星改为抽象圆点组合,更现代</li>
+    <li>加入装饰性小圆点,增加整体艺术氛围</li>
+  </ul>
+</div>

+ 114 - 0
.superpowers/brainstorm/443055-1778945176/content/chinese-roof-v5.html

@@ -0,0 +1,114 @@
+<h2>Logo V5 — 中式飞檐,家国一体</h2>
+<p class="subtitle">徽派建筑飞檐翘角 + 红色爱心 + 幼苗</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="260" viewBox="0 0 240 260" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="blueGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.2" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.2" />
+      </linearGradient>
+    </defs>
+
+    <!-- 中式屋顶 — 硬山顶/歇山顶风格,飞檐翘角 -->
+    <!-- 屋顶正脊 -->
+    <line x1="70" y1="28" x2="170" y2="28" stroke="url(#blueGrad)" stroke-width="4" stroke-linecap="round"/>
+    <!-- 屋顶左斜面 -->
+    <line x1="70" y1="28" x2="30" y2="65" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 屋顶右斜面 -->
+    <line x1="170" y1="28" x2="210" y2="65" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 左飞檐翘角(上翘曲线) -->
+    <path d="M30 65 C25 58, 18 52, 15 48" fill="none" stroke="url(#blueGrad)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 右飞檐翘角(上翘曲线) -->
+    <path d="M210 65 C215 58, 222 52, 225 48" fill="none" stroke="url(#blueGrad)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 屋顶内部瓦片纹理(几道平行弧线) -->
+    <path d="M70 28 L40 58" fill="none" stroke="url(#blueGrad)" stroke-width="1" opacity="0.25"/>
+    <path d="M80 28 L50 58" fill="none" stroke="url(#blueGrad)" stroke-width="1" opacity="0.2"/>
+    <path d="M170 28 L200 58" fill="none" stroke="url(#blueGrad)" stroke-width="1" opacity="0.25"/>
+    <path d="M160 28 L190 58" fill="none" stroke="url(#blueGrad)" stroke-width="1" opacity="0.2"/>
+
+    <!-- 房子主体 -->
+    <rect x="30" y="65" width="180" height="65" rx="3"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+
+    <!-- 中式门洞 — 传统拱形门 -->
+    <path d="M105 130 L105 95 C105 88, 135 88, 135 95 L135 130"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <!-- 门内红色爱心 -->
+    <path d="M120 105 C116 100, 110 99, 107 103 C103 108, 107 113, 120 120"
+          fill="none" stroke="url(#redGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M120 105 C124 100, 130 99, 133 103 C137 108, 133 113, 120 120"
+          fill="none" stroke="url(#redGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M120 105 C116 100, 110 99, 107 103 C103 108, 107 113, 120 120 C133 113, 137 108, 133 103 C130 99, 124 100, 120 105 Z"
+          fill="url(#redLight)"/>
+
+    <!-- 幼苗 — 从门下方伸出 -->
+    <path d="M120 130 C118 120, 115 112, 112 108"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M112 108 C108 104, 106 106, 104 109"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M112 108 C115 102, 117 98, 114 94"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 左窗 — 中式窗棂 -->
+    <rect x="48" y="78" width="24" height="24" rx="2"
+          fill="none" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.5"/>
+    <line x1="48" y1="90" x2="72" y2="90" stroke="url(#blueGrad)" stroke-width="1" opacity="0.3"/>
+    <line x1="60" y1="78" x2="60" y2="102" stroke="url(#blueGrad)" stroke-width="1" opacity="0.3"/>
+
+    <!-- 右窗 — 中式窗棂 -->
+    <rect x="168" y="78" width="24" height="24" rx="2"
+          fill="none" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.5"/>
+    <line x1="168" y1="90" x2="192" y2="90" stroke="url(#blueGrad)" stroke-width="1" opacity="0.3"/>
+    <line x1="180" y1="78" x2="180" y2="102" stroke="url(#blueGrad)" stroke-width="1" opacity="0.3"/>
+
+    <!-- 星星 — 屋顶上方 -->
+    <polygon points="45,35 47,41 53,41 48,45 50,51 45,47 40,51 42,45 37,41 43,41"
+             fill="url(#redGrad)" opacity="0.8"/>
+    <polygon points="190,32 191.5,36 196,36 192.5,39 194,43 190,40 186,43 187.5,39 184,36 188.5,36"
+             fill="url(#redGrad)" opacity="0.6"/>
+    <polygon points="117,16 118,20 122,20 119,23 120,27 117,24 114,27 115,23 112,20 116,20"
+             fill="url(#redGrad)" opacity="0.7"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">中式飞檐屋顶</h4>
+    <p style="margin:0;font-size:14px;color:#666;">硬山顶+飞檐翘角,正脊分明,四角上翘,典型中式建筑语言</p>
+  </div>
+  <div style="background:#fff0f0;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#FF6B6B;">拱门中的红心</h4>
+    <p style="margin:0;font-size:14px;color:#666;">传统拱形门洞内嵌爱心,家国情怀的核心</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">幼苗从门中生长</h4>
+    <p style="margin:0;font-size:14px;color:#666;">从家门中生长出的新芽,代表家庭孕育未来</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">中式窗棂 + 红星</h4>
+    <p style="margin:0;font-size:14px;color:#666;">左右对称窗格,屋顶三颗红星,家国一体</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>🏛 建筑风格参考:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    屋顶采用 <strong>硬山顶 + 飞檐</strong> 风格 — 正脊水平、两坡向下、檐角上翘,是徽派建筑和中国传统建筑最典型的语言。区别于蒙古包的圆顶弧线,中式建筑的灵魂在于 <strong>"线"</strong> 而非 "弧"。
+  </p>
+</div>

+ 79 - 0
.superpowers/brainstorm/443055-1778945176/content/clear-v9.html

@@ -0,0 +1,79 @@
+<h2>Logo V9 — 清晰马头墙 + 知行线条</h2>
+<p class="subtitle">马头墙轮廓分明,"知""行"以线条融入墙面</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="220" height="230" viewBox="0 0 220 230" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="blueGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.15" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.15" />
+      </linearGradient>
+    </defs>
+
+    <!-- 马头墙轮廓 — 左高右低,四层阶梯 -->
+    <path d="M20 110 L20 25 L65 25 L65 50 L105 50 L105 75 L145 75 L145 110 Z"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linejoin="round"/>
+
+    <!-- 墙头黛瓦(每层顶部的横线) -->
+    <line x1="16" y1="25" x2="69" y2="25" stroke="url(#blueGrad)" stroke-width="4" stroke-linecap="round"/>
+    <line x1="61" y1="50" x2="109" y2="50" stroke="url(#blueGrad)" stroke-width="4" stroke-linecap="round"/>
+    <line x1="101" y1="75" x2="149" y2="75" stroke="url(#blueGrad)" stroke-width="4" stroke-linecap="round"/>
+
+    <!-- 中央爱心 -->
+    <path d="M82 82 C76 74, 64 72, 58 78 C50 86, 58 96, 82 108"
+          fill="none" stroke="url(#redGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M82 82 C88 74, 100 72, 106 78 C114 86, 106 96, 82 108"
+          fill="none" stroke="url(#redGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M82 82 C76 74, 64 72, 58 78 C50 86, 58 96, 82 108 C106 96, 114 86, 106 78 C100 72, 88 74, 82 82 Z"
+          fill="url(#redLight)"/>
+
+    <!-- 幼苗从爱心中生长 -->
+    <path d="M82 108 C80 100, 78 94, 76 90"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M76 90 C72 86, 70 88, 68 92"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M76 90 C80 84, 78 80, 75 78"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- "知" 在左侧墙 — 以纵向线条暗示 -->
+    <line x1="35" y1="38" x2="35" y2="98" stroke="url(#blueGrad)" stroke-width="2" opacity="0.4" stroke-linecap="round"/>
+    <line x1="28" y1="58" x2="52" y2="58" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.3" stroke-linecap="round"/>
+    <line x1="28" y1="72" x2="52" y2="72" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.3" stroke-linecap="round"/>
+    <rect x="42" y="62" width="10" height="10" rx="1" fill="none" stroke="url(#blueGrad)" stroke-width="1.2" opacity="0.3"/>
+
+    <!-- "行" 在右侧墙 — 以横向线条暗示 -->
+    <line x1="120" y1="88" x2="138" y2="88" stroke="url(#blueGrad)" stroke-width="2" opacity="0.4" stroke-linecap="round"/>
+    <line x1="125" y1="82" x2="125" y2="102" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.3" stroke-linecap="round"/>
+    <line x1="118" y1="88" x2="132" y2="98" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.3" stroke-linecap="round"/>
+
+    <!-- 右上角红星 -->
+    <polygon points="185,30 187,36 193,36 188,40 190,46 185,42 180,46 182,40 177,36 183,36"
+             fill="url(#redGrad)" opacity="0.7"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>设计要点:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    左高右低的阶梯轮廓 — 一眼可辨的徽派马头墙<br>
+    中央红心 + 幼苗 — 家国情怀,爱育成长<br>
+    左侧"知"的刻线 — 纵向线条 + 口字方格<br>
+    右侧"行"的刻线 — 横向交错线条<br>
+    右上红星 — 家国点睛
+  </p>
+</div>

+ 76 - 0
.superpowers/brainstorm/443055-1778945176/content/flowing-v10.html

@@ -0,0 +1,76 @@
+<h2>Logo V10 — 行书写意 · 知行为屋</h2>
+<p class="subtitle">毛笔笔触,"知""行"二字化作徽派屋墙,自然灵动</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="220" height="230" viewBox="0 0 220 230" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="inkGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.12" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.12" />
+      </linearGradient>
+    </defs>
+
+    <!-- "知" 左半 — 矢部,一笔写成马头墙左墙 -->
+    <!-- 第一笔:撇横,形成左墙最高点 -->
+    <path d="M30 28 Q38 22, 48 26 Q55 28, 52 34"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 向下延伸为左墙 -->
+    <path d="M42 32 Q40 60, 38 85 Q36 100, 40 112"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.8" stroke-linecap="round"/>
+
+    <!-- "知" 右半 — 口部,形成徽派窗格 -->
+    <path d="M62 42 Q70 38, 78 42 Q80 50, 76 56 Q68 58, 62 54 Q58 48, 62 42 Z"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.2" opacity="0.6" stroke-linecap="round" stroke-linejoin="round"/>
+
+    <!-- "行" 左半 — 彳部,一笔写成右墙上台阶 -->
+    <path d="M120 62 Q130 58, 145 55 Q155 53, 160 58"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M138 58 Q150 80, 155 105 Q158 115, 162 118"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.8" stroke-linecap="round"/>
+
+    <!-- "行" 右半 — 亍部,阶梯屋顶 -->
+    <path d="M95 86 Q105 80, 120 82 Q125 84, 122 88"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.8" stroke-linecap="round"/>
+    <path d="M108 84 Q106 100, 110 112 Q112 118, 108 120"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.2" stroke-linecap="round"/>
+
+    <!-- 中央爱心 — 印章风格,圆润 -->
+    <path d="M90 100 C78 82, 52 78, 48 96 C44 110, 62 118, 90 130 C118 118, 136 110, 132 96 C128 78, 102 82, 90 100 Z"
+          fill="none" stroke="url(#redGrad)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
+    <path d="M90 100 C78 82, 52 78, 48 96 C44 110, 62 118, 90 130 C118 118, 136 110, 132 96 C128 78, 102 82, 90 100 Z"
+          fill="url(#redLight)"/>
+
+    <!-- 幼苗 — 从爱心底长出,简洁两笔 -->
+    <path d="M90 130 C88 138, 86 144, 90 150"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M84 142 Q78 138, 74 142"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M96 140 Q102 136, 106 140"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2" stroke-linecap="round"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>V10 — 设计思路:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    不用直尺画马头墙,而是用毛笔笔触写"知"和"行",<br>
+    两字的笔画自然带出徽派建筑的阶梯轮廓和窗格意向。<br>
+    中央红心如一枚印章盖在字间,幼苗从心口萌发。<br>
+    整体如一幅行书小品,线条有粗细、有节奏、有留白。
+  </p>
+</div>

+ 105 - 0
.superpowers/brainstorm/443055-1778945176/content/house-v11.html

@@ -0,0 +1,105 @@
+<h2>Logo V11 — 知行为屋 · 心在中央</h2>
+<p class="subtitle">"知""行"的笔画结构搭建成徽派房子,红心嵌在屋中央</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="240" viewBox="0 0 240 240" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="inkGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="inkLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:0.4" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:0.4" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redFill" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.15" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.15" />
+      </linearGradient>
+    </defs>
+
+    <!-- ===== "知" ===== -->
+    <!-- 矢部左上一撇 — 左墙最高点 / 左侧屋顶 -->
+    <path d="M22 32 Q38 22, 55 35"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3.8" stroke-linecap="round"/>
+    <!-- 矢部第一横 — 屋顶横梁 |
+    <path d="M18 52 Q50 48, 85 52"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 矢部第二横 — 二层横梁 -->
+    <path d="M22 74 Q50 72, 78 75"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.8" stroke-linecap="round"/>
+    <!-- 矢部竖 — 左墙立柱 -->
+    <path d="M38 28 Q35 65, 38 112"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 口部 — 左边的窗格 -->
+    <path d="M46 84 Q50 82, 54 84 L72 84 Q76 86, 76 90 L76 112 Q74 116, 70 116 L50 116 Q46 114, 46 110 Z"
+          fill="none" stroke="url(#inkLight)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+
+    <!-- ===== "行" ===== -->
+    <!-- 彳部第一撇 — 右侧屋顶 / 右墙台阶 -->
+    <path d="M105 48 Q125 38, 148 52"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 彳部竖 — 右墙立柱 -->
+    <path d="M125 60 Q123 88, 125 118"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 亍部第一横 — 墙基横梁 -->
+    <path d="M80 120 Q130 118, 188 120"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 亍部第二横 — 下层横梁 -->
+    <path d="M80 84 Q130 82, 178 84"
+          fill="none" stroke="url(#inkLight)" stroke-width="2.2" stroke-linecap="round"/>
+    <!-- 亍部竖钩 — 右侧墙柱 -->
+    <path d="M140 84 Q138 108, 140 130 Q140 135, 138 138"
+          fill="none" stroke="url(#inkGrad)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 亍部竖钩的钩 -->
+    <path d="M138 138 Q142 138, 148 134"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- ===== "家" 的屋瓦 ===== -->
+    <!-- 屋顶瓦片线 — 从知到行,连接成完整屋顶 -->
+    <path d="M55 35 Q70 40, 80 38 Q100 35, 105 48"
+          fill="none" stroke="url(#inkLight)" stroke-width="1.5" stroke-dasharray="3,4" stroke-linecap="round"/>
+
+    <!-- ===== 红心 — 在房子中央 ===== -->
+    <path d="M82 102 C70 86, 48 82, 44 98 C40 114, 62 122, 82 132 C102 122, 124 114, 120 98 C116 82, 94 86, 82 102 Z"
+          fill="url(#redFill)" stroke="url(#redGrad)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
+
+    <!-- 心上的高光 -->
+    <path d="M70 96 C78 90, 86 92, 82 102"
+          fill="none" stroke="url(#redGrad)" stroke-width="1.2" opacity="0.3" stroke-linecap="round"/>
+
+    <!-- ===== 幼苗 ===== -->
+    <path d="M82 132 Q80 142, 82 150"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M74 142 Q68 138, 64 142"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M90 140 Q96 136, 100 140"
+          fill="none" stroke="url(#inkGrad)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- ===== 右上角星星 ===== -->
+    <polygon points="200,32 203,40 212,40 205,45 208,54 200,48 192,54 195,45 188,40 197,40"
+             fill="url(#redGrad)" opacity="0.5"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>V11 设计说明:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    <strong>"知"(左侧):</strong> 矢部的撇横竖画出左墙高轮廓,口部化成徽派窗格<br>
+    <strong>"行"(右侧):</strong> 彳亍的撇竖横画出右墙和墙基,笔势下延至底边<br>
+    <strong>屋顶:</strong> 两字上端的撇笔在顶部连接,虚线瓦片暗示徽派屋檐<br>
+    <strong>红心:</strong> 居中如印章,为整个房子注入温度 — "家是心之所在"<br>
+    <strong>幼苗 + 星:</strong> 心口生长,右上角呼应
+  </p>
+</div>

+ 104 - 0
.superpowers/brainstorm/443055-1778945176/content/house-v6.html

@@ -0,0 +1,104 @@
+<h2>Logo V6 — 中式民居韵味</h2>
+<p class="subtitle">微弧屋顶 + 家的温馨比例 + 抽象艺术感</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="250" viewBox="0 0 240 250" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="blueGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.2" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.2" />
+      </linearGradient>
+    </defs>
+
+    <!-- 屋顶:正脊 + 微弧坡面 + 檐角轻翘 — 中式民居的韵味 -->
+    <!-- 正脊 -->
+    <line x1="75" y1="30" x2="165" y2="30" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+
+    <!-- 左坡面:微弧 -->
+    <path d="M75 30 C60 38, 40 50, 28 60" fill="none" stroke="url(#blueGrad)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 右坡面:微弧 -->
+    <path d="M165 30 C180 38, 200 50, 212 60" fill="none" stroke="url(#blueGrad)" stroke-width="3" stroke-linecap="round"/>
+
+    <!-- 檐角上翘(含蓄的飞檐) -->
+    <path d="M28 60 C24 52, 20 48, 16 46" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M212 60 C216 52, 220 48, 224 46" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 瓦片装饰线(轻轻几笔) -->
+    <path d="M72 33 C58 42, 42 52, 32 60" fill="none" stroke="url(#blueGrad)" stroke-width="0.8" opacity="0.2"/>
+    <path d="M168 33 C182 42, 198 52, 208 60" fill="none" stroke="url(#blueGrad)" stroke-width="0.8" opacity="0.2"/>
+
+    <!-- 房子主体 — 方形,比例偏宽,更像民居 -->
+    <rect x="28" y="60" width="184" height="60" rx="3"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+
+    <!-- 爱心 — 占房子中心主要位置 -->
+    <path d="M120 78 C112 68, 94 66, 86 74 C76 84, 84 96, 120 112"
+          fill="none" stroke="url(#redGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M120 78 C128 68, 146 66, 154 74 C164 84, 156 96, 120 112"
+          fill="none" stroke="url(#redGrad)" stroke-width="3" stroke-linecap="round"/>
+    <path d="M120 78 C112 68, 94 66, 86 74 C76 84, 84 96, 120 112 C156 96, 164 84, 154 74 C146 66, 128 68, 120 78 Z"
+          fill="url(#redLight)"/>
+
+    <!-- 幼苗 — 从爱心下方长出 -->
+    <path d="M120 112 C118 104, 116 98, 113 94"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M113 94 C110 90, 108 92, 106 95"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M113 94 C116 88, 114 84, 112 80"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 星点 — 右上角,更抽象 -->
+    <circle cx="185" cy="42" r="4.5" fill="url(#redGrad)" opacity="0.8"/>
+    <circle cx="178" cy="50" r="2.5" fill="url(#redGrad)" opacity="0.5"/>
+    <circle cx="192" cy="50" r="2" fill="url(#redGrad)" opacity="0.4"/>
+
+    <!-- 几个装饰点,增加艺术感 -->
+    <circle cx="42" cy="80" r="2" fill="url(#blueGrad)" opacity="0.15"/>
+    <circle cx="198" cy="80" r="2" fill="url(#blueGrad)" opacity="0.15"/>
+    <circle cx="45" cy="50" r="1.5" fill="url(#blueGrad)" opacity="0.2"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">微弧屋顶</h4>
+    <p style="margin:0;font-size:14px;color:#666;">正脊+微弧坡面+檐角轻翘,不像蒙古包也不像厂房</p>
+  </div>
+  <div style="background:#fff0f0;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#FF6B6B;">居中红心</h4>
+    <p style="margin:0;font-size:14px;color:#666;">房子正中央的爱心,家的核心是爱</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">爱心幼苗</h4>
+    <p style="margin:0;font-size:14px;color:#666;">从爱心中生长,爱孕育成长</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">红星点缀</h4>
+    <p style="margin:0;font-size:14px;color:#666;">右上角抽象星点,家国情怀的点睛</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#f0f4ff;border-radius:12px;">
+  <p style="font-size:14px;color:#667eea;margin:0;"><strong>与前两版的区别:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    V4 的圆顶 → 像蒙古包 ❌<br>
+    V5 的尖顶 → 像厂房 ❌<br>
+    <strong>V6 微弧坡面 + 正脊 + 翘角 → 中式民居的韵味 ✅</strong><br><br>
+    关键在"度":屋顶有微微的弧线(不是直线),但保留了正脊(不是整圆),檐角轻轻上翘,整体比例宽扁更像传统民居。
+  </p>
+</div>

+ 129 - 0
.superpowers/brainstorm/443055-1778945176/content/huizhou-v7.html

@@ -0,0 +1,129 @@
+<h2>Logo V7 — 徽派马头墙 + "知""行"入画</h2>
+<p class="subtitle">马头墙的层次韵律,知与行化入白墙黛瓦</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="260" height="250" viewBox="0 0 260 250" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="blueGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.2" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.2" />
+      </linearGradient>
+    </defs>
+
+    <!-- === 马头墙 — 层叠的阶梯轮廓 === -->
+
+    <!-- 左一墙(最高层) -->
+    <rect x="20" y="30" width="40" height="100" rx="2"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+    <!-- 左一墙顶(黛瓦檐) -->
+    <line x1="16" y1="30" x2="64" y2="30" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M16 30 C14 28, 12 28, 10 30" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M64 30 C66 28, 68 28, 70 30" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 左二墙(第二层) -->
+    <rect x="60" y="55" width="40" height="75" rx="2"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+    <line x1="56" y1="55" x2="104" y2="55" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M56 55 C54 53, 52 53, 50 55" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M104 55 C106 53, 108 53, 110 55" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 中央主墙(三层,容纳爱心和文字) -->
+    <rect x="100" y="75" width="60" height="55" rx="2"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+    <line x1="96" y1="75" x2="164" y2="75" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M96 75 C94 73, 92 73, 90 75" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M164 75 C166 73, 168 73, 170 75" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 右二墙 -->
+    <rect x="160" y="55" width="40" height="75" rx="2"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+    <line x1="156" y1="55" x2="204" y2="55" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M156 55 C154 53, 152 53, 150 55" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M204 55 C206 53, 208 53, 210 55" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 右一墙 -->
+    <rect x="200" y="30" width="40" height="100" rx="2"
+          fill="none" stroke="url(#blueGrad)" stroke-width="3"/>
+    <line x1="196" y1="30" x2="244" y2="30" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <path d="M196 30 C194 28, 192 28, 190 30" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M244 30 C246 28, 248 28, 250 30" fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- === 中央主墙内:爱心 === -->
+    <path d="M130 90 C126 84, 114 82, 110 88 C104 96, 110 104, 130 114"
+          fill="none" stroke="url(#redGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M130 90 C134 84, 146 82, 150 88 C156 96, 150 104, 130 114"
+          fill="none" stroke="url(#redGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M130 90 C126 84, 114 82, 110 88 C104 96, 110 104, 130 114 C150 104, 156 96, 150 88 C146 82, 134 84, 130 90 Z"
+          fill="url(#redLight)"/>
+
+    <!-- 幼苗从爱心下方伸出(中央主墙底部) -->
+    <path d="M130 114 C128 110, 126 106, 124 104"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M124 104 C122 101, 120 103, 118 106"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M124 104 C126 99, 124 96, 122 94"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- === "知" 字 — 融入左右墙之间,以窗花/石刻形式 === -->
+    <!-- "知" 的左半部分(矢)在左二墙墙面 -->
+    <line x1="70" y1="68" x2="70" y2="112" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round" opacity="0.5"/>
+    <line x1="60" y1="78" x2="85" y2="78" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round" opacity="0.35"/>
+    <line x1="60" y1="90" x2="85" y2="90" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round" opacity="0.35"/>
+    <!-- "知" 的右半部分(口) -->
+    <rect x="75" y="80" width="18" height="18" rx="1"
+          fill="none" stroke="url(#blueGrad)" stroke-width="1.5" opacity="0.4"/>
+
+    <!-- === "行" 字 — 融入右墙之间 === -->
+    <line x1="185" y1="68" x2="170" y2="112" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round" opacity="0.5"/>
+    <line x1="170" y1="78" x2="195" y2="78" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round" opacity="0.35"/>
+    <line x1="170" y1="90" x2="195" y2="90" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round" opacity="0.35"/>
+    <!-- "行" 的下半部 -->
+    <line x1="185" y1="98" x2="175" y2="115" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round" opacity="0.4"/>
+
+    <!-- 红星 — 屋顶右上 -->
+    <polygon points="220,38 222,44 228,44 223,48 225,54 220,50 215,54 217,48 212,44 218,44"
+             fill="url(#redGrad)" opacity="0.7"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+  <div style="background:#f0f4ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">徽派马头墙</h4>
+    <p style="margin:0;font-size:14px;color:#666;">五层阶梯状封火墙,徽派建筑最经典的视觉语言,层次分明</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">"知"在左墙</h4>
+    <p style="margin:0;font-size:14px;color:#666;">以墙面刻线/窗花形式融入左侧墙体中</p>
+  </div>
+  <div style="background:#fff0f0;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#FF6B6B;">中央红心+幼苗</h4>
+    <p style="margin:0;font-size:14px;color:#666;">主墙正中的爱心和幼苗,爱的核心</p>
+  </div>
+  <div style="background:#f8f9ff;padding:16px;border-radius:12px;">
+    <h4 style="margin:0 0 6px 0;color:#667eea;">"行"在右墙</h4>
+    <p style="margin:0;font-size:14px;color:#666;">以墙面刻线形式融入右侧墙体</p>
+  </div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#fffbe6;border-radius:12px;border:1px solid #ffe58f;">
+  <p style="font-size:14px;color:#b8860b;margin:0;"><strong>🏛 徽派建筑解读:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    马头墙(封火墙)是徽派建筑的灵魂,阶梯状层叠错落,白墙黛瓦。徽州人常说 <strong>"一生痴绝处,无梦到徽州"</strong>。<br><br>
+    "知"在左墙、"行"在右墙,寓意 <strong>知行合一</strong>,中间一颗红心代表"益家"—— 知行合一,益于家国。
+  </p>
+</div>

+ 66 - 0
.superpowers/brainstorm/443055-1778945176/content/minimal-v8.html

@@ -0,0 +1,66 @@
+<h2>Logo V8 — 极简徽派</h2>
+<p class="subtitle">马头墙的轮廓即是"知行"</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="220" height="230" viewBox="0 0 220 230" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="blueGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="redLight" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.2" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.2" />
+      </linearGradient>
+    </defs>
+
+    <!-- 极简马头墙:左高右低,三层阶梯 -->
+    <!-- 左侧墙最高层 -->
+    <line x1="30" y1="30" x2="70" y2="30" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <line x1="70" y1="30" x2="70" y2="110" stroke="url(#blueGrad)" stroke-width="3.5"/>
+    <!-- 二层 -->
+    <line x1="70" y1="55" x2="100" y2="55" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <line x1="100" y1="55" x2="100" y2="110" stroke="url(#blueGrad)" stroke-width="3.5"/>
+    <!-- 三层(主墙) -->
+    <line x1="100" y1="75" x2="150" y2="75" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+    <line x1="150" y1="75" x2="150" y2="110" stroke="url(#blueGrad)" stroke-width="3.5"/>
+
+    <!-- 地面线 -->
+    <line x1="30" y1="110" x2="150" y2="110" stroke="url(#blueGrad)" stroke-width="3.5" stroke-linecap="round"/>
+
+    <!-- 左侧爱心的上半部分 = "知" 的暗示 -->
+    <path d="M110 87 C106 82, 96 80, 92 85 C88 90, 92 96, 110 105"
+          fill="none" stroke="url(#redGrad)" stroke-width="2.5" stroke-linecap="round"/>
+    <!-- 右侧爱心的上半 = "行" 的暗示 -->
+    <path d="M145 87 C149 82, 144 80, 140 85 C136 90, 140 96, 145 105"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2.5" stroke-linecap="round"/>
+
+    <!-- 底部幼苗 -->
+    <path d="M110 105 C108 98, 106 94, 104 90"
+          fill="none" stroke="url(#blueGrad)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M104 90 C101 87, 99 89, 97 92"
+          fill="none" stroke="url(#blueGrad)" stroke-width="1.5" stroke-linecap="round"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<div style="margin-top:24px;padding:16px;background:#fffbe6;border-radius:12px;border:1px solid #ffe58f;">
+  <p style="font-size:14px;color:#b8860b;margin:0;"><strong>极简设计理念:</strong></p>
+  <p style="font-size:14px;color:#666;margin:8px 0 0 0;">
+    三段阶梯 = 马头墙的精简轮廓<br>
+    左侧红弧 = 知(求知之心,温暖)<br>
+    右侧蓝弧 = 行(行动之力,理性)<br>
+    下方幼苗 = 成长(知行合一的结果)<br><br>
+    总共不到20条线,干净利落。
+  </p>
+</div>

+ 103 - 0
.superpowers/brainstorm/443055-1778945176/content/redesign-v1.html

@@ -0,0 +1,103 @@
+<h2>Logo — 全新设计</h2>
+<p class="subtitle">"知""行"二字的行书笔触组合成徽派的房子,心是家的温度</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="250" viewBox="0 0 240 250" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="ink" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="ink2" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:0.35" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:0.35" />
+      </linearGradient>
+      <linearGradient id="heartGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="heartFill" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.12" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.12" />
+      </linearGradient>
+    </defs>
+
+    <!-- "知" — 左墙 + 屋顶 + 窗 -->
+    <!-- 矢的第一笔:撇,向左上扬再折下 — 马头墙左墙最高点 -->
+    <path d="M28 32 Q55 18, 80 38 Q85 42, 82 48"
+          fill="none" stroke="url(#ink)" stroke-width="4" stroke-linecap="round"/>
+    <!-- 矢:长横 — 屋顶横梁,从左到右 -->
+    <path d="M18 55 Q48 50, 92 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 矢:第二横 — 二层腰线(马头墙第二阶) -->
+    <path d="M22 78 Q50 75, 82 78"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 矢:竖贯穿 — 马头墙左侧墙柱(马头墙的垂直主体) -->
+    <path d="M42 22 Q38 60, 42 115"
+          fill="none" stroke="url(#ink)" stroke-width="3.8" stroke-linecap="round"/>
+    <!-- 知:口部 — 徽派花窗 -->
+    <rect x="50" y="88" width="28" height="28" rx="3"
+          fill="none" stroke="url(#ink2)" stroke-width="2.2"/>
+    <!-- 窗格横竖 -->
+    <line x1="64" y1="88" x2="64" y2="116" stroke="url(#ink2)" stroke-width="1.5"/>
+    <line x1="50" y1="102" x2="78" y2="102" stroke="url(#ink2)" stroke-width="1.5"/>
+
+    <!-- "行" — 右墙 + 台阶 + 地基 -->
+    <!-- 彳:左撇 — 右屋顶(比左侧低,形成阶梯) -->
+    <path d="M110 50 Q132 40, 155 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 彳:右撇 — 右墙第二阶 -->
+    <path d="M130 58 Q145 48, 170 62"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 彳:竖 — 右侧墙柱 -->
+    <path d="M155 65 Q152 90, 155 120"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 亍:横 — 墙基底座 -->
+    <path d="M82 120 Q132 116, 188 122"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 亍:竖 — 右墙柱(右侧外廓线) -->
+    <path d="M165 85 Q162 108, 165 125"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+
+    <!-- 屋顶 — 用淡色瓦片线连接知和行的屋顶 -->
+    <path d="M80 38 Q95 35, 110 50"
+          fill="none" stroke="url(#ink2)" stroke-width="1.5" stroke-dasharray="3,4"/>
+
+    <!-- "心" — 在房子中央,红色 -->
+    <path d="M84 102 C72 86, 52 82, 48 98 C44 114, 64 122, 84 132 C104 122, 124 114, 120 98 C116 82, 96 86, 84 102 Z"
+          stroke="url(#heartGrad)" stroke-width="2.8" fill="url(#heartFill)" stroke-linejoin="round"/>
+
+    <!-- 幼苗从心口向上长 -->
+    <path d="M84 132 Q82 142, 84 148"
+          fill="none" stroke="url(#ink)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M78 141 Q72 137, 68 141"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M90 140 Q96 136, 100 140"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 小星星 — 右上角 -->
+    <polygon points="210,35 213,43 222,43 215,48 218,57 210,51 202,57 205,48 198,43 207,43"
+             fill="url(#ink2)" stroke="none"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<hr style="margin:20px 0;border:none;border-top:1px solid #ddd;">
+
+<h2>Logo — 设计思路</h2>
+<div style="padding:16px;background:#f0f4ff;border-radius:12px;">
+  <div style="font-size:14px;color:#666;line-height:1.8;">
+    <p><strong>整体概念:</strong>"知"和"行"的书法笔画,在空间中构成一所房子的轮廓。红心嵌在屋中央。蓝紫是天空与远山,红色是家的温度。</p>
+    <p><strong>"知"(左侧):</strong>矢部撇→马头墙最高脊线;两横→屋面层次;竖→左墙柱。口部→徽派花窗(十字窗格)。</p>
+    <p><strong>"行"(右侧):</strong>彳部双撇→右墙上下两层台阶(马头墙的阶梯感);亍部横→地基;竖→右墙柱。</p>
+    <p><strong>整体屋顶:</strong>从知的左脊到行的右脊,用虚线瓦片连成一个完整的坡屋顶。</p>
+    <p><strong>红心:</strong>居于屋正中,是整个家的情感核心。</p>
+    <p><strong>幼苗:</strong>从红心底部萌发,向上生长。</p>
+  </div>
+</div>

+ 93 - 0
.superpowers/brainstorm/443055-1778945176/content/reference-style.html

@@ -0,0 +1,93 @@
+<h2>Logo — 文字标风格</h2>
+<p class="subtitle">参考原设计:粗圆体 + "家"字改造成房子 + 红心</p>
+
+<div style="text-align:center;padding:24px 20px;background:#fff;border-radius:24px;border:1px solid #eee;">
+  <svg width="300" height="100" viewBox="0 0 300 100" xmlns="http://www.w3.org/2000/svg">
+    <!-- 知 行 益 — 三个字用同一绿色 -->
+    <g fill="none" stroke="#4CAF50" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round">
+
+      <!-- ===== 知 (x offset=12) ===== -->
+      <!-- 矢: 撇 -->
+      <path d="M18 12 Q28 16, 34 22" />
+      <!-- 矢: 横 -->
+      <path d="M14 28 L44 28" />
+      <!-- 矢: 横 -->
+      <path d="M16 42 L42 42" />
+      <!-- 矢: 竖 -->
+      <path d="M26 8 L26 54" />
+      <!-- 口: 左竖 -->
+      <path d="M36 50 L36 72" />
+      <!-- 口: 上横 -->
+      <path d="M36 50 L62 50" />
+      <!-- 口: 右竖 -->
+      <path d="M62 50 L62 72" />
+      <!-- 口: 下横 -->
+      <path d="M36 72 L62 72" />
+
+      <!-- ===== 行 (x offset=78) ===== -->
+      <!-- 彳: 撇 -->
+      <path d="M86 14 Q96 18, 102 24" />
+      <!-- 彳: 撇 -->
+      <path d="M96 22 Q104 26, 110 30" />
+      <!-- 彳: 竖 -->
+      <path d="M106 32 L106 68" />
+      <!-- 亍: 横 -->
+      <path d="M82 42 L120 42" />
+      <!-- 亍: 竖 -->
+      <path d="M116 42 L116 72" />
+
+      <!-- ===== 益 (x offset=138) ===== -->
+      <!-- 丷: 撇 -->
+      <path d="M144 12 Q150 16, 156 22" />
+      <!-- 丷: 点 -->
+      <path d="M158 12 Q162 16, 166 22" />
+      <!-- 一 -->
+      <path d="M140 28 L170 28" />
+      <!-- 皿: 左竖 -->
+      <path d="M142 50 L142 72" />
+      <!-- 皿: 右竖 -->
+      <path d="M166 50 L166 72" />
+      <!-- 皿: 底横 -->
+      <path d="M140 72 L168 72" />
+      <!-- 中竖 -->
+      <path d="M154 28 L154 72" />
+
+      <!-- ===== 家 (x offset=200) — 屋顶 + 普通笔画 ===== -->
+      <!-- 宀: 左点 -->
+      <path d="M204 12 Q206 8, 210 10" />
+      <!-- 宀: 横钩 — 改造为三角屋顶形状 -->
+      <path d="M200 18 Q215 2, 230 18" />
+      <!-- 家: 横 -->
+      <path d="M204 28 L238 28" />
+      <!-- 家: 左两撇 -->
+      <path d="M206 42 Q210 48, 216 52" />
+      <path d="M216 42 Q220 48, 222 54" />
+      <!-- 家: 竖钩 -->
+      <path d="M228 28 L228 62 Q228 70, 234 72" />
+      <!-- 家: 右捺 -->
+      <path d="M216 54 Q224 58, 236 60" />
+      <!-- 家: 底部左撇 -->
+      <path d="M206 72 Q214 74, 220 72" />
+    </g>
+
+    <!-- 家字中间的爱心 — 红色 -->
+    <path d="M215 34 C208 27, 198 30, 198 38 C198 44, 208 48, 218 48 C228 48, 238 44, 238 38 C238 30, 228 27, 221 34 L218 37 Z"
+          fill="#FF4757" stroke="none" />
+  </svg>
+</div>
+
+<p style="text-align:center;color:#999;font-size:13px;margin-top:8px;">知(绿) 行(绿) 益(绿) 家(绿屋+红心)</p>
+
+<hr style="margin:20px 0;border:none;border-top:1px solid #ddd;">
+
+<h2>设计说明</h2>
+<div style="padding:16px;background:#f0fff0;border-radius:12px;">
+  <p style="font-size:14px;color:#666;margin:0;">
+    参考原 logo.png 风格:<strong>粗圆体、厚笔画、圆角</strong>。<br><br>
+    "知""行""益"三字用统一绿色,标准厚笔画。<br>
+    <strong>"家"字改造:</strong>宀部首变成三角屋顶形状(△),
+    字中央用一颗<strong>红色爱心</strong>替代传统笔画,豕部保留底部勾勒。<br><br>
+    绿色代表成长与教育,红色爱心是家的温度。<br>
+    颜色和细节可以调整。
+  </p>
+</div>

+ 1 - 0
.superpowers/brainstorm/443055-1778945176/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1778948393447}

+ 1 - 0
.superpowers/brainstorm/443055-1778945176/state/server.pid

@@ -0,0 +1 @@
+443063

+ 1 - 0
.superpowers/brainstorm/450935-1778975399/state/server-info

@@ -0,0 +1 @@
+{"type":"server-started","port":51269,"host":"0.0.0.0","url_host":"192.168.168.13","url":"http://192.168.168.13:51269","screen_dir":"/mnt/e/workspace/dan/zxyj/.superpowers/brainstorm/450935-1778975399/content","state_dir":"/mnt/e/workspace/dan/zxyj/.superpowers/brainstorm/450935-1778975399/state"}

+ 1 - 0
.superpowers/brainstorm/450935-1778975399/state/server.pid

@@ -0,0 +1 @@
+450943

+ 103 - 0
.superpowers/brainstorm/451752-1778976227/content/redesign-v1.html

@@ -0,0 +1,103 @@
+<h2>Logo — 全新设计</h2>
+<p class="subtitle">"知""行"二字的行书笔触组合成徽派的房子,心是家的温度</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="250" viewBox="0 0 240 250" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="ink" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="ink2" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:0.35" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:0.35" />
+      </linearGradient>
+      <linearGradient id="heartGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="heartFill" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.12" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.12" />
+      </linearGradient>
+    </defs>
+
+    <!-- "知" — 左墙 + 屋顶 + 窗 -->
+    <!-- 矢的第一笔:撇,向左上扬再折下 — 马头墙左墙最高点 -->
+    <path d="M28 32 Q55 18, 80 38 Q85 42, 82 48"
+          fill="none" stroke="url(#ink)" stroke-width="4" stroke-linecap="round"/>
+    <!-- 矢:长横 — 屋顶横梁,从左到右 -->
+    <path d="M18 55 Q48 50, 92 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 矢:第二横 — 二层腰线(马头墙第二阶) -->
+    <path d="M22 78 Q50 75, 82 78"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 矢:竖贯穿 — 马头墙左侧墙柱(马头墙的垂直主体) -->
+    <path d="M42 22 Q38 60, 42 115"
+          fill="none" stroke="url(#ink)" stroke-width="3.8" stroke-linecap="round"/>
+    <!-- 知:口部 — 徽派花窗 -->
+    <rect x="50" y="88" width="28" height="28" rx="3"
+          fill="none" stroke="url(#ink2)" stroke-width="2.2"/>
+    <!-- 窗格横竖 -->
+    <line x1="64" y1="88" x2="64" y2="116" stroke="url(#ink2)" stroke-width="1.5"/>
+    <line x1="50" y1="102" x2="78" y2="102" stroke="url(#ink2)" stroke-width="1.5"/>
+
+    <!-- "行" — 右墙 + 台阶 + 地基 -->
+    <!-- 彳:左撇 — 右屋顶(比左侧低,形成阶梯) -->
+    <path d="M110 50 Q132 40, 155 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 彳:右撇 — 右墙第二阶 -->
+    <path d="M130 58 Q145 48, 170 62"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 彳:竖 — 右侧墙柱 -->
+    <path d="M155 65 Q152 90, 155 120"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 亍:横 — 墙基底座 -->
+    <path d="M82 120 Q132 116, 188 122"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 亍:竖 — 右墙柱(右侧外廓线) -->
+    <path d="M165 85 Q162 108, 165 125"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+
+    <!-- 屋顶 — 用淡色瓦片线连接知和行的屋顶 -->
+    <path d="M80 38 Q95 35, 110 50"
+          fill="none" stroke="url(#ink2)" stroke-width="1.5" stroke-dasharray="3,4"/>
+
+    <!-- "心" — 在房子中央,红色 -->
+    <path d="M84 102 C72 86, 52 82, 48 98 C44 114, 64 122, 84 132 C104 122, 124 114, 120 98 C116 82, 96 86, 84 102 Z"
+          stroke="url(#heartGrad)" stroke-width="2.8" fill="url(#heartFill)" stroke-linejoin="round"/>
+
+    <!-- 幼苗从心口向上长 -->
+    <path d="M84 132 Q82 142, 84 148"
+          fill="none" stroke="url(#ink)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M78 141 Q72 137, 68 141"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M90 140 Q96 136, 100 140"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 小星星 — 右上角 -->
+    <polygon points="210,35 213,43 222,43 215,48 218,57 210,51 202,57 205,48 198,43 207,43"
+             fill="url(#ink2)" stroke="none"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<hr style="margin:20px 0;border:none;border-top:1px solid #ddd;">
+
+<h2>Logo — 设计思路</h2>
+<div style="padding:16px;background:#f0f4ff;border-radius:12px;">
+  <div style="font-size:14px;color:#666;line-height:1.8;">
+    <p><strong>整体概念:</strong>"知"和"行"的书法笔画,在空间中构成一所房子的轮廓。红心嵌在屋中央。蓝紫是天空与远山,红色是家的温度。</p>
+    <p><strong>"知"(左侧):</strong>矢部撇→马头墙最高脊线;两横→屋面层次;竖→左墙柱。口部→徽派花窗(十字窗格)。</p>
+    <p><strong>"行"(右侧):</strong>彳部双撇→右墙上下两层台阶(马头墙的阶梯感);亍部横→地基;竖→右墙柱。</p>
+    <p><strong>整体屋顶:</strong>从知的左脊到行的右脊,用虚线瓦片连成一个完整的坡屋顶。</p>
+    <p><strong>红心:</strong>居于屋正中,是整个家的情感核心。</p>
+    <p><strong>幼苗:</strong>从红心底部萌发,向上生长。</p>
+  </div>
+</div>

+ 1 - 0
.superpowers/brainstorm/451752-1778976227/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1778978299389}

+ 1 - 0
.superpowers/brainstorm/451752-1778976227/state/server.pid

@@ -0,0 +1 @@
+451760

+ 103 - 0
.superpowers/brainstorm/460003-1779016953/content/redesign-v1.html

@@ -0,0 +1,103 @@
+<h2>Logo — 全新设计</h2>
+<p class="subtitle">"知""行"二字的行书笔触组合成徽派的房子,心是家的温度</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="250" viewBox="0 0 240 250" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="ink" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="ink2" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:0.35" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:0.35" />
+      </linearGradient>
+      <linearGradient id="heartGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="heartFill" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.12" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.12" />
+      </linearGradient>
+    </defs>
+
+    <!-- "知" — 左墙 + 屋顶 + 窗 -->
+    <!-- 矢的第一笔:撇,向左上扬再折下 — 马头墙左墙最高点 -->
+    <path d="M28 32 Q55 18, 80 38 Q85 42, 82 48"
+          fill="none" stroke="url(#ink)" stroke-width="4" stroke-linecap="round"/>
+    <!-- 矢:长横 — 屋顶横梁,从左到右 -->
+    <path d="M18 55 Q48 50, 92 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 矢:第二横 — 二层腰线(马头墙第二阶) -->
+    <path d="M22 78 Q50 75, 82 78"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 矢:竖贯穿 — 马头墙左侧墙柱(马头墙的垂直主体) -->
+    <path d="M42 22 Q38 60, 42 115"
+          fill="none" stroke="url(#ink)" stroke-width="3.8" stroke-linecap="round"/>
+    <!-- 知:口部 — 徽派花窗 -->
+    <rect x="50" y="88" width="28" height="28" rx="3"
+          fill="none" stroke="url(#ink2)" stroke-width="2.2"/>
+    <!-- 窗格横竖 -->
+    <line x1="64" y1="88" x2="64" y2="116" stroke="url(#ink2)" stroke-width="1.5"/>
+    <line x1="50" y1="102" x2="78" y2="102" stroke="url(#ink2)" stroke-width="1.5"/>
+
+    <!-- "行" — 右墙 + 台阶 + 地基 -->
+    <!-- 彳:左撇 — 右屋顶(比左侧低,形成阶梯) -->
+    <path d="M110 50 Q132 40, 155 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 彳:右撇 — 右墙第二阶 -->
+    <path d="M130 58 Q145 48, 170 62"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 彳:竖 — 右侧墙柱 -->
+    <path d="M155 65 Q152 90, 155 120"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 亍:横 — 墙基底座 -->
+    <path d="M82 120 Q132 116, 188 122"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 亍:竖 — 右墙柱(右侧外廓线) -->
+    <path d="M165 85 Q162 108, 165 125"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+
+    <!-- 屋顶 — 用淡色瓦片线连接知和行的屋顶 -->
+    <path d="M80 38 Q95 35, 110 50"
+          fill="none" stroke="url(#ink2)" stroke-width="1.5" stroke-dasharray="3,4"/>
+
+    <!-- "心" — 在房子中央,红色 -->
+    <path d="M84 102 C72 86, 52 82, 48 98 C44 114, 64 122, 84 132 C104 122, 124 114, 120 98 C116 82, 96 86, 84 102 Z"
+          stroke="url(#heartGrad)" stroke-width="2.8" fill="url(#heartFill)" stroke-linejoin="round"/>
+
+    <!-- 幼苗从心口向上长 -->
+    <path d="M84 132 Q82 142, 84 148"
+          fill="none" stroke="url(#ink)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M78 141 Q72 137, 68 141"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M90 140 Q96 136, 100 140"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 小星星 — 右上角 -->
+    <polygon points="210,35 213,43 222,43 215,48 218,57 210,51 202,57 205,48 198,43 207,43"
+             fill="url(#ink2)" stroke="none"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<hr style="margin:20px 0;border:none;border-top:1px solid #ddd;">
+
+<h2>Logo — 设计思路</h2>
+<div style="padding:16px;background:#f0f4ff;border-radius:12px;">
+  <div style="font-size:14px;color:#666;line-height:1.8;">
+    <p><strong>整体概念:</strong>"知"和"行"的书法笔画,在空间中构成一所房子的轮廓。红心嵌在屋中央。蓝紫是天空与远山,红色是家的温度。</p>
+    <p><strong>"知"(左侧):</strong>矢部撇→马头墙最高脊线;两横→屋面层次;竖→左墙柱。口部→徽派花窗(十字窗格)。</p>
+    <p><strong>"行"(右侧):</strong>彳部双撇→右墙上下两层台阶(马头墙的阶梯感);亍部横→地基;竖→右墙柱。</p>
+    <p><strong>整体屋顶:</strong>从知的左脊到行的右脊,用虚线瓦片连成一个完整的坡屋顶。</p>
+    <p><strong>红心:</strong>居于屋正中,是整个家的情感核心。</p>
+    <p><strong>幼苗:</strong>从红心底部萌发,向上生长。</p>
+  </div>
+</div>

+ 1 - 0
.superpowers/brainstorm/460003-1779016953/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1779018992978}

+ 1 - 0
.superpowers/brainstorm/460003-1779016953/state/server.pid

@@ -0,0 +1 @@
+460011

+ 103 - 0
.superpowers/brainstorm/471855-1779075369/content/redesign-v1.html

@@ -0,0 +1,103 @@
+<h2>Logo — 全新设计</h2>
+<p class="subtitle">"知""行"二字的行书笔触组合成徽派的房子,心是家的温度</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="250" viewBox="0 0 240 250" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="ink" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="ink2" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:0.35" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:0.35" />
+      </linearGradient>
+      <linearGradient id="heartGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="heartFill" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.12" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.12" />
+      </linearGradient>
+    </defs>
+
+    <!-- "知" — 左墙 + 屋顶 + 窗 -->
+    <!-- 矢的第一笔:撇,向左上扬再折下 — 马头墙左墙最高点 -->
+    <path d="M28 32 Q55 18, 80 38 Q85 42, 82 48"
+          fill="none" stroke="url(#ink)" stroke-width="4" stroke-linecap="round"/>
+    <!-- 矢:长横 — 屋顶横梁,从左到右 -->
+    <path d="M18 55 Q48 50, 92 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 矢:第二横 — 二层腰线(马头墙第二阶) -->
+    <path d="M22 78 Q50 75, 82 78"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 矢:竖贯穿 — 马头墙左侧墙柱(马头墙的垂直主体) -->
+    <path d="M42 22 Q38 60, 42 115"
+          fill="none" stroke="url(#ink)" stroke-width="3.8" stroke-linecap="round"/>
+    <!-- 知:口部 — 徽派花窗 -->
+    <rect x="50" y="88" width="28" height="28" rx="3"
+          fill="none" stroke="url(#ink2)" stroke-width="2.2"/>
+    <!-- 窗格横竖 -->
+    <line x1="64" y1="88" x2="64" y2="116" stroke="url(#ink2)" stroke-width="1.5"/>
+    <line x1="50" y1="102" x2="78" y2="102" stroke="url(#ink2)" stroke-width="1.5"/>
+
+    <!-- "行" — 右墙 + 台阶 + 地基 -->
+    <!-- 彳:左撇 — 右屋顶(比左侧低,形成阶梯) -->
+    <path d="M110 50 Q132 40, 155 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 彳:右撇 — 右墙第二阶 -->
+    <path d="M130 58 Q145 48, 170 62"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 彳:竖 — 右侧墙柱 -->
+    <path d="M155 65 Q152 90, 155 120"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 亍:横 — 墙基底座 -->
+    <path d="M82 120 Q132 116, 188 122"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 亍:竖 — 右墙柱(右侧外廓线) -->
+    <path d="M165 85 Q162 108, 165 125"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+
+    <!-- 屋顶 — 用淡色瓦片线连接知和行的屋顶 -->
+    <path d="M80 38 Q95 35, 110 50"
+          fill="none" stroke="url(#ink2)" stroke-width="1.5" stroke-dasharray="3,4"/>
+
+    <!-- "心" — 在房子中央,红色 -->
+    <path d="M84 102 C72 86, 52 82, 48 98 C44 114, 64 122, 84 132 C104 122, 124 114, 120 98 C116 82, 96 86, 84 102 Z"
+          stroke="url(#heartGrad)" stroke-width="2.8" fill="url(#heartFill)" stroke-linejoin="round"/>
+
+    <!-- 幼苗从心口向上长 -->
+    <path d="M84 132 Q82 142, 84 148"
+          fill="none" stroke="url(#ink)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M78 141 Q72 137, 68 141"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M90 140 Q96 136, 100 140"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 小星星 — 右上角 -->
+    <polygon points="210,35 213,43 222,43 215,48 218,57 210,51 202,57 205,48 198,43 207,43"
+             fill="url(#ink2)" stroke="none"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<hr style="margin:20px 0;border:none;border-top:1px solid #ddd;">
+
+<h2>Logo — 设计思路</h2>
+<div style="padding:16px;background:#f0f4ff;border-radius:12px;">
+  <div style="font-size:14px;color:#666;line-height:1.8;">
+    <p><strong>整体概念:</strong>"知"和"行"的书法笔画,在空间中构成一所房子的轮廓。红心嵌在屋中央。蓝紫是天空与远山,红色是家的温度。</p>
+    <p><strong>"知"(左侧):</strong>矢部撇→马头墙最高脊线;两横→屋面层次;竖→左墙柱。口部→徽派花窗(十字窗格)。</p>
+    <p><strong>"行"(右侧):</strong>彳部双撇→右墙上下两层台阶(马头墙的阶梯感);亍部横→地基;竖→右墙柱。</p>
+    <p><strong>整体屋顶:</strong>从知的左脊到行的右脊,用虚线瓦片连成一个完整的坡屋顶。</p>
+    <p><strong>红心:</strong>居于屋正中,是整个家的情感核心。</p>
+    <p><strong>幼苗:</strong>从红心底部萌发,向上生长。</p>
+  </div>
+</div>

+ 1 - 0
.superpowers/brainstorm/471855-1779075369/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1779077300284}

+ 1 - 0
.superpowers/brainstorm/471855-1779075369/state/server.pid

@@ -0,0 +1 @@
+471863

+ 103 - 0
.superpowers/brainstorm/472748-1779077453/content/redesign-v1.html

@@ -0,0 +1,103 @@
+<h2>Logo — 全新设计</h2>
+<p class="subtitle">"知""行"二字的行书笔触组合成徽派的房子,心是家的温度</p>
+
+<div style="text-align:center;padding:20px;background:linear-gradient(135deg,#f0f4ff,#f5f0ff);border-radius:24px;">
+  <svg width="240" height="250" viewBox="0 0 240 250" xmlns="http://www.w3.org/2000/svg">
+    <defs>
+      <linearGradient id="ink" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="ink2" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#667eea;stop-opacity:0.35" />
+        <stop offset="100%" style="stop-color:#764ba2;stop-opacity:0.35" />
+      </linearGradient>
+      <linearGradient id="heartGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:1" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:1" />
+      </linearGradient>
+      <linearGradient id="heartFill" x1="0%" y1="0%" x2="100%" y2="100%">
+        <stop offset="0%" style="stop-color:#FF6B6B;stop-opacity:0.12" />
+        <stop offset="100%" style="stop-color:#FF4757;stop-opacity:0.12" />
+      </linearGradient>
+    </defs>
+
+    <!-- "知" — 左墙 + 屋顶 + 窗 -->
+    <!-- 矢的第一笔:撇,向左上扬再折下 — 马头墙左墙最高点 -->
+    <path d="M28 32 Q55 18, 80 38 Q85 42, 82 48"
+          fill="none" stroke="url(#ink)" stroke-width="4" stroke-linecap="round"/>
+    <!-- 矢:长横 — 屋顶横梁,从左到右 -->
+    <path d="M18 55 Q48 50, 92 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 矢:第二横 — 二层腰线(马头墙第二阶) -->
+    <path d="M22 78 Q50 75, 82 78"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+    <!-- 矢:竖贯穿 — 马头墙左侧墙柱(马头墙的垂直主体) -->
+    <path d="M42 22 Q38 60, 42 115"
+          fill="none" stroke="url(#ink)" stroke-width="3.8" stroke-linecap="round"/>
+    <!-- 知:口部 — 徽派花窗 -->
+    <rect x="50" y="88" width="28" height="28" rx="3"
+          fill="none" stroke="url(#ink2)" stroke-width="2.2"/>
+    <!-- 窗格横竖 -->
+    <line x1="64" y1="88" x2="64" y2="116" stroke="url(#ink2)" stroke-width="1.5"/>
+    <line x1="50" y1="102" x2="78" y2="102" stroke="url(#ink2)" stroke-width="1.5"/>
+
+    <!-- "行" — 右墙 + 台阶 + 地基 -->
+    <!-- 彳:左撇 — 右屋顶(比左侧低,形成阶梯) -->
+    <path d="M110 50 Q132 40, 155 55"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 彳:右撇 — 右墙第二阶 -->
+    <path d="M130 58 Q145 48, 170 62"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 彳:竖 — 右侧墙柱 -->
+    <path d="M155 65 Q152 90, 155 120"
+          fill="none" stroke="url(#ink)" stroke-width="3.5" stroke-linecap="round"/>
+    <!-- 亍:横 — 墙基底座 -->
+    <path d="M82 120 Q132 116, 188 122"
+          fill="none" stroke="url(#ink)" stroke-width="3.2" stroke-linecap="round"/>
+    <!-- 亍:竖 — 右墙柱(右侧外廓线) -->
+    <path d="M165 85 Q162 108, 165 125"
+          fill="none" stroke="url(#ink)" stroke-width="3" stroke-linecap="round"/>
+
+    <!-- 屋顶 — 用淡色瓦片线连接知和行的屋顶 -->
+    <path d="M80 38 Q95 35, 110 50"
+          fill="none" stroke="url(#ink2)" stroke-width="1.5" stroke-dasharray="3,4"/>
+
+    <!-- "心" — 在房子中央,红色 -->
+    <path d="M84 102 C72 86, 52 82, 48 98 C44 114, 64 122, 84 132 C104 122, 124 114, 120 98 C116 82, 96 86, 84 102 Z"
+          stroke="url(#heartGrad)" stroke-width="2.8" fill="url(#heartFill)" stroke-linejoin="round"/>
+
+    <!-- 幼苗从心口向上长 -->
+    <path d="M84 132 Q82 142, 84 148"
+          fill="none" stroke="url(#ink)" stroke-width="2.5" stroke-linecap="round"/>
+    <path d="M78 141 Q72 137, 68 141"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+    <path d="M90 140 Q96 136, 100 140"
+          fill="none" stroke="url(#ink)" stroke-width="2" stroke-linecap="round"/>
+
+    <!-- 小星星 — 右上角 -->
+    <polygon points="210,35 213,43 222,43 215,48 218,57 210,51 202,57 205,48 198,43 207,43"
+             fill="url(#ink2)" stroke="none"/>
+  </svg>
+
+  <div style="margin-top:16px;">
+    <span style="font-size:32px;font-weight:bold;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:6px;">
+      知行益家
+    </span>
+  </div>
+  <div style="color:#999;font-size:13px;margin-top:4px;letter-spacing:3px;">家是小国 · 国是大家</div>
+</div>
+
+<hr style="margin:20px 0;border:none;border-top:1px solid #ddd;">
+
+<h2>Logo — 设计思路</h2>
+<div style="padding:16px;background:#f0f4ff;border-radius:12px;">
+  <div style="font-size:14px;color:#666;line-height:1.8;">
+    <p><strong>整体概念:</strong>"知"和"行"的书法笔画,在空间中构成一所房子的轮廓。红心嵌在屋中央。蓝紫是天空与远山,红色是家的温度。</p>
+    <p><strong>"知"(左侧):</strong>矢部撇→马头墙最高脊线;两横→屋面层次;竖→左墙柱。口部→徽派花窗(十字窗格)。</p>
+    <p><strong>"行"(右侧):</strong>彳部双撇→右墙上下两层台阶(马头墙的阶梯感);亍部横→地基;竖→右墙柱。</p>
+    <p><strong>整体屋顶:</strong>从知的左脊到行的右脊,用虚线瓦片连成一个完整的坡屋顶。</p>
+    <p><strong>红心:</strong>居于屋正中,是整个家的情感核心。</p>
+    <p><strong>幼苗:</strong>从红心底部萌发,向上生长。</p>
+  </div>
+</div>

+ 1 - 0
.superpowers/brainstorm/472748-1779077453/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1779081103196}

+ 1 - 0
.superpowers/brainstorm/472748-1779077453/state/server.pid

@@ -0,0 +1 @@
+472756

+ 93 - 0
.superpowers/brainstorm/474146-1779079636/content/reference-style.html

@@ -0,0 +1,93 @@
+<h2>Logo — 文字标风格</h2>
+<p class="subtitle">参考原设计:粗圆体 + "家"字改造成房子 + 红心</p>
+
+<div style="text-align:center;padding:24px 20px;background:#fff;border-radius:24px;border:1px solid #eee;">
+  <svg width="300" height="100" viewBox="0 0 300 100" xmlns="http://www.w3.org/2000/svg">
+    <!-- 知 行 益 — 三个字用同一绿色 -->
+    <g fill="none" stroke="#4CAF50" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round">
+
+      <!-- ===== 知 (x offset=12) ===== -->
+      <!-- 矢: 撇 -->
+      <path d="M18 12 Q28 16, 34 22" />
+      <!-- 矢: 横 -->
+      <path d="M14 28 L44 28" />
+      <!-- 矢: 横 -->
+      <path d="M16 42 L42 42" />
+      <!-- 矢: 竖 -->
+      <path d="M26 8 L26 54" />
+      <!-- 口: 左竖 -->
+      <path d="M36 50 L36 72" />
+      <!-- 口: 上横 -->
+      <path d="M36 50 L62 50" />
+      <!-- 口: 右竖 -->
+      <path d="M62 50 L62 72" />
+      <!-- 口: 下横 -->
+      <path d="M36 72 L62 72" />
+
+      <!-- ===== 行 (x offset=78) ===== -->
+      <!-- 彳: 撇 -->
+      <path d="M86 14 Q96 18, 102 24" />
+      <!-- 彳: 撇 -->
+      <path d="M96 22 Q104 26, 110 30" />
+      <!-- 彳: 竖 -->
+      <path d="M106 32 L106 68" />
+      <!-- 亍: 横 -->
+      <path d="M82 42 L120 42" />
+      <!-- 亍: 竖 -->
+      <path d="M116 42 L116 72" />
+
+      <!-- ===== 益 (x offset=138) ===== -->
+      <!-- 丷: 撇 -->
+      <path d="M144 12 Q150 16, 156 22" />
+      <!-- 丷: 点 -->
+      <path d="M158 12 Q162 16, 166 22" />
+      <!-- 一 -->
+      <path d="M140 28 L170 28" />
+      <!-- 皿: 左竖 -->
+      <path d="M142 50 L142 72" />
+      <!-- 皿: 右竖 -->
+      <path d="M166 50 L166 72" />
+      <!-- 皿: 底横 -->
+      <path d="M140 72 L168 72" />
+      <!-- 中竖 -->
+      <path d="M154 28 L154 72" />
+
+      <!-- ===== 家 (x offset=200) — 屋顶 + 普通笔画 ===== -->
+      <!-- 宀: 左点 -->
+      <path d="M204 12 Q206 8, 210 10" />
+      <!-- 宀: 横钩 — 改造为三角屋顶形状 -->
+      <path d="M200 18 Q215 2, 230 18" />
+      <!-- 家: 横 -->
+      <path d="M204 28 L238 28" />
+      <!-- 家: 左两撇 -->
+      <path d="M206 42 Q210 48, 216 52" />
+      <path d="M216 42 Q220 48, 222 54" />
+      <!-- 家: 竖钩 -->
+      <path d="M228 28 L228 62 Q228 70, 234 72" />
+      <!-- 家: 右捺 -->
+      <path d="M216 54 Q224 58, 236 60" />
+      <!-- 家: 底部左撇 -->
+      <path d="M206 72 Q214 74, 220 72" />
+    </g>
+
+    <!-- 家字中间的爱心 — 红色 -->
+    <path d="M215 34 C208 27, 198 30, 198 38 C198 44, 208 48, 218 48 C228 48, 238 44, 238 38 C238 30, 228 27, 221 34 L218 37 Z"
+          fill="#FF4757" stroke="none" />
+  </svg>
+</div>
+
+<p style="text-align:center;color:#999;font-size:13px;margin-top:8px;">知(绿) 行(绿) 益(绿) 家(绿屋+红心)</p>
+
+<hr style="margin:20px 0;border:none;border-top:1px solid #ddd;">
+
+<h2>设计说明</h2>
+<div style="padding:16px;background:#f0fff0;border-radius:12px;">
+  <p style="font-size:14px;color:#666;margin:0;">
+    参考原 logo.png 风格:<strong>粗圆体、厚笔画、圆角</strong>。<br><br>
+    "知""行""益"三字用统一绿色,标准厚笔画。<br>
+    <strong>"家"字改造:</strong>宀部首变成三角屋顶形状(△),
+    字中央用一颗<strong>红色爱心</strong>替代传统笔画,豕部保留底部勾勒。<br><br>
+    绿色代表成长与教育,红色爱心是家的温度。<br>
+    颜色和细节可以调整。
+  </p>
+</div>

+ 1 - 0
.superpowers/brainstorm/474146-1779079636/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1779081611649}

+ 1 - 0
.superpowers/brainstorm/474146-1779079636/state/server.pid

@@ -0,0 +1 @@
+474154

+ 136 - 0
.superpowers/brainstorm/9864-1780551730/content/approaches.html

@@ -0,0 +1,136 @@
+<h2>登录前预览 — 3种架构方案</h2>
+<p class="subtitle">混合型内容,决定了放「什么」,现在选「怎么放」</p>
+
+<div class="cards">
+  <div class="card" data-choice="a" onclick="toggleSelect(this)">
+    <div class="card-body">
+      <h3>A. 独立欢迎页 + 登录入口</h3>
+      <p style="margin:8px 0;font-size:14px;color:#666;">
+        新增一个独立的 <code>landing.vue</code> 作为小程序第一屏
+      </p>
+      <div class="mockup" style="margin:12px 0;">
+        <div class="mockup-header">Landing Page</div>
+        <div class="mockup-body" style="padding:16px;">
+          <div style="background:#f0f4ff;padding:20px;border-radius:12px;margin-bottom:12px;">
+            <div style="font-size:18px;font-weight:bold;color:#333;">🌟 溪艾福</div>
+            <div style="font-size:13px;color:#888;margin:4px 0;">家庭主动健康管理平台</div>
+          </div>
+          <div style="background:linear-gradient(135deg,#1a1a2e,#16213e);padding:16px;border-radius:12px;margin-bottom:12px;">
+            <div style="display:flex;justify-content:space-between;color:#FFD700;font-size:13px;">
+              <span>🔥心·火</span><span>🌿行·木</span><span>💧富·水</span>
+            </div>
+          </div>
+          <div style="display:flex;gap:8px;margin-bottom:12px;">
+            <div style="flex:1;height:60px;background:#f0f0f0;border-radius:8px;"></div>
+            <div style="flex:1;height:60px;background:#f0f0f0;border-radius:8px;"></div>
+          </div>
+          <div style="background:#667eea;color:#fff;text-align:center;padding:12px;border-radius:24px;font-size:15px;">
+            开始使用 →
+          </div>
+          <div style="text-align:center;margin-top:8px;font-size:12px;color:#999;">
+            已有账号?登录
+          </div>
+        </div>
+      </div>
+      <div class="pros-cons" style="margin-top:12px;">
+        <div class="pros"><h4>优点</h4><ul><li>内容丰富,展示空间大</li><li>引导性强,适合品牌传达</li><li>不干扰现有登录逻辑</li></ul></div>
+        <div class="cons"><h4>缺点</h4><ul><li>多一次页面跳转</li><li>需管理新页面</li></ul></div>
+      </div>
+    </div>
+  </div>
+
+  <div class="card" data-choice="b" onclick="toggleSelect(this)">
+    <div class="card-body">
+      <h3>B. 登录页增强(内容嵌入登录页)</h3>
+      <p style="margin:8px 0;font-size:14px;color:#666;">
+        改造现有 <code>login.vue</code>,上方内容展示 + 下方登录表单
+      </p>
+      <div class="mockup" style="margin:12px 0;">
+        <div class="mockup-header">登录页增强版</div>
+        <div class="mockup-body" style="padding:16px;">
+          <div style="display:flex;gap:8px;overflow-x:auto;margin-bottom:12px;">
+            <div style="min-width:80px;height:80px;background:#f0f4ff;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:#666;">
+              <span style="font-size:24px;">🏆</span>
+              任务积分
+            </div>
+            <div style="min-width:80px;height:80px;background:#fff5e6;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:#666;">
+              <span style="font-size:24px;">⭐</span>
+              五行沙盘
+            </div>
+            <div style="min-width:80px;height:80px;background:#e6f7ff;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:#666;">
+              <span style="font-size:24px;">👨‍👩‍👧</span>
+              双角色
+            </div>
+          </div>
+          <div style="height:1px;background:#eee;margin:12px 0;"></div>
+          <div style="background:#f5f5f5;padding:16px;border-radius:12px;">
+            <div style="font-size:14px;font-weight:bold;margin-bottom:8px;">手机号登录</div>
+            <div style="height:40px;background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:8px;"></div>
+            <div style="height:40px;background:#667eea;border-radius:20px;margin-bottom:8px;"></div>
+          </div>
+          <div style="text-align:center;margin-top:8px;">
+            <span style="font-size:12px;color:#999;">先看看 →</span>
+          </div>
+        </div>
+      </div>
+      <div class="pros-cons" style="margin-top:12px;">
+        <div class="pros"><h4>优点</h4><ul><li>无新增页面跳转</li><li>用户可直接看到内容</li></ul></div>
+        <div class="cons"><h4>缺点</h4><ul><li>内容空间有限</li><li>登录与浏览体验混杂</li><li>长页面在小屏上体验不佳</li></ul></div>
+      </div>
+    </div>
+  </div>
+
+  <div class="card" data-choice="c" onclick="toggleSelect(this)">
+    <div class="card-body">
+      <h3>C. TabBar 解除登录限制</h3>
+      <p style="margin:8px 0;font-size:14px;color:#666;">
+        允许未登录用户访问「发现」「商城」Tab,操作时再提示登录
+      </p>
+      <div class="mockup" style="margin:12px 0;">
+        <div class="mockup-header">TabBar 模式</div>
+        <div class="mockup-body" style="padding:16px;">
+          <div style="display:flex;justify-content:space-around;margin-bottom:12px;">
+            <span style="font-size:12px;color:#FF6B6B;">首页</span>
+            <span style="font-size:12px;color:#999;">发现</span>
+            <span style="font-size:12px;color:#999;">商城</span>
+            <span style="font-size:12px;color:#999;">我的</span>
+          </div>
+          <div style="background:#f9f9f9;padding:16px;border-radius:12px;">
+            <div style="font-size:15px;font-weight:bold;margin-bottom:12px;">📖 精选内容</div>
+            <div style="display:flex;gap:8px;margin-bottom:12px;">
+              <div style="flex:1;height:80px;background:#ddd;border-radius:8px;"></div>
+              <div style="flex:2;height:80px;background:#eee;border-radius:8px;padding:8px;">
+                <div style="font-size:13px;font-weight:bold;">培养孩子专注力的5个方法</div>
+                <div style="font-size:11px;color:#999;">2026-06-01</div>
+              </div>
+            </div>
+            <div style="display:flex;gap:8px;">
+              <div style="flex:1;height:80px;background:#ddd;border-radius:8px;"></div>
+              <div style="flex:2;height:80px;background:#eee;border-radius:8px;padding:8px;">
+                <div style="font-size:13px;font-weight:bold;">DAN测评:了解孩子的天赋</div>
+                <div style="font-size:11px;color:#999;">2026-05-28</div>
+              </div>
+            </div>
+          </div>
+          <div style="background:#667eea;color:#fff;text-align:center;padding:10px;border-radius:20px;margin-top:12px;font-size:13px;">
+            🔒 登录解锁全部功能
+          </div>
+        </div>
+      </div>
+      <div class="pros-cons" style="margin-top:12px;">
+        <div class="pros"><h4>优点</h4><ul><li>用户体验最流畅</li><li>TabBar内容直接可看</li><li>登录是后台的事,前台体验完整</li></ul></div>
+        <div class="cons"><h4>缺点</h4><ul><li>需改造路由守卫</li><li>「发现」内容需提前准备</li><li>API层需区分登录态</li></ul></div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div class="section" style="margin-top:24px;padding:16px;background:#f0f7ff;border-radius:12px;border-left:4px solid #667eea;">
+  <h3 style="margin-top:0;">💡 我的推荐:方案 C 为主 + 方案 A 为辅</h3>
+  <p style="font-size:14px;color:#555;">
+    <strong>方案 C</strong> 解除 TabBar 限制是最自然的体验——用户打开小程序就能看到「发现」页的精选内容和「商城」的服务列表。
+    同时在 login 页顶部做一个精简的产品亮点展示(方案 A 的精简版),让登录页本身也有吸引力。
+  </p>
+</div>
+
+<p style="margin-top:16px;font-size:14px;color:#888;">点击卡片选择你倾向的方案,然后告诉我你的想法。</p>

+ 234 - 0
.superpowers/brainstorm/9864-1780551730/content/user-flow.html

@@ -0,0 +1,234 @@
+<h2>用户流程 & 内容结构设计</h2>
+<p class="subtitle">方案 C(TabBar解锁)+ A(登录页增强)合并设计</p>
+
+<div class="section">
+  <h3>📱 用户进入流程</h3>
+  <div style="display:flex;align-items:center;gap:16px;padding:16px;background:#f9f9f9;border-radius:12px;flex-wrap:wrap;">
+    <div style="flex:1;min-width:120px;text-align:center;padding:12px;background:#667eea;color:#fff;border-radius:12px;font-size:13px;">
+      打开小程序
+    </div>
+    <div style="font-size:20px;color:#999;">→</div>
+    <div style="flex:1;min-width:120px;text-align:center;padding:12px;background:#764ba2;color:#fff;border-radius:12px;font-size:13px;">
+      发现 Tab<br/><span style="font-size:11px;">(未登录亦可浏览)</span>
+    </div>
+    <div style="font-size:20px;color:#999;">→</div>
+    <div style="flex:1;min-width:120px;text-align:center;padding:12px;background:#f5f5f5;border-radius:12px;font-size:13px;color:#666;">
+      浏览内容 ← 浏览商城<br/>浏览服务商
+    </div>
+    <div style="font-size:20px;color:#999;">→</div>
+    <div style="flex:1;min-width:120px;text-align:center;padding:12px;background:#FF6B6B;color:#fff;border-radius:12px;font-size:13px;">
+      点击需登录功能<br/><span style="font-size:11px;">→ 跳转登录页</span>
+    </div>
+    <div style="font-size:20px;color:#999;">→</div>
+    <div style="flex:1;min-width:120px;text-align:center;padding:12px;background:#07c160;color:#fff;border-radius:12px;font-size:13px;">
+      登录后回到<br/>之前页面
+    </div>
+  </div>
+</div>
+
+<div style="display:flex;gap:24px;margin-top:24px;">
+  <div style="flex:1;">
+    <h3>发现 Tab — 内容设计</h3>
+    <div class="mockup">
+      <div class="mockup-header">发现(未登录)</div>
+      <div class="mockup-body" style="padding:12px;">
+        <!-- 顶部轮播 -->
+        <div style="height:140px;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:12px;margin-bottom:12px;padding:16px;color:#fff;">
+          <div style="font-size:18px;font-weight:bold;">溪艾福 Care Family Club</div>
+          <div style="font-size:12px;opacity:0.9;margin-top:4px;">以五行五维为内核的家庭主动健康管理平台</div>
+          <div style="display:flex;gap:8px;margin-top:12px;">
+            <span style="background:rgba(255,255,255,0.2);padding:4px 10px;border-radius:12px;font-size:11px;">🏆 任务积分</span>
+            <span style="background:rgba(255,255,255,0.2);padding:4px 10px;border-radius:12px;font-size:11px;">⭐ 五行沙盘</span>
+            <span style="background:rgba(255,255,255,0.2);padding:4px 10px;border-radius:12px;font-size:11px;">👨‍👩‍👧 家庭共育</span>
+          </div>
+        </div>
+        
+        <!-- 功能入口图标 -->
+        <div style="display:flex;justify-content:space-around;margin-bottom:12px;">
+          <div style="text-align:center;">
+            <div style="width:48px;height:48px;background:#f0f4ff;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;">🔥</div>
+            <div style="font-size:11px;color:#666;margin-top:4px;">心·火</div>
+          </div>
+          <div style="text-align:center;">
+            <div style="width:48px;height:48px;background:#fff5e6;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;">🌿</div>
+            <div style="font-size:11px;color:#666;margin-top:4px;">行·木</div>
+          </div>
+          <div style="text-align:center;">
+            <div style="width:48px;height:48px;background:#e6f7ff;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;">🌏</div>
+            <div style="font-size:11px;color:#666;margin-top:4px;">身·土</div>
+          </div>
+          <div style="text-align:center;">
+            <div style="width:48px;height:48px;background:#f0fff0;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;">⚔️</div>
+            <div style="font-size:11px;color:#666;margin-top:4px;">智·金</div>
+          </div>
+          <div style="text-align:center;">
+            <div style="width:48px;height:48px;background:#fef0f0;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;">💧</div>
+            <div style="font-size:11px;color:#666;margin-top:4px;">富·水</div>
+          </div>
+        </div>
+
+        <!-- 精选内容列表 -->
+        <div style="font-size:14px;font-weight:bold;margin-bottom:8px;">📖 精选内容</div>
+        <div style="background:#f9f9f9;border-radius:10px;padding:12px;margin-bottom:8px;">
+          <div style="font-size:13px;font-weight:bold;">培养孩子专注力的5个实用方法</div>
+          <div style="font-size:11px;color:#999;margin-top:4px;">🔥 心·火 · 2026-06-01</div>
+        </div>
+        <div style="background:#f9f9f9;border-radius:10px;padding:12px;margin-bottom:8px;">
+          <div style="font-size:13px;font-weight:bold;">DAN测评:科学了解孩子的认知天赋</div>
+          <div style="font-size:11px;color:#999;margin-top:4px;">⚔️ 智·金 · 2026-05-28</div>
+        </div>
+        <div style="background:#f9f9f9;border-radius:10px;padding:12px;margin-bottom:8px;">
+          <div style="font-size:13px;font-weight:bold;">家庭任务积分制:让孩子主动学习</div>
+          <div style="font-size:11px;color:#999;margin-top:4px;">🌿 行·木 · 2026-05-25</div>
+        </div>
+        
+        <!-- 底部登录引导 -->
+        <div style="text-align:center;padding:12px;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:12px;margin-top:8px;">
+          <div style="color:#fff;font-size:14px;font-weight:bold;">登录解锁全部功能</div>
+          <div style="color:rgba(255,255,255,0.8);font-size:11px;margin-top:4px;">创建家庭、管理任务、查看五行能量沙盘</div>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <div style="flex:1;">
+    <h3>登录页 — 顶部增强</h3>
+    <div class="mockup">
+      <div class="mockup-header">登录页(增强版)</div>
+      <div class="mockup-body" style="padding:12px;">
+        <!-- 精简亮点 -->
+        <div style="text-align:center;margin-bottom:16px;">
+          <div style="font-size:22px;font-weight:bold;color:#333;">溪艾福</div>
+          <div style="font-size:12px;color:#888;">Care Family Club</div>
+        </div>
+        
+        <!-- 3个亮点卡片 -->
+        <div style="display:flex;gap:8px;margin-bottom:16px;">
+          <div style="flex:1;background:#f0f4ff;border-radius:10px;padding:12px;text-align:center;">
+            <div style="font-size:28px;">🏆</div>
+            <div style="font-size:12px;font-weight:bold;margin-top:4px;">任务积分</div>
+            <div style="font-size:10px;color:#888;">激励自主完成任务</div>
+          </div>
+          <div style="flex:1;background:#fff5e6;border-radius:10px;padding:12px;text-align:center;">
+            <div style="font-size:28px;">⭐</div>
+            <div style="font-size:12px;font-weight:bold;margin-top:4px;">五行沙盘</div>
+            <div style="font-size:10px;color:#888;">五维成长可视化</div>
+          </div>
+          <div style="flex:1;background:#e6f7ff;border-radius:10px;padding:12px;text-align:center;">
+            <div style="font-size:28px;">👨‍👩‍👧</div>
+            <div style="font-size:12px;font-weight:bold;margin-top:4px;">双角色</div>
+            <div style="font-size:10px;color:#888;">家长孩子协同</div>
+          </div>
+        </div>
+
+        <!-- 分隔 -->
+        <div style="display:flex;align-items:center;gap:8px;margin-bottom:16px;">
+          <div style="flex:1;height:1px;background:#eee;"></div>
+          <span style="font-size:12px;color:#999;">登录后使用完整功能</span>
+          <div style="flex:1;height:1px;background:#eee;"></div>
+        </div>
+
+        <!-- 登录表单(简化) -->
+        <div style="background:#f5f5f5;border-radius:12px;padding:16px;">
+          <div style="height:44px;background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin-bottom:8px;display:flex;align-items:center;padding:0 12px;">
+            <span style="font-size:13px;color:#999;">手机号</span>
+          </div>
+          <div style="height:44px;background:#667eea;color:#fff;border-radius:22px;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:bold;margin-bottom:8px;">
+            获取验证码
+          </div>
+          <div style="height:44px;background:#07c160;color:#fff;border-radius:22px;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:bold;">
+            微信一键登录
+          </div>
+
+          <div style="text-align:center;margin-top:8px;">
+            <span style="font-size:11px;color:#999;">先浏览看看 →</span>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div style="display:flex;gap:24px;margin-top:24px;">
+  <div style="flex:1;">
+    <h3>商城 Tab — 内容设计</h3>
+    <div class="mockup">
+      <div class="mockup-header">商城(未登录预览)</div>
+      <div class="mockup-body" style="padding:12px;">
+        <!-- 分类入口 -->
+        <div style="display:flex;gap:8px;margin-bottom:12px;">
+          <span style="background:#f0f4ff;color:#667eea;padding:6px 14px;border-radius:16px;font-size:12px;font-weight:bold;">全部</span>
+          <span style="background:#f5f5f5;color:#666;padding:6px 14px;border-radius:16px;font-size:12px;">课程</span>
+          <span style="background:#f5f5f5;color:#666;padding:6px 14px;border-radius:16px;font-size:12px;">活动</span>
+          <span style="background:#f5f5f5;color:#666;padding:6px 14px;border-radius:16px;font-size:12px;">商品</span>
+        </div>
+        <!-- 商品卡片 -->
+        <div style="background:#fff;border:1px solid #f0f0f0;border-radius:12px;overflow:hidden;margin-bottom:8px;">
+          <div style="height:100px;background:#f0f4ff;display:flex;align-items:center;justify-content:center;font-size:32px;">🧘</div>
+          <div style="padding:10px;">
+            <div style="font-size:13px;font-weight:bold;">亲子瑜伽体验课</div>
+            <div style="font-size:11px;color:#FF6B6B;margin-top:4px;">¥199</div>
+          </div>
+        </div>
+        <div style="background:#fff;border:1px solid #f0f0f0;border-radius:12px;overflow:hidden;margin-bottom:8px;">
+          <div style="height:100px;background:#fff5e6;display:flex;align-items:center;justify-content:center;font-size:32px;">🎮</div>
+          <div style="padding:10px;">
+            <div style="font-size:13px;font-weight:bold;">舒尔特方格专注力训练</div>
+            <div style="font-size:11px;color:#FF6B6B;margin-top:4px;">¥49</div>
+          </div>
+        </div>
+        <div style="text-align:center;padding:12px;color:#999;font-size:12px;">
+          登录查看全部商品和服务
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <div style="flex:1;">
+    <h3>我的 Tab — 未登录状态</h3>
+    <div class="mockup">
+      <div class="mockup-header">我的(未登录)</div>
+      <div class="mockup-body" style="padding:12px;">
+        <!-- 登录入口 -->
+        <div style="text-align:center;padding:24px 0;">
+          <div style="width:64px;height:64px;border-radius:32px;background:#f0f0f0;margin:0 auto 12px;display:flex;align-items:center;justify-content:center;font-size:32px;">👤</div>
+          <div style="font-size:14px;color:#333;font-weight:bold;">登录/注册</div>
+          <div style="font-size:12px;color:#999;margin-top:4px;">登录后使用全部功能</div>
+          <div style="margin-top:12px;">
+            <span style="display:inline-block;padding:8px 32px;background:#667eea;color:#fff;border-radius:20px;font-size:14px;">立即登录</span>
+          </div>
+        </div>
+
+        <!-- 占位菜单 -->
+        <div style="border-top:1px solid #f0f0f0;padding-top:12px;">
+          <div style="display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #f5f5f5;">
+            <span style="font-size:16px;margin-right:8px;">📖</span>
+            <span style="font-size:13px;color:#666;">关于溪艾福</span>
+          </div>
+          <div style="display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #f5f5f5;">
+            <span style="font-size:16px;margin-right:8px;">💬</span>
+            <span style="font-size:13px;color:#666;">意见反馈</span>
+          </div>
+          <div style="display:flex;align-items:center;padding:12px 0;">
+            <span style="font-size:16px;margin-right:8px;">⚙️</span>
+            <span style="font-size:13px;color:#666;">设置</span>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div class="section" style="margin-top:24px;padding:16px;background:#f9fff0;border-radius:12px;border-left:4px solid #07c160;">
+  <h3 style="margin-top:0;">📋 需要实现的核心改动</h3>
+  <ol style="font-size:14px;color:#555;line-height:1.8;padding-left:20px;">
+    <li><strong>路由守卫改造</strong> — 允许未登录访问指定的 TabBar 页面(发现、商城、我的)</li>
+    <li><strong>发现页内容重构</strong> — 新增未登录可看的精选内容(产品介绍、文章等)</li>
+    <li><strong>商城页未登录态</strong> — 展示商品/服务列表,操作时引导登录</li>
+    <li><strong>我的页未登录态</strong> — 显示登录入口 + 基础信息</li>
+    <li><strong>登录页顶部增强</strong> — 加产品亮点三卡片展示</li>
+    <li><strong>引导按钮</strong> — 登录页底部"先浏览看看"可回到发现Tab</li>
+  </ol>
+</div>
+
+<p style="margin-top:16px;font-size:14px;color:#888;">看看各页面的布局设计是否合理?有哪些地方想调整?</p>

+ 1 - 0
.superpowers/brainstorm/9864-1780551730/state/server-stopped

@@ -0,0 +1 @@
+{"reason":"idle timeout","timestamp":1780553531651}

+ 184 - 0
DEPLOYMENT.md

@@ -0,0 +1,184 @@
+# 生产环境部署文档
+
+> **服务器**: 172.16.0.4(内网)/ 111.228.6.214(公网)
+> **域名**: www.etotem.com.cn / cfc.etotem.com.cn / cf-club.iwintrue.com / ai.etotem.com.cn
+
+---
+
+## 服务架构
+
+```
+公网 (111.228.6.214)
+  └─ Nginx (80 → 443)               — 反向代理 + SSL 终端
+       ├─ www.etotem.com.cn          — 公司官网静态站
+       │    ├─ /admin/               → /app/pro/cfc/frontend/ (管理端 SPA)
+       │    └─ /api/                 → Spring Boot :9082
+       ├─ cfc.etotem.com.cn          — 后端 API 主站
+       │    ├─ /admin/               → /app/pro/cfc/frontend/ (管理端 SPA)
+       │    ├─ /admin/api/           → Spring Boot :9082
+       │    ├─ /api/                 → Spring Boot :9082
+       │    └─ /                     → Spring Boot :9082
+       ├─ cf-club.iwintrue.com       — 俱乐部静态站
+       │    └─ /api/                 → Spring Boot :9082
+       └─ ai.etotem.com.cn           — AI LangGraph 服务
+            └─ /                     → Docker :9000
+
+Spring Boot (cfc-backend) :9082
+  ├─ MySQL 127.0.0.1:3306/zxyj      — 主库
+  ├─ Redis 127.0.0.1:6379           — 缓存
+  └─ Sfms 只读源 (RDS 阿里云)        — 可选
+```
+
+---
+
+## 后端部署
+
+```bash
+# 1. 构建
+cd /app/cfc/cfc-backend
+mvn clean package -Dmaven.test.skip=true -Dmaven.compile.fork=true
+
+# 2. 复制 JAR
+cp target/cfc-backend-1.0.0.jar /app/pro/cfc/backend/
+
+# 3. 重启(start.sh 自动 kill 旧进程 + 启动新进程)
+bash /app/pro/cfc/backend/start.sh
+
+# 4. 验证
+curl -s -o /dev/null -w "%{http_code}" http://localhost:9082/api/
+# 预期返回 401(需要 JWT 令牌)
+```
+
+### 配置文件
+
+| 路径 | 说明 |
+|------|------|
+| `/app/pro/cfc/backend/cfc-backend-1.0.0.jar` | 可执行 JAR |
+| `/app/pro/cfc/backend/config/application-prod.yml` | 生产配置 |
+| `/app/pro/cfc/backend/config/application.yml` | 公共配置 |
+| `/app/pro/cfc/backend/app.pid` | 进程 PID 文件 |
+
+### 启动脚本 (`/app/pro/cfc/backend/start.sh`)
+
+```bash
+#!/bin/bash
+APP_DIR="/app/pro/cfc/backend"
+JAR="$APP_DIR/cfc-backend-1.0.0.jar"
+PID_FILE="$APP_DIR/app.pid"
+JAVA_OPTS="-Xmx2g -Xms512m -XX:+CrashOnOutOfMemoryError"
+
+# 停止旧进程
+if [ -f "$PID_FILE" ]; then kill $(cat "$PID_FILE"); sleep 3; fi
+fuser -k 9082/tcp 2>/dev/null; sleep 2
+
+# 启动新进程
+nohup java $JAVA_OPTS -jar "$JAR" \
+  --spring.profiles.active=prod \
+  --spring.config.location="$APP_DIR/config/" \
+  > /dev/null 2>&1 &
+echo $! > "$PID_FILE"
+```
+
+### 日志
+
+| 文件 | 说明 |
+|------|------|
+| `/app/pro/cfc/backend/cfc-backend.log` | 应用日志(Logback,自动滚动) |
+| 滚动策略 | 50MB/文件,保留 7 天,总计 ≤500MB |
+| 日志级别 | `com.etotem.cfc: warn`,INFO 级仅启动/请求日志 |
+
+---
+
+## 前端管理端部署 (cfc-web)
+
+```bash
+# 1. 构建
+cd /app/cfc/cfc-web
+npm run build
+
+# 2. 部署
+rsync -a --delete dist/ /app/pro/cfc/frontend/
+```
+
+**注意**: 前端部署后**无需重启后端**,Nginx 直接读取静态文件。
+
+---
+
+## 网站静态站部署 (cfc-web 官网部分)
+
+```bash
+cd /app/cfc/cfc-web
+npm run build
+rsync -a --delete dist/ /app/cfc/web/
+```
+
+---
+
+## 数据库
+
+| 属性 | 值 |
+|------|-----|
+| 主机 | 127.0.0.1:3306 |
+| 数据库 | zxyj |
+| 用户 | zxyj |
+| 密码 | zxyj@123 |
+| 引擎 | MariaDB |
+
+### 迁移
+
+- **唯一入口**: `DatabaseInitializer.runMigrations()`(Spring Boot 启动时自动执行)
+- **所有 DDL 幂等**: 可重复执行,失败时 WARN 级别记录,不会阻塞启动
+- **同步 schema.sql**: 每次新表/新列后同步更新 `/app/cfc/cfc-backend/src/main/resources/schema.sql`
+
+---
+
+## Nginx
+
+| 配置 | 路径 |
+|------|------|
+| 主配置 | `/etc/nginx/sites-available/etotem` |
+| 符号链接 | `/etc/nginx/sites-enabled/etotem` |
+| SSL 证书 | `/etc/ohttps/certificates/`(Let's Encrypt,每日 3:00 cron 自动续期) |
+
+```bash
+# 验证配置
+nginx -t
+
+# 重载
+nginx -s reload
+```
+
+---
+
+## 小程序 (cfc-frontend)
+
+- **不在服务器构建**
+- 本地开发后,用**微信开发者工具**导入 `/app/cfc/cfc-frontend/` 根目录
+- 微信开发者工具中上传代码 → 微信公众平台提交审核 → 发布
+- API 地址通过 `config.js` 中 `uni.getAccountInfoSync()` 自动适配环境
+
+---
+
+## 重启流程速查
+
+```bash
+# 一键部署后端
+cd /app/cfc/cfc-backend && mvn clean package -Dmaven.test.skip=true -Dmaven.compile.fork=true && \
+  cp target/cfc-backend-1.0.0.jar /app/pro/cfc/backend/ && \
+  bash /app/pro/cfc/backend/start.sh
+
+# 重载 Nginx(不改配置无需执行)
+nginx -s reload
+```
+
+---
+
+## 关键约束
+
+| 条目 | 规则 |
+|------|------|
+| 端口冲突 | 启动后端前必须释放 9082(`fuser -k 9082/tcp`) |
+| 构建验证 | `mvn clean compile` 通过后才能 package |
+| 日志清理 | 无需手动清理,Logback 自动滚动 |
+| SSL 续期 | 每日 3:00 自动执行 `acme.sh --cron` |
+| SFMS 只读源 | 生产环境已禁用(`sfms.datasource.enabled: false`) |

+ 218 - 0
DESIGN.md

@@ -0,0 +1,218 @@
+---
+name: 浠艾福设计系统
+version: 1.1.0
+colors:
+  # === 家长端 - 温暖希望 ===
+  parent:
+    background: "#FFF9F0"
+    surface: "#FFFFFF"
+    primary: "#FF8C42"
+    primary-hover: "#FF7A2E"
+    secondary: "#4ECDC4"
+    accent: "#FFD93D"
+    text-primary: "#2D3436"
+    text-secondary: "#636E72"
+    success: "#00B894"
+    error: "#FF6B6B"
+
+  # === 成长规划师端 - 专业活力 ===
+  teacher:
+    background: "#F0F7FF"
+    surface: "#FFFFFF"
+    primary: "#3B82F6"
+    primary-hover: "#2563EB"
+    secondary: "#10B981"
+    accent: "#F59E0B"
+    text-primary: "#1E293B"
+    text-secondary: "#64748B"
+    success: "#10B981"
+    warning: "#F59E0B"
+    error: "#EF4444"
+
+  # === 孩子端 - 快乐有趣 ===
+  child:
+    background: "#FFF5E6"
+    surface: "#FFFFFF"
+    primary: "#FF6B9D"
+    primary-hover: "#F55A8A"
+    secondary: "#A78BFA"
+    accent: "#34D399"
+    text-primary: "#374151"
+    text-secondary: "#6B7280"
+    success: "#34D399"
+    gold: "#FFD700"
+
+  # === Web管理端 - 专业简洁 ===
+  web:
+    background: "#F8FAFC"
+    surface: "#FFFFFF"
+    primary: "#6366F1"
+    primary-hover: "#4F46E5"
+    secondary: "#0EA5E9"
+    accent: "#F59E0B"
+    text-primary: "#1E293B"
+    text-secondary: "#64748B"
+    border: "#E2E8F0"
+    success: "#22C55E"
+    warning: "#F59E0B"
+    error: "#EF4444"
+
+typography:
+  display:
+    fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif"
+    fontSize: 32px
+    fontWeight: 700
+    lineHeight: 1.2
+  headline:
+    fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif"
+    fontSize: 24px
+    fontWeight: 600
+    lineHeight: 1.3
+  title:
+    fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif"
+    fontSize: 18px
+    fontWeight: 600
+    lineHeight: 1.4
+  body:
+    fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif"
+    fontSize: 16px
+    fontWeight: 400
+    lineHeight: 1.6
+  label:
+    fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif"
+    fontSize: 14px
+    fontWeight: 500
+    lineHeight: 1.4
+  caption:
+    fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif"
+    fontSize: 12px
+    fontWeight: 400
+    lineHeight: 1.4
+rounded:
+  sm: 8px
+  md: 12px
+  lg: 16px
+  xl: 24px
+  full: 9999px
+spacing:
+  unit: 4px
+  xs: 8px
+  sm: 12px
+  md: 16px
+  lg: 24px
+  xl: 32px
+  2xl: 48px
+  section: 64px
+
+# === 组件规范 ===
+components:
+  card:
+    rounded: "{rounded.lg}"
+    padding: "{spacing.lg}"
+  button-primary:
+    rounded: "{rounded.md}"
+    padding: "12px 24px"
+  badge-success:
+    rounded: "{rounded.full}"
+    padding: "4px 12px"
+  progress-bar:
+    rounded: "{rounded.full}"
+    height: "8px"
+  avatar:
+    rounded: "{rounded.full}"
+    size: "48px"
+---
+# 浠艾福 - 多端设计系统
+
+## 1. 家长端 (Parent)
+
+**情感定位**: 温暖、希望、愉悦、充满期待
+
+**核心理念**: 家长是孩子成长的助推器
+
+### 视觉特点
+- 温暖的米白色背景 (#FFF9F0)
+- 橙色主色调传递活力与希望
+- 青色辅色清新舒适
+- 鼓励性文案和积极反馈
+- 成长数据可视化 + 进度条动画
+
+### 页面结构
+- 欢迎区:动态问候 + 孩子状态
+- 成长数据:任务完成率、积分、连续天数、习惯打卡
+- 今日重点:待完成任务 + 鼓励语
+- 成长里程碑:成就徽章展示
+- 快捷操作:常用功能入口
+
+---
+
+## 2. 成长规划师端 (Teacher)
+
+**情感定位**: 专业、活力、值得信赖
+
+**核心理念**: 帮助家庭规划孩子成长路径
+
+### 视觉特点
+- 清新的浅蓝色背景 (#F0F7FF)
+- 蓝色主色调专业可信
+- 绿色辅色代表成长与希望
+- 金色强调代表成就
+- 数据驱动:销售数据、团队业绩、服务家庭数
+- 专业仪表盘风格
+
+### 页面结构
+- 首页仪表盘:数据概览、快捷入口、今日概览
+- 我的家庭:服务家庭列表、任务管理
+- 我的团队:下级规划师、团队业绩
+- 消息中心:家长咨询、系统通知
+- 套餐管理:创建/编辑/发布套餐
+- 订单与佣金:订单列表、佣金明细
+
+---
+
+## 3. 孩子端 (Child)
+
+**情感定位**: 快乐、有趣、充满成就感
+
+**核心理念**: 在快乐中养成好习惯
+
+### 视觉特点
+- 柔和的暖粉色背景 (#FFF5E6)
+- 粉色主色调活泼可爱
+- 紫色辅色梦幻有趣
+- 金色强调代表成就
+- 卡通元素:星星、奖杯、彩虹
+- 奖励机制可视化 + 徽章系统
+- 成就反馈:彩带、星星动画
+
+### 页面结构
+- 今日任务:任务卡片、进度条、打卡动画
+- 积分商城:积分展示、奖励兑换
+- 成就墙:徽章收集、里程碑
+- 趣味互动:打卡提醒、鼓励动画
+
+---
+
+## 4. Web管理端 (Web Admin)
+
+**情感定位**: 专业、高效、清晰
+
+**核心理念**: 高效管理,清晰洞察
+
+### 视觉特点
+- 浅灰背景 (#F8FAFC) 不伤眼
+- 紫色主色调 (#6366F1) 现代专业
+- 蓝色辅色 (#0EA5E9) 数据展示
+- 卡片式布局清晰分区
+- 表格/列表专业呈现
+- 图表数据可视化
+- 侧边导航 + 顶部header
+
+### 页面结构
+- 仪表盘:关键指标、数据图表
+- 任务管理:任务列表、模板管理
+- 奖励管理:心愿单、奖励设置
+- 家庭管理:家庭列表、孩子管理
+- 积分管理:积分规则、调整记录
+- 成长规划师:套餐管理、审核、团队
+- 系统管理:用户管理、权限、日志

+ 97 - 0
articles/D11-draft_v1.md

@@ -0,0 +1,97 @@
+# D11 - 睡好两周后,脑子真的变快了
+
+📘 **浠艾福双培强基工程** | 五维能量·身→智
+📌 **#主动健康 #睡眠质量 #前额叶 #身养脑 #双培强基**
+
+---
+
+昨天去超市,结账时突然想不起要买什么了。
+
+站在收银台前面,拎着一袋子东西,愣了快 30 秒——酱油?还是盐?
+
+回家路上我跟老公开玩笑:完了,脑子真不行了。
+
+他没笑。过了几分钟,他回我一句:
+
+> "你最近是不是没睡好?"
+
+我心里咯噔一下。
+
+是真的。我已经连续两周睡得糟糕了——不是睡不着,是睡得浅。每天凌晨两三点会醒,再睡回去。
+
+我以前以为"脑子忘事"是年纪大了(53 岁),是必然的。
+
+我错了。
+
+我翻了一下双培强基工程里的 A1 报告——**前额叶皮质是大脑里最容易被睡眠影响的区域**。它管什么呢?计划、专注、决策、短期记忆。
+
+超市忘买什么,恰恰就是前额叶的事。
+
+不是脑子老了,是身体没养好。
+
+我开始做一件事:**每天早上醒来,给自己的"睡眠质量"打一个分(1-10 分),记到手机备忘录**。
+
+不用想复杂,就凭感觉:
+- 睡得深不深
+- 中途醒了没有
+- 早上起来神清气爽还是顶着一脑袋雾
+
+20 秒搞定。
+
+然后我把"周一到周日"的分数记下来。
+
+第一个周一:6.5、6、5、5.5、6、5.5、5
+第一个周末:5.5、6
+
+平均:**5.7**
+
+难怪我脑子慢。
+
+接下来的两周,我没有急着改善睡眠(那太难了),只做了一件事:**每晚 10 点 30 分,关掉所有屏幕,躺下读纸质书 20 分钟**。
+
+第二个周一:6.5、6.5、6、7、6.5、7、7
+第二个周末:7、7.5
+
+平均:**6.8**
+
+**两周,平均涨了 1.1 分。**
+
+变化来得比我想象的快——
+
+那天我去开家长会,老师讲了三件事,我全记住了。第二天复述给老公,没卡壳。
+
+上周我去银行办业务,流程复杂,但我把要带的证件、要签的字一项项过完,没有反复问柜员。
+
+我突然意识到——**脑子没有变快,是身体的底盘稳了**。
+
+健身先养骨,学习先养脑。
+
+这两周我什么都没改,就多了"睡前 20 分钟纸质书"这一个动作。两周后,我不仅睡得沉了,连以前觉得"自己老了"的那些事,都悄悄变好了。
+
+现在我每天早上第一件事,是看一眼昨天的睡眠分。如果低于 6,我当天就提醒自己——别接太复杂的任务,脑子今天需要省着用。
+
+这是身体给大脑的信号。
+
+**今晚就试试**:睡前 10 点 30 分,手机放客厅充电,床头放一本纸质书。
+
+明天早上醒来,给自己的睡眠打个分。
+
+评论区报一下你这两周的平均分。或者私信我"睡眠",我发一份《14 天睡眠质量打卡表》给你。
+
+——
+
+⸻
+
+数据来源:
+- A1 儿童核心认知发展六维分(前额叶与睡眠章节)
+- 自我 14 天追踪(n=14 日,平均分从 5.7 → 6.8)
+
+⸻
+
+> 🌏 身是地基,不是装备。地基稳了,上面才有空间。
+>
+> 下集预告:📘 智维度第二篇——阅读 14 天,你的"学得进"是怎么发生的。
+
+⸻
+
+#主动健康 #睡眠质量 #前额叶 #身养脑 #双培强基 #14天打卡 #五维能量

+ 108 - 0
articles/D11-draft_v2.md

@@ -0,0 +1,108 @@
+# D11 - 睡好两周后,脑子真的变快了
+
+📘 **浠艾福双培强基工程** | 五维能量·身→智
+📌 **#主动健康 #睡眠质量 #前额叶 #身养脑 #双培强基**
+
+---
+
+昨天去超市结账时突然想不起要买什么了。站在收银台前面,拎着一袋子东西,愣了快 30 秒——酱油还是盐?
+
+回家路上我跟老公开玩笑:完了,脑子真不行了。
+
+他没笑。过了几分钟,他回我一句:
+
+> "你最近是不是没睡好?"
+
+我心里咯噔一下。
+
+是真的。我已经连续两周睡得糟糕了——不是睡不着,是睡得浅。每天凌晨两三点会醒,再睡回去。我以前以为"脑子忘事"是年纪大了(53 岁),是必然的。
+
+我错了。
+
+## 为什么睡眠差,记性就差?
+
+我翻了一下双培强基工程里的 A1 报告,又查了几篇神经科学论文——**睡眠不是大脑"关机",是它整理房间的时间**。
+
+具体讲两个机制:
+
+**第一,海马体 → 新皮层的"搬运工"机制**。白天我们接收的所有信息,先暂存在大脑的海马体里(相当于临时硬盘)。到了深度睡眠阶段,海马体会把这些信息**重新播放**,搬运到新皮层(相当于长期硬盘)。如果深度睡眠不够,**新学的知识、刚记住的人名,就卡在临时硬盘里,过夜就丢**。
+
+**第二,突触稳态与代谢废物清除**。清醒时大脑神经元不断建立连接,会产生大量代谢废物(β-淀粉样蛋白等)。深度睡眠期间,脑脊液会"冲洗"这些废物——这就是为什么睡一晚好觉,醒来觉得脑子里"清爽了"。
+
+神经科学里有个著名实验:让两组人学同一段新知识,**一组当晚正常睡,一组通宵不睡**,第二天测记忆保持率——正常睡的那组平均保持 70%,通宵组只剩 12%。
+
+**所以"脑子忘事"不是老了,是前额叶+海马体没被"洗"干净。**
+
+我开始做一件事:**用 Apple Watch 给自己的"睡眠质量"打一个分(1-10 分)**,让手环替我记录。我不用每天手动记——手表会自动算出深度睡眠时长、REM 时长、夜醒次数。
+
+我每周做一件事:**看看这一周平均分是多少,记到手机备忘录**。两个指标同时看:
+- 手环自动算的睡眠分
+- 自己主观感受的"脑子清爽度"
+
+第一周:手环平均分 5.7,主观"雾感"严重(早上起来像没洗脸一样)
+
+难怪我脑子慢。
+
+## 接下来两周,我做对了两件事
+
+我没有急着改善睡眠(那太难了),只加了两个小动作:
+
+**第一件事:睡前 10 点 30 分,关掉所有屏幕,躺下读纸质书 20 分钟**。这是第一篇里讲过的老办法。
+
+**第二件事,是我自己也没想到的——喝还原水**。
+
+我是双培强基工程的老读者,群里经常看到有人聊还原水(也叫富氢水)。我之前觉得是噱头。后来查了文献,发现**多项随机对照试验表明,规律饮用富氢水可在 4-8 周内改善主观睡眠质量,其机制与降低氧化应激和调节自主神经功能相关**。
+
+翻译成人话:氧化应激会让神经细胞"生锈",睡前神经还紧绷就不易入睡;富氢水相当于给神经"除锈 + 减压"。
+
+我睡前 1 小时喝 200ml 还原水(常温,不要冰),配合纸质书一起做。两件事一前一后,互不打扰。
+
+**两周后的数据**(手环客观 + 主观双轨记录):
+
+- 第一周:手环睡眠分 5.7,主观"雾感" 
+- 第二周:手环睡眠分 6.8,主观"清醒"
+
+**两周,平均涨了 1.1 分。**
+
+## 脑子真的变快了
+
+变化来得比我想象的快——
+
+那天开家长会,老师讲了三件事我全记住了。第二天复述给老公,没卡壳。
+
+上周去银行办业务,流程复杂,我把要带的证件、要签的字一项项过完,没有反复问柜员。
+
+我突然意识到——**脑子没有变快,是身体的底盘稳了**。健身先养骨,学习先养脑。
+
+这两周我什么都没改,就多了"睡前 20 分钟纸质书 + 还原水"这两个动作。两周后,我不仅睡得沉了,连以前觉得"自己老了"的那些事,都悄悄变好了。
+
+现在我每天早上第一件事,是看一眼昨晚手环的睡眠分。如果低于 6,我当天就提醒自己——别接太复杂的任务,脑子今天需要省着用。这是身体给大脑的信号。
+
+## 今晚就试试
+
+**第一步**:打开 Apple Watch 或手环的"睡眠追踪"应用,让它替你记。如果没手环,也行——早起凭感觉给睡眠打个 1-10 分。
+
+**第二步**:睡前 10 点 30 分,手机放客厅充电,床头放一本纸质书。
+
+**第三步**(加分项):睡前 1 小时喝 200ml 常温还原水。
+
+明天早上醒来,看看手环的睡眠分。评论区报一下你这两周的平均分,或者私信我"睡眠",我发一份《14 天睡眠质量打卡表》给你。
+
+——
+
+⸻
+
+数据来源:
+- A1 儿童核心认知发展六维分(前额叶与睡眠章节)
+- 双培强基工程案例库 · 还原水专题
+- 公开 RCT 综述:富氢水改善主观睡眠质量(机制:降低氧化应激 + 调节自主神经)
+
+⸻
+
+> 🌏 身是地基,不是装备。地基稳了,上面才有空间。
+>
+> 下集预告:📘 智维度第二篇——阅读 14 天,你的"学得进"是怎么发生的。
+
+⸻
+
+#主动健康 #睡眠质量 #前额叶 #身养脑 #双培强基 #14天打卡 #五维能量 #还原水

+ 66 - 0
articles/D12-draft_v1.md

@@ -0,0 +1,66 @@
+# D12 - 坚持读14天后,我发现自己的词汇量涨了
+
+📘 **浠艾福双培强基工程** | 五维能量·智→富
+📌 **#阅读 #词汇力 #智养富 #双培强基 #终身学习**
+
+---
+
+上个月跟朋友聊天,她想表达"那种越来越好的感觉",想了半天说了句"就挺好的"。我说"是不是叫复利效应?"她说对对对,就这个词。
+
+回家我想了想——不是她词汇量小,是我以前也一样。
+
+我以前跟人聊理财,只会说"存钱"。后来开始读书,才知道"资产配置""被动收入""复利效应"这些词。不是变聪明了,是脑子里的"挂钩"变多了。
+
+张兴利教授在双培强基工程里讲过一个概念叫**智力可塑性**——成年人的大脑不是"定型了",是没被激活。而激活大脑最简单的方式,就是**增加词汇量**。
+
+为什么?因为词汇本质上是"思维挂钩"。你脑子里没有"资产配置"这个词,就想不到"钱要分几份放"这件事。你脑子里没有"情绪边界"这个词,就意识不到"别人的事不该我扛"。词汇量决定思维维度,思维维度决定决策质量,决策质量决定钱怎么花、怎么存、怎么增值。
+
+说到这,我特别想说一句——咱们中文其实挺占便宜的。英语要流畅表达,至少得记一万多个单词;中文呢,常用汉字就三千五左右,但组合起来几乎什么都能说。电脑=用电的大脑,充电=补充电量,每个字都是一个"积木",搭在一起就有新意思。当然,英文也就 26 个字母,但字母和单词是两码事——就像识字和认词是两回事。你认识三千个汉字,不等于你能用好三千个词。词是字的组合,是思维的组合。中文的底层逻辑就是用有限的积木搭出无限可能。你每多认识一个词,就等于多了一种搭法,多了一种看世界的角度。
+
+翻译成大白话:**会读的人,更容易看清钱的路。**
+
+我做了两件事,每天总共不到 5 分钟:
+
+第一件,每天读一页书。不是一本,是一页。随便什么书——理财的、心理的、历史的都行。读到不认识的词或概念,记下来。
+
+第二件,每周复盘一次"这周学到了什么新词"。不用多,3-5 个就行。记在手机备忘录里。
+
+14 天后,我翻了一下备忘录:
+
+第一周:资产配置、复利效应、被动收入、情绪边界、认知偏差
+第二周:机会成本、沉没成本、阈值效应、具身认知、范式转移
+
+10 个词。不多。
+
+但变化是——跟朋友聊退休规划时,我说出了"被动收入覆盖基础支出"这句话。以前我会说"多存点钱以后好养老"。
+
+前者是"能落地的计划",后者是"模糊的愿望"。区别在哪?**词汇量。**
+
+词汇量不是背单词,是给你脑子里装"挂钩"。挂钩多了,你看到的事就多了,能做的事就多了——包括赚钱的事。
+
+现在我做两个记录:
+
+1. 每天读一页书,圈出 1 个新词或新概念
+2. 每周日翻一遍,把 3-5 个词写到备忘录
+
+14 天后你看看自己的备忘录,数一数多了几个"挂钩"。
+
+评论区说说你最近学到的一个新词。私信我"词汇",我发一份《14 天词汇力打卡表》给你。
+
+——
+
+⸻
+
+数据来源:
+- 张兴利:智力可塑性(双培强基工程专家知识库)
+- 自我 14 天追踪(n=14 日,词汇积累 10 个)
+
+⸻
+
+> ⚔️ 智是挂钩,不是书柜。挂钩多了,才能挂住机会。
+>
+> 下集预告:💧 富维度第二篇——14 天资产柱状图,钱去哪了一眼看清。
+
+⸻
+
+#阅读 #词汇力 #智养富 #双培强基 #终身学习 #14天打卡 #五维能量

+ 67 - 0
articles/D13-draft_v1.md

@@ -0,0 +1,67 @@
+# D13 - 14天家庭资产柱状图,钱去哪了一眼看清
+
+📘 **浠艾福双培强基工程** | 五维能量·富→行
+📌 **#家庭记账 #消费记录 #富养行 #双培强基 #理财入门**
+
+---
+
+上个月底我查了一下银行卡余额,吓一跳——明明没买什么大件,钱怎么就少了?
+
+我想了半天,只记得买过菜、交过水电、周末出去吃了几顿饭。但这些加起来,不至于吧?
+
+后来我跟我老公说:咱俩对一下账?
+
+他对了半小时,抬头看我说:"上个月我们叫了 12 次外卖。"
+
+12 次。每次三四十,加起来四五百。我完全没意识到。
+
+这就是我常说的一句话:**钱不是花光的,是漏光的。**
+
+上篇学了一个新词叫"资源增值管理"——意思是别光盯着自己缺什么,先看看自己有什么。富不只是钱,是一种**丰盛的感觉**。孩子考了好成绩、工作上完成了一个项目、学会了一项新技能——这些都是富。但不管哪种富,第一步都是**看见**。看见了,你才能做选择;看不见,再多的资源也会漏掉。
+
+我做了两件事,每天 1 分钟:
+
+第一件,每天花 10 秒记一笔当天的消费。不用分类,不用分析,就记一个数字——今天花了多少。我记在手机备忘录里,一行一个数。
+
+第二件,每周日花 1 分钟,把这周的数字加起来,看看总数。
+
+14 天后,我画了一张柱状图——不是用 Excel,就在纸上画,每根柱子代表一周的支出。
+
+第一周柱子:高。因为周末出去吃了一顿好的。
+第二周柱子:更高。因为交了季度物业费。
+
+但有意思的是,我画完这张图之后,花钱的习惯开始变了——不是因为我要省钱,是因为**我看见了**。
+
+以前点外卖是"累了点一个",现在是"这个月外卖已经花了 400 了,今天自己煮吧"。
+
+看见,就是改变的开始。
+
+这就是富维度到行维度的连接——**钱看清了,关系就顺了**。
+
+以前月底对账,我和老公经常为"你怎么花了这么多"吵架。现在每周日一起加一遍数字,他看一眼我的图表,我瞅一眼他的记录,结论变成了"这周还行"。
+
+不是钱变多了,是**冲突变少了**。
+
+14 天,每天 10 秒记一笔,每周日 1 分钟加总数。不用 App,不用 Excel,手机备忘录就够。
+
+14 天后,你画一张柱状图,贴在冰箱上。然后看看——你家的钱,到底漏在哪根柱子里。
+
+评论区说说你最近一笔"没印象的支出"是什么。私信我"记账",我发一份《14 天家庭记账表》给你。
+
+——
+
+⸻
+
+数据来源:
+- 双培强基工程 · 资源增值管理理念
+- 自我 14 天追踪(n=14 日,支出可视率提升)
+
+⸻
+
+> 💧 富是看清,不是抠门。看清了钱的路,才能看清家的路。
+>
+> 下集预告:🌿 行维度第二篇——14 天关系温度计,家里温度升了几度。
+
+⸻
+
+#家庭记账 #消费记录 #富养行 #双培强基 #理财入门 #14天打卡 #五维能量

+ 45 - 0
articles/D14-draft_v1.md

@@ -0,0 +1,45 @@
+# D14 对外人笑一天,回家脸就垮了
+
+> 行维度 #10B981 | 参考《家的算法》第6章 行·人际和谐
+
+## 标题
+对外人笑一天,回家脸就垮了(14字)
+
+## 正文(698字)
+
+你有没有过这种时刻——对着外人笑了一整天,推开家门的那一秒,脸就垮下来了。
+
+在外面你好脾气好说话,跟陌生人聊半小时都能保持耐心。可回到家,孩子多叫两声妈妈你就烦了,伴侣问一句晚饭吃什么你就不耐烦了。这不是你的错,但这是你的问题。
+
+我查到一个数据,心里咯噔了一下。78%的孩子认为爸妈不关心自己的感受,但同一个调研里,100%的家长都认为自己非常关心孩子。这两个数字之间的差距,不是爱不够,是表达方式出了错。
+
+我们以为关心就是管。管作业、管时间、管习惯。但在孩子眼里,这叫检查,不叫关心。问题出在哪?出在我们把控制当成了爱的等价物。控制的背后是焦虑——怕孩子输在起跑线上,怕他走弯路,怕将来吃苦。这些怕投射到亲子关系里就变成了:你要听我的,按我说的做,别让我失望。
+
+孩子感受到的不是爱,是不信任。
+
+我后来试了一个方法,很简单但很管用——每天15分钟无条件关注时间。不是陪写作业,不是陪上兴趣班,也不是一边刷手机一边坐在旁边。这15分钟里,孩子说了算。他玩什么你就跟他玩什么,他想聊什么你就听什么。不评判、不指导、不纠正。只做一件事:专注地看着他,让他感觉到此刻你是完全属于他的。
+
+还有一个方法叫三明治沟通法。先说一句真诚的肯定,再说需要改进的地方,最后给一个正向收尾。不要说但是,但是一出来前面的肯定就作废了。用同时、另外、下次来代替。比如:你上周主动收拾了客厅,我回来看到特别感动。另外下次收拾前能不能先问问我,有些东西我可能还有用。不管怎么说,你愿意分担家务,我真的很开心。
+
+我认识一个妈妈,用这两个方法试了三个月,孩子的家庭归属感评分从2.0升到了7.3。不是换了孩子,是换了说话的方式。
+
+今晚试试。关掉手机,陪孩子15分钟,只听不说。来评论区告诉我,你陪了多久。
+
+## 标签
+#亲子关系 #家庭教育 #情绪管理 #沟通技巧 #育儿 #主动健康 #家庭幸福
+
+## 20秒动作
+关掉手机,陪孩子15分钟无条件关注时间
+
+## 关键数据
+78%的孩子认为"爸妈不关心我的感受",而100%的家长认为自己"非常关心孩子";归属感2.0→7.3(3个月)
+
+## 图片规划(7张)
+
+Slide 1: 标题 | 对外人笑一天,回家脸就垮了 | 行·人际和谐 | #10B981
+Slide 2: 场景 | 对陌生人笑着聊天 vs 回家脸垮 | 对比画面
+Slide 3: 数据 | 78%的孩子认为爸妈不关心感受 | 100%家长认为非常关心孩子
+Slide 4: 原因 | 不是不爱,是焦虑把控制当成了爱
+Slide 5: 方法1 | 每天15分钟无条件关注 | 不评判不指导不纠正
+Slide 6: 方法2 | 三明治沟通法 | 肯定→建议→收尾
+Slide 7: CTA | 今晚关掉手机,陪孩子15分钟 | 评论区打卡

+ 47 - 0
articles/D14-draft_v2.md

@@ -0,0 +1,47 @@
+# D14 对外人笑一天,回家脸就垮了(v2)
+
+> 行维度 #10B981 | 参考《家的算法》第6章 行·人际和谐
+
+## 标题
+对外人笑一天,回家脸就垮了(13字)
+
+## 正文(712字)
+
+你有没有过这种时刻——对着外人笑了一整天,推开家门的那一秒,脸就垮下来了。
+
+在外面你好脾气好说话,跟陌生人聊半小时都能保持耐心。可回到家,孩子多叫两声妈妈你就烦了,伴侣问一句晚饭吃什么你就不耐烦了,父母多叮嘱两句你就炸了。
+
+这不是你的错,但这是你的问题。
+
+为什么?因为家是你觉得"安全"的地方。在公司你得端着,在外面你得装着,回到家你终于可以卸下所有伪装。所以那些攒了一天的疲惫、委屈、不耐烦,都在推开家门的那一刻,倒给了你最亲的人。
+
+这不是你一个人这样。我查到一个数据,78%的孩子认为爸妈不关心自己的感受,但100%的家长都觉得自己非常关心孩子。这两个数字之间的差距,不是爱不够,是表达方式出了错。
+
+有个方法很管用,叫**三明治沟通法**。先说一句真诚的肯定,再说需要改进的地方,最后给一个正向收尾。关键就是不要用"但是"——"但是"一出来,前面的肯定就全废了。用"同时""另外""下次"来代替。
+
+比如你上了一天班回家,看到孩子把客厅弄得乱七八糟。不要说"你怎么又把客厅弄这么乱",试试:你今天自己把作业写完了,真棒。另外客厅的东西能不能收拾一下,我们一起弄。弄完妈妈陪你玩一会儿,好不好?
+
+还有一个方法,叫**目标停止法**。跟家人吵架的时候,停下来问一句:我们现在吵这个,目的是什么?很多时候你们吵的根本不是同一件事。你气的是累,他委屈的是付出没被看见。这一问,就能从"我要赢"变成"我想搞清楚"。
+
+我认识一个妈妈,用三明治沟通法试了三个月,孩子的家庭归属感评分从2.0升到了7.3。不是换了孩子,是她换了说话的方式。
+
+今晚试试。推开家门的那一刻,深呼吸,把那句到嘴边的抱怨换成一句肯定。来评论区告诉我,你换了什么。
+
+## 标签
+#亲子关系 #家庭教育 #情绪管理 #沟通技巧 #育儿 #主动健康 #家庭幸福
+
+## 20秒动作
+推开家门时,把抱怨换成一句肯定
+
+## 关键数据
+78%的孩子认为"爸妈不关心我的感受",100%的家长认为自己"非常关心孩子";归属感2.0→7.3(3个月)
+
+## 图片规划(7张)
+
+Slide 1: 标题 | 对外人笑一天,回家脸就垮了 | 行·人际和谐 | #10B981
+Slide 2: 场景 | 对陌生人笑着聊天 vs 回家脸垮 | 对比画面
+Slide 3: 数据 | 78%的孩子认为爸妈不关心感受 | 100%家长认为非常关心孩子
+Slide 4: 原因 | 因为家是安全的 | 在公司端着 在外面装着 回到家全倒给最亲的人
+Slide 5: 方法1 | 三明治沟通法 | 肯定 → 建议 → 收尾
+Slide 6: 方法2 | 目标停止法 | 停下来问:我们吵这个的目的是什么
+Slide 7: CTA | 今晚试试 | 把抱怨换成一句肯定

+ 53 - 0
articles/D14-draft_v3.md

@@ -0,0 +1,53 @@
+# D14 对外人客气,是因为不在乎(v3)
+
+> 行维度 #10B981 | 参考《家的算法》第6章 行·人际和谐
+
+## 标题
+对外人客气,是因为不在乎(14字)
+
+## 正文(737字)
+
+你在外面脾气好,不是因为你修养好,是因为你不在乎。
+
+跟陌生人说话你客客气气,因为你不在乎他怎么看你。同事提了离谱的需求你笑着说好,因为你不在乎他是不是过分。朋友约你你不想去你还是答应,因为你怕得罪人。
+
+但回到家就不一样了。孩子多叫两声妈妈你就烦了,伴侣跟你说句话你头都不抬,父母多问两句你就炸了。
+
+为什么?因为你在乎。
+
+你太在乎孩子能不能学好,所以看到他磨蹭你就急。你太在乎伴侣能不能分担,所以看到他在刷手机你就气。你太在乎父母能不能理解你,所以他们多问两句你就觉得不被信任。
+
+心理学上有个现象叫期待落差。你对陌生人没有期待,所以他做什么你都不失望。你对家人有极高的期待——他应该懂我、他应该做到、他应该改——一旦没达到,失望就变成了愤怒。
+
+所以真相是反过来的:对外人客气,是因为不在乎。对家人凶,恰恰是因为太在乎。
+
+但问题也出在这里。你越在乎的人,承受了越多的负面情绪。孩子不知道你是因为在乎他才急,他只知道妈妈又生气了。伴侣不知道你是因为累才不想说话,他只知道你对他越来越冷淡。
+
+我试过两个方法,挺管用的。
+
+第一个叫目标停止法。跟家人吵架的时候,停下来问一句:我们现在吵这个,目的是什么?很多时候你们吵的根本不是同一件事。你气的是累,他委屈的是付出没被看见。这一问,就能从我要赢变成我想搞清楚。
+
+第二个方法更简单。把你应该换成谢谢你。不要说你应该把作业写完,说谢谢你今天自己写了作业。不要说你应该早点回来,说谢谢你想着回家吃饭。
+
+我认识一个妈妈,用这两个方法试了三个月,孩子的家庭归属感评分从2.0升到了7.3。不是换了孩子,是她换了说话的方式。
+
+今晚试试。把到嘴边的那句你应该,换成谢谢你。
+
+## 标签
+#亲子关系 #家庭教育 #情绪管理 #沟通技巧 #育儿 #主动健康 #家庭幸福
+
+## 20秒动作
+把"你应该"换成"谢谢你"
+
+## 关键数据
+归属感评分从2.0升到7.3(3个月)
+
+## 图片规划(7张)
+
+Slide 1: 标题 | 对外人客气,是因为不在乎 | 行·人际和谐 | #10B981
+Slide 2: 场景 | 在外面笑着聊天 / 回到家垮着脸 | 对比画面
+Slide 3: 原因1 | 对外人你怕得罪人 / 所以保持礼貌 | 印象管理
+Slide 4: 原因2 | 期待落差 / 越在乎就越失望 | 反常识核心
+Slide 5: 反常识 | 越在乎的人 / 越容易被你伤害 | 核心洞察
+Slide 6: 方法 | 目标停止法 / 停下来问:吵这个的目的是什么 | 方法
+Slide 7: CTA | 今晚试试 / 把"你应该"换成"谢谢你" | CTA

+ 54 - 0
articles/D15-draft_v1.md

@@ -0,0 +1,54 @@
+# D15 老人带娃翻脸,是爱的语言不同
+
+> 心维度 #FF6B9D | 参考《家的算法》第7章 心·大爱相随
+> 系列:老人带娃三部曲·之一
+
+## 标题
+老人带娃翻脸,是爱的语言不同(14字)
+
+## 正文(695字)
+
+老人带娃起冲突,你以为是方法不对——不是,是爱的语言不同。
+
+你妈给孩子夹菜、添饭、追着喂,你烦了:妈,别惯着他,让他自己吃。你妈委屈了:我辛辛苦苦给你带孩子,你还嫌我。
+
+你觉得自己没错——科学育儿,培养独立性。她也觉得自己没错——怕孩子饿着,这是爱。
+
+你们都没错。但你们在用不同的语言说爱。
+
+我认识一个女孩叫小茜。每次回家,桌上永远有一盘她爱吃的鱼。父母觉得,给她吃好喝好就是最好的爱。但小茜想要的不是鱼,是有人问她一句:你最近在想什么?
+
+两种爱都没错,但语言不通。老人觉得"我付出了这么多你怎么还不满意",年轻人觉得"你们根本不理解我"。
+
+这不是谁对谁错的问题,是两个人的"爱的语言"不匹配。
+
+怎么解决?三步走。
+
+第一步,看见她的语言。老人给你带孩子,她用的方式是她从小被爱的方式——吃饱穿暖就是爱。不是她固执,她的词典里就这些词。
+
+第二步,翻译你的话。不要说"妈别追着喂了",试试:妈,我知道你怕他饿着。以后让他自己吃,吃不完我再喂。翻译过来就是:我看到你的爱了,咱换个方式一起爱他。
+
+第三步,找共同语言。不是谁听谁的,是找一条两个人都能走的路。比如:白天你按你的方式带,晚饭后我来管。
+
+我认识一个年轻妈妈,用这个方法试了两周,跟我说:以前跟婆婆说话,开口就是"妈你别",现在变成了"妈,谢谢你"。不是婆婆变了,是她换了翻译器。
+
+今晚回去试试。对帮你带娃的老人说一句:妈,你辛苦了。评论区打1,我明天回你。关注我,下周讲:为什么老人一插手你就急。
+
+## 标签
+#亲子关系 #家庭教育 #婆媳关系 #老人带娃 #情绪管理 #主动健康 #家庭幸福
+
+## 20秒动作
+对带娃的老人说一句"妈,你辛苦了"
+
+## 关键数据
+爱的语言不匹配→误解循环(参考书稿第7章·大爱三境界)
+
+## 图片规划(7张)
+
+Slide 1: 标题 | 老人带娃翻脸 / 是爱的语言不同 | 心·大爱相随 | #FF6B9D
+Slide 2: 场景 | 老人追着喂饭 / 年轻妈妈皱眉 | 冲突画面
+Slide 3: 故事 | 小茜父母夹鱼 / 她想要的是倾听 | 故事画面
+Slide 4: 反常识 | 不是方法不对 / 是爱的语言不同 | 核心洞察
+Slide 5: 方法1 | 看见他的语言 / 翻译你的语言 | 三步走
+Slide 6: 方法2 | 找到共同语言 / 不是谁说服谁 | 方法
+Slide 7: CTA | 说一句"妈你辛苦了" / 评论区打1 | CTA

+ 51 - 0
articles/D16-draft_v1.md

@@ -0,0 +1,51 @@
+# D16 体检正常≠健康,你信了多久
+
+> 身维度 #FF8C42 | 参考书稿第3章 身·主动健康
+
+## 标题
+体检正常≠健康,你信了多久(13字)
+
+## 正文(698字)
+
+体检报告每一项都正常,你就觉得自己健康了?
+
+不是。体检是查病的,不是查健康的。正常只代表你没查出来病,不代表你身体真的好。
+
+我认识一个朋友叫小付。三十八岁,体检报告有三项指标接近临界值。医生跟他说"要注意",他点了点头,出了诊室就忘了。不是不想记,是每天的生活根本没有给他注意的空间——早上七点起床,送孩子,上班,加班,晚上十点到家,躺下刷十分钟手机,睡着。第二天再来一遍。
+
+他觉得自己"还行"。直到有一天,他半夜抱着发烧的孩子在客厅来回走,走了两个小时。看着鱼缸里慢悠悠游的鱼,他忽然想:为什么总是我们家?为什么每次都是孩子先倒下?
+
+医生说了一句话让他记了很久:你孩子的指标都在正常范围内。但正常,不等于健康。
+
+这话听着像绕口令,但仔细一想,真不是。他翻出自己的体检报告——每一项指标都在正常范围,但有三项已经逼近红线。他的睡眠质量很差,精力大不如前,腰酸背痛是常态。报告上没有一项说他生病,但他的身体每天都在告诉他:我不太对劲。
+
+这就是问题:我们等身体出问题了才去修,而不是在没出问题之前就去养。
+
+三个层次,你到哪一层了?
+
+第一层,不做有害的事。不熬夜、不暴饮暴食、不把自己熬到扛不住才休息。
+
+第二层,做对的事。每天喝够水、每周运动两次、睡前不看手机。
+
+第三层,建立系统。不是靠意志力,是让好习惯自动运行——比如睡前把手机放到客厅充电,早上起来先喝一杯水。
+
+今晚回去试一件事:睡前把手机放到客厅,不要带进卧室。评论区打1,我明天回你。关注我,下周讲:你喝的每一口水,可能比外卖还脏。
+
+## 标签
+#主动健康 #体检 #睡眠 #健康管理 #家庭健康 #养生 #身体
+
+## 20秒动作
+睡前把手机放到客厅充电
+
+## 关键数据
+超过六成家庭过去一年中至少有人经历过三次以上急性疾病(浠艾福家庭健康报告 2026H1)
+
+## 图片规划(7张)
+
+Slide 1: 标题 | 体检正常≠健康 / 你信了多久 | 身·主动健康 | #FF8C42
+Slide 2: 场景 | 小付体检报告三项标红 / 医生说要注意转头就忘 | 故事
+Slide 3: 故事 | 半夜抱着发烧的孩子 / 在客厅走了一圈又一圈 | 场景
+Slide 4: 数据 | 超过六成家庭 / 一年三次以上急性病 | 数据
+Slide 5: 反常识 | 正常不等于健康 / 体检是查病不是查健康 | 洞察
+Slide 6: 方法 | 三个层次 / 不做有害的事→做对的事→建立系统 | 方法
+Slide 7: CTA | 今晚把手机放客厅 / 评论区打1 | CTA

+ 43 - 0
articles/D16-draft_v2.md

@@ -0,0 +1,43 @@
+# D16 体检正常≠健康,你信了多久(v2)
+
+> 身维度 #FF8C42 | 参考书稿第3章 身·主动健康
+
+## 标题
+体检正常≠健康,你信了多久(13字)
+
+## 正文(695字)
+
+体检报告每一项都正常,你就觉得自己健康了?
+
+不是。体检是查病的,不是查健康的。但问题不是体检没用,是你只靠体检这一种方式。
+
+主动健康的核心就两句话:发现风险要科学,干预一定要简单。
+
+先说发现风险。大多数人怎么判断自己健康?凭感觉,或者等体检报告。但感觉不靠谱——你觉得累,以为是没睡好,其实是身体在发出信号。体检也不够——一年一次,中间十一个月是盲区,而且很多指标逼近临界值时,报告上写的是"正常",但你的身体已经在走下坡了。
+
+我认识一个朋友叫小付。三十八岁,体检报告有三项指标接近临界值。医生跟他说要注意,他点了点头,出了诊室就忘了。不是不想记,是每天的生活根本没给他注意的空间。
+
+他觉得自己还行。直到有一天,他半夜抱着发烧的孩子在客厅走了两个小时,看着鱼缸里慢悠悠游的鱼,他才意识到:身体早就告诉他了,他没听。
+
+这就是问题:我们等身体出问题了才去修,不是早在出问题之前就去养。
+
+再说干预。很多人以为主动健康就是"坚持早睡、坚持运动、坚持健康饮食"——三个"坚持"一出来,就注定坚持不了。因为靠意志力的事,都撑不过两周。
+
+主动健康的干预,不是让你坚持,是让你改环境。不是靠意志力早睡,是把手机放到客厅充电。不是靠意志力多喝水,是床头放一杯水早上起来先喝。不是靠意志力运动,是穿上鞋就算出门。
+
+把动作拆到20秒内能完成,大脑才不会启动回避。
+
+回到小付。他后来没做什么了不起的事。就改了一件事:睡前把手机放到客厅。两周后,他入睡时间提前了。他说:"不是我能坚持,是我根本没机会拿到手机。"
+
+这就是主动健康:发现风险靠科学,不是靠感觉。干预靠简单,不是靠坚持。
+
+今晚回去试一件事:睡前把手机放到客厅,不要带进卧室。评论区打1,我明天回你。关注我,下周讲:你喝的每一口水,可能比外卖还脏。
+
+## 标签
+#主动健康 #体检 #睡眠 #健康管理 #家庭健康 #养生 #身体
+
+## 20秒动作
+睡前把手机放到客厅充电
+
+## 关键数据
+无——本文核心是理念,不是数据

+ 58 - 0
articles/draft_songchi_mom_v2.md

@@ -0,0 +1,58 @@
+# 当妈25年才发现:过好自己的日子,才是给孩子最好的礼物
+
+你有没有过这样的感受:
+
+孩子上小学的时候,你每天盯着班级群,生怕错过一条消息。考试前你比他还紧张,成绩出来你第一个去查分。他写作业你在旁边陪,他磨蹭你就上火——明明十分钟的作业他能写一个小时,你忍不住拍桌子吼他,吼完又后悔。
+
+好不容易熬到他上了大学,你觉得终于可以松口气了。可现实是——
+
+儿子毕业留在外地,你每天刷他所在城市的天气和新闻,比本地人还熟;他打电话随口说了一句"最近有点忙",你能翻来覆去想一晚上——是不是工作不顺?是不是身体不舒服?是不是谈恋爱出问题了?好不容易等到他周末回来,你忍不住问工作问收入问对象,气氛从热络变成沉默,最后他说"妈你能不能别管那么多"。
+
+你心想:我关心你,怎么就成了我的不对?
+
+我以前就是这样的妈妈。
+
+儿子上小学那会儿,我是典型的"陪读妈妈"。他在屋里写作业,我在客厅坐立不安,每隔十分钟进去看一眼。他考试没考好,我嘴上说"没关系",脸上藏不住的失望。现在回想起来,那时候的焦虑,其实不是因为他的成绩,而是我自己对"不确定"的恐惧——怕他跟不上、怕他以后没出息、怕自己不是个好妈妈。
+
+后来儿子大学毕业后留在北京,我在老家每天提心吊胆。他发一条朋友圈我要琢磨半天,他三天没打电话我就睡不着。
+
+直到有一天,我老公说了一句让我醍醐灌顶的话:"你过好自己的日子,就是给孩子最好的礼物。"
+
+我用了三件事,把自己从焦虑里拉了出来。
+
+第一件:关掉"脑海里的连续剧"
+
+我发现我的焦虑大部分来自"脑补"。他没回消息,我脑补他出事了;他周末没出门,我脑补他抑郁了。后来我学会了一个方法:每次开始脑补时,问自己三个问题——这是真的吗?有证据吗?我能做什么?
+
+答案通常是:不是真的、没有证据、什么都做不了。
+
+那就不想了。不是"不关心",是"不内耗"。
+
+第二件:情绪日记三栏法
+
+我每天花三分钟,写三行字:
+事件:今天儿子没回我微信
+自动想法:他是不是嫌我烦
+换个角度:他可能在忙,明天再问
+
+写出来之后,那些"自动想法"就变弱了。你会发现,90%的焦虑经不起写。
+
+第三件:把注意力拿回来
+
+我开始学做菜、读书、健身。不是"为了打发时间",是"为了自己"。我报了一个在线课程,学家庭健康管理。后来加入了浠艾福,发现原来"过好自己的日子"这件事,本身就是一种能力。
+
+现在儿子在美国,我们每周视频一次。我不催他找对象、不问他工资多少。他开始主动跟我分享他的生活——项目进展、周末去哪玩了、最近在学什么。
+
+你知道吗?当你不再把注意力全放在孩子身上,孩子反而更愿意靠近你。
+
+儿子今年26岁,在美国工作。我54岁,退休后开始做主动健康事业。我爸妈82岁,每天还一起去公园散步,身体比我还好。
+
+上周去开家长会(帮亲戚家孩子去的),被一个家长问:"你是孩子妈妈还是姐姐?"
+
+我说:"妈妈。"她不信。
+
+我知道,这不是因为我基因好,是因为我不再熬夜焦虑了。
+
+当妈25年,我终于明白一件事:过好自己的日子,才是给孩子最好的礼物。
+
+#妈妈成长 #主动健康 #情绪管理 #亲子关系 #五维能量 #中年觉醒

+ 5090 - 0
book-all.txt

@@ -0,0 +1,5090 @@
+
+========================================
+  序章-一个普通家庭的周末.md
+========================================
+
+# 序章:一个普通家庭的周末
+
+> **这本书的一切,从一个周六开始。**
+
+---
+
+周六早上七点十五分,小付被闹钟叫醒。
+
+其实他六点半就醒了——迷迷糊糊地躺在床上,意识在"再睡一会儿"和"今天要送孩子去上英语课"之间来回拉锯。最后他输了。不是因为自律,是因为卧室门外传来了小艾的声音:"爸爸!我饿了!"
+
+他翻了个身,看了一眼身边。小茜已经不在床上了。被子叠得整整齐齐,枕头旁边放着一杯温水,杯底压着一张便签:"我去买菜了,冰箱里有面包。小艾八点半上课,别忘了。"
+
+他拿起那杯水,喝了一口。温的。
+
+这个动作,他已经重复了十年——起床、喝水、被生活推着走。不坏,但也不新鲜。
+
+---
+
+小付走出卧室的时候,客厅已经是一副"周末战场"的模样。小艾坐在地板上拼乐高,电视开着但没人看,沙发上摊着三本书、一个遥控器、一件不知道是谁的外套。餐桌上放着半杯牛奶、一包拆开的饼干、小艾的作业本。
+
+他拿起作业本翻了一下。数学卷子,最后一道大题空着。旁边有小茜用铅笔写的字:"这道题我讲了三遍,他还是不会。"
+
+小付叹了口气。
+
+他想起昨天晚上,小茜在辅导小艾做作业的时候,声音越来越高,小艾开始抽泣,他在书房里假装没听见。不是不想管,是——他也不知道那道题怎么做。
+
+那一刻他脑子里闪过一个念头:我们家,是不是有哪里不对?
+
+但他没来得及细想。因为手机响了。是他妈。
+
+"小付啊,这周六回不回来吃饭?你爸最近血压又高了,我昨天带他去社区医院查了一下,医生说要注意饮食。我跟你说了多少次了,不要给孩子喝那些饮料,全是糖……"
+
+电话那头,母亲的声音像背景音乐一样持续输出。小付把手机夹在耳朵和肩膀之间,一边"嗯嗯"地应着,一边收拾桌上的牛奶杯。他听到母亲说了"血压"、"注意身体"、"不要熬夜"——这些词他每周都听一遍。
+
+挂了电话,他发了一会儿呆。
+
+他想到父亲的血压,想到自己今年体检报告上那几个标红的指标,想到自己已经连续三个月没有运动了,想到昨晚加班到十二点,想到冰箱里那瓶上个月买的综合维生素,瓶盖都没拧开过。
+
+"健康"这两个字,他想过很多次。但从来没真的做过什么。
+
+---
+
+十点钟,他送小艾去英语班。
+
+在教室外面的家长等候区,他遇到了几个同班同学的家长。大家坐成一排,各自低头刷手机。偶尔有人抬起头来,开始聊孩子的学习。
+
+"你们家小艾这次英语考了多少?"
+"还行吧,中等。你们家呢?"
+"就那样,阅读理解扣了五分。我昨天跟他爸说,这学期的奥数班还得报,不报不行,班里一半孩子都在上。"
+
+小付没接话。他想起上个月刚交的英语班续费通知单——六千八。加上小艾已经在上的围棋课、游泳课、这个月又新报的作文课——单是课外班一个月的支出,就超过了他工资的三分之一。
+
+他掏出手机,打开银行App,看了一眼余额。然后默默锁屏。
+
+旁边另一个家长正在跟人分享她最近在做的一个副业:"我在做一个社群团购,就是那种——你拉人进群,有人下单你就有佣金,不用囤货,零成本启动,一个月能多赚两千多呢!你要不要也试试?"
+
+小付礼貌地笑了笑,说"我看看"。但他心里想的是:我连睡觉的时间都不够,哪里来的时间做副业。
+
+---
+
+中午回家,小茜已经做好了饭。
+
+三菜一汤,标准的家常菜。但小付注意到一个细节——小茜做了他爱吃的红烧排骨,也做了小艾爱吃的番茄炒蛋,但桌子上没有一道菜是她自己爱吃的。
+
+他想说点什么,但没说。因为小茜先开了口。
+
+"我今天上午买菜的时候碰到小然了。她说她老公最近换了工作,比以前轻松多了,周末还能陪孩子去公园。你上次说想换工作的事,后来有没有再想过?"
+
+小付夹菜的手停了一下。
+
+"想过。但现在的行情你也知道,跳槽不一定能涨薪,搞不好还要降。房贷在这摆着,我不敢。"
+
+"我不是说你一定要换,我是说——我们好像很久没有正儿八经地聊过这件事了。"
+
+小付想说点什么。他想说"我知道了,我会考虑",想说"你别操心这个了"——但他什么都没说。他问了一句:
+
+"那你觉得呢?"
+
+小茜愣了一下。她好像没想到他会反问。过了一会儿她说:"我觉得……你值得试试。就算不成,也比一直想着强。"
+
+小付点了点头。
+
+对话没有继续。但跟以前不一样的是——结束的时候,两个人好像都松了一口气。
+
+不是吵架。不是冷战。就是——两个人都累,都懒得开口。小付知道小茜想说什么,小茜也知道小付在想什么。但知道有什么用呢?知道了问题依然在那里,谁也解决不了。
+
+小艾在一旁埋头吃饭,对大人的沉默浑然不觉。
+
+---
+
+下午两点,小付躺在沙发上刷手机。
+
+他刷到一篇公众号文章,标题是"最好的教育,是父母不焦虑"。他点进去看了两段,退出了。又刷到一条"三个方法帮你搞定家庭财务",他收藏了,打算"有空再看"。往上翻了几条,是一篇"婚姻中最重要的不是爱,是沟通"。他划过去了。
+
+他也不知道自己想看什么。他只是不想面对现实——作业没辅导完、家里乱七八糟、工作上还有一堆事、下周要交的PPT一个字没动。
+
+他不是懒。他是不知道从哪里开始。
+
+---
+
+晚上十点,小艾终于睡了。
+
+小茜坐在沙发上,用手机刷着购物App。购物车里有一件她看了很久的大衣,599块。她放进去,又删掉。再放进去,再看一眼。最后关掉了App。
+
+小付从书房出来,在她旁边坐下。
+
+两个人都没说话。电视开着,放着一个综艺节目,笑声很大。但没有人看。
+
+坐了大概十分钟,小茜开口了。声音不大,像是在自言自语:
+
+"你说,我们这么忙,到底是为了什么?"
+
+小付没有回答。他知道小茜不是在问答案——她只是想把那句话说出来。所以他什么都没说,伸出手,搭了一下她的肩膀。
+
+过了一会儿,小茜自己说:"算了,不早了,睡吧。"
+
+在他看来,这个家运转得还不错——不欠债、不吵架、孩子在上学、老人身体还行。一切都在"正常"的轨道上。但那条轨道通向哪里,他从来没想过。
+
+那天晚上,小付躺在床上的时候,脑子里反复出现一个画面:一艘船在大海上航行。船长很忙,忙着修船底、忙着调帆、忙着绕开暗礁。但他没有地图,没有指南针,也没有一个方向。他一直在做的事情,不是航行——是救火。
+
+哪里漏水了补哪里,哪里冒烟了灭哪里。
+
+他很努力。船没有沉。但船也没有前进。
+
+他不知道,同样是这艘船,有些家庭用的是同一套地图。
+
+---
+
+那是一个普通得不能再普通的周末。
+
+没有大事发生,没有人生病,没有人失业,没有人吵架。但小付心里有一种说不清的感觉——不是痛苦,是一种……闷。像胸口压着一块棉花,不疼,但透不过气来。
+
+这个感觉,你可能也熟悉。
+
+你每天早上醒来,第一件事是拿起手机,看工作群有没有新消息。你白天在公司忙了一天,晚上回家继续忙——孩子的作业、家里的账单、明天要带的便当。周末比工作日还累,因为那些工作日没时间做的事,全堆到了周六日。
+
+你偶尔会在深夜刷到一篇关于"如何经营家庭"的文章,点进去看,觉得说得很好,收藏。然后继续过跟昨天一样的日子。
+
+你也想过改变。但改变从哪开始?你不知道。
+
+这就是大多数中国家庭的真实状态:不是不努力,是努力了很久才发现——我们一直在救火,却从来没有画过一张房子的图纸。
+
+如果我说,有一种方式,可以让你不再"救火"呢?
+
+不是让你更努力,不是让你学更多的技巧。
+
+是给你一张地图。
+
+一张告诉你"家的幸福"到底由什么构成的地图——不是鸡汤,不是道理,是一个可执行的系统。它把家庭幸福拆解成五个维度:身体、智慧、财富、关系、内心。每一个维度都有具体的方法和工具,每一周都有可以做的微小行动。
+
+这本书,就是那张地图。
+
+你不需要一次读完。你甚至不需要全部照做。你只需要从你家里最痛的那个点开始——然后你会发现,当你不再被问题追着跑,而是站在一个系统的高度去看的时候,很多困扰你很久的事,突然就有了答案。
+
+> **金句:家庭的幸福不是没有问题的生活,而是有了应对问题的系统。**
+
+> **金句:你不需要成为完美的家长,你只需要有一张地图。**
+
+
+========================================
+  第一章-我们到底在为什么焦虑.md
+========================================
+
+# 第1章:我们到底在为什么焦虑?
+
+> **如果你的家里也有一个"救火队长",这一章是为你写的。**
+
+---
+
+小付躺在床上的那个晚上,脑子里盘旋着几个问题:父亲的血压、小艾的成绩、下个月的房贷、跟小茜之间越来越少的对话。他翻了个身,拿起手机,想搜一下"怎么让生活没那么累"——然后觉得自己很可笑。他连自己在焦虑什么,都说不清楚。
+
+这不是小付一个人的困惑。
+
+如果你问一个中国家长:"你最近在焦虑什么?"他可能会有好几个答案——孩子的成绩、父母的身体、工作的压力、家里的开销。但如果你接着问:"这么多事里头,你最焦虑的是什么?"他大概率会愣一下,然后说:"好像……都是。"
+
+这种"都是"的状态,就是当代中国家庭最真实的焦虑图景。
+
+它不是某一个问题特别严重——是每一个问题都沉甸甸地压在胸口。它们像五块石头,大小不同,但没有一块你觉得可以放下来。
+
+## 第一块石头:健康
+
+小付的父亲今年六十七岁。高血压、血脂偏高、偶尔头晕。社区医院的医生说了很多次要调整饮食、要运动、要定期复查。但老人嘴上答应着,转头就忘。
+
+小付不是不关心。他是不知道从何入手。你说"少油少盐",他说"吃了一辈子了"。你说"每天散步半小时",他走三天就停了。你说"定期体检",他说"查出来又能怎样"。
+
+这是最让人无力的焦虑——不是没有解决方案,是对方不接。
+
+但更深一层,小付不敢承认的是:他自己也做不到。他今年三十八岁,体检报告上已经出现了三个标红的指标。他知道应该运动,知道应该少熬夜,知道应该少吃外卖——知道归知道,做不做得到是另一回事。
+
+健康焦虑有一个很特别的地方:它不紧急,但很重要。不紧急的意思是,你今天不运动,不会马上出事。重要的意思是,等它真的出事了,一切都来不及了。这种"今天没事但明天可能出事"的悬空感,是所有健康焦虑的底色。
+
+## 第二块石头:教育
+
+小茜手机上有一个相册,叫"学习资料"。里面有三千多张截图——语文知识点梳理、数学公式大全、英语语法速记、古诗文背诵计划、还有各种"海淀妈妈推荐"的教辅书封面。
+
+她从来没整理过这些截图。因为她没有时间。她的日常是:早上七点起床做早餐,八点送小艾上学,九点上班,下午六点下班,七点到家做饭,八点开始辅导作业,十点小艾睡了,她才有自己的时间。那仅有的一个小时,她不是用来整理截图——是用来发呆。
+
+教育焦虑是所有焦虑里最"卷"的。
+
+它不来源于你做得不好,而来源于"总有别人做得更好"。当隔壁家的孩子已经在学三年级英语的时候,你的孩子二年级英语还在及格线徘徊。当同事的孩子已经拿到了作文比赛一等奖的时候,你的孩子连日记都写不顺。你不停地在心里告诉自己"不要比、不要比",但你身处的环境,每一个信息都在逼你比——家长群、朋友圈、电梯广告、短视频算法。你无处可逃。
+
+更让人焦虑的是:你付出的多,不代表回报就多。你花了三万块报班,孩子的成绩可能纹丝不动。你花了整个晚上辅导作业,第二天老师发来消息说"孩子上课打瞌睡"。你不知道问题出在哪——是方法不对?是天赋不够?还是你根本在错的方向上用力?
+
+这种"付出了却没有回报"的失控感,比"没做"更让人崩溃。
+
+## 第三块石头:财富
+
+每个月的工资到账日,是小付心情最复杂的日子。看到那个数字,有一种"终于来了"的踏实。但紧接着,他就开始算:房贷多少、车贷多少、小艾的课外班多少、给父母的生活费多少、水电物业多少。算完之后,剩下的那个数字,比他的表情还难看。
+
+他不是一个人。中国家庭对金钱的焦虑,核心不是"穷",是"不确定"。
+
+你不知道下个月会不会有额外的支出——车子要不要保养?孩子会不会生病?单位会不会降薪?父母需不需要一笔钱?这些"不知道"才是焦虑的根源。你赚的钱明明够生活,但只要一个意外,缓冲带就没了。
+
+而且,还有一个藏在内心深处的害怕,很少有人愿意承认:我们害怕长辈生病——不是怕照顾他们,而是怕付不起医药费。这个念头只要出现过一次,它就永远在那里了。
+
+## 第四块石头:关系
+
+小付和小茜之间没有大问题。
+
+没有出轨,没有家暴,没有婆媳大战。但如果你问小茜,她会说:"我们之间……就是没什么话说了。"
+
+不是吵架。是连吵架的力气和意愿都没有了。
+
+两个人的对话百分之九十以上是关于"事务"的:孩子谁接、水费交了没、周末去哪。偶尔想聊点别的——"你最近在想什么"——对方会警惕地看着你,好像在说"你要跟我谈什么严肃的问题吗?"
+
+有一次,小茜在朋友圈看到一条动态。一个朋友发了跟老公的合照,配文是"结婚十周年,谢谢你还在"。她盯着那张照片看了很久,心里不是嫉妒,是困惑:同样是结婚十年,为什么别人还能笑成这样?
+
+关系焦虑是最难说出口的。因为没有一个具体的事件可以让你去"解决"。你说"我跟我老公感情变淡了",身边的人会说"都这样,老夫老妻了"。但"都这样"不代表它不痛。它是一种慢性的、没有爆发的、但每天都在消耗你的疲惫。你不是不爱这个人了,你是不知道该怎么跟这个人重新产生连接。
+
+## 第五块石头:意义
+
+这可能是最容易被忽视的一类焦虑。
+
+小付有时候会在下班回家的路上,把车停在小区门口,在车里坐五分钟。不是有事要做,是单纯不想上楼。不是不爱家人,是——他不知道上去之后干什么。日子一天天过,按部就班,没有不好,但也没有"好"的感觉。
+
+他在一个深夜发过一条仅自己可见的朋友圈:"我这一辈子,就这样了吗?"
+
+这不是矫情。这是一个成年人面对生活重复性时,最诚实的自问。每天做着差不多的事,面对差不多的问题,解决不了的永远解决不了。你看不到尽头,也看不到出口。你不知道现在的努力,是为了什么。你没有自己的答案,你只是在执行别人给你的标准答案——好好工作、多赚点钱、把孩子养大、让父母放心。然后呢?
+
+"然后"没有人告诉你。
+
+---
+
+## 五块石头,一个绳子
+
+你可能注意到了——这五块石头,不是独立的。
+
+健康焦虑会让你多花钱(财富),财富焦虑让你加班没时间陪孩子(关系),关系问题让你心情不好容易对孩子发火(教育),教育焦虑又让你失眠(健康),失眠又影响工作(财富)……它们是一个闭环。你推不动任何一块,不是因为你力气不够,是因为它们被同一条绳子拴着。
+
+这条绳子,就是"外部标准"。
+
+你健康是为了什么?为了不生病、不给家里添麻烦。你拼命鸡娃是为了什么?为了孩子以后有出息、不输在起跑线上。你努力赚钱是为了什么?为了还房贷、为了给孩子更好的条件。你维系关系是为了什么?为了家庭和睦、为了孩子健康成长。你甚至思考人生的意义——也是在想"我这样做到底对不对、值不值得"。
+
+你一直在回答别人的问题。你从来没有问过自己的问题。
+
+这就是焦虑的根源。不是因为你不够努力,是因为你的所有努力,都是在扑火。哪里有火,你去哪里。你从来没有停下来,画过一张图纸——你的家,应该是什么样的?什么样的家庭,在你心里才叫"幸福"?
+
+如果你从来没有想清楚这个问题,那你做的所有事,都只是在"让别人满意"。而"让别人满意"这件事,是没有尽头的。
+
+> **金句:焦虑不是因为你做得不够,而是因为你一直在做别人认为对的事。**
+
+---
+
+## 从"解决问题"到"构建系统"
+
+我讲一个故事。
+
+有一个妈妈,跟小茜一样,每天都在跟孩子的作业搏斗。用她的原话说:"每天辅导作业跟上战场一样。"
+
+她试了很多方法——奖励法、惩罚法、计时法、陪伴法——每一种都有效三天,然后回到原点。她来找我的时候,说的第一句话是:"我已经用了所有我知道的方法,还是不行。是不是我孩子有问题?"
+
+我问了她一个问题:"有没有一种可能——不是方法不够,是你一直在同一个层面上打转?"
+
+她愣了一下:"什么意思?"
+
+"你今天用一个方法让孩子写作业,明天失效了又换一个。你一直在'解决问题',但问题的根源从来没变过。那你觉得,如果跳出来看——真正需要变的,是方法,还是别的什么?"
+
+她沉默了一会儿:"……可能是我看问题的方式。"
+
+这两个词的区别,是这本书的核心。
+
+**方法**是战术。**系统**是战略。战术解决的是"今天怎么办",战略解决的是"为什么我们总是遇到同样的问题"。战术是头痛医头,战略是让头痛不再来。
+
+小付的家庭不是缺少方法——他缺少的是一张地图。他不知道健康、教育、财富、关系、意义这五个维度是怎么连接的。他不知道今天花力气解决的这个问题,是不是真正重要的问题。他甚至不知道,对一个家庭来说,什么才叫"好"。
+
+如果你也有这种感觉——不是不努力,是努力了很久才发现方向不对——那么接下来的两章,我们先来画那张地图。
+
+> **金句:方法解决今天的问题,系统让明天不再有同样的问题。**
+
+---
+
+## 本章小结
+
+- 中国家庭的焦虑可以归纳为五个维度:健康、教育、财富、关系、意义
+- 这五个维度不是孤立的,它们是相互纠缠的闭环
+- 所有焦虑的共同根源:我们被外部标准推着走,没有自己的"幸福地图"
+- 出路不是找到更多方法,而是建立一个系统
+- 下一章,我们开始画这张地图
+
+*下一章预告:幸福三支柱——一个家庭的顶层设计*
+
+
+========================================
+  第二章-幸福三支柱.md
+========================================
+
+# 第2章:幸福三支柱——一个家庭的顶层设计
+
+> **如果你家是一艘船,这三根柱子就是它的龙骨。**
+
+---
+
+上一章最后,我们聊了一个词:系统。
+
+这一章,我们来画这张图纸。
+
+先说一个你可能没想过的问题:当你想到"一个幸福的家庭"时,你脑子里出现的是什么画面?
+
+可能是晚上一家人坐在沙发上看电视。可能是周末一起出去吃饭。可能是孩子考了好成绩,全家庆祝。这些画面都是对的,但它们太零碎了—就像你拿到了一千块拼图,却不知道拼出来是什么图案。
+
+我们需要一个整体的框架。
+
+这个框架不是我想出来的。它来自一个很简单的观察:绝大多数中国家庭,终其一生在追求三样东西——**物质上的安全感、社会上的认可度、血脉上的延续感。**
+
+我把这三样东西叫作"幸福三支柱"。
+
+---
+
+## 第一根支柱:衣食无忧
+
+这是最基础的一根。没有它,其他都是空中楼阁。
+
+"衣食无忧"不是让你锦衣玉食。它是说:你不用担心明天吃什么、下个月的房贷从哪里来、家人生病了有没有钱治。它是一种"基本盘"的稳固感——你不富裕,但你不慌。
+
+这根支柱由两个维度共同支撑:
+
+**身(主动健康)**——健康是最大的财富,这句话你不是第一次听,但你真的理解它的分量吗?一个家庭最大的风险,不是房价跌了、不是股市亏了,是主要劳动力的身体垮了。守住健康,就是守住家庭的基本盘。
+
+**富(利他创富)**——光守住是不够的,还需要创造。但"富"不只是一个数字,它是一种"被需要"的能力。你帮到了多少人,你就能创造多少价值。利的尽头是利他——这是"富"这个维度最反常识但也最真实的逻辑。
+
+小付以前从来没有把"健康"和"财富"放在一起想过。在他心里,这是两件不同的事:体检是体检,工资是工资。但他慢慢发现,这两个东西在底层是连着的——身体不好,赚钱的能力就会打折;没有财务安全感,焦虑又反过来侵蚀健康。
+
+"衣食无忧"的真正含义,不是你有多少钱,而是你有多少**选择权**。
+
+## 第二根支柱:受人尊敬
+
+中国人特别在意"面子"。但"面子"不是虚荣。它的背后,是一种深层的心理需求——**被看见、被认可、被需要。**
+
+受人尊敬不是要你功成名就、锦衣还乡。它是说:你的家人提起你的时候,是骄傲的;你的同事跟你共事的时候,是放心的;你的孩子长大以后,会觉得"我爸爸/妈妈是一个值得学习的人"。
+
+这根支柱由两个维度支撑:
+
+**智(赋能未来)**——受人尊敬的第一步,是让人看到你的能力。这不仅仅指学历或技能,更是一种"面对未知不慌张"的能力。你愿意学习、愿意改变、愿意接受新事物——这种状态本身,就会为你赢得尊重。
+
+**行(人际和谐)**——但光有能力不够。一个人如果能力很强但很难相处,别人会怕他,不会尊敬他。真正受人尊敬的人,是既有能力又有温度的人。"行"这个维度,负责的就是你和别人之间的关系——你怎么对待家人、怎么对待朋友、怎么对待比自己弱的人。
+
+小付以前觉得"受人尊敬"是别人的事——是领导的事、是社会精英的事。但他后来发现,在小艾眼里,他就是那个"什么都知道"的人。在小茜眼里,他是不是一个可以被依靠的人。在父母眼里,他是不是一个让人放心的儿子。这些才是最真实的"受人尊敬"——它发生在你每天的生活里,不在别人的评价里。
+
+## 第三根支柱:子女传承
+
+中国人有一种特别的情感结构——我们活着,不仅仅是为了自己。
+
+你努力工作,有一部分原因是想让孩子过得更好。你在乎孩子的教育,不只是为了他的分数,是希望他将来有能力过自己想要的生活。你逢年过节回老家,不只是为了完成任务,是想要让孩子知道"我们的根在这里"。
+
+这就是第三根支柱:**子女传承**。
+
+它不是说你要生很多孩子、光宗耀祖。它是说:你希望在自己离开这个世界之后,有一些东西能够留下来——不是一个银行账号,是一种精神、一种价值观、一种"我们家就是这样的人"的自我认同。
+
+这根支柱主要由两个维度支撑:
+
+**心(大爱相随)**——传承的核心不是知识,不是钱,是爱。一个孩子长大后会不会孝顺父母,不是因为他被教育过"要孝顺",而是因为他感受过被爱。一个有爱的家庭,才会让孩子有"我想回来"的念头。心是这个维度的引擎——它负责让家人之间产生真实的、温暖的情感连接。
+
+**智(赋能未来)**——爱不能当饭吃。光有爱但不会独立思考的孩子,到了社会上照样被欺负。所以"智"在这里再次出现。在孩子小的时候,它的任务是帮孩子建立认知能力;在孩子长大后,它变成了"辨别力"和"判断力"——这才是孩子离开你之后,真正能保护他的东西。
+
+---
+
+## 五维幸福矩阵
+
+你看,上面三根支柱,被五个维度支撑起来了:身、智、富、行、心。
+
+这五个维度不是随意排列的。它们的关系,来自中国传统文化中的五行哲学——**金、木、水、火、土**。
+
+在五行体系里,五种元素之间存在两种关系:相生,相克。
+
+**相生(互相滋养):**
+
+土生金,金生水,水生木,木生火,火生土。
+
+在五维幸福矩阵中,这变成了一套有温度的逻辑:
+
+**身→智**:身体是智慧的载体。一个睡得好、吃得好的孩子,大脑发育自然更好。小艾为什么上课走神?不一定是他不想听,可能是他长期睡眠不足、肠道菌群失衡。健康,是一切认知能力的地基。
+
+**智→富**:智慧创造价值。你认识问题、解决问题的能力越强,你创造财富的能力就越强。这不是说学历高就一定有钱,而是说"学习能力"本身是长期增值最可靠的资产。
+
+**富→行**:经济基础决定行为边界。当你不用为钱发愁的时候,你在人际关系中会更从容、更愿意付出。一个被财务压力压得喘不过气的人,很难有精力经营关系——不是不愿,是不能。
+
+**行→心**:好的关系滋养心灵。当夫妻关系和谐、亲子关系顺畅、你跟长辈没有解不开的结的时候,你的内心是安定的。很多心理问题的根源,其实是关系问题。
+
+**心→身**:心情影响身体。你去看小付家的情况——夫妻关系出问题的时候,他的睡眠质量明显下降;小茜焦虑的时候,她会出现胃痛的症状。这不是巧合,这是身心一体的表现。心好了,身才能好。
+
+你看,这五个维度组成了一个完整的环。任何一个维度的提升,都会沿着这个环传递下去,带动其他维度。
+
+**相克(互相制约):**
+
+但事情没那么简单。如果只有相生,这个系统就会跑偏。五行体系里还有相克的关系,它的作用是:**防止任何一个维度过度膨胀。**
+
+身克富:健康是最大的财富,但如果你为了"省钱"牺牲健康,就本末倒置了。"我没事,不用体检""小病扛一扛就好了"——这些话,都是在用身去克富。短看省钱,长看亏大。
+
+智克行:聪明的人容易把关系算得太清楚。夫妻之间讲道理不讲感情,亲子之间讲对错不讲感受。聪明的头脑如果没有温度的引导,关系就会变得冰冷。
+
+富克心:钱多了不代表心近了。很多家庭的条件越来越好,但家人之间的情感越来越薄——各住各的房间、各刷各的手机、各过各的日子。财富如果不能转化为家庭温度,它就是一堆冰冷的数字。
+
+行克身:为了照顾所有人的感受,你把自己累垮了。中国式"老好人"——对谁都好,唯独对自己不好。你花大量精力维系各种关系,唯独没有时间照顾自己的身体。这种"克"的后果,往往在中年以后集中爆发。
+
+心克智:爱太多会变成控制。很多家长"为你好"的背后,是"我太爱你了,所以你必须按我说的做"。过度保护、过度干预、过度焦虑——这些都是"心"过度膨胀后对"智"的压制。孩子失去了独立思考和选择的能力,不是因为爱不够,是因为爱太多了。
+
+相克不是坏东西。就像人体的免疫系统——它防止一个器官过度生长。在家庭中,相克的作用是**保持平衡**。当你在一个维度上用力过猛的时候,其他维度会拉你回来。
+
+**五行给我们的智慧是:幸福不是把某一个维度做到极致,而是五个维度保持动态的平衡。**
+
+---
+
+## 小付的第一次家庭诊断
+
+在了解了五维框架之后,小付做了一件事。他花了一个晚上,给自己的家庭做了一次"五维诊断"。
+
+他拿了一张纸,画了五个圈,每个圈代表一个维度。然后给每个维度打分,1到10分。
+
+他写出来的结果:
+
+| 维度 | 分数 | 理由 |
+|:----:|:----:|------|
+| 身 | 5分 | 自己半年没运动,小艾睡眠不足,父亲的血压令人担心 |
+| 智 | 7分 | 小艾成绩中等,但至少还在学;自己工作上能应付 |
+| 富 | 6分 | 能过日子但没有余粮,经不起风雨 |
+| 行 | 4分 | 跟小茜快变成"室友"了,跟老同学基本不联系 |
+| 心 | 7分 | 知道彼此是爱对方的,但说不出口,家里氛围有点闷 |
+
+写完他自己沉默了很久。
+
+不是因为分数低——是因为他第一次这么清楚地看到:原来最差的那个地方不是钱,不是孩子的成绩,而是"行"——他跟小茜的关系。平时忙起来根本顾不上想这件事。但自从上个周末那次深夜对话之后,他知道这个问题不能再避了。
+
+他拿着这张纸,去找小茜。
+
+小茜看了,也沉默了一会儿。然后她拿过笔,在自己的"行"那一栏改成了3分。
+
+小付问:"为什么3分?"
+
+小茜说:"因为我比你更感觉到——我们之间快没有话了。"
+
+那个晚上,他们聊到了凌晨一点。不是吵架,是在说话。在结婚九年后,第一次像两个"人"一样,而不是两个"家庭运营者"一样地说话。
+
+这就是五维框架的力量。它不给你答案,但它给你一张地图。有了地图,你就知道你现在站在哪里,哪里需要走,哪里暂时不用管。
+
+你不需要同时做好所有事。你只需要知道:**在这个阶段,哪个维度的提升,能给整个家庭带来最大的正向改变。**
+
+> **金句:幸福不是面面俱到,而是知道此时此刻,该往哪里走。**
+
+---
+
+## 为什么叫"算法"
+
+你可能会问:这本书叫《家的算法》,跟算法有什么关系?
+
+算法的核心不是代码,是**解决问题的步骤**。一个算法有三个特点:可执行、可重复、可优化。
+
+可执行——每一步都是具体的、能做出来的动作。不是"要对孩子好一点",是"每天晚饭时问一句'今天有什么让你开心的事吗'"。
+
+可重复——它不是一个一次性的妙招。它是可以每天、每周、每月持续做的事情。就像你每天刷牙一样,不需要毅力,它是系统的一部分。
+
+可优化——你不需要一开始就做对。你跑了第一圈,觉得哪里不对,调整一下,下一圈会更好。
+
+这跟家庭的逻辑一模一样。你不需要一次把所有问题都解决。你只需要一个可以执行的系统——今天做一点,明天再做一点,每个月回头看一次,调整方向。
+
+五个维度是这张地图。三根支柱是方向。接下来的五章,我们会逐个拆解这五个维度——每个维度是什么、为什么重要、具体怎么干。
+
+但在这之前,请先记住一个最简单的道理:**一个家庭最顶级的幸福,不是没有问题,而是有了应对问题的系统。**
+
+而那个系统,你已经从这张地图上看到了。
+
+> **金句:一个幸福的家,不是没有问题的家,而是知道问题来了该怎么应对的家。**
+
+---
+
+## 本章小结
+
+- 家庭幸福的三大支柱:衣食无忧、受人尊敬、子女传承
+- 五维框架(身智富行心)是支撑这三根支柱的行动体系
+- 五行相生让五个维度互相滋养,相克防止单一维度过度膨胀
+- 幸福不是把某一件事做到极致,而是五个维度动态平衡
+- 五维框架是一张地图,告诉你现在在哪、该往哪走
+- 从下一章开始,我们逐个拆解每一个维度
+
+*下一章预告:身——主动健康,守住家庭的基本盘*
+
+
+========================================
+  第三章-身-内容草稿.md
+========================================
+
+# 第3章:身——主动健康,守住家庭的基本盘
+
+> **五行属土** | 土厚德载物,身是万物的根基
+>
+> 与第5章(富)形成对照:身是"省"(健康就是省钱),富是"生"(创造增量)
+> 与第7章(心)形成互补:身是物质的底盘,心是精神的港湾
+
+---
+
+## 小艾的第三个半夜
+
+凌晨两点十五分,小付被一阵哭声惊醒。
+
+不是那种撒娇的、哼哼唧唧的哭。是那种憋了很久、实在忍不住才爆发出来的、带着咳嗽和气喘的哭。三岁的儿子小艾在床上坐起来,满脸通红,鼻涕和眼泪糊在一起,张着嘴大口喘气,像一条被捞上岸的鱼。
+
+小付摸了摸他的额头。烫的。
+
+这已经是这个月第三次了。上一次是两周前,上上次是三个星期前。每次都是差不多的剧本——白天还好好的,吃了晚饭还跟爸爸抢电视遥控器,晚上突然高烧。去医院,急诊挂号,排队一小时,抽血,等结果,开药,打车回家。三天后退烧,一周后恢复。然后过十天半个月,再来一轮。
+
+小付的妻子已经熟练到不需要闹钟了。她闭着眼睛从床头摸到体温枪,嘀的一声,屏幕亮起:39.2度。她叹了口气,声音里没有惊讶,只有疲惫。那种平静的、已经被磨光了棱角的疲惫。
+
+"我来吧,你睡。"小付说。
+
+他抱起小艾走到客厅。孩子的身体从他怀里垂下来,软绵绵的,像一只生病的小动物靠在他胸口。客厅的鱼缸灯亮着昏黄的光,他看见鱼还在慢悠悠地游。他不知道鱼需不需要睡觉。他只知道,自己已经连续好几天没有睡过一个整觉了。
+
+他抱着孩子在客厅来回走,从窗户走到沙发,从沙发走到餐桌,一圈又一圈。客厅很大,但走久了,每条路线都会变成一个闭环。
+
+那天晚上,等小艾终于退了一点烧、沉沉睡去之后,小付拿起手机,发了一条朋友圈。只有三个字:"扛不住。"
+
+第二天早上醒来,他看了一眼,删了。
+
+但问题没删。小艾还是反反复复地生病。幼儿园去两天请三天假,小付和妻子的年假早就用完了,只能轮流请假。轮流的意思就是,两个人都没法好好工作。领导没说什么,但那个眼神他懂——"你家怎么那么多事?"
+
+有一次,他在公司茶水间接了一个电话,是幼儿园老师打来的:"小艾又发烧了,麻烦您来接一下。"挂了电话,他站在茶水间里,看着窗外的写字楼发呆。楼很高,玻璃幕墙反射着午后的阳光。他看见自己的影子映在玻璃上——一个三十多岁的男人,手里举着手机,脸上是那种"我已经习惯了"的表情。那一刻他忽然想:为什么?
+
+不是"怎么又发烧了"的那种"为什么",他已经不问那种问题了。是更深的那种:为什么我们家总是这样?为什么别的孩子看起来没事?到底是哪里出了问题?
+
+他想起小时候,自己不管怎么疯玩都很少生病。那时候大人说"男孩子皮实"。可小艾为什么就不皮实?是遗传?是环境?还是哪里做错了?
+
+这个"为什么",他没有答案。但"没有答案"这件事本身,就是让他最不安的地方。
+
+他们家的情况,不是个例。
+
+在浠艾福的家庭健康调研中,有一个数据让小付后来看到的时候心里一紧:**超过六成的家庭在过去一年中,至少有一个人经历过三次以上的急性疾病**。(数据来源:浠艾福家庭健康报告 2026H1)但更让人在意的不是这个数字本身,而是这些家庭的回应方式——绝大多数人的第一反应是"扛一扛就好了",第二反应是"去医院看看"。很少有人会停下来问一句:为什么?
+
+为什么总是我们家的孩子?为什么别人家的孩子没事?
+
+这个问题,就是本章要聊的事。
+
+> **金句:** 健康最大的敌人不是疾病,是"等生病了再说"的习惯。
+
+---
+
+## "没生病"不等于"健康"
+
+有一次,小付带小艾去体检。医生说了一句话让他记了很久:"你孩子的指标都在正常范围内。但正常,不等于健康。"
+
+这话听着像绕口令,但仔细一想,真不是。
+
+体检报告上的"正常范围"是一个统计学的概念。它说的是你在这个指标的分布中落在了中间的百分之九十五里。但这不代表你的身体处在最佳状态,更不代表你有应对疾病的能力。
+
+如果用计算机来比喻——正常是"没死机",健康是"系统可以流畅运行大型程序"。两者之间差着好几个量级。
+
+小付自己是做IT的,这个比喻他一下就懂了。但问题是——为什么我们一直把"没死机"当成"系统良好"?
+
+答案藏在我们的文化里。
+
+中国人对健康的态度,自古以来就是"治已病"。病了才看医生,痛了才去医院。这个逻辑在急性传染病时代是有效的,得了病赶紧治。但在慢性病和生活方式病成为主流的今天,这个逻辑正在失效。
+
+高血压、糖尿病、肥胖、过敏、自身免疫疾病——这些病的共同特点是:它们不是突然得的,是慢慢养出来的。等到体检发现的时候,往往已经发展了好几年。
+
+这就像一座冰山。水面以上是"生病"——看得见的部分。水面以下是"不健康的生活方式和环境"——看不见的部分。我们所有的医疗资源,几乎都投在了水面以上的冰山尖上。而真正决定你健康走向的,恰恰是水下那百分之九十。
+
+小艾反复生病这件事,表面上是一个免疫力问题。但小付后来才知道,免疫力的背后是肠道,肠道的背后是饮食,饮食的背后是一整个家庭的生活方式。它不是一颗药能解决的问题。
+
+那就不是"治"能解决的事了。
+
+> **金句:** 你每一次生病后才想起来要好好照顾身体,就像每次下雨后才想起来要修屋顶。
+
+---
+
+## 一杯水的启发
+
+小付真正开始改变,是从一个他自己都没想到的地方开始的——家里喝的水。
+
+他有一个朋友叫小茜。小茜的儿子比小艾大一岁,以前也是三天两头跑医院。但小付发现,最近半年小茜的朋友圈画风变了。以前是"又去医院打卡",现在是"今天做了某某营养早餐"、"孩子连续XX天没请假"。
+
+小付忍不住私信她:"你们家是不是看了什么神医?"
+
+小茜回了一条语音,语气里带着笑:"哪有什么神医。就是换个水试试。"
+
+"换个水?"
+
+小茜给他科普了一件事。她说她接触到一个概念,叫"活性氢水"——简单来说,就是水里含有高浓度的活性氢分子。这个氢分子不是什么神奇物质,它就是我们元素周期表上排第一的那个H。但当它以分子形态存在于水中时,有一个特殊的性质:可以选择性地中和体内有害的自由基,而不影响正常的氧化还原反应。
+
+小付听完的第一反应是:这是智商税吧?
+
+但小茜发来了几篇研究。有一项临床研究,36名参与者连续喝了四周氢水,睡眠质量评分得到显著改善。还有一项来自日本的双盲研究,发现饮用氢水可以调节交感神经和副交感神经的平衡——简单说,就是让身体从"战斗状态"切换到"修复状态"。(数据来源:HYDRAPP RCT 2025, n=36; Mizuno 双盲对照 2017)
+
+小付是理工男,对"研究""数据"这几个字有天然的信任。他不完全信,但也不完全不信。他决定试一个月。
+
+结果让他意外。
+
+第一个礼拜没什么感觉。第二个礼拜,他发现自己晚上入睡比以前快了——以前躺床上至少要翻二三十分钟才能睡着,现在可能十分钟就过去了。第三个礼拜,小艾的夜咳少了。第四个礼拜,小艾整一个月没请假。
+
+当然,这不是说氢水是神药。小付也换了家里的净水器,开始注意让孩子多喝水,少喝含糖饮料。但这件事给他的触动,不在于水有多神奇,而在于一个更深的认知:
+
+**最容易改变的事情,往往是你最不在意的事情。**
+
+我们总以为健康需要大动作——需要去健身房办卡,需要买昂贵的保健品,需要严格的饮食计划。但很多时候,最简单的改变恰恰是改变最大的。
+
+水就是一个典型的例子。
+
+人体百分之七十是水。血液、淋巴、脑脊液、细胞液——身体的每一个系统都依赖水来运作。但大部分人每天喝的水是什么?是自来水烧开的白开水。这当然没问题,自来水的安全性是有国标保证的。但"安全"和"优化"之间,有巨大的空间。
+
+这个空间里,藏着很多家庭的健康转机。
+
+---
+
+## "第二大脑"的秘密
+
+小付换水之后,小艾的情况确实好了一些,但不稳定。有时候一个月没事,有时候又一病一个礼拜。小付觉得还没找到根。
+
+这时候小茜又给他分享了一个概念——肠道菌群。
+
+"你听说过肠道是'第二大脑'吗?"小茜问他。
+
+小付说没有。他甚至不知道大肠和小肠有什么区别,更别说"菌群"这种听起来像微生物课的东西。
+
+小茜发来了一篇文章。里面说了一个数据:一个人体内的微生物数量,大约有100万亿个。这个数字是什么概念?是你全身细胞总数的十倍。也就是说,从细胞数量的角度来说,你身体里住着的"你"其实只占十分之一。剩下的十分之九是各种细菌、真菌、病毒——它们统称为"肠道菌群"。
+
+小付看到这里的时候,脑子里的第一反应是:我身体里住着一个看不见的动物园。
+
+这100万亿个微生物组成了一个生态系统。它们帮你消化食物,帮你合成维生素,帮你训练免疫系统,甚至还影响你的情绪和认知。而最关键的一个数据是:**人体百分之七十以上的免疫细胞集中在肠道相关淋巴组织。** 这意味着什么?意味着一个人的免疫力强不强,很大程度上不取决于他吃了多少维生素C,而取决于他的肠道健不健康。
+
+小付读到这个数据的时候,脑子里那些散落的碎片突然像磁铁一样吸到了一起。
+
+小艾反复生病——免疫力低。小艾经常便秘、拉肚子交替——肠道功能紊乱。小艾晚上睡不踏实——肠道菌群影响神经递质合成。小艾动不动就哭、一点小事就发脾气——血清素也在肠道里合成。
+
+这些看起来毫不相关的问题,可能都指向同一个根源。
+
+> **金句:** 肠道的状态,就是免疫力的天气预报。
+
+他开始认真研究这件事,越看越觉得有意思。原来现代医学界有一个正在快速发展的领域,叫"肠道微生态学",研究的就是这些看不见的小东西怎么影响我们的身体。不是中医,不是偏方,是正经的科学前沿。
+
+原来小艾的问题不是"免疫力差"这么简单。是他的肠道菌群可能出了问题——有益菌太少,有害菌太多,菌群的多样性不足。这不是吃两颗益生菌就能解决的。因为益生菌只是"空降兵",能不能在肠道里存活下来、繁衍生息,取决于肠道环境本身——而这个环境,是由饮食、压力、睡眠、甚至喝的水共同决定的。
+
+这就是为什么很多人吃了益生菌没效果——不是产品的问题,是"土壤"没准备好。你往一块盐碱地里撒再好的种子,它也长不出来。先改良土壤,再播种,这才是正确的顺序。
+
+小茜告诉他一个实用的方法:先不要急着买益生菌,先从"喂养"肠道里已有的有益菌开始。怎么喂养?吃益生元。什么是益生元?简单说,就是有益菌爱吃的食物——各种膳食纤维、低聚糖、菊粉,藏在洋葱、大蒜、香蕉、燕麦、豆类这些日常食物里。
+
+你不需要花一分钱买保健品。你只需要在做饭的时候,有意识地多放一点蒜,多切一点洋葱,早餐从白面包换成燕麦粥,晚餐多一道炒豆角。三个月后,你的肠道菌群就会有质的变化。
+
+小付试了。他不是那种"全套照做"的人——小茜给他发的那篇文章里列了十二种高益生元食物,他只选了其中两种来改。他把家里的白米饭换成了杂粮饭,不是顿顿杂粮,最开始一周两次。然后把晚饭后的水果从西瓜葡萄换成了蓝莓和猕猴桃。
+
+三周后,有一个变化让他和妻子都很惊讶——小艾的便便变好了。从以前经常拉肚子或者便秘、上厕所要蹲很久的状态,变成了每天一次、颜色和性状都很正常的那种。小付的妻子是第一个注意到的,她在饭桌上说:"你们发现没有,小艾最近拉臭臭不喊了。"以前小艾每次上厕所都会喊"妈妈我拉不出来",现在自己去了,出来的时候一脸平静,像完成了一件日常小事。
+
+这件事给他们的触动,比什么体检报告都大。
+
+在浠艾福的家庭健康实践中,有一个被很多家庭验证过的规律:**肠道健康改善的第一信号不是免疫力,而是排便。** 当一个人的排便规律、性状恢复正常时,他的肠道菌群大概率在往好的方向走。这个信号比任何体检指标都来得更早、更直观。因为它是你每天都能"看见"的东西,不需要去医院,不需要等报告。
+
+---
+
+## "精准"不是"更多"
+
+小付改变饮水、调整饮食之后,小艾的健康确实稳定了不少。但他心里还有一个疑问没解开。
+
+有一天,他带小艾在小区里玩,遇到一个邻居妈妈叫小然。小然的儿子是小艾的好朋友,两个孩子经常玩在一起,皮得很。聊到孩子生病的话题,小然说了一句话让小付印象深刻:
+
+"我以前也是什么补剂都给孩子吃——钙铁锌硒维生素,一瓶接一瓶,饭桌上像开药店。后来我发现一个道理:吃的多不等于吃的好。"
+
+小付问她什么意思。
+
+小然说,她之前带孩子做了一次全面的营养评估。不是普通体检那种"缺不缺"的检查——血常规、微量元素那类——而是更精细的那种。看身体里各种营养素的代谢水平,看脂肪酸的比例,看维生素D的真实活性水平,看各种微量元素的综合平衡状态。做一次这个评估,要比普通体检贵一些,但她觉得值得,因为不想猜。
+
+结果出来之后,她发现一个让她哭笑不得的事实。
+
+她一直给孩子补钙,但评估显示孩子的钙水平是正常的。真正偏低的是什么?是镁。镁参与人体三百多种酶的活性反应,和睡眠质量、情绪稳定、肌肉放松都有直接关系。孩子晚上睡不踏实、容易惊醒,可能不是缺钙——是缺镁。而她买的那些钙片,对这个问题一点用都没有。
+
+还有维生素D。几乎所有在中国长大的孩子都在补VD,这已经是常识了。但小然孩子的检测结果显示,VD水平虽然在正常范围内,但偏低。问题出在哪里?出在吸收。VD是脂溶性的,需要有优质脂肪才能被身体利用。而小然为了"健康",给孩子吃的都是低脂食物,牛奶也是脱脂的。结果呢?补进去的VD因为没有脂肪当"运输车",大部分都流失了。
+
+"你知道我当时什么感觉吗?"小然说,"我感觉自己像个傻子。花了一堆钱,买了一堆瓶子,每天追着孩子喂,结果方向全错了。"
+
+这话说得有点重,但小付听进去了。因为他自己也在做同样的事——不知道缺什么,先补了再说。
+
+小然说了一句话,后来成了小付家的一个原则:"给孩子吃补剂之前,先搞清楚他真的缺什么。"
+
+这个道理听着很简单,但大部分家庭做的恰恰是反的——不知道缺什么,先把能补的都补上。结果花了钱,买了瓶瓶罐罐,孩子吃了没效果,家长还觉得自己尽力了。有些营养素过量摄入反而有害——脂溶性维生素在体内蓄积过多可能导致中毒,锌补多了会影响铜的吸收,钙补多了可能增加肾结石的风险。
+
+这就是"精准营养"和"盲目补充"的区别。
+
+精准营养不是让你吃更多,是让你吃对。它需要三个条件:知道身体需要什么,知道身体缺什么,知道怎么补才吸收得了。缺少任何一个条件,营养补充就变成了碰运气。
+
+而碰运气这件事,在健康领域是最贵的一种做法——比买错了东西贵得多,因为付出的不只是钱,还有时间,还有你对自己身体的信任。
+
+---
+
+## 从"治"到"建"的转变
+
+小付的家族群里,有一次因为"孩子生病要不要吃药"吵起来了。
+
+起因是小艾又发烧了。小付的妻子主张先观察,多喝水,物理降温,体温超过38.5度再考虑用药。但小付的妈妈在群里连发了好几条语音,语气是那种着急又有点生气的:
+
+"你们别瞎折腾孩子,该吃药吃药,该打针打针,拖久了变成肺炎怎么办?"
+
+小付妻子的娘家亲戚也加入了讨论。有人说烧这么高还不去医院心也太大了,有人说现在的年轻人就是太相信网上说的不信医生。
+
+小付没有回复。他知道两边都有自己的道理。但他心里隐隐觉得,这件事背后有一个更深的分歧——"治"和"建"的区别。
+
+"治"的逻辑是:出了问题,解决问题。发烧了退烧,咳嗽了止咳,发炎了消炎。这套逻辑在急性状况下完全正确,如果不退烧真有烧坏大脑的风险。
+
+但"建"的逻辑不一样。它想的是另一个问题:为什么这个孩子的身体这么容易发烧?为什么他的免疫系统对一个小病毒都扛不住?为什么会反复感染?
+
+"治"把每一次生病当成一个独立事件。"建"把每一次生病当成系统缺陷的信号。
+
+这不是说不要治。病来了当然要治。但如果只治不建,你的一生就在"生病→治病→再生病→再治病"的循环里打转。你永远不会去想——怎么才能让房子不进水,而不是每次进水了才拼命往外舀水。
+
+这个道理,小付后来用了一个比喻跟妈妈讲清楚了。
+
+他说:"妈,你每天做饭前是不是先洗锅?锅不脏就不用洗,对吧?但你的身体不是你家的锅。身体是你一直在用的一个系统,它需要保养,不是等坏了再修。"
+
+妈妈听完沉默了一会儿,说:"你这么说我懂了。那你们现在在做什么?"
+
+小付说:"我们没做什么大事。就是换了家里的水,调整了饭桌上的菜,孩子比以前多睡了半小时——就这些。"
+
+"就这些?"
+
+"就这些。"
+
+但就是这些"小事",让小艾从一个月病两次变成了两个月才病一次。这中间差的不是药,不是医生——差的是一种"主动健康"的思维。
+
+> **金句:** 治病是把漏水的船舀干,健康是上船之前就修好底。
+
+---
+
+## 主动健康的三层楼梯
+
+如果你也想从"被动治病"切换到"主动健康",可以记住三个层次。这三个层次不需要一步到位,按顺序来就好。
+
+**第一层:不做有害的事。**
+
+听起来很容易,但很多人没做到。熬夜、久坐、高糖饮食、过度加工食品——这些事我们明知道有害,但因为"短期内看不到后果",就一直在做。
+
+不做有害的事不需要你多做什么,只需要你把那些明显有害的行为一个一个减少。少喝一瓶含糖饮料,少刷半小时手机,少坐一小时不动。这个层次不靠"行动力",靠"意识"——你意识到了,改变自然发生。
+
+小付就是从"少喝可乐"开始的。不是不喝,是把一天两瓶改成一天一瓶,再改成两天一瓶。没有痛苦,没有戒断反应。三个月后他发现自己已经不想喝了。
+
+**第二层:做对的事。**
+
+这个层次需要一点知识和一点行动。
+
+什么是对的事?喝好水、好好睡觉、规律排便、每天晒几分钟太阳、饭后走一走。这些事没人不知道,但"知道"和"做到"之间的差距比太平洋还宽。我们最不缺的就是"我知道",我们最缺的是"我做了"。
+
+小付的办法是"一次只改一个"。他不是同时做五件事,而是盯住一件事,做到不用想就会去做为止。第一个月他只管饮水这一件——每天提醒全家人多喝水、喝好水。水喝习惯了,第二个月才开始调整饮食——把白米饭换成杂粮饭。饮食稳定了,第三个月再加入饭后散步。
+
+一个习惯像钉子一样钉牢了,再钉下一个。不是因为他慢,而是因为他知道——健康这件事,比的不是谁跑得快,比的是谁不停。
+
+"一次只改一个"听起来很慢,但它有一个巨大的好处:你不会 overwhelm 自己。很多人做健康改变失败,不是因为不想改,是因为想改的太多了。今天看到一篇文章说要低碳水,明天听朋友说应该断食,后天又在短视频里看到一种新的养生方法——信息越多,行动越少。大脑承受不住这种压力,干脆什么都不干了。
+
+有一个心理学概念叫"决策疲劳":人每天能做的有效决策是有限的。你每花一份精力去想"今天要不要运动",你就少了一份精力去做好别的事。"一次只改一个"之所以有效,就是因为它帮你省下了这些决策成本——你不需要每天跟自己谈判,只需要执行你已经决定好的那件事。
+
+**第三层:建立系统。**
+
+当你不做有害的事、开始做对的事之后,下一步是把这些行为变成习惯,再把习惯变成家庭系统。
+
+怎么理解"系统"?它不是一张贴在冰箱上的提醒便签,不是手机里的健康打卡App,不是你在年初立下的"今年一定要"的flag。系统是一个不需要你每天动用意志力的自动运行机制。
+
+一个最简单的判断标准:如果一件事你需要"坚持"才能做,那它就还不是系统。系统是你不需要"坚持"的——它已经嵌入了你的日常生活,像吃饭喝水一样自然。
+
+小付家现在有一个"家庭健康三件事":每天早上出门前,小艾要喝一杯温水,小付帮他倒好放在餐桌上,位置固定,从不出错。每天晚上吃完饭,一家人出门散步十五分钟,不要求快,走就行,雷打不动。每周末,小付的妻子会准备一锅杂粮粥,够吃三天,省掉了工作日早上"吃什么"这个每天都要面对的难题。
+
+这三件事,每件单独看都不起眼。不就是喝杯水、走走路、喝碗粥吗?但组合在一起,它们形成了一个系统——一个每天、每周自动运转的健康系统。在这个系统里,小付不需要想"今天要不要喝水"——水就在那里,看见了就喝了。不需要想"今天要不要运动"——全家人已经在穿鞋了,他不好意思说不去。不需要想"今天吃什么才健康"——粥已经在冰箱里了,热一下就能吃。
+
+这就是主动健康的终极形态:不是靠意志力,而是靠系统。意志力是会消耗的。你今天用意志力逼自己去散步,明天可能就没力气了。但系统不会消耗你——它帮你省力。一个好的健康系统,就像一个好的程序——不需要用户反复确认"你确定要运行吗?",它在后台自动执行。
+
+---
+
+## 从身到心,再到智
+
+看到这里,你可能会觉得:这一章讨论的都是"身体"的事,好像健康的尽头就是肠道、食物和水。但事情没这么简单。五维之所以被称为"系统",不是因为它把五个东西硬塞在一起,而是因为它们之间真的有连接。
+
+还记得肠道菌群那条线吗?人体百分之九十以上的血清素是在肠道中合成的,由肠道菌群调控。血清素是什么?它是大脑中调节情绪的关键神经递质,直接影响你的快乐感、安全感、甚至抗压能力。肠道不健康,血清素合成就会受影响。血清素低了,情绪也会跟着低落。
+
+这就解释了为什么小艾那段时间不仅身体容易生病,情绪也特别容易波动——一点小事就哭,稍微不如意就发脾气,在幼儿园跟小朋友抢玩具抢不过就坐在地上嚎啕大哭,怎么哄都哄不好。小付和妻子曾经以为那是孩子"娇气",是性格问题。小付的妈妈甚至说过"这孩子脾气随他爸"。
+
+但真相很可能是:那不是脾气的问题,那是肠道的问题。
+
+科学研究发现,肠道菌群可以通过迷走神经直接向大脑发送信号。这些信号影响我们的压力反应、焦虑水平、甚至对疼痛的感知。一些针对肠易激综合征患者的研究表明,改善肠道菌群后,患者的焦虑评分和抑郁评分都有明显下降——不是心理治疗的效果,是换了几种食物之后的效果。
+
+这就是"身"和"心"的连接。肠道菌群不仅是免疫力的调节者,也是情绪的调节者。肠道健康的人,情绪弹性往往更高。肠道不健康的人,抗压能力往往更低。这不是性格软弱,这是生理层面的失衡。
+
+小付的妻子知道这个之后,说了一句很真实的话:"我以前总跟小艾说'别哭了,有什么好哭的'。我现在知道了,他可能是真的控制不住。"
+
+这句话的背后,是一个家庭对孩子健康认知的升级——从"行为问题"到"身体问题",从"批评"到"理解"。
+
+而同样值得关注的是"身"和"智"的连接。
+
+小艾在幼儿园有个好朋友,叫小宇。小宇聪明活泼,在家里喜欢搭积木、拼拼图,逻辑思维能力一直不错。但从去年开始,老师发现他上课注意力明显下降,走神频繁,记忆力也跟以前有差距。老师反映说"小宇好像变了一个人"。
+
+小宇妈妈带他做了各种检查。查了视力,查了听力,查了微量元素,甚至还去看了心理科。最后发现,问题出在一个谁都没想到的地方——他的肠道菌群多样性很低,导致某些关键营养素的吸收效率很差,尤其是直接影响认知功能的B族维生素和Omega-3脂肪酸。
+
+小宇妈妈后来在小区的家长群里说了一句话,被很多人转发了:"我花了几万块给他上脑力开发课,结果问题出在肠道。你敢信?"
+
+你当然可以给孩子报最好的思维训练班、买最贵的逻辑教具、请最厉害的家教。但如果他的身体——确切地说,是他的肠道——没有准备好吸收那些支持大脑运转的营养物质,那些教育投入的效率就会大打折扣。
+
+这个逻辑放在成人身上也是一样。你有没有过那种感觉:下午三点,坐在工位上,脑子像灌了浆糊一样,什么都想不了,看一行字要看三遍?那不一定是你累了,很可能你午餐吃了高碳水的东西,血糖剧烈波动,导致大脑供能不稳定。也不一定是意志力的问题,可能是身体在告诉你——我这个系统需要调整一下了。
+
+身和智之间没有隔墙。肠道的状态决定了你能吸收多少营养,营养的供给决定了你的大脑能运转得多好。
+
+这就是为什么"主动健康"在所有维度中排在第一个。它不是最"高级"的维度——智可能更高深,心可能更温暖——但它是最底层的基础。土不好,什么都种不了。这不是一个比喻,这是生理学的事实。
+
+---
+
+## 两个最小的改变
+
+我知道,读到这里的你,大概会有两种反应。
+
+第一种是:你说得对,我确实应该关注家里人的健康了。然后合上这本书,继续翻到下一章。不是不想做,是信息太多了,不知道怎么开始。
+
+第二种是:你说得对,但我从哪里开始?我有工作要忙,有孩子要管,家里还有老人要照顾。我连睡觉的时间都不够,哪里来的时间搞这些?
+
+如果你是第二种——或者你就是第一种但知道自己不会真的去做——那我完全理解。真的。小付也是这样的人。他不是什么"自律达人",他跟你一样,下班回来只想躺在沙发上刷手机。
+
+所以,我不会给你一张长长的清单。我只会给你两个最小的改变。小到不可能失败的那种。
+
+**第一个改变:重新认识你家的水。**
+
+你不是一定要换什么高端设备,不是一定要买几千块的净水器,不是一定要喝什么品牌的水。你只需要做一件事:花五分钟时间,去了解一下你家现在每天喝的水,质量到底怎么样。
+
+查一下当地的水质报告,看看你所在的区域自来水硬度怎么样,有没有重金属超标的历史。看看家里的饮水机多久没有清洗了,热水壶底部有没有一层厚厚的水垢。如果你习惯喝瓶装水,看看你常买的那个品牌的水源地在哪里,矿物质含量是多少。
+
+这么做不是为了让你焦虑,不是为了让你觉得"天啊我喝了这么多年毒水"。是为了让你"看见"。魏高峡老师说过一句话:看不见的东西就管不了。看见了,你才有选择的权利。很多人不敢去了解这些信息,怕知道了心里不安——但恰恰是这个"不敢",让他们一直在无知中被动接受。
+
+一个具体的建议:如果只能做一件事,就换成温度适中的、经过可靠过滤的水。开始的时候不一定要多贵的方案。可以是几百块的好一点的滤水壶,可以是小区里的净水站,也可以是在靠谱的渠道买经过认证的瓶装水。不为别的,就因为你的身体百分之七十是水。你每天喝进去的东西,比任何保健品都更能影响你长期的身体状态。
+
+**第二个改变:每天留出十五分钟的"身体时间"。**
+
+不是运动,不是健身,不是跑步,不是瑜伽。不需要换运动服,不需要换鞋,不需要做准备活动。就是吃完晚饭之后,带着全家下楼,慢悠悠地走十五分钟。
+
+可以聊天,也可以不说话。可以走得快一点,也可以走走停停。唯一的要求是:每天都去。
+
+这不是健身,这是"微习惯"。它的力量不在于运动强度,而在于"每天都有"这件事本身。你不需要变成一个"爱运动的人",你只需要变成一个"每天饭后走一走的人"。前者的改变太大了,大到你的大脑会抗拒。后者的改变太小了,小到你的大脑根本不会注意到。
+
+小付一家到现在还保持着这个习惯。有时候下着小雨,他们打着伞也要下去走一圈。不是因为自律。小付说得很坦白:"不是因为我有毅力,是因为有一天不走,小艾就会拉着我说'爸爸今天还没散步'。小孩记住了这件事,它就成了一个约定。"
+
+多好的方法。不需要你跟自己较劲,只需要你让孩子帮你记住。
+
+这个方法的精妙之处,我给它起了一个名字叫"20秒启动"——穿上鞋、走出家门,只需要20秒就能完成。大脑天生懒惰,任何需要"停下来想一想"的动作,都会被无限期地推迟。但20秒就能开始的事,大脑不会抗拒。不需要做计划,不需要列清单,穿上鞋,走出去。
+
+---
+
+## 守住基本盘
+
+如果人生是一场无限游戏,健康就是你的初始血量。
+
+血量高的人,输了几次也还能继续。血量低的人,赢了一次也可能被一次意外带走。
+
+这听起来有点残酷,但也是一个好消息——因为血量是可以增加的。它不是系统写死的固定值,是你每天都在修改的参数。你今晚睡得好不好,明天早饭吃的是什么,压力来了怎么应对——每一天的微小选择,都在往你的血量上加一点,或者减一点。
+
+这不是在制造焦虑。这是在说一个朴素的道理:如果你真的想对家庭负责,不只是拼命工作、拼命赚钱,也要花同样的心力去维护这个家庭最基础的东西——每一个成员的身体。因为一旦这个基础出了问题,其他所有的事情——事业、教育、财富——都会停摆。
+
+你有没有想过一个问题:为什么我们愿意花几千块给车做保养,一年两次,准时准点、从不拖延,却不舍得花十五分钟下楼走一走?为什么我们愿意花几百块买一件只能穿一个季度的衣服,却在给自己换一台好一点的净水器的时候犹豫再三?这个问题的答案不是"我们穷",而是"我们看不见"——车不保养会坏,看得见。衣服穿一个季度就过时,看得见。但身体在慢慢变差,看不看得见?
+
+看不见,不等于不存在。只是等到它变得"看得见"的那一天,代价已经很大了。
+
+小付后来跟我说过一句话,我记录了下来。他说:"我以前觉得,对家庭负责就是多赚钱。让老婆孩子过上好日子,别让他们受委屈。现在我知道了,光是活着不够,还得活得久一点、好一点。能陪他们更多年,这才是最大的负责。"
+
+这不是什么豪言壮语。他只是在那一个个抱着发烧儿子在客厅来回走的深夜里,慢慢想通的一件事。他说,后来有一次他下班回家,推开门,小艾跑过来抱住他的腿。他蹲下来,发现孩子脸上有肉了,气色好多了。那一瞬间他意识到,过去三个月他做的那些事——换水、换饭、散步——不是为了治什么病,是为了这一刻:孩子能跑过来抱住他,而不是躺在床上等他回来。
+
+你不需要成为营养专家,不需要每天花两小时健身,不需要买一堆用不完的保健品。你需要做的,三件事就够了:停止用错误的方式消耗自己,找到一两个最小的正确动作开始做,把那些正确的动作变成你家的日常。
+
+小付家从一杯水开始。小然从停掉牛奶和鸡蛋开始。小茜从饭后散步开始。
+
+都不大。但每一个"不大"的开始,都在为一个更长远的健康系统添砖加瓦。
+
+土厚德载物。身是万物的根基。根基越稳,往上盖什么都可以。
+
+> **金句:** 守住身体的基本盘,不是因为你怕生病,而是因为你心里有更想去的地方、更想爱的人。
+
+---
+
+## 本章行动卡
+
+这一章的行动卡,我不直接告诉你怎么做。我给你一个问题,你给自己找一个答案。
+
+### 行动卡一:如果明天只能做一件事
+
+如果明天你只能为身体的某一个地方做一件事——你会选哪里?不是"去健身房办卡"那种大事,是那种睡前两分钟能做完的事。选定了,就只做这一件。不做别的。连续七天,看看第七天跟第一天有什么不一样。
+
+### 行动卡二:问身体一个问题
+
+选一个你每天固定做的时间段——比如午饭后、或者睡前。闭上眼睛,问自己一句:"我现在哪里不舒服?"不问大脑,问身体。可能是眼睛干、可能是肩膀酸、可能是胃胀。不用分析原因,只需要留意到它。做完之后问自己:如果没有"忙到没时间"这个理由,你会为这个不舒服做一件什么小事?
+
+### 行动卡三:全家围坐,只问三个问题
+
+找一个周末的时间,全家人坐在一起。每人回答三个问题,规则只有一条:不评价,不打断。第一个:这周你觉得自己身体状态最好的一个时刻是什么时候?第二个:这周你觉得最累的那一刻是因为什么?第三个:如果下周只改一件事让身体舒服一点,你会改什么?不需要达成共识,不需要做决议。只是听每个人说一遍。
+
+### 行动卡四:跟一个人说一句不一样的话
+
+这一周找一个家人,对他说一句你平时不会说的话。不是"你该睡觉了",不是"多吃点菜"。是跟身体有关的、不带指令的——比如"你今天看起来气色不错"、"你累了一天了,歇会儿吧"。就一句。然后什么都不加。
+
+---
+
+> **金句:** 健康不是省出来的,是"看见"和"选择"出来的。
+
+---
+
+> **本章数据来源说明:**
+> - "六成家庭反复疾病"数据:浠艾福家庭健康报告 2026H1,n=326
+> - 氢水睡眠改善研究:HYDRAPP RCT 2025,n=36;Mizuno 双盲对照 2017
+> - 肠道菌群与免疫细胞数据:参考《Nature Reviews Immunology》相关综述
+> - "百分之九十以上血清素在肠道合成":参考《Cell》期刊相关研究
+> - 饭后散步效果数据:浠艾福家庭健康报告 2026H1,n=237
+> - 案例均为真实故事脱敏改写,人物使用化名,情节做了文学化处理
+
+---
+
+*[下一章预告:智——赋能未来,给孩子面对未来的底气]*
+
+
+========================================
+  第四章-智-内容草稿.md
+========================================
+
+# 第4章:智——赋能未来,给孩子面对未来的底气
+
+**五行属金 | 金曰从革,智在磨砺中成器**
+
+---
+
+## 那道做不出来的数学题
+
+晚上八点半,小艾的房间门半掩着。小付端着切好的水果站在门口,听见里面传来铅笔摩擦纸张的声音,然后是橡皮擦用力的沙沙声。他推门进去,看见小艾低着头,面前摊着一张数学卷子。草稿纸上画满了又擦掉,再画再擦。有一个地方被橡皮擦得太用力,纸都破了,露出桌面的颜色。
+
+"不会做?"小付把水果放下,尽量让声音听起来轻松。
+
+小艾没说话。但他的眼眶已经红了。
+
+小付看了一眼那道题——行程问题,相遇和追及。放在大人眼里不算难,但对一个三年级的孩子来说,需要同时理解"速度""时间""距离"三个变量的关系。这道题对认知的要求,远不止于"学过没有"。他心想:小艾明明背过公式,为什么会卡住?答案其实很简单:背公式用的是记忆力,而解这道题用的是推理能力和空间想象能力。小艾的推理能力很强,但他的加工速度慢,需要更多时间才能把"背过的公式"和"眼前的题目"连接起来。这不是一个"学过没有"的问题,这是一个"大脑处理信息的方式不同"的问题。
+
+"哪一步卡住了?"小付问。
+
+小艾小声说:"我不知道从哪里开始。"
+
+这句话让小付心里一紧。不是因为他不会做题,而是因为那句"不知道从哪里开始",像一把钥匙,打开了他心里一直关着的一个问题:当未来没有人给孩子出题、没有人给他标准答案的时候,他能不能找到自己的路?
+
+这个担心,不是小付一个人的。
+
+他的朋友小茜,三个月前也经历过一模一样的夜晚。区别是,小茜的女儿刚上一年级,问题看起来更简单——"妈妈,这个字我不认识"。但小茜当时的反应跟小付差不多:她会说"把这个字抄五遍"。后来她才明白,那个"抄五遍"解决的不是孩子的问题,解决的是她自己的焦虑——她需要感觉自己"做了什么"。可孩子需要的,是有人告诉她:不认识字,不丢人。我们可以一起查字典。
+
+你在辅导作业的时候,肯定也有过类似的时刻。看着孩子对着作业发呆、咬笔头、眼泪在眼眶里打转,你心里的声音是:他是不是不够聪明?他是不是跟不上?他以后怎么办?
+
+这种焦虑有名字,它叫"分数焦虑"。它的底层逻辑听起来很合理:分数高等于成绩好,成绩好等于好学校,好学校等于好未来。但这个等式里,每一步都藏着巨大的漏洞。
+
+其中一个最大的漏洞就是——你把分数当成了孩子本身。
+
+> **金句:分数是孩子某一时刻的投影,不是他这个人。你用投影来判断一个人,永远看不清楚。**
+
+---
+
+## 分数背后看不见的东西
+
+那天晚上小艾睡着后,小付回到客厅,小茜还坐在沙发上等他。小茜是小付的妻子,小艾的妈妈。她看了一晚上小艾写作业的状态,心里也不是滋味。
+
+"我觉得我们得换个思路,"小茜说,"不是逼他多做几道题的事。"
+
+小付点点头,但他也不知道还有什么别的思路。辅导班已经上了,每天也陪着写了,还能怎么换?
+
+小茜没再多说。但她第二天做了一件事——她联系了一位做成长规划师的朋友,问了一个她以前从来没想过的问题:有没有办法知道,一个孩子的大脑到底是怎么工作的?
+
+这个提问,后来成了整个家庭转变的起点。
+
+但那是后话了。当时的小付,还在用他最熟悉的方式处理这件事——温和地施加压力。
+
+小付不是那种"只盯着分数"的家长。至少他自己这么认为。他很少因为小艾考得不好就发火,他会说"没关系,下次努力"。但那种藏在语气里的失望,小艾能感觉到。孩子对这种东西的感知,比大人敏感十倍。
+
+真正让小付开始反思的,是一次谈话。
+
+那天小艾期中考的成绩出来了,语文从85掉到了70。小付坐在他旁边,温和地问他:"你觉得这次考得怎么样?"
+
+小艾没有回答。他低着头,手指绞着衣角,过了很久才说了一句:"爸爸,我是不是很笨?"
+
+小付愣住了。他从来没说过小艾笨。他以为自己做得很好——没有发火,没有打骂,没有责备。但孩子还是从空气中感受到了那个信息:爸爸觉得我不够好。当这种信号反复出现,孩子的内心就会形成一个结论——"我笨"。
+
+这个结论一旦形成,就会变成一种防御。他不再会因为学不会而难过,因为"我笨,所以我学不会"是一个合理的解释。但问题是,一旦他接受了这个解释,他就不会再努力了。努力有什么用呢?笨是改不了的。
+
+小付后来跟我聊这件事的时候说了这么一句话:"我以为我在保护他的自尊心。其实我什么都没做。我需要的不是'不打骂',我需要的是真正理解他为什么学不会。"
+
+这句话说到了"智"这个维度的核心。
+
+我们太容易把孩子学习上的问题归因为态度问题。"他不够专注""他太粗心了""他不想学"。这些话你肯定说过。但你可能不知道,很多时候,孩子"做不到"不是因为不想,而是因为他的大脑在处理某些类型的信息时,就是比别人慢一些。就像一台电脑,你装了一个需要高配置的软件,但它的处理器就是跑不动——不是它不想跑,是硬件不支持。
+
+这不是态度问题,这是认知能力差异。
+
+浠艾福采用的DAN素质能力测评体系,就是把这些"看不见的硬件配置"拆开来看。它不考知识,不考背诵,不考"学过没有"。它测的是六个基础能力,叫A2六维:
+
+**感知觉**,是大脑接收信息的入口。同样的课堂内容,有的孩子能完整接收到,有的孩子只能接收到一半。
+
+**注意力**,是把信息留在脑子里处理的能力。注意力好的孩子能专注二十分钟,但注意力偏散的孩子可能五分钟就开始神游。那个神游的孩子不是故意的,是他的注意力资源用完了。
+
+**记忆力**,是存信息的能力。有的孩子记得快忘得快,有的孩子记得慢但记得牢。没有好坏之分,只是需要不同的学习策略。
+
+**推理能力**,是处理信息、找规律、做判断的能力。这是大家常说的"聪明",但很多人不知道,推理能力和知识储备是两回事。一个推理能力强的孩子可能没学过某个知识点,但他能自己推出来。
+
+**空间能力**,是在脑子里"画图"的能力。几何、地图、动手操作都靠它。有些孩子语言能力一般,但空间能力特别强,这就是为什么有些孩子"不会说但会做"。
+
+**加工速度**,是大脑处理信息的效率。有的孩子做题慢,不是因为不会,是因为大脑处理每个信息都要多花零点几秒。放在一道题里看不出来,但放在一张卷子里,差距就出来了。
+
+这六个维度,就像一台电脑的CPU、内存、硬盘、显卡、网速。你不能说内存大就是好电脑,也不能说CPU快就够了——它们是协同工作的。
+
+理解这些维度有什么用?一个很简单的例子:如果你知道孩子的加工速度偏慢,就不要再催他"你快一点"——催没有用,就像催一台正在渲染视频的电脑"你快一点"一样,它不会因为你的催促就变快。你需要做的是:给他多一点时间,或者把大任务拆成小任务,让他每次只处理一小块。同样的道理,如果你知道孩子的注意力资源有限,就不要要求他一口气坐一小时——让他每二十分钟起来活动一下,反而效率更高。
+
+小付一家的故事,正是因为做了一次这样的测评,才开始转向。
+
+---
+
+## 一次测评带来的转变
+
+小付是经朋友推荐去做的测评。他当时的想法很简单:反正也没什么损失。
+
+测评的过程比他想象的轻松。小艾坐在平板电脑前,做了一些看起来像游戏的任务——找不同、记图案、拼图形、判断对错。整个过程不到一小时。
+
+但结果出来的时候,小付说他受到的冲击不亚于第一次在B超单上看到那个小点。不是因为它有多"严重",而是因为它让他第一次真正"看见"自己的孩子——不是通过老师口中的描述,不是通过试卷上的数字,而是一张真实的、基于数据的认知地图。
+
+报告上呈现的是六条曲线。小艾的推理能力曲线几乎是顶部的,高高地挂在那里。记忆力也很好。但注意力和加工速度明显偏低,像两根低垂的尾巴。
+
+测评师跟小付说了一句话,他至今记得清清楚楚:"你们家小艾不是不爱学习。他的大脑像一台配置很高的电脑,但开机慢。你给他时间启动,他跑得比谁都好。但你非要逼他跟别人同时开机、同时运行,他就会出现卡顿。"
+
+小付说,那一刻他差点哭出来。
+
+不是因为感动,而是因为被点醒了。过去半年,他一直在用自己的标准、用"别人家孩子"的标准要求小艾。他以为小艾在退步,可小艾根本没变——变的是他的加工速度跟不上越来越快的学业节奏。孩子不是不想做,是他的大脑需要不同的工作方式。
+
+那之后,小付做了一件很简单的事:他把小艾每天晚上的学习时间往后调了半小时,取消了早上的晨读,改为让小艾多睡一会儿。同时,他把需要快速反应的练习和需要深度理解的任务分开,安排在一天中不同的时段。
+
+三个月后,小艾的语文成绩回到了85分以上。但比成绩更重要的,是小艾的状态变了——他不再说"我不行"了,他开始主动跟爸爸讨论题目。
+
+> **金句:孩子不是不想做好。很多时候,他只是需要一条跟别人不一样的路。**
+
+---
+
+## 三种力量,唤醒内在的发动机
+
+测评让小付理解了孩子的大脑。但真正改变父子关系的,是另一回事。
+
+测评后一个月,小付觉得自己"懂"小艾了。他开始根据测评结果调整教育方式,以为一切都会变好。但很快他发现,小艾并没有像他想象的那样变得积极主动。作业还是会拖拉,该练的字还是会找借口。
+
+小付困惑了。测评不是说对了吗?怎么不管用?
+
+后来在一次家长沙龙上,他听到了一个来自心理学界的经典框架。它的名字叫自我决定论,是心理学家爱德华.德西和理查德.瑞安花了四十多年研究出来的东西。他们的核心发现很简单:一个人发自内心想去做一件事,需要满足三个最基本的心理需求。
+
+第一个叫**自主感**——"这件事是我自己选的"。
+
+你回忆一下,每次你命令孩子去做什么的时候,他是不是本能地就想反抗?不是因为那件事不好,是因为"被命令"这件事本身剥夺了他的自主感。大脑会对"被迫"产生本能的抵抗。但如果把"你必须做"换成"你想怎么做",哪怕结果一样,孩子的感受完全不同。
+
+小付试了。以前他给小艾定好每天的学习计划,现在他把计划本摊开,问小艾:"今天晚上你想先做数学还是先背古诗?数学打算做几道?"小艾的选择几乎每次都和他想的一样,但因为是"自己选的",做起来就不那么痛苦了。
+
+第二个叫**胜任感**——"我觉得我能行"。
+
+胜任感不是"我什么都会",而是"虽然难,但我相信我能做到"。小艾的推理能力很强,但之前他从来不觉得自己"擅长数学",因为他在限时考试里老是做不完。他的胜任感被加工速度这个短板压垮了。当他爸爸把"速度"这个要求先拿掉,让他按自己的节奏做,他发现自己不仅会做,还能用不同的方法去解同一道题。那种"原来我真的可以"的感觉,比任何奖励都管用。
+
+第三个叫**归属感**——"有人在乎我"。
+
+你可能会觉得,归属感是感情上的事,跟学习有什么关系?关系太大了。一个孩子如果在学习的过程中感受到的是"我妈又要骂我了""我爸又失望了",他的大脑会把学习和"威胁"绑定在一起。长此以往,他每次打开书本,大脑的应激系统就会启动——焦虑、逃避、抗拒。这不是态度问题,是生存本能。
+
+但如果学习的过程里有人跟他说"没关系,慢慢来""我在这里陪你",他的大脑会把学习和"安全"绑定在一起。在这种状态下,学习效率会高得多,而且孩子不会那么容易放弃。
+
+小付后来养成了一个习惯:每次陪小艾写作业之前,先花五分钟跟他聊点别的——今天在学校有什么好玩的事、他最近在看的那本漫画看到哪了。这五分钟不聊学习,只聊天。小艾的状态明显不一样了。他不再抗拒爸爸走进他的房间,因为他知道,爸爸进来不是来检查的,是来陪他的。
+
+小茜也做了类似的调整。她以前习惯说"你先把数学做完,再做语文"。后来她改成跟小艾一起做计划,把选择权交给孩子:"今晚有数学和语文,你想先做哪一个?"小艾每次都会选一个,而且选完之后,他做起来比以前痛快得多。为什么?因为"被命令做数学"和"我自己选了先做数学",在心理上是完全不同的两件事。前者消耗意志力,后者激活自主感。
+
+这三根支柱还有一个妙用:它们不仅适用于孩子,也适用于你自己。你有没有觉得自己在工作上缺乏动力的时候?大概率也是因为这三根支柱中有一根被抽走了——你没办法决定工作节奏(自主感),或者你觉得自己的能力配不上工作要求(胜任感),或者你觉得自己在这个团队里可有可无(归属感)。你看,大人和小孩,底层逻辑是一样的。
+
+> **金句:一个孩子最大的发动机,不是恐惧,不是奖励,而是"我想试试"。**
+
+---
+
+## 你夸对了还是夸错了
+
+聊到"胜任感"这件事,有一个绕不开的话题:夸奖。
+
+你可能会觉得,夸奖有什么难的?不就是说"你真棒"吗?但你不知道的是,怎么夸这件事,可能正在悄悄影响你的孩子敢不敢接受挑战。
+
+斯坦福大学心理学家卡罗尔.德韦克做过一个经典实验。她让一群孩子做一道简单的拼图题,所有孩子都完成了。然后她把孩子分成两组,分别用不同的方式夸奖。第一组被夸"你真聪明",第二组被夸"你刚才的方法很好,你真的很努力"。
+
+接着她让这些孩子自己选择下一道题:一道更难的,或者一道和刚才一样简单的。
+
+被夸"聪明"的那组,有三分之二选择了简单的题。被夸"努力"的那组,有百分之九十选择了更难的题。
+
+为什么?因为"聪明"是一个固定标签。一旦孩子被贴上"聪明"的标签,他就不敢做可能让他"不聪明"的事。他避开挑战,因为挑战意味着可能失败,失败意味着"我不聪明了"。
+
+但"努力"和"方法"是可以改变的。你今天努力了,明天可以更努力。这个方法不行,换一个方法就行。慢慢地,孩子会形成一种思维模式:做不好不是我不好,是我还没找到对的方法。
+
+前者叫固定型思维,后者叫成长型思维。这两种思维模式不是天生的,它是在一次次夸奖、一次次批评中,被我们这些大人捏出来的。
+
+小付以前也是那种看到孩子考了98分就问"那两分怎么丢的"的家长。他后来改了一句话,效果却天差地别。他不再问"为什么扣了两分",而是问"你是怎么做到拿98分的?"
+
+小艾愣了一下,然后认真地跟他讲:这道题他之前错过一次,这次特别注意了;那道题他用了一个新的方法,虽然慢了点但更稳。
+
+当一个孩子能说出自己是怎么做好一件事的时候,他就在为自己的能力建立信心——不是"我聪明"的信心,是"我有方法"的信心。这个转变,是所有"智"的培养里最重要的一步。
+
+> **金句:不要夸孩子聪明,要夸他用对了方法。聪明是回不去的位置,方法是越用越多的工具。**
+
+---
+
+## 从补短板到扬长板
+
+小付的改变在继续,但他很快发现了一个新的问题。
+
+即使他已经知道了小艾的认知特点,即使他改变了表扬的方式,即使小艾的内驱力开始萌发——但他自己还是会下意识地关注短板。每次看到那份测评报告,他的眼睛总是落在那两条最低的曲线上,想着"注意力怎么提高""加工速度怎么提升"。
+
+他把这个困惑带到了测评师面前。
+
+测评师给他做了一个形象的对比。他说你面前有两个桶。一个桶是传统的"木桶理论"——木桶能装多少水,取决于最短的那块板。另一个桶是斜着放的——斜着放的木桶,能装的水量取决于最长的那块板能到多高。
+
+"木桶理论没有错,"测评师说,"但那是管理一个组织时用的。养孩子,不要用木桶理论。你要用长板理论。"
+
+小付愣住了。
+
+测评师接着说:"一个孩子最核心的竞争力,不在于他能把短板补到平均水平,而在于他的长板有多长。注意力不好的孩子,可能创造力极强。加工速度慢的孩子,可能深度思考能力远超同龄人。你是花更多时间帮他补注意力,还是花更多时间让他的创造力成为他的核心竞争力?"
+
+小付问:"但学校的考试呢?短板会拉分的。"
+
+测评师笑了笑:"考试是短跑。孩子的一辈子是马拉松。短跑需要均衡的体力,但马拉松的胜负,取决于你最擅长的那段路能不能拉开差距。"
+
+这个比喻,小付想了很久。
+
+他开始做一件事。他不再把小艾的课外时间全花在补弱项上。每天晚上的学习,他先让小艾做自己最擅长的推理题——那些逻辑题、找规律的题、需要动脑筋的题。小艾做得很开心,做得快,做完了很有成就感。带着这种成就感,再去做那些需要耐心的题目,他的状态明显好了很多。
+
+为什么?因为先做优势科目,给大脑提供了一个"成功预期"。大脑尝到了成功的甜头,就愿意继续工作。如果一上来就做最难的、最不擅长的,大脑会直接进入"逃避模式"。
+
+在双培强基工程的A2测评跟踪数据中,有一个非常有意思的发现:那些在测评后三个月内取得显著进步的孩子,有一个共同点——他们的家长都做了一件类似的事,不再强调短板,开始为长板创造条件。不是因为短板不重要,是因为当一个人在做自己擅长的事情时,他积累的信心、抗挫折能力和解决问题的策略,会溢出到他不擅长的领域。这叫优势溢出效应。
+
+你帮孩子找到了他的优势,就等于给了他一把钥匙。这把钥匙开不了所有的门,但它能打开的那扇门,可能比他想象的重要得多。
+
+---
+
+## 这座桥,通向你
+
+到这里,你可能觉得"智"这个维度,就是讲孩子教育的事。但我希望你停下来想一想:你对"智"的理解,是不是把孩子框住了?
+
+在浠艾福的五维体系里,"智"从来不是只属于孩子的。它属于家庭里的每一个人。
+
+小付陪小艾做完测评后,出于好奇,自己也做了一套成人版的认知能力测评。结果出来的时候,他愣了很久。
+
+他的注意力维度很高,加工速度也高,但感知觉维度偏低。
+
+测评师看了一眼报告,问了他两个问题:"你是不是经常被老婆说你没眼色?你是不是经常觉得老婆小题大做?"
+
+小付差点从椅子上跳起来。这说的不就是他和他老婆的关系吗?他老婆经常说他不注意细节,他经常觉得老婆对同一件事的反应跟他不一样。他以前觉得这是性格不合,甚至觉得是"她不理解我"。但现在他明白了,不是谁对谁错。是他的感知觉天生对某些信号不那么敏感,而她恰恰相反。她感受到了一百个信号,他只感受到了三十个。不是他故意忽略,是他的接收器天生就少了一截。
+
+他回去跟老婆说:"老婆,我不是故意不看脸色。我的感知觉处理能力天生没你强。"
+
+他老婆是第一次听到这种说法,半信半疑。但当她看完那份报告后,沉默了很久,然后说了一句让两个人都笑了的话:"那你以后能不能假装你比我敏感?"
+
+这就是"智"这个维度,对成年人最重要的意义。认知能力不只跟学习有关,它跟你所有的关系有关。
+
+除了六项认知能力,还有一个被广泛使用的人格模型叫大五人格。它的五个维度是:**开放性**(对新事物的接受度)、**宜人性**(合作与包容性)、**外倾性**(社交与活力水平)、**神经质**(情绪敏感度)、**责任心**(自律与条理性)。
+
+这五个维度,加上六项认知能力,一起构成了一个人的完整画像。
+
+你老公不是故意爱跟你抬杠,是他的开放性偏低,他需要时间来接受新事物。
+
+你老婆不是故意什么事都管,她的责任心高到让她闲不下来。
+
+你儿子不是故意不听话,他的外倾性高,需要在与人互动中获取能量。
+
+你女儿不是故意玻璃心,她的神经质维度高,天生对情绪变化更敏感。
+
+一旦你看到这些"数据",很多以前让你生气、失望、不解的事情,突然就有了新的解释。你不再会问"你怎么又这样",而是会想"哦,这是他的特质在起作用"。
+
+小然的例子最能说明这一点。
+
+小然是小茜的朋友,结婚六年,有一个四岁的女儿。她跟老公最常吵的话题是"他不陪我"。小然觉得老公下班回来就是刷手机看新闻,不跟她说话。她觉得自己被冷落了。老公觉得很委屈——"我每天在公司说了一天的话,回家就想安静一下,这跟你爱不爱我有关系吗?"
+
+两个人都觉得自己有理。
+
+直到有一天,小然在一个朋友推荐下做了大五人格的简易评估。结果出来了,她的"外倾性"很高——她从与人互动中获取能量,聊天、分享、讨论,这些让她充电。而她老公的"外倾性"很低,他的能量来自于独处,社交对他来说是一种消耗。
+
+小然突然不生气了。
+
+她明白了一件事:老公下班不说话,不是不爱她。是他的社交电池耗尽了,需要时间充电。就像手机没电了,你不会对着它发脾气说"你怎么不亮",你只会说"哦,该充电了"。
+
+以前小然会说:"你怎么一回来就板着脸。"
+现在她会说:"你需要休息多久?半小时够不够?"
+
+以前老公说:"你能不能别老烦我。"
+现在他会说:"我累,让我躺半小时,半小时后我过来陪你。"
+
+没有人改变。只是两个人都懂得了对方的"出厂配置",然后调整了预期。以前觉得是在针对自己,现在知道——他只是在他的系统里运行,不是不爱我,是他的省电模式启动了。
+
+这个"电池理论"后来帮了小茜一个大忙。她是小艾的妈妈,也是小付的妻子。她以前辅导小艾作业的时候,经常莫名其妙地焦躁——明明孩子只是做了错一道题,她就会忍不住提高声音。她一直觉得是自己的"脾气不好"。直到她理解了"认知能力"这个概念,她才发现:不是她脾气不好,是她的加工速度比小艾快很多。她看一眼就明白的东西,小艾要想半天,这个"等待"本身就在消耗她的情绪电量。不是小艾的问题,也不是她的问题,是两个不同"配置"的人在同一件事上节奏不一样。
+
+从那以后,她再感到焦躁的时候,不再对自己说"我脾气真差",而是说:"哦,我的电量不足了,我需要休息五分钟。"这五个字的转念,远比压抑情绪有效。
+
+这个转变,就是从"他不对"到"他不同"的转变。
+
+> **金句:理解不是妥协。理解是把"你故意气我"变成"原来你的设定跟我不一样"。**
+
+你不是在原谅对方。你是在明白一件事:他不是你,他不应该跟你一样。这个认知,比任何沟通技巧都管用。因为它从根本上改变了你看待一个人的方式——从"他不对"变成了"他不同"。
+
+在双培强基工程的成人测评跟踪数据中,有一个数据特别有意思:那些在认知测评后夫妻共同做过一次"认知画像"对话的家庭,三个月后对"家庭沟通满意度"的评分平均提升了1.8分(满分10分,数据来源:双培强基工程家庭关系评估报告 2025-2026)。1.8分看起来不大,但对于婚姻关系来说,这相当于从"经常觉得被误解"变成了"大部分时候感觉被理解"。而他们做的事情,只是坐下来看了对方的报告,然后说了一句:"原来你是这样想的。"
+
+有时候,一句"原来是这样"比一百句"我错了"更有力量。因为前者意味着真正的理解,后者只是表面的认输。
+
+小茜后来也做了这件事。她拉着老公一起做了大五人格的自评,发现自己的"神经质"维度偏高——她对情绪变化敏感,容易焦虑。而老公的"神经质"很低,遇到事情他不太容易被情绪影响,看起来就"冷漠"。以前她会想:"我这么着急,你为什么不急?你是不是不关心?"现在她明白了:不是不关心,是他的情绪感知方式跟我不一样。
+
+她没有要求老公变成她想要的样子。她只是不再生气了。
+
+---
+
+## 两个日常方法
+
+讲完了故事和原理,来看两个具体的方法。不需要买课,不需要报班,从今天起就能用。
+
+**第一个方法:周复盘正向反馈法。**
+
+每周日晚饭后,全家人坐在一起。每个人轮流说三件事:这周我做成了一件什么事?做这件事的时候,我用到了什么能力?下周我想在哪方面试一试?
+
+小艾刚开始说的时候,只能憋出"这周我按时完成了作业""这周我没被老师批评"。爸爸说,这也算。两周之后,他说的东西开始变了。"我用三种方法算出了同一道题""我发现自己背古诗比以前快了"。他开始观察自己的学习了,而不只是"完成任务"。
+
+这个方法的重点不在于"做成了什么",而在于"用到了什么能力"。你不是在评价他做得好不好,而是在帮他建立一种认知——我的能力是我可以使用的资源,不是评判我的标签。
+
+在双培强基工程的跟踪数据中,坚持做复盘的家庭里,孩子在A2测评上的平均提升幅度比未做复盘的家庭高出0.6分(数据来源:双培强基工程评估报告 2025-2026)。0.6分看起来不多,但在认知能力的维度上,三个月提升0.6分已经是一个非常显著的变化。
+
+**第二个方法:用开放式提问代替封闭式评价。**
+
+这是最简单、也最难的方法。简单是因为它只需要你改一句话,难是因为它需要你刻意练习。
+
+大多数家长跟孩子的对话是这样的。"作业做完了吗?""做完了。""检查了吗?""检查了。""有没有不会的?""没有。"对话结束。你什么都没了解到。
+
+问题出在你的问题——全是封闭式问题。只用来确认状态,不打开对话。
+
+试试换一种问法。
+
+"今天有没有一道题让你想了好久?"——这个问题让孩子感受到,你关心的不是他对了多少,而是他思考的过程。尤其适合加工速度慢的孩子。你给了他一个机会,让他可以不用急着回答,慢慢想。
+
+"你觉得今天学的什么东西,以后能用得上?"——这个问题帮孩子建立"学习是为了使用"的意识,而不是为了考试。他会开始主动关联学过的知识和生活,这种关联本身就是深度学习的起点。
+
+"如果让你给这个知识点编一个故事,你会怎么编?"——这个问题调动了创造力和联想力,尤其适合空间能力和推理能力强的孩子。你会发现他们的脑回路跟你完全不一样——那种不一样,就是他的天赋所在。
+
+"你现在最想弄明白的一件事是什么?"——这个问题看起来很简单,但它打开了一个巨大的空间。它告诉孩子:好奇心比正确答案更重要。
+
+小茜也试了。她以前问小艾"今天讲到哪里了?听懂了吗?作业是什么?"现在她改成:"今天有什么让你觉得'哇'的事吗?"小艾有时候说没有,有时候会跟她讲一个小细节——科学课上老师做的火山喷发实验,或者同桌说的一句好笑的话。那些细节看似跟学习无关,但它们让小茜看到了一个真实的孩子——不是"学生小艾"、不是"分数小艾",而是"小艾这个人"。
+
+有了这个基础,学习上的事反而好谈了。因为孩子知道:你关心的不只是他的分数,你关心的是他这个人。
+
+还有一个微小的技巧,我亲测有效:当你不知道问什么的时候,就闭嘴,安静地陪他坐五分钟。不用说话,不用指导,就是坐在旁边。有时候,安静的陪伴比一百个问题更有力量。
+
+---
+
+## 慧是看见,不是改变
+
+回到章首那个场景。
+
+小付坐在小艾的课桌旁,台灯的光把两个人的影子拉得很长。小艾说"我不会",小付以前会说"你再想想"——表面上是在鼓励,实际上是在施加压力。现在他会说:"哪一步想不通?"
+
+这五个字的变化,就是"智"这个字在家庭教育中最核心的落地。你没有降低要求,你没有替孩子做题。但你做了一件更重要的事:你走进了他的思考过程,你看见了他卡住的地方。
+
+看见了,就不会把"不会"当成"不努力"。
+看见了,就不会把"慢"当成"笨"。
+看见了,就不会拿"别人家的孩子"来伤自己孩子的心。
+
+"看见"这件事听起来很简单。但你回想一下,上一次你真正"看见"你的孩子——不是看见他的成绩、他的作业、他的表现,而是看见他这个人——是什么时候?
+
+很多家长说不上来。因为我们的眼睛太忙了,忙着看分数、看排名、看"有没有落后"。我们花了太多时间当孩子的"质检员",忘记了当他的"见证人"。
+
+做一个"质检员",你的工作是挑毛病——这里不对,那里不够好,还要再努力。做一个"见证人",你的工作是看到他的努力、他的进步、他的独特。两者最根本的区别是:质检员让孩子觉得自己不够好,而见证人让孩子觉得自己被珍视。
+
+"智",上面是"知",下面是"日"。日日积累,方为智慧。它不是一天取得的成果,而是每天都在使用的能力——理解自己、理解孩子、理解伴侣的能力。它不是把孩子的短板全补上,而是点亮他的长板,让他知道自己在哪里发光。它不是让夫妻变成同一个人,而是让两个人看见对方的不同,然后笑着接纳。
+
+教育的本质,不是填满一个桶,而是点燃一把火。
+
+这把火,不在课外班里,不在试卷上。它在你跟孩子说的每一句话里,在你看他的眼神里,在你愿意退后一步、让他自己选方向的那个动作里。护住这把火,比任何一个高分都重要。因为你护住的,不是一次考试的分数,是孩子一生对自己的信任——"我有能力面对不知道答案的事情。"
+
+那才是真正的底气。
+
+章首那道做不出来的数学题,后来怎么样了?
+
+小艾还是没有变成班上数学最好的孩子。但他变了另一件事:他开始期待爸爸走进他的房间。因为爸爸进来的时候,不再带着"检查作业"的表情,而是坐下来问他:"今天有什么你觉得有意思的事?"
+
+小艾的加工速度还是比别人慢,但他学会了用画图来帮助自己理解题目。小茜有一天发现,小艾的草稿纸上不再是写满了算式又擦掉,而是画了一条路、一个房子、一个小人——他把相遇问题画成了一个故事。那之后,"相遇"和"追及"对他来说不再是抽象的公式,而是"两个人从不同的地方出发,在同一条路上遇到"。
+
+他还是那个记忆力好、加工速度偏慢的孩子。但他的爸爸妈妈,不再是只盯着分数焦虑的家长。他们看到了一个完整的孩子。
+
+关于这个转变,小茜有过一句非常精准的总结,她说:"我以前对孩子的要求是'你快点变好',现在变成了'我慢慢看懂你'。前者让我焦虑,后者让我安心。同一个孩子,同一件事,换了一副眼镜看,世界就完全不一样了。"
+
+小茜跟我说过一句话,我在采访本上划了三条线,又用红笔在旁边画了一个圈:"我花了那么多年担心他不够好,到最后发现,需要改变的不是他,是我看他的方式。"
+
+她停了一下,又说了一句:"如果我早一点知道这些,我和小艾都不会白吃那么多苦。"
+
+这句话我没写进采访本里。但我想把它写在最后。
+
+> **金句:最深的智慧,不是知道所有答案,而是知道每个人都有自己的答案。**
+
+---
+
+## 本章行动卡
+
+这一章的行动卡,问题比答案重要。
+
+### 行动卡一:只观察,不指导
+
+这一周选一个机会,观察孩子做一件有挑战的事。不指导、不评价、不帮忙。回家后问自己三个问题:他卡在哪里的时候,他的第一反应是什么?他是怎么试的?他在什么情况下决定继续或者放弃?不用写分析报告,只是"看见"。然后找一天,跟孩子说一句你观察到的事实——不加建议、不加评价。"我发现你今天搭积木的时候倒了三次又重新开始了。"看看他听到这句话时的表情。
+
+### 行动卡二:把"你真……"改成"你刚才……"
+
+如果你今天要夸孩子,规则只有一条:不准说"你真……"。只能说"你刚才……"。比如"你刚才那道题想了三种方法"、"你刚才自己把书包收好了"。做满七天。如果中间不小心说了"你真棒",没关系,明天继续。重点不是完美,是注意措辞的方向换了之后——孩子的反应有没有不一样。
+
+### 行动卡三:问一个不是"学会了什么"的问题
+
+下班回家、接孩子放学的时候,不问你平时问的那个问题。不问"今天作业多不多"、"今天学了什么"、"考试了吗"。换一个问题——"今天有什么让你觉得有意思的事吗?"或者"今天有没有什么事让你想了很久?"如果他说"没有",不追问,明天再问。重点是让他知道,你关心的不只是一份成绩单。
+
+### 行动卡四:给自己画一张"我不一样的时刻"清单
+
+花十分钟,只回答一个问题:这一周,你在哪个时刻觉得自己"跟平时不太一样"?可能是辅导作业的时候声音突然高了,可能是开完一个会之后特别累,可能是睡前那一刻突然想起了一件以前的事。不用分析为什么,只是记下来。过两周再看——你可能会发现自己比想象中更了解自己。
+
+---
+
+## 金的智慧
+
+五行之中,金排第四位。土(身)厚实了,金才能从矿石中提炼出来。没有健康的身体做基础,所有的能力培养都是空中楼阁。这就是为什么"身"在前,"智"在后。
+
+金给我们的智慧是"从革"——变革。金属在烈火中锻造,在打磨中成形。这是"智"最核心的含义:它不是天生就有的,是在一次次试错、一次次调整、一次次坚持中磨出来的。
+
+智和金还有一个共同点:它们都是工具。金可以做成剑,也可以做成犁。同样的,智可以用于考试,也可以用于理解人、理解世界。关键在于你用它的方向。
+
+如果你把"智"只理解为"孩子要聪明、要考好",那你可能已经走偏了。真正的智,是一套理解系统——理解大脑如何工作,理解一个人为什么是现在这个样子,理解"不会"和"不想"之间的区别。
+
+你焦虑的分数,只是一个时间点上的切片。那张试卷上的数字,十年后、二十年后,没有任何人会记得。但你的孩子在那张试卷前学到的东西——他如何面对困难,他如何看待自己的不足,他敢不敢再试一次,他是否知道自己的优势在哪里——这些,才是真正伴随他一生的智。
+
+而你对他的理解,你给他的那个"我懂你"的眼神,你愿意蹲下来问他一句"你卡在哪了"的耐心,就是他面对未来时,最大的底气。
+
+因为底气不是来自"我什么都会",而是来自"即使我不会,也有人愿意陪我一起想办法"。
+
+智这件事,说到底不是关于"知道多少",而是关于"愿不愿意理解"。愿意理解孩子的大脑为什么跟别人不一样,愿意理解伴侣的反应为什么跟自己不一样,愿意理解自己的情绪从哪里来。这种理解的意愿,比任何知识都重要。因为知识可以被遗忘,可以被更新,但"我愿意理解你"这个态度,是一份永远不会过期的礼物。
+
+---
+
+> **本章数据来源说明:**
+> - A2六维认知能力测评体系:双培强基工程DAN素质能力评估系统
+> - 自我决定论(三感框架):Edward L. Deci & Richard M. Ryan, "Self-Determination Theory", 1985
+> - 成长型思维实验:Carol Dweck, "Mindset: The New Psychology of Success", 2006
+> - 复盘家庭A2测评提升数据:双培强基工程评估报告 2025-2026
+> - 大五人格模型:McCrae & Costa, "NEO-PI-R", 1992
+> - 案例均为真实故事脱敏改写,人物使用化名
+
+
+========================================
+  第五章-富-内容草稿.md
+========================================
+
+# 第5章:富——利他创富,家庭经济的第二曲线
+
+> **五行属水** | 水善利万物而不争,富在利他中生长
+>
+> 与第3章(身)形成对照:身是"省"(健康就是省钱),富是"生"(创造增量)
+> 与第4章(智)形成递进:智是积累能力,富是把能力变现
+
+---
+
+## 工资到账那天
+
+工资到账那天,她盯着短信看了三秒钟。数字没变,心情却比上个月更沉。
+
+房贷扣掉,车贷扣掉,孩子的英语班续费,剩下那点钱,撑不到月底。这不是月光,这是被生活追着跑。她打开记账App,翻了翻上个月的支出——外卖、打车、孩子的玩具、随手买的奶茶。没有一笔是"不该花的",但每一笔都让那个数字少一点,再少一点。
+
+她想起上个月刷到的一条小红书笔记,标题写着"记账第一分钟"。博主说:记账不是为了省钱,是为了看见钱的流向。看不见的东西,你就管不了。
+
+她觉得这话说得对,但又觉得不对。看见了然后呢?看见了就能多出来吗?
+
+这个问题,其实问到了"富"这个字最让人困惑的地方。
+
+我们从小被教育要节俭,要省钱,要攒钱。但这些事做了十几年,大部分人依然觉得"不够"。不是因为不努力,而是因为我们一直在做减法——省这个、省那个,省到最后,那个饼不会变大,只会越来越薄。
+
+如果"身"是说守住基本盘,那"富"要回答的是另一个问题:怎么把这个饼做大?
+
+答案不在省钱里。答案在一个你可能从未认真想过的地方:**利他**。
+
+---
+
+## 利他创富:一个反常识的起点
+
+先说一个故事。
+
+小付的爸爸在一家制造业公司做中层管理,干了大半辈子,专业是供应链。他不是销售,不是创业者,就是一个上班族。四十岁那年,公司裁员,他虽然没被裁,但那种"随时可能被优化"的感觉让他整夜睡不着。
+
+他试着找副业。送过外卖,跑过滴滴,做过微商。都挣了点钱,但每一样都让他觉得自己像一个零件——在别人的系统里转,停了就停了。
+
+转折点发生在一个很普通的夜晚。朋友打电话来,说自己想开个小餐饮店,问小付爸供应链的事。"你在工厂干了二十年,帮我看看这个进货价合理吗?"
+
+小付爸花了十五分钟看了看报价单,指出了两个明显有问题的品类,又告诉朋友去哪几个批发市场比价。朋友千恩万谢,非要请他吃饭。
+
+那顿饭上,朋友说了一句话:"你这些东西,如果愿意教给别人,有人愿意花钱学。"
+
+小付爸当时没当真。但这句话在他脑子里转了三天。
+
+如果你也处在一个"工资够用但不够安心"的状态,小付爸的故事里藏着一个关键问题:**你帮过别人什么忙,别人觉得有用?**
+
+这不是在问你有什么特长。这是在问你:别人在哪些事上找过你帮忙?
+
+我们常常不知道自己有什么价值,是因为我们把"价值"想得太高——以为得是能上简历的那种,得是写在职业资格证上的那种。但利他创富的第一步,恰恰不是盯着自己看,而是看别人需要什么。
+
+---
+
+## 第一步:找到你的利他优势
+
+"我好像没什么特长。"这是大多数人面对"搞副业"这个话题时的第一反应。
+
+但利他优势不是特长。它的定义很简单:**别人觉得你帮到他的那件事。**
+
+你可以做一个小练习。拿出一张纸,写下这三个问题的答案:
+
+1. 过去半年,别人在什么事上找过我帮忙?(哪怕是问个路、教个操作)
+2. 别人经常跟我说"这个你懂"的事是什么?
+3. 我做哪件事,做完了别人会说"谢谢"或者"你真厉害"?
+
+你会发现,答案比你以为的多。
+
+小然的妈妈是全职主妇,每天的生活就是买菜、做饭、接送孩子。她自己都说"我啥也不会"。但有一次,邻居家的小孩在她家玩,她看那孩子情绪不太好,就蹲下来跟他聊了几句。那孩子回家跟妈妈说:"阿姨听我说话的时候,我觉得好多了。"
+
+后来,邻居妈妈在家长群说了一句:"有什么烦心事,找小然妈聊聊,她特别会安慰人。"
+
+这句话像一颗种子。最开始,她只是偶尔在微信上陪几个妈妈聊聊天。后来有人跟她说:"姐,你能不能每周抽时间跟我聊一次?我觉得聊完特别好。"
+
+她不知道怎么定价,就说"你看着给吧"。对方发了一个红包。
+
+你可能会说,这不就是聊天吗?对,就是聊天。但聊天是服务,安慰人是能力,让人愿意为你的安慰付费,就是产品。
+
+**利他优势不是天赋,是别人从你这里获得过的价值。**
+
+它往往藏在你最不在意的地方——你觉得那是"举手之劳"的事,对别人来说可能是"帮了大忙"的事。
+
+---
+
+## 第二步:能力产品化
+
+找到利他优势之后,下一步不是开公司、做App、上架电商平台。产品化这三个字听起来很重,但本质很简单:**把你的利他经验封装成别人可以直接用的东西。**
+
+分三个层次,由浅入深:
+
+**第一个层次:经验分享(免费)**
+
+把你知道的、做过的、帮到过别人的事,说出来。可以在朋友圈写一段话,可以在妈妈群回答一个问题,可以在饭桌上讲一个案例。这个层次不赚钱,但它帮你做两件事:验证你的内容是不是真的对别人有用,以及让别人知道"这个事你懂"。
+
+**第二个层次:方法输出(低价)**
+
+当"免费分享"已经有人追着看了,你可以往前走一步:把经验打包成方法。可能是一份清单,可能是一个简单的步骤指南,可能是一篇500字的小教程。价格不重要,重要的是建立了"付费"这个关系——这意味着对方认可了你提供的价值。
+
+**第三个层次:服务交付(定价)**
+
+到这个层次,你已经有了被验证的方法,有了一批认可你的人。这时候可以做付费服务。不需要大而全,一门课、一个咨询、一个陪伴周期,都可以。价格由市场说了算——你能解决别人的痛点,别人就愿意为这个解决方案付费。
+
+这里有一个关键认知:**不是每个利他优势都需要走到第三个层次。** 有些人分享经验就很快乐,那就停在第一层。有些人喜欢做一对一服务,那就停在第二层。重要的是,你知道自己有选择。
+
+小付爸的故事就是这样展开的。他从免费帮朋友看报价单开始,到后来在朋友圈写了三篇供应链入门的小文章,再到有人私信问他"能不能帮我审一下合同"。四个月后,他在知识星球开了一个付费专栏,专门帮小微创业者对接靠谱供应商。订阅费不贵,但每个月的收入已经赶上他三分之一的工资。
+
+而他做的所有事,不过是把他每天在公司里干的事,换了一个方式告诉需要的人。
+
+---
+
+## 第三步:从利他到创富
+
+这一步要解决一个很多人心里过不去的坎:**利他和赚钱,到底是不是矛盾的?**
+
+从小到大,我们听到的关于"钱"的说教大多带有负面色彩。谈钱伤感情,利己是自私的,赚钱是俗气的。但如果你认真想想,那些赚了钱还让你佩服的人,他们做了一件什么事?
+
+他们让别人的生活变好了。
+
+医生赚钱,是因为她治好了你的病。老师赚钱,是因为他教给了你知识。一个做保洁的阿姨赚钱,是因为她把你的家打扫干净了。一个做保险咨询的人赚钱,是因为他在你最需要帮助的时候帮你拿到了理赔。
+
+**钱不是目标,是价值的度量衡。你让别人的生活变好了多少,钱就是那个刻度。**
+
+所以利他和创富不是对立面。它们是同一条河的两岸。当你做的事情真的帮到了别人,别人愿意用钱来交换你的价值,这不是铜臭,这是市场在说"谢谢"。
+
+来看这个飞轮:
+
+```
+利他 → 信任 → 口碑 → 更多利他机会 → 能力提升 → 更大价值 → 更多回报
+```
+
+这个飞轮最妙的地方在于,它不需要你额外"找"客户。每一次利他,都是在为下一次机会播种子。你帮了一个人,那个人会告诉他身边两个需要帮助的人。信任会缩短每一次成交的距离,口碑会降低每一次获客的成本。
+
+这就是家庭经济的第二曲线。
+
+第二曲线不是让你放弃主业。你还是你,班还是上,生活还是过着。但在这条主线的旁边,有一条新的曲线正在生长——它从你的利他能力出发,慢慢变成一种可能性。开始的时候它很弱,可能一年只贡献几万块。但它是你的,不依赖于任何公司、任何平台。它的增长取决于你的价值,而不是别人的评价。
+
+---
+
+## 案例一:那个"最会安慰人"的妈妈
+
+(基于真实故事脱敏改写)
+
+小然发现自己的"超能力"是在一个很普通的下午。
+
+那天她在小区遛娃,遇到一个妈妈在长椅上抹眼泪。她犹豫了一下,还是走过去坐下,什么都没问,只是安静地陪着。过了很久,那个妈妈自己开始说话。说带孩子的累,说老公的冷漠,说自己已经很久没有睡过一个整觉。
+
+小然没有给建议,没有说"你应该怎样怎样"。她只是听着,偶尔拍拍对方的背。
+
+那次之后,那个妈妈加了她的微信。后来又在小区碰到几次,每次都会跟她聊很久。再后来,那个妈妈介绍了好几个朋友来找小然聊天。
+
+"她们说跟我聊完心里舒服多了。"小然跟我说这句话的时候,自己都觉得不好意思。"我就是听她们说说话,也没做什么。"
+
+但正是这个"没做什么",就是别人最需要的。
+
+在浠艾福的家庭调研中,我们发现一个有意思的数据:**"被倾听的需求"在家庭关系满意度指标中排名前三,而"有人愿意认真听我说话"这个指标的得分,在参与调研家庭中平均只有4.9分(满分10分)**。(数据来源:浠艾福家庭健康报告 2026H1)
+
+一个人最大的需求,有时候不是被解决问题,而是被看见、被听见。
+
+小然后来做了一个"妈妈倾听角"。头三个月免费,就当是陪人聊天。第四个月开始,有人主动问她:"我能给你转个红包吗?"她没收,但那个月里,有六个妈妈不约而同地给她寄了礼物。
+
+六个月后,她在自己的微信小号上挂了一个付费服务:每周一次视频通话,一次30分钟,每月收费99元。不打折、不打包、不做套餐。就一件事:陪你聊。当你觉得心里堵得慌的时候,你知道有一个人在电话那头,认真听你说。
+
+我问她这个服务叫什么名字。她说:"叫'我在'。"
+
+到今天,这个"我在"服务有17个固定用户。不是大生意,但每个月的收入可以覆盖她家的买菜钱。更重要的是,她不再觉得自己是"那个没有工作的全职妈妈"。
+
+"我做的事,有人愿意为它付费。"她说这话的时候,眼睛里有光。
+
+---
+
+## 案例二:把保险条款读出第二收入
+
+(基于真实故事脱敏改写)
+
+小付的爸爸叫张哥,四十出头,在一个制造企业做中层。他的故事开头我们已经讲过了。这里说说他是怎么一步步走过来的。
+
+张哥做事有个特点:认真。认真到有点轴那种。几年前给家里买保险,他硬是花了两周时间,把三家保险公司的条款从头到尾读了一遍,做了对比表,还写了一篇几千字的分析文档。发在家庭群里,亲戚们都说"看不懂",但都说"既然你看过了,跟着你买就行"。
+
+后来逢年过节,总有亲戚拿着保险合同来找他:"张哥,你帮我看看这个保不保?"
+
+他每次都认真看,认真讲。不收钱,就是帮个忙。
+
+转折在去年。一个亲戚的朋友听说了,辗转找到他,说想咨询重疾险。聊完之后,对方往他微信上转了500块钱,说"您必须收下,您讲得比卖保险的清楚一百倍"。
+
+他推了几次,没推掉。那500块钱在微信上躺了三天,他后来收下了。
+
+然后他想了一个问题:既然有人愿意为"看懂保险条款"这件事付费,那能不能把它做成一个产品?
+
+他开始在周末接咨询。每次一小时,收费200元。帮对方梳理已有的保单,分析缺口,给出建议。不做销售,不推荐具体产品,只做分析和科普。因为他在体制内,这件事他一直做得很低调。
+
+但咨询量在涨。第一个月接了3单,第二个月7单,第三个月15单。他开始觉得时间不够用了。
+
+于是他做了一份《家庭保险自检手册》——把自己这几年看条款的核心逻辑,提炼成了一份20页的PDF。配上三个真实案例(脱敏处理),定价49.9元。购买的人如果需要进一步咨询,可以再加购优惠价。
+
+这份手册上线第一个月卖出了86份。
+
+不是暴富,不是财务自由。但他跟我说过一句话让我印象很深:"每个月的工资是给老板的交代。每个月卖手册和接咨询的收入,是我给自己的交代。"
+
+---
+
+## 别画愿景图,画资源全景图
+
+你肯定见过这个建议:找个安静的时间,闭上眼睛想象——你理想中的生活是什么样的?房子、车子、存款、旅行的样子……然后把它画下来,贴在床头,每天看。
+
+这就是"愿景图",市面上很多成功学和激励课程的核心方法。很多人画了,但画完之后呢?有的人觉得"看看就开心",有的人看了三个月之后更焦虑了——因为那张画上的生活,跟眼前的现实差距太大了。想象不是动力的时候,它就是压力。
+
+我不是说愿景没有用。但我想给你一个更有效的方法。
+
+**不画你想要但还没有的东西,画你已经有的东西。**
+
+这听起来太朴素了,朴素到你觉得"这也能算方法?"但你先试一次,你就会明白它的力量——当你认真盘点自己拥有的一切时,你不需要去追逐一个想象中的自己,你只需要把已经有的东西用好。
+
+这个方法,我管它叫"资源全景图"。
+
+听完上面两个故事,你可能在想:我知道利他创富有道理,但从哪里开始?
+
+先别想产品,别想定价,别想商业模式。先画一张家庭资源地图。
+
+找一张大一点的纸。每个家庭成员一列,写下三样东西:
+
+| 成员 | 我会的 | 我有的 | 我喜欢的 |
+|:----:|:------:|:------:|:--------:|
+| 我 | | | |
+| 伴侣 | | | |
+| 孩子(可选) | | | |
+
+- **"我会的"**:包括专业技能,也包括生活技能。会做饭、会修图、会 Excel、会安慰人、会养花、会做攻略。都是"我会的"。
+- **"我有的"**:资源。时间(下班后的两小时)、人脉(做医生的同学、做财务的闺蜜)、物品(相机、打印机)、空间(闲置的房间)。
+- **"我喜欢的"**:这不是为了"有用",而是让你知道做这件事你开不开心。不喜欢的事情,再赚钱也做不长久。
+
+画完之后,找交叉点。你"会的"和"有的"之间有没有结合的可能?你"会的"和别人"需要"之间有没有对上?你"喜欢的"和你"会的"之间有没有交集?
+
+那个交叉点,就是你的利他起点。
+
+不一定大。甚至可能很小。但它是真实的——它来自你自己的能力和经验,不是市场报告上的趋势。
+
+---
+
+## 最小闭环验证
+
+有了起点之后,怎么知道它能不能走通?
+
+试。但不花成本地试。
+
+最小闭环验证的流程很简单:
+
+**第一轮:免费帮3个人。**
+
+这3个人最好是你认识的、信任你的、愿意给你真实反馈的人。告诉他们你想做什么,问问他们有没有这个需要。如果有,你免费帮他们做一次。做完之后问三个问题:
+
+1. 你感觉有用吗?(有用/一般/没用)
+2. 如果让你付费做这个,你愿意吗?(愿意/不太确定/不愿意)
+3. 你觉得哪里可以更好?
+
+**第二轮:根据反馈优化。**
+
+如果有人说不愿意付费,不是你的方法不对。可能是你的问题找得不准,可能是你的形式不对,可能是你的目标客户不是这批人。根据反馈改一次,然后找下一批3个人。
+
+**第三轮:试着定一个价。**
+
+同样的服务,告诉对方"这次试一个付费版本"。不需要贵。一杯奶茶的价格,一个午餐的价格都可以。有人愿意付,说明这条路走得通。没有人付,不代表不行——回去调整,再试一次。
+
+张哥的保险咨询就是这样来的。最开始免费帮熟人看条款,后来熟人觉得好,帮他介绍付费客户。小然的倾听服务也是这样。先免费陪聊三个月,有人主动提出付费,她才开始定价。
+
+利他创富不是一步登天。它是一步一步走出来的,每步不用太大,但要走得稳。
+
+---
+
+## 财务健康自检
+
+最后,让我们回到一个更根本的问题。
+
+你的家庭财务,到底健不健康?
+
+这里说的不是"你有多少存款",而是一个更底层的东西:**家庭经济韧性**——当不确定性来临时,你的家庭经济系统能扛多久?
+
+下面这五个问题,你可以拿一支笔,诚实地回答。不用给任何人看,给自己看就行。
+
+**1. 如果明天你失去主要收入来源,你的家庭能维持现状生活几个月?**
+- 3个月以上 → 良好
+- 1-3个月 → 一般
+- 不到1个月 → 需要关注
+
+**2. 除了工资性收入,你们家有没有其他进账渠道?(哪怕很少)**
+- 有,而且稳定 → 良好
+- 有,但不稳定 → 一般
+- 没有 → 需要关注
+
+**3. 你清楚知道自己上个月的每一笔大额支出去了哪里吗?**
+- 很清楚 → 良好
+- 大概知道 → 一般
+- 不知道 → 需要关注
+
+**4. 你家有没有一个不需要动用、专门用来"兜底"的钱?**
+- 有,并且和家人达成共识 → 良好
+- 有,但没商量过 → 一般
+- 没有 → 需要关注
+
+**5. 你觉得自己做的事情,除了领工资,有没有长期积累的价值?**
+- 有,正在积累 → 良好
+- 有想法但没行动 → 一般
+- 没想过 → 需要关注
+
+五个问题里,如果你的答案大多是"需要关注",恭喜你——不是讽刺,是真的恭喜。因为意识到了问题,你就有了改变的方向。最怕的不是没有,而是不知道自己没有。
+
+---
+
+## 本章行动卡
+
+这一章的行动卡,不是为了让你"更会赚钱"。是让你看见——你已经有了很多。
+
+### 行动卡一:回答一个"给"的问题
+
+今晚睡前问自己一个问题:如果今天我帮了谁——不是"应该帮"的那种,是"顺手就做了"的那种——那是谁?什么事?如果没有,也没关系。明天出门的时候留意一下:有没有一个瞬间你需要决定"帮不帮"——然后试着选"帮"。不用多,一次就够了。
+
+### 行动卡二:找一笔"没感觉"的钱
+
+这个月打开你的支付记录,找一笔花了但完全没感觉的钱。不是大钱,是那种"花了跟没花一样"的。一杯咖啡?一个自动续费?别急着取消,先看见它。然后问自己:如果这笔钱不花,换成另一个让我更有感觉的用法——我会换成什么?
+
+### 行动卡三:问自己一个"如果"的问题
+
+如果有一天你不需要靠现在的工作赚钱了——你会做什么?不是"环游世界"那种遥远的答案,是那种"如果明天就不用上班了,你可能还是会做"的事。想不出来也没关系。这个问题的作用,不是让你现在找到答案——是让你开始往那个方向看。
+
+---
+
+## 水的智慧
+
+五行里,水排在第四位。
+
+土(身)厚德载物,金(智)锐意进取,然后才是水(富)。这个顺序不是偶然的。没有健康的身体打底,没有能力的积累,财富就像沙滩上的城堡,潮水一冲就散。
+
+而水教给我们的事,远超"赚钱"这两个字。
+
+水不争。它往低处流,找最不起眼的地方,润物无声。利他创富的精神就在于此——你不需要挤破头去抢蛋糕。你只需要找到那些别人没注意到的小需求,像水一样渗透进去,解决它。你让别人好了,别人也会让你好。
+
+这不是鸡汤,这是商业最古老的逻辑:**你创造的价值越大,你得到的回报越多。**
+
+唯一的问题是,你愿不愿意相信,你的价值比你以为的大。
+
+工资到账那天,那位妈妈盯着短信看了三秒钟。如果她只盯着那个数字,她会一直焦虑下去。但如果她开始想"我能为别人做点什么",那个数字会发生奇妙的变化。
+
+不是一夜之间暴涨。但每一次利他,都是在往那个数字上加一个小数点。日积月累,那个小数点会变成一位数,一位数会变成两位数。
+
+> **水不争,故莫能与之争。**
+
+---
+
+> **本章数据来源说明:**
+> - "被倾听需求"调研数据:浠艾福家庭健康报告 2026H1
+> - "记账家庭儿童财商+19分":浠艾福家庭健康报告 2026H1,n=246
+> - "看不见的就管不了":引用自魏高峡老师观点
+> - 案例均为真实故事脱敏改写,人物使用化名
+
+
+========================================
+  第六章-行-内容草稿.md
+========================================
+
+# 第6章:行——人际和谐,以关系滋养幸福
+
+**五行属木 | 木曰曲直,行贵在舒展通达**
+
+---
+
+你有没有过这种时刻——对着外人笑了一整天,推开家门的那一秒,脸就垮下来了。
+
+在外面,你是好脾气的同事、有礼貌的朋友、耐心的客户。你可以跟一个陌生人聊半小时,耐心解释、认真倾听、保持微笑。可回到家里,孩子多叫两声"妈妈"你就烦了,伴侣问一句"晚饭吃什么"你就不耐烦了,父母多叮嘱两句你就炸了。
+
+这不是你的错,但这是你的问题。
+
+这本书讲到这里,我们已经聊了身体健康(身)、面向未来的能力(智)、家庭财富的积累(富)。但如果我们把前面的所有方法都用上了,回到家却没人说话、没人理解、没人愿意靠近你——那一切又有什么意义?
+
+**"行"这个维度,回答的是一个问题:除了血缘和法律关系,你用什么把家人真正连接在一起?**
+
+五行之中,木曰曲直——树木的生长不是一条直线,它要弯曲、要伸展、要穿过石缝去寻找阳光。人际关系也一样:没有一条路是笔直的,没有一段关系是不需要弯下腰去经营的。
+
+本章的核心框架,我把它叫作**家庭和谐三原色**:
+
+- **亲子关系**:从控制到陪伴
+- **夫妻关系**:从合伙人到同行者
+- **社交关系**:从应酬到滋养
+
+三种关系,就像红绿蓝三原色。每一种单独存在都有限,但当它们调和在一起,就能发出温暖整个家庭的光。
+
+---
+
+## 一、亲子关系:从控制到陪伴
+
+先说你最关心的这段关系——你和孩子。
+
+### 你以为是爱,其实是焦虑
+
+有一次,小艾跟我说:"我妈对我特别好,每天给我做三顿饭,接送我上学,给我报最好的补习班。但她从来不问我今天开不开心。"
+
+我问他:"那你希望她问什么?"
+
+他说:"我希望她能问——你今天有什么想跟我说的?而不是——今天作业写完了没有。"
+
+这个场景你太熟悉了。我们管这叫"关心",孩子管这叫"检查"。
+
+有数据说,78%的孩子认为"爸妈不关心我的感受"。但同一个调研里,100%的家长都认为自己"非常关心孩子"。在一项针对200多个家庭的跟踪研究中,孩子对家庭归属感的平均评分只有2.0分(满分10),而三个月后,通过几个简单的亲子互动调整,这个数字上升到了7.3。
+
+问题出在哪?**出在我们把"控制"当成了"爱"的等价物。**
+
+控制背后的驱动力是什么?焦虑。怕孩子输在起跑线上,怕他不努力将来吃苦,怕他走弯路。这些怕,投射到亲子关系里就变成了:你要听我的、按我说的做、别让我失望。
+
+孩子感受到的不是爱,是不信任。
+
+### 陪伴的三个具体动作
+
+**1. 每日15分钟"无条件关注时间"**
+
+不是陪写作业(那是监督),不是陪上兴趣班(那是接送),也不是一边刷手机一边坐在孩子旁边(那是物理共存)。
+
+"无条件关注"的意思是:这15分钟里,孩子说了算。他玩什么你就跟他玩什么,他想聊什么你就听什么。你不评判、不指导、不纠正。你只需要做一件事:专注地看着他,让他感觉到——此刻你是完全属于他的。
+
+**2. 角色交换游戏**
+
+每周一次,你当孩子,孩子当家长。让孩子来安排这30分钟做什么、吃什么、几点做什么事。
+
+你会发现两件事:第一,孩子模仿你的语气时,你会看到自己在ta眼中的样子——这可能有点扎心。第二,孩子其实远比你以为的更有主见。
+
+**3. 愿望清单共创**
+
+跟孩子一起写一份愿望清单。不是"考前三名就给你买什么"这种条件交换,而是"我们一起________"的填空。
+
+"我们一起养一盆花""我们一起看一次日出""我们一起做一顿奇怪的晚餐"。重点不是做到什么,是"一起"。
+
+> **金句:** 真正的陪伴不是你在孩子身边,而是你让孩子感觉到——你虽然不在身边,但他一伸手,就能抓到你。
+
+---
+
+## 二、夫妻关系:从合伙人到同行者
+
+现在,让我们聊一件你很少跟人聊的事——你和伴侣的关系。
+
+### 那个无话可说的夜晚
+
+小然结婚八年了。
+
+她说有一天晚上,孩子终于睡了,她坐在沙发上刷手机,丈夫坐在另一头看手机。两个人之间隔了大概一米。一个小时,没有说一句话。
+
+不是吵架了。不是冷战。就是——没话说。
+
+她想了一下,上次两个人认真聊天是什么时候。不是聊孩子、不是聊钱、不是聊周末去哪儿。是聊"你最近在想什么"——这种对话。她想了很久,想不起来。
+
+这不是小然一个人的故事。这是无数中国家庭的常态。
+
+结婚多年,对话慢慢浓缩成了一个"事务清单":
+- "孩子作业写完了吗?"
+- "这个月的房贷还了吗?"
+- "周末去我妈家还是你妈家?"
+- "燃气费交了吗?"
+
+你看,你们把家庭经营得井井有条,像两个优秀的合伙人——分工明确、执行力强、各司其职。但你有没有感觉,少了什么?
+
+**少了"我们除了是这个家的CEO和CFO,我们还是什么"这个答案。**
+
+### 从"家庭合伙人"到"人生同行者"
+
+我听过一个很形象的比喻:有些夫妻把家当成了一家公司。你是行政总监,他是财务总监,孩子是"核心项目"。你们合作默契,但公司经营得再好,CEO和CFO之间也不一定有关系。
+
+合伙人的关系基础是"分"——你负责A,我负责B。同行者的关系基础是"合"——我想去的地方,你也想去。
+
+怎么从合伙人变成同行者?不是换一个人,而是换一种相处的逻辑。下面三个方法,是经过很多家庭验证的。
+
+### 方法一:每周30分钟"不谈家事"的对话
+
+约定每周一个固定时间——可以是周六送完孩子上兴趣班后的咖啡馆,可以是周日晚上的阳台——30分钟,只聊一件跟家庭事务无关的事。
+
+规则很简单:
+- 不聊孩子(表现、作业、兴趣班)
+- 不聊钱(收入、支出、房贷)
+- 不聊家务(谁洗碗、谁打扫)
+- 只聊:你最近在想什么?你最近有什么困惑?你最近有没有什么新的想法?
+
+你会发现,当你把"家庭事务"这层硬壳剥掉之后,你们之间还有没有话可以说。
+
+开始的时候可能会尴尬。你们可能面面相觑,不知道聊什么。这是正常的——因为你们已经太久没有以"两个独立的个人"的身份对话了。
+
+如果实在不知道怎么开头,可以试试这些问题:
+- "如果接下来一年我们家可以只做一件事,你觉得应该是什么?"
+- "你最近有没有什么特别想做的事?"
+- "你觉得我们现在的生活,跟你十年前想象的有什么不一样?"
+
+这些问题没有标准答案。但答案不重要,重要的是——你们在问彼此。
+
+### 方法二:共同创造"第三空间"
+
+什么是"第三空间"?家庭和工作之外,一个只属于你们两个人的精神角落。
+
+它不一定是物理空间。它可以是一件你们一起做的事,一个你们共同的兴趣,一个跟孩子无关、跟赚钱无关的项目。
+
+比如:一起学一门课(烹饪课、摄影课、甚至是一门外语),一起种一个阳台花园,一起追一部每周更新的剧然后认真讨论,一起跑步然后互相打卡。
+
+有一位丈夫跟我分享过他的体会。他和妻子一起报名了一个周末陶艺班。他说:"每周六下午的两个小时,我们谁都不提孩子。就一起捏泥巴。有时候捏出来的东西很丑,两个人笑到肚子疼。那种感觉像回到了谈恋爱的时候。不是陶艺多有意思,是我们终于有了一个不用'当父母'的地方。"
+
+这就是第三空间的意义。它给了你们一个出口——从"爸爸""妈妈"这两个身份里出来,重新做回"男人"和"女人"。
+
+### 方法三:关系温度计
+
+每月一次,互相给对方的关系温度打分。1到10,10是"非常满意",6是"及格"。
+
+规则也很简单:
+- 各自打分,然后交换
+- 不争论"为什么你打这么低"
+- 低于6分的一方需要触发一次深度对话
+- 深度对话的目的不是分对错,是互相理解
+
+有一个很有意思的现象——很多夫妻打完分才发现,"我以为我们关系挺好的"和"他觉得我们关系出问题了"同时存在。温度计的价值就在于此:它让那些平时没法开口的话,有了一个开口的契机。
+
+有一位丈夫说,他给打了5分,妻子打了9分。交换分数的时候,妻子很惊讶:"我一直觉得我们挺好的啊。"他说:"你每天跟我说的话,加起来不如你跟同事说的多。"那天晚上他们聊到了凌晨两点。不是吵架,是真的在说话。那是他们结婚五年来第一次真正意义上的对话。
+
+### 案例:从合伙人到同行者——小付和小茜的故事
+
+小付和小茜结婚十年。有一段时间,他们之间的对话完全被"家庭运营"占据——谁接孩子、谁交水电费、暑假去哪。两个人像一家公司的两个部门经理,关系流畅但毫无温度。
+
+转折点是小茜生日那天。小付问她想要什么礼物。她说:"我想跟你喝杯咖啡,不说话也行。"
+
+小付听出了话里的意思。
+
+他们约定,每周六送完孩子去补习班之后,在楼下那家咖啡店坐一小时。手机静音。不聊孩子、不聊钱、不聊家务。
+
+前两周很难熬。前两周两个人真的几乎没什么话好说——各自发呆,偶尔找话题,聊两句又断了。小付说:"那时候我才意识到,我们已经太久没有不聊'正事'了。我们连怎么闲聊都不会了。"
+
+第三周,小茜试着问了一个问题:"你觉得你现在的状态怎么样?我不是问你累不累,是问你——你快乐吗?"
+
+小付愣住了。不是因为这个问题有多深奥。是因为——十年来没有人问过他这个问题。他自己也没问过自己。
+
+他沉默了很久。然后问了一句:"那你呢?"
+
+小茜也愣住了。她想了想,说:"我好像很久没想过这个问题了。"
+
+那天他们聊了三个小时。说起了各自的理想、各自的疲惫、各自那些"算了不说了"的念头。小付发现,那天他几乎没有给过任何建议——他只是问,然后听。小茜说:"那天我发现,我其实并不完全了解我身边的这个人。"
+
+三个月后,他们的咖啡约会成了一种习惯。后来他们又一起报名了一个周末的摄影课。小付说:"摄影课的作品好不好不重要,重要的是我们终于有了一件'一起做'、'不用带孩子'、'不用考虑性价比'的事。"
+
+现在他们的关系温度从5分变成了8分。小茜说了一句很朴实的话:"他没什么变化,我也没什么变化,但我们的关系变了。"
+
+### 深度理解:为什么你懂了那么多道理,还是处理不好夫妻关系?
+
+小茜在转变过程中说了一句关键的话——"我其实并不完全了解我身边的这个人。"
+
+这句话值得停下来想一想。我们以为结了婚十年,就自然了解了对方。但你真的了解吗?你了解的不是"他",你了解的是"他在婚姻中的角色"——他会做什么、不会做什么、生气了是什么样子。但你不一定了解他作为一个"人"的底层特质。
+
+这里的突破口,来自一个你可能意想不到的地方——孩子的测评报告。
+
+双培强基工程的DAN测评体系不仅适用于孩子,它背后的逻辑对所有年龄段的人都成立。这个测评包含认知能力(感知觉、注意力、记忆力、推理能力、空间能力、加工速度)和人格特质(大五人格:开放性、宜人性、外倾性、神经质、责任心)。当你把这些维度用在成人身上,很多夫妻矛盾突然就有了新的解释。
+
+举一个很常见的场景。很多妻子会抱怨:"我脸色都变了,他完全看不出来。"
+
+过去我们把这解释为"他不关心我""他不在乎我的感受"。但如果你从认知能力的角度看,可能有另一个答案:**他的感知觉处理能力天生没那么强。**
+
+感知觉是人类接收和加工感官信息的基础能力。有的人天生对视觉信号(表情、语气、身体语言)敏感,有的人则更依赖语言信号——你不说出来,他真的接收不到。这不是态度问题,是硬件配置问题。
+
+同样,注意力分配方式也因人而异。有的人可以一边刷手机一边听你说话,有的人不行。当他在看手机时没回应你的话,不是不爱你了,是他的注意力系统不支持"双通道并行"。
+
+还有大五人格中的"开放性"——有的人天生对新事物、新观点持开放态度,有的人则偏好稳定和熟悉。开放性低的人不是故意固执,而是他的大脑对"变化"的处理成本本来就高。你越催他改变,他越紧张,越变不了。
+
+当小付知道这个逻辑后,他做了一件很有意思的事。他让小茜和小然都做了一份简化版的认知能力自评。结果发现,小付的感知觉得分确实偏低,而他的"责任心"得分极高。也就是说:他不是不关心你,他是用"责任心"(记得交水电费、记得接孩子)来表达关心,而不是用"感知觉"(看脸色、察言观色)——这两种方式没有高低之分,只是配置不同。
+
+那之后,小茜跟我说了一句话,我觉得可以作为这一节的最佳注脚:
+
+> **"他不是变了,是我终于知道他本来就是这样的人。而知道这一点,就够了。"**
+
+**理解不等于纵容,但理解是包容的前提。** 当你不再把对方的行为解读为"故意的""不在乎你",而是理解为"他的认知方式就是这样",很多架还没吵起来,就已经消了一半。
+
+### 方法四:吵架中的"目标停止法"
+
+前面我们说了很多"怎么让关系变好",但生活中还有一个避不开的课题——**吵架本身怎么处理。**
+
+小然和她先生有一段时间经常因为带孩子的分工吵架。小然觉得自己带得多,先生做得少。越吵越委屈,越委屈越翻旧账——从"你今天没洗碗"吵到"你去年答应我的事也没做到"。
+
+后来有一次,小然在情绪快要爆发的时候,突然停下来问了一句:
+
+**"我们现在吵架,目的是什么?"**
+
+先生愣住了。他想了想说:"我其实不想吵,我就是觉得……你刚才那句话让我觉得我的付出你都没看见。"
+
+小然也愣住了。原来他气的不是孩子的事,是委屈——他觉得自己的付出没被看见。而小然气的也不是分工,是累——她真的需要帮手。
+
+小然这时候有很多话想说——她可以解释"我那天不是那个意思",可以反驳"你也没看见我的付出",可以建议"那我们重新分工"。但她什么都没说。她只是等了一下。
+
+先生过了一会儿自己开口了:"其实我们重新排一下时间表就行,我就是需要你……说一句你知道了。"
+
+两个人发现,他们吵的根本不是同一件事。
+
+这就是"目标停止法"的核心:**在吵架的过程中,任何一方停下来,问出那个问题——"我们吵这个的目的是什么?"**
+
+这一问,至少做对了三件事:
+
+1. **打破情绪螺旋**。吵架之所以越吵越凶,是因为情绪脑(边缘系统)接管了大脑,形成了"你凶→我更凶→你更更凶"的正反馈循环。这时候需要一个"外来信号"来打断它。一句话就够了——因为理性思考(前额叶)需要被激活,而提问是最有效的激活方式。
+
+2. **暴露真正的问题**。很多时候我们吵的不是表面上那件事。吵的是"你不重视我""你不理解我""你变了"。但如果我们不从第一句开始就直指核心,就只能在表面问题上绕圈。"目标停止法"相当于直接跳过争吵的中间层,去问:底层到底在争什么?
+
+3. **把"对手"变回"队友"**。当你问出"我们吵架的目的是什么"的时候,你的立场就从"我要赢"变成了"我想搞清楚"。对方也能感觉到——你不是来攻击他的,你是来解决问题的。立场一变,语气就变;语气一变,结果就变。
+
+**这个方法的适用规则很简单:**
+
+- 谁先意识到,谁先停——不需要双方约定,一个人就能做到
+- 问完之后,先听对方说完——不要抢着解释
+- 如果发现吵的根本不是一件事,各自先说清楚自己想要什么
+- 如果双方都说不清楚目的,那就说明这个架不需要继续——先停下来,各自冷静
+
+有一次小然试了这个方法,先生沉默了一会儿说:"其实我就是想让你抱抱我。"小然后来跟我说:"你知道吗,结婚七年,他第一次说这种话。如果他一开始就告诉我他想要一个拥抱,我根本不会跟他吵。"
+
+> **金句:** 吵架的最高境界,不是吵赢,而是在快赢的时候问自己——我到底想要什么?
+
+### 方法五:发言帽——让吵架不再抢话
+
+目标停止法解决的是"吵偏了"的问题。但还有一个更常见的吵架模式——**还没等对方说完,你已经开始反驳了。**
+
+小然和先生就总是这样。往往是她说一句,先生立刻接一句。然后她声音抬高,先生也抬高。最后谁都不记得第一句是什么,只知道两个人都很生气。
+
+后来有一次,小然跟一个做家庭教育的朋友聊到这个事。朋友说:"下次你们再这样,你拿一个东西——随便什么都行——规定只有拿着的人可以说话。"
+
+小然半信半疑。当天晚上又因为孩子的事起了争执,话赶话,又要吵起来了。小然突然想起朋友的话,随手抓起茶几上的一支笔,举起来说:"等一下,谁拿这支笔谁说话。现在笔在我手上,我说完你再接。"
+
+先生愣了一下,竟然真的闭嘴了。
+
+小然说完,把笔递过去。先生接过笔,说了一句让两个人后来笑了很久的话:"其实我刚才想说什么来着……被你一打断我忘了。"
+
+两个人都笑了。架没吵成。
+
+这就是**发言帽**——一个简单到让人怀疑它有效的方法。准备一个随手能拿到的小物件(一支笔、一个勺子、一个遥控器),约定好:**只有拿着它的人可以说话,另一个人只能听。**
+
+这个方法有四个好处,是在真实吵架中才体会得到的:
+
+**第一,打断超速反应。** 吵架的时候,我们的大脑就像被困在一个"听到→反驳→再听到→再反驳"的高速循环里。你根本没听对方在说什么,你只是在准备下一句反驳。发言帽创造了一个物理障碍——你手里没东西,你就得闭嘴。这给了你一个机会,去做吵架中最难的事:真的听。
+
+**第二,降低声音。** 你发现没有,抢话的时候声音是越来越高的。这是因为人在"争夺说话权"的时候,会不自觉地提高音量来压制对方。但发言帽直接把"争夺"这个环节取消了——说话权不是靠大声抢来的,是靠笔传来的。声音自然就降下来了。
+
+**第三,保护脆弱的真话。** 很多夫妻在辅导孩子作业的时候都能吵起来,表面是"你教错了",底下是"你在否定我的付出"——这种话说出来很难。它需要安全感。如果说到一半被人打断、反驳,"算了不说了"的情绪一上来,你就再也不会开口了。发言帽保证了"我手里的东西在,你就不能打断我"的安全感。
+
+**第四,吵架有了"句号"。** 普通吵架没有句号——吵到一方摔门而出,或者两个人筋疲力尽冷战收场。发言帽天然地给对话画上了句号:当笔在两个人之间传递了几轮,话都说完了,没人再接的时候,架就结束了。不需要有人主动说"我们和好吧"。它自己就结束了。
+
+小然后来跟我说,现在他们家晚餐桌上就放着一支"吵架专用笔"。有一次她儿子拿起来玩,被她一把抢回来——"这个不能乱用,这是爸爸妈妈吵架用的。"话说出口她才觉得好笑,但就是这支笔,让他们家过去三个月的争吵减少了八成。
+
+> **金句:** 最好的沟通工具,往往不是更会说,而是更会听。
+
+---
+
+## 三、社交关系:从应酬到滋养
+
+说完了家里的事,我们再聊聊家外面的关系。
+
+### 通讯录1493人,凌晨两点没有人
+
+小付工作十年,微信通讯录里存了1493个联系人。他说有一次凌晨两点失眠,想找个人说说话。翻了一遍通讯录——1493人,没有一个人让他觉得"可以打过去"。
+
+不是没有朋友。是他的通讯录里塞满了太多"应该认识的人"和"曾经认识的人"——同事、客户、以前的同学、孩子的同学家长、健身教练、快递小哥、三年没联系的老乡。但那些"有事可以找"的人,屈指可数。
+
+这不是小付一个人的困境。我们这代人的社交困境是:连接越来越容易,深度越来越难。
+
+### 滋养型关系 vs 消耗型关系
+
+判断一段关系是滋养你还是消耗你,有一个最简单的标准:
+
+> **和这个人说完话,你是更有能量了,还是更累了?**
+
+注意,不是他这个人好不好,是有没有"电"了。有些很好的人,每次见面都在抱怨;有些优秀的人,每次说话都让你觉得自己不够好。这些都是消耗型关系——他们是好人,但他们在透支你的情绪账户。
+
+滋养型关系是这样的:你不用刻意找话题,沉默也不尴尬;你可以说真实的想法,不怕被评判;说完话之后,你感觉世界亮了一点。
+
+一个很扎心的事实:你可能认真数一数,身边真正属于滋养型关系的,不超过5个人。
+
+### 三个方法,重新定义你的社交关系
+
+**1. 关系断舍离:每月清理一次"消耗型社交"**
+
+每个月花5分钟,检查一下这个月花时间最多的社交互动。问问自己:这个人这段关系,是在给我充电,还是在耗电?
+
+不一定非要删好友。但你可以做三件事:
+- 减少频率:把"每周见一次"变成"每月见一次"
+- 降低深度:把一起吃饭变成朋友圈点赞
+- 必要时体面退出:不是拉黑,是不再主动约
+
+**2. 深度连接三部曲**
+
+如果你觉得自己的社交关系太浅,不是因为认识的人不够多,是因为你没有把浅关系变深。三部曲:
+
+**第一步:主动发起。** 不是等别人来找你,是你先开口。不需要什么了不起的理由。一句"在吗"不够,一句"最近想到你了"刚刚好。
+
+**第二步:真诚分享。** 这是最难的一步——因为我们已经习惯了说"我挺好的"。下次试试:当别人问"最近怎么样",你可以说"还行,就是有点累",或者"还不错,前几天做了件特别有意思的事"。真话的能量是天壤之别的。
+
+**第三步:定期维护。** 手机设一个每月提醒:"给最重要的几个人发条消息"。不需要长篇大论。一张照片、一个链接、"今天路过这里想到你了"——都行。重要的是"定期",不是"长篇"。
+
+**3. 找到你的"三个凌晨两点"**
+
+每个人的社交"安全网"不需要很大。三个就够了。
+
+三个你凌晨两点可以打电话的人。三个你说了"我出事了"不需要解释的人。三个你可以完全放松、不怕暴露脆弱的人。
+
+如果你现在没有三个,先从找一个开始。如果你一个都没有,先做那个可以被人信赖的人。
+
+> **金句:** 社交的质量不在于你认识多少人,而在于你有多少"不用解释"的关系。
+
+---
+
+## 四、三个让关系变好的实用方法
+
+讲完了三种关系,我想给你三件趁手的工具。它们不需要你有心理学背景,不需要你有钱有闲。只要你有意愿,明天就能用。
+
+### 1. 家庭会议制度
+
+这是我接触过的几百个家庭中,反馈最好、见效最快的方法。
+
+**频率:** 每周一次,30分钟。
+
+**角色轮值:** 每次有主持人、记录员、计时员。孩子可以担任任何角色——你会发现,让一个8岁的孩子当主持人,他比你还认真。
+
+**四段式议程:**
+
+| 环节 | 时间 | 内容 |
+|:----:|:----:|------|
+| 感恩分享 | 5分钟 | 每人说一件这周感谢家人的事("谢谢妈妈周三给我做了我爱吃的红烧肉""谢谢宝宝上周五自己叠了被子") |
+| 问题讨论 | 15分钟 | 讨论一个这周最突出的问题,所有人说意见,不打断 |
+| 下周计划 | 5分钟 | 重点下周每个人做好一件事 |
+| 开心收尾 | 5分钟 | 一起做一件小事——看一集动画、吃一个冰淇淋、玩一个桌游 |
+
+**核心规则:不批评、不打断、不翻旧账。**
+
+不是不能说问题,是说问题的时候不带攻击性。"你这个星期碗都没洗"换成"我希望下周我们能把洗碗的排班调整一下"——效果不一样。
+
+**为什么家庭会议有用?** 因为它创造了一个"平等的场域"。在平时的家庭生活中,权力结构是固定的——父母说了算。但在家庭会议上,每个人都有平等的一票。孩子会觉得"我的意见被听到了",伴侣会觉得"我们是一个团队"。
+
+### 2. 三明治沟通法
+
+这是所有方法里最实用、最立竿见影的一个。它不只是一套话术,它是基于一个脑科学事实设计的——**当一个人感受到被攻击时,大脑的"警报系统"(杏仁核)会在几毫秒内启动,理性思考能力瞬间下降。**
+
+换句话说:你一开口就是批评,对方就听不进去了。这不是他故意的,是生理反应。
+
+三明治沟通法把它用在日常沟通中:
+
+**第一层——肯定(面包片)**
+
+先说一句真诚的肯定。注意"真诚"两个字——不要说"你今天真好看"然后转折,那不叫真诚。说一件你真心觉得他做得好的事。
+
+> "你上周主动把客厅收拾了,我回来看到的时候特别感动。"
+
+**中间层——建议(肉饼)**
+
+再说需要改进的地方。不要用"但是"开头,"但是"一出来,前面的肯定就作废了。用"同时""另外""下次"代替。
+
+> "另外,下次收拾之前能不能先问问我,有些东西我可能还有用?"
+
+**第三层——收尾(面包片)**
+
+再给一个正向的期待,把对话的方向拉回到"我们一起解决问题"而不是"你犯了错"。
+
+> "不管怎么说,你愿意主动分担家务,我真的很开心。我们一起慢慢找到最合适的方式。"
+
+**案例:小然和爸爸——从摔门而出去拥抱**
+
+这是小然家真实发生过的事。
+
+小然7岁那年,有一段时间特别喜欢在沙发上跳。爸爸说了几次"不准跳",没用。有一天晚上,爸爸加班回来,看到沙发被跳得歪了,新买的坐垫也滑到了地上。他火一下就上来了——
+
+**"我跟你说过多少次了?不准在沙发上跳!你是听不懂话吗?"**
+
+小然愣了一下,眼眶红了,跳下沙发跑进房间,把门关上了。
+
+爸爸也气,坐在沙发上刷手机。但他刷了十分钟,觉得哪里不对。他想起了"三明治沟通法"——之前朋友跟他提过,他从来没当真,但今天他决定试试。
+
+他敲开小然的门,蹲下来,平视她的眼睛。
+
+第一层——肯定:"宝贝,爸爸刚才太凶了,对不起。其实爸爸知道你跳沙发是因为开心,你不开心的时候不会跳。"
+
+第二层——建议:"但是沙发是用来坐的,不是用来跳的。你一跳,沙发下面的木头会断,坐垫会跑。而且万一摔下来,你会疼。爸爸不是不让你开心,是怕你受伤。"
+
+第三层——收尾:"我们一起想个办法好不好?你想跳的时候可以怎么跳?你出一个主意,我也出一个主意,我们找个都同意的。"
+
+小然说:"那我在地上跳行不行?"
+
+爸爸说:"行,我们买一个垫子铺在地上,你在垫子上跳。咱俩说好了。"
+
+小然点头。后来爸爸真的买了一个儿童蹦床垫放在阳台。小然每天放学回来跳二十分钟,爸爸有时候也跟着跳两下。
+
+后来爸爸跟我说了一句话:"我以前觉得'好好说话'没用,现在发现不是没用,是我不会。"
+
+> **金句:** 最好的沟通不是赢了对错,是让对方愿意靠近你。
+
+### 3. 关系能量账户
+
+把每个重要的关系想象成一个"情感银行账户"。
+
+- **存款** = 肯定、陪伴、倾听、帮助、记住对方的小事
+- **取款** = 批评、忽视、指责、冷战、忘记承诺
+
+道理很简单:如果一家银行你只取不存,迟早会被清户。关系也一样。
+
+**核心原则:存款必须远大于取款。**
+
+心理学家有一个研究结论:健康的关系中,积极互动和消极互动的比例至少是**5:1**。也就是说,每一次批评、冷战、指责,至少需要五次肯定的互动来抵消。
+
+想想你最近最重要的几段关系——你的存款够用吗?
+
+**实操方法:**
+
+每周花两分钟,想一想:这周我给这段关系存了什么款?
+
+不一定是什么大事。一个拥抱、一句"你今天辛苦了"、一杯水、一条消息说"今天天气好,想到你了"。这些小额存款,比偶尔一次"大额存款"(比如送贵重礼物)重要得多。
+
+反过来,如果你发现自己最近对某个人频繁"取款"——总是批评、总是挑剔、总是冷漠——那是一个信号:这段关系亮红灯了。先存三笔款,再说话。
+
+> **金句:** 关系中最值钱的不是大礼,是小习惯。
+
+---
+
+## 五、行动卡
+
+看完上面的方法,你可能已经想好要做什么了。这一章的行动卡不太一样——我不给你具体的动作,我给你一个问题。你自己找到的答案,比任何人告诉你的都有用。
+
+### 行动卡1:问一个不一样的问题
+
+下次你跟伴侣坐在一起又不知道说什么的时候,试着问一个你们从来没问过的问题。不是"孩子作业写完了吗",不是"这个月信用卡还了吗"。试试这些:
+
+- "如果明天我们有一整天完全属于自己,你想做什么?"
+- "你最近有没有一个瞬间,让你觉得'这样也挺好的'?"
+- "你觉得我们之间,有什么事是一直没说透的?"
+
+不问就算了。但如果你问了——问完之后,别急着接话。等他自己说完。
+
+### 行动卡2:做一次"只问不听"的练习
+
+选一个人(孩子、伴侣、朋友都可以),花十分钟只做一件事:问他问题,然后听他说。规则:你不能给建议、不能评价、不能分享你自己的经验。只能问和点头。如果你不知道问什么,可以试:
+
+- "然后呢?"
+- "那时候你什么感觉?"
+- "你现在怎么想的?"
+
+做完之后,记录一个发现:当你什么都不说的时候,对方说了多少他平时不说的话?
+
+### 行动卡3:写一个发现,不写感谢
+
+这周不写"谢谢你"。写一句"我发现你……"。比如:"我发现你每次进门都会把鞋摆好"、"我发现你辅导作业的时候声音在提高之前会先吸一口气"。不用评价好或不好,只需要写你看到的。
+
+写完了,放一天。第二天再看——你可能会发现,你看到了很多以前没注意的东西。
+
+---
+
+## 写在最后
+
+你发现了吗,这一章所有的方法,归根到底是一件事:**看见对方。**
+
+看见孩子的真实需求(不是你的期待),看见伴侣的内心世界(不是你的分工),看见朋友的存在(不只是在需要他的时候)。
+
+关系不需要完美,需要被看见。完美是终点线,被看见是起跑线。
+
+五行曰"木曰曲直",行贵在舒展通达。一棵树不会因为枝干弯曲就停止生长。一段关系不会因为不完美就失去意义。真正让一棵树死掉的,不是弯曲的形状,是没人浇水。
+
+**如果你只从这一章带走一件事,我希望是这一件:**
+
+明天早上,出门前,给你的伴侣一个拥抱。给你的孩子说一句"今天也要开开心心的"。你的朋友发一条"最近想到你了"。
+
+这就是"行"的开始。
+
+***
+
+*接下来,我们进入五维的最后一个维度——心。如果说行是把能量散发到外界和关系中,心是把能量收回到自己身上。第7章,我们聊聊:如何让家成为真正的港湾,而不是另一个需要你强撑着的地方。*
+
+
+========================================
+  第七章-心-内容草稿.md
+========================================
+
+# 第七章 心——大爱相随,让家成为真正的港湾
+
+**五行属火 | 火曰炎上,心以温暖照亮家族**
+
+如果说一个家庭的幸福是一座建筑,那么“身”是地基,“智”是梁柱,“富”是墙砖,“行”是窗扉,而“心”,则是这座房子里的温度。
+
+在五维能量系统中,心是那个最敏感的“温度计”。前面四维(身、智、富、行)为我们提供了系统的骨架,确保家庭在物理层面、认知层面、物质层面和社交层面的稳固;但唯有“心”这个维度,能赋予这个系统温度。没有心的家庭,即便房子再大、存款再多、孩子成绩再好,也可能像一座精致的冰窖——每个人都住在自己的房间里,彼此礼貌,却互不相通。
+
+## 场景:那些被“吼”掉的爱
+
+春节期间,小茜回到了久违的家。
+
+房子比三年前大了一圈,装修得现代而简洁,客厅里摆着昂贵的真皮沙发和巨大的液晶电视。但小茜坐在沙发上,看着对面沉默的父母,心中却有一种莫名的空洞感。
+
+“多吃点,这个鱼新鲜。”母亲把鱼肉夹到她碗里,这是他们之间唯一的交流。
+
+小茜想聊聊最近工作中的压力,想告诉父母自己其实很累,但话到嘴边,看着父亲习惯性地盯着手机,母亲习惯性地开始抱怨邻居家的孩子又考上了名校,她突然觉得,在这个名为“家”的地方,她找不到一个可以安放情绪的出口。房子越来越大,但家的感觉却越来越淡。
+
+这种“淡”,在很多家庭中是以另一种极端形式出现的——“吼”。
+
+小付是一个典型的“后悔型”父亲。他深爱着儿子小艾,但在面对小艾写作业拖拉、房间乱糟糟的时候,他总能瞬间爆发。
+
+“你怎么这么没用!这么简单的题都要写半小时!”
+“我跟你说了多少遍,衣服要挂起来!你是不是聋了!”
+
+吼叫的时候,小付觉得自己是在“教育”,是在用压力逼孩子进步。但当小艾被吓得缩在墙角,眼神中充满恐惧和委屈时,小付的心猛地沉了下去。
+
+吼完孩子,小付往往会后悔一整晚。他会在深夜看着熟睡的儿子,心中充满愧疚,甚至在心里发誓:“明天我一定温柔一点。”然而,到了第二天,当同样的场景再次出现,他再次被情绪劫持,再次变成了那个令孩子恐惧的“吼叫机器”。
+
+这种循环在无数个家庭中上演:我们用最糟糕的脾气,对待我们最爱的人。
+
+小付后来学到了一件事,很笨但很管用——忍不住想吼的时候,先闭上嘴,什么都不说。
+
+不是忍着,是告诉自己“先不给”。不给答案、不给教训、不给评判。只是陪着。他试了一次:小艾作业又拖拉了,小付胸口已经开始发紧,但他没说话,拉了一把椅子在小艾旁边坐下。小艾偷偷看了他一眼,又低头写。过了几分钟,小艾自己说:“我刚才走神了。”
+
+小付没说“我就知道你在走神”。他只说了一句:“嗯,现在写完了吗?”
+
+后来他跟朋友提起这个事,说:“闭嘴那次,比吼十次都有用。我不需要教他什么,他自己知道该怎么做。”
+
+## 核心理念:大爱的三境界
+
+很多家长问我:“我明明很爱孩子,为什么控制不住脾气?”或者“我明明很想靠近父母,为什么不知道说什么?”
+
+其实,爱是一种能力,而这种能力在《家的算法》中被拆解为“大爱三境界”。它不是一种道德要求,而是一套从内向外递进的认知升级。
+
+### 第一境界:看见自己(情绪觉察)
+
+绝大多数的家庭冲突,本质上都不是因为“事情”本身,而是因为“情绪”失控。
+
+当我们吼孩子的时候,我们吼的真的是那个没写完的作业吗?不,我们吼的是自己的焦虑——担心孩子输在起跑线上;我们吼的是自己的疲惫——在公司被老板责骂后,回家面对混乱的房间时,那根紧绷的弦终于断了。
+
+**看见自己,就是意识到:我的愤怒,其实是我的恐惧或疲惫在求救。**
+
+从神经科学的角度看,这叫“情绪脑劫持”。当我们感到威胁(哪怕只是孩子不听话这种心理威胁)时,大脑中的边缘系统(Limbic System)会迅速接管控制权,它的反应速度比负责理性思考的前额叶(Prefrontal Cortex)快上几毫秒。在这几毫秒之间,我们变成了被本能驱动的动物,而非理性的父母。
+
+### 第二境界:看见家人(爱的语言)
+
+当我们能觉察自己的情绪后,下一步是尝试“看见”对方。
+
+每个人接收爱的方式不同。小茜的父母习惯用“夹鱼”来表达爱,因为在他们的认知里,物质的供给和身体的照顾就是最高形式的关怀。而小茜渴望的是“情感的共鸣”和“深层的倾听”。
+
+当两种“爱的语言”不匹配时,就会产生误解:父母觉得“我为你付出了这么多,你怎么还不满意”,孩子觉得“你们根本不理解我”。
+
+看见家人,意味着我们愿意走出自己的认知舒适区,去学习对方的语言。不再要求对方“应该”怎么爱我,而是观察对方“正在”如何爱我。
+
+### 第三境界:看见传承(家族价值观)
+
+最高境界的爱,是超越个体,看向家族的传承。
+
+一个有“心”能量的家庭,会建立一套属于自己的家族叙事。它不再是简单的“听话”、“优秀”,而是一种共同的价值观。比如,“我们家的人虽然不完美,但我们永远支持彼此的梦想”;或者“我们家最看重的是诚实与善良”。
+
+当孩子在成长中遇到挫折时,支撑他的不再是父母的责骂或奖赏,而是这种深层的家族认同感——“我是这个温暖家族的一员,我有底气去尝试,因为我知道无论结果如何,我都有一个港湾可以回去”。
+
+## 实用方法:给心的“降温”与“升温”
+
+既然爱是一种能力,那么它就可以通过具体的工具来练习。
+
+### 1. 情绪停机坪:在爆发前按下暂停键
+
+为了对抗那几毫秒的“情绪脑劫持”,我们需要在刺激和反应之间,建立一个“停机坪”。
+
+当小付感觉到胸口发闷、声音不自觉提高时,他开始尝试在心中默念:“停机坪启动”。
+
+这个简单的动作,实际上是在强行激活前额叶,给理性思考争取时间。在停机坪上,他问自己三个问题:
+- 我现在的情绪是什么?(愤怒?焦虑?还是累了?)
+- 我真正想要的结果是什么?(是让孩子学会写作业,还是发泄我的情绪?)
+- 如果我现在吼出去,结果会变好吗?
+
+#### 延伸:关小黑屋——关谁?
+
+说到"暂停",很多家长会想到一个词——"关小黑屋"。
+
+传统的做法是这样的:孩子不听话→警告→再犯→"你去房间里好好想想!"
+
+但这里有一个问题,小付试过几次之后发现的。有一次他把小艾关进房间,小艾在里面哭得撕心裂肺,一边哭一边拍门说"爸爸开门,我错了,我再也不敢了"。小付站在门外,心里比他还难受。
+
+那天晚上他问我:我做对了吗?
+
+我的回答可能跟很多人想的不一样:**关小黑屋,应该关的不是孩子,是大人。**
+
+理由有三条。
+
+**第一,孩子被关的时候学不到东西。**
+
+"关小黑屋"的初衷是让孩子"反思"。但脑科学告诉我们:当一个人(尤其是孩子)感到恐惧、被抛弃的时候,负责理性思考的前额叶基本处于关闭状态,活跃的是负责生存警报的杏仁核。孩子在房间里想的不是"我错了",他想的是"爸爸不要我了""妈妈不爱我了"。恐惧中学不到反思,只能学到恐惧。
+
+**第二,你在教孩子"情绪处理"的唯一方式。**
+
+孩子是通过观察父母来学习如何管理情绪的。如果你生气的方式是把他推开、关上门,他学到的就是"生气=隔离"。他长大后跟伴侣吵架,也会用同样的方式——冷暴力、拉黑、消失。不是故意的,是他只见过这一种处理方式。
+
+**第三,真正需要暂停的是失控的那个。**
+
+发脾气的孩子不一定失控,但吼叫的大人一定失控了。孩子哭闹、耍赖、不写作业——他的行为可能让你生气,但他自己并没有失控。情绪脑劫持的是你。你需要的是你自己恢复理性,不是惩罚孩子。
+
+那正确的做法是什么?小付后来试了一种方法,效果很好。
+
+下一次他感觉快要爆发的时候,他没有吼,没有说"你给我进去"。他说了一句:
+
+> **"爸爸现在很生气,需要冷静一下。我去阳台待五分钟。等我平静了,再回来跟你谈。"**
+
+然后他真的去了阳台。不是摔门而去,是平静地走出去。
+
+小艾愣在原地。五分钟后小付回来,蹲下来。他没急着说"我们来谈刚才的事",他等了一下。
+
+小艾先开口了:"爸爸你去阳台干什么?"
+
+小付说:"爸爸刚才生气了。不想对你发火,所以去吹吹风。"
+
+小艾想了一下,说了一句让他差点哭出来的话:"那下次我也去阳台吹吹风。"
+
+小付没接话。他蹲着等了一会儿。小艾自己又说:"我刚才应该先写作业的。"
+
+你看——小付没有教他认错,没有帮他分析"你错在哪",他自己想明白了。
+
+他在教孩子。不是在教他认错,是在教他——生气了可以怎么办。不是用道理教,是用"不做"来教。
+
+**关自己,看起来是示弱,其实是示范。** 你不需要做一个永远不会生气的完美家长。你只需要做一个生气了知道怎么处理的真实家长。
+
+### 2. 闻花香 + 吹蜡烛法:最简单的情绪开关
+
+对于很多家长来说,单纯的“理性思考”在极度愤怒时是很难实现的。这时,我们需要一个生理层面的“强制重启”开关。
+
+这就是我推荐的**“闻花香 + 吹蜡烛法”**:
+- **闻花香**:深深地吸气,想象你面前有一朵最香的茉莉花,用鼻子缓慢地将香气吸入肺部。
+- **吹蜡烛**:缓慢地呼气,想象你面前有一根点燃的蜡烛,你要轻轻地吹气,让火苗摇曳但不要把它吹灭。
+
+这其实是一种简化版的深呼吸训练。通过延长呼气时间,我们可以激活副交感神经,降低心率,告诉大脑:“现在没有危险,你可以放松了。”
+
+在浠艾福的实践数据中,一个习惯使用“情绪开关”的家庭,在连续练习7天后,吼叫频率平均从每周5次降低到了1次。因为他们发现,掌控情绪带来的掌控感,远比吼叫带来的权力感更令人愉悦。
+
+### 3. 4-7-8 呼吸法:给心灵的深度按摩
+
+如果说“闻花香”是应对突发愤怒的急救药,那么 **4-7-8 呼吸法**(源自哈佛大学的放松技术)则是日常的滋养剂。
+
+- **吸气 4 秒**:用鼻子安静地吸气。
+- **憋气 7 秒**:让氧气在体内充分交换,安抚神经。
+- **呼气 8 秒**:用嘴发出“呼”的声音,将压力全部排出。
+
+小然在面对升学压力而失眠的夜晚,尝试用这个方法。数据表明,这种呼吸模式能显著改善睡眠质量,将入睡时间缩短。当一个人的睡眠充足、神经系统稳定时,他对外界的包容度自然会提升。
+
+### 4. 家族故事会:构建情感的纽带
+
+为了实现“看见传承”,我建议每个家庭每周举行一次**“家族故事会”**。
+
+这不是一个严肃的会议,而是一个温暖的分享时刻。不需要准备PPT,只需要在晚餐后或睡前,由一个人发起一个主题。
+
+比如:“分享一件你小时候觉得最勇敢的事”或者“采访父母年轻时的梦想”。
+
+当小茜尝试采访父母的梦想时,她惊讶地发现,母亲年轻时竟然想成为一名画家,而父亲曾经热爱写诗。这些碎片化的信息,让小茜意识到,父母在成为“父母”之前,首先是他们自己。
+
+这种认知的转变,瞬间消融了春节回家时的那种隔阂感。当父母不再仅仅是“提供资源的人”,而变成了“有故事的个体”时,爱才真正地流动了起来。
+
+## 结语:心是家庭的终极算法
+
+在《家的算法》中,我们讨论了身体的健康、智慧的培养、财富的积累和关系的和谐。但请记住,所有的维度最终都要汇聚到“心”这里。
+
+一个健康的身体是为了能陪伴家人更久;一个聪明的头脑是为了能更好地解决家庭问题;丰厚的财富是为了给爱提供保障;和谐的关系是为了让爱能顺畅地传递。
+
+如果失去了“心”的温度,所有的优化都只是在增加一个程序的运行效率,而没有赋予这个程序真正的意义。
+
+让家成为真正的港湾,不需要你成为一个完美的父母或完美的子女。你只需要在下一次想要吼叫时,试着“闻一次花香”;在下一次感到孤独时,试着问父母一个关于他们梦想的问题。
+
+大爱相随,不在于惊天动地的誓言,而在于每一个微小的、觉察的瞬间。
+
+---
+
+### 🏠 家庭行动卡:心之温暖计划
+
+**卡片 1:【问一个问题,别给答案】**
+这周选一个场景——孩子遇到了困难、伴侣在发牢骚——你很想给建议的时候,忍住。试着问一个问题代替。不问"你应该",问"你觉得"。做完之后观察:对方是什么反应?你自己又是什么感觉?
+
+**卡片 2:【采访一个"老故事"】**
+这周找一个安静的时刻,问一位家人一个你从来没问过的问题。可以是对父母:"你年轻时最勇敢的一次决定是什么?"可以是对孩子:"如果有一天你当了爸爸妈妈,你最不想做的一件事是什么?"不评价,不打断,只是听。
+
+**卡片 3:【分享一件小事,不说大事】**
+晚餐时,每人分享一件今天发生的、很小的、但让自己觉得"还行"的事。规则:不能谈成绩、不能谈工作、不能谈钱。如果有人说"今天没什么事"——那就等一等。有时候沉默之后说出来的事,才是真正想说的。
+
+**卡片 4:【写一句话,不写长篇】**
+给一个人写一句话——不是"谢谢你",是一句具体的看见:"今天你进门的时候笑了,那个笑让我觉得今天挺好。"贴在他明天一定会看到的地方。
+
+
+========================================
+  第八章-最小输入.md
+========================================
+
+# 第8章:最小输入——小到不可能失败
+
+> **算法类比:`min_input()`——任何大于0的输入都比0好。程序启动需要最小的有效输入,家庭改变也是一样。**
+
+---
+
+小付第三次把运动鞋放进鞋柜,又拿了出来。
+
+这个动作,在过去三个月里重复了至少十次。他下载了跑步App、买了速干衣、在周末早上设了六点半的闹钟。然后呢?闹钟响了,他按掉。晚上下班回家,看着那双跑鞋,在心里说"明天一定跑"。第二天,同样的循环。
+
+他不是懒。他有一个自己都没意识到的障碍。
+
+## 启动的阻力
+
+"今晚去跑个步"——这个念头在脑子里出现的时候,并不是一个单纯的想法。它携带了一整串看不见的负荷:换衣服、穿鞋、热身、跑出去、跑回来、拉伸、洗澡、洗衣服。整个过程至少一个小时。这一个小时,在小付的感知里,不是一个小时——是一整座山。
+
+大脑对"行动"的评估方式,跟你想的不一样。它不计算"这件事做了之后有多好",它只计算一件事:**启动成本**。
+
+启动成本就是:从"现在正在做的事"切换到"新的事"所需的能量。你坐在沙发上刷手机,切换到"出门跑步"——需要换衣服、穿鞋、走出门、适应温度。这个切换成本,对大脑来说太高了。于是它会告诉你:"今天算了,明天吧。"
+
+这就好比你有一个程序,启动之前要做一大堆初始化——加载库、连接数据库、读取配置。如果这个过程太慢,用户就关掉了。你的大脑就是那个用户,每次它在后台算启动成本,觉得太贵,就拒绝执行。
+
+这个机制有一个名字,叫"静阻力"。它不是意志力的问题,是神经系统的一种自我保护机制——它倾向于维持现状,因为现状意味着安全。
+
+但好消息是:这个机制有一个漏洞。
+
+## 20秒启动法则
+
+这个漏洞叫"最小输入"。
+
+如果启动成本降到足够低——低到大脑觉得"这没什么"——它就不会阻拦你。多低算低?答案是:**20秒**。
+
+这就是"20秒启动法则"。把你要做的事情,拆成一个20秒内能完成的第一动作。不是"跑五公里",是"穿上跑鞋"。不是"做一顿健康晚餐",是"洗一把青菜"。不是"整理整个房间",是"把枕头放好"。
+
+为什么是20秒?因为大脑对短于20秒的动作,不会启动"风险评估"。它觉得这件事太小了,不值得计算成本。于是,你就绕过了那道防线——你已经穿上跑鞋了。而穿上跑鞋之后,你出门的概率,会从几乎为零变成百分之八十以上。
+
+小付后来试了。他没有对自己说"今晚去跑步"。他对自己说:"我就把跑鞋穿上。"
+
+穿上之后,他在客厅站了十秒钟。然后他想:反正都穿上了,下去走一圈也行。他走出门,走了十分钟。走了十分钟之后,他觉得——来都来了,跑两步吧。那天他跑了十五分钟。
+
+十五分钟,对一个从不运动的人来说,不是成绩。但第二天,他又穿上了跑鞋。第三天,也是。三个星期以后,他跑了人生中第一个五公里。
+
+他没有变自律。他只是找到了那个最小的有效输入。
+
+> **金句:你不是懒,你是把"跑步"跟"跑完五公里"混为一谈了。穿上跑鞋就是胜利。**
+
+## 五维最小输入清单
+
+小付的这个发现,可以应用在家庭生活的每一个维度。
+
+**身的最小输入:喝一杯水**
+
+每天早上起来,喝一杯温水。不是两升,不是柠檬水,不是蜂蜜水。就是一杯温水。看起来太简单了,简单到你觉得"这有什么用"。但你只要做这一件事,它就改变了你对健康的态度——你在主动照顾自己的身体。这个信号本身,比那杯水的生理作用更重要。
+
+**智的最小输入:问一个开放题**
+
+不用每天给孩子辅导两小时功课。只需要在晚饭时或睡前,问一个打开的问题——"今天有没有一件事让你觉得有意思?"十秒钟就够了。但孩子在这个问题里感受到的,是你对他这个人感兴趣,而不只是对他的分数感兴趣。
+
+**富的最小输入:记一笔账**
+
+不是开始做全年预算,不是下载复杂的记账软件。就是把今天最大的一笔开销,写在手机备忘录里。一句话,不需要分类,不需要分析。先看见,再管理。
+
+**行的最小输入:发一条消息**
+
+不是打电话(打电话的启动成本太高了),就是给你很久没联系但很想念的人,发一条消息。不用长篇大论,一张照片、一个表情、一句"今天路过这里想到你了"。十秒钟,一段沉睡的关系可能就这样被唤醒了。
+
+**心的最小输入:一次深呼吸**
+
+在你感觉到烦躁、想发火的时候——不要说话,先做一次深呼吸。只一次。吸四秒,呼六秒。就这一下,你的心率会下降,前额叶会重新上线。你会在那一秒钟,拿回对自己情绪的控制权。
+
+你看,这五个动作,每一个都在20秒以内。不需要毅力,不需要准备,不需要"等我有空"。你现在就能做。
+
+---
+
+## 角色最小化
+
+从家庭系统的角度看,"最小输入"还可以更进一步。
+
+每个家庭成员,在五维中各自担任一个"角色"。这个角色只有一个任务:每天做一次对应的最小输入动作。
+
+小付后来在他们家推行了"家庭角色轮值"制度,每个角色只用做一件事:
+
+| 角色 | 谁做 | 最小输入 |
+|:----:|:----:|---------|
+| 健康官 | 小艾 | 吃饭前问大家"今天喝够水了吗" |
+| 学习官 | 小茜 | 每天问小艾一个开放问题 |
+| 财务官 | 小付 | 睡前记录当天最大一笔支出 |
+| 关系官 | 轮值 | 代表全家给一个亲友发问候 |
+| 心育官 | 小付+小茜 | 谁先感觉到情绪上来了,谁先做一次深呼吸 |
+
+每个人每天只需要做一件事。没有一个角色需要超过20秒。但就是这样一套极简的系统,让小付家从"想起什么做什么"变成了"每个维度都有人在维护"。
+
+小艾当健康官的第一天,吃饭的时候认真地问:"妈妈你今天喝水了吗?"小茜一愣,然后笑了。她说:"没有,我现在去喝。"那一刻她感受到的不是被管——是**被在意**。
+
+> **金句:家庭不是一个需要你独自扛起来的重担,而是一套可以分担的系统。**
+
+## 反常识:自律不是意志力问题
+
+最小输入之所以管用,是因为它碰到了一个更底层的真相——**自律不是意志力问题,是前额叶负荷管理问题。**
+
+意志力是一个有限的资源。你做每一个决定——早上几点起床、穿什么衣服、早餐吃什么、先回哪封邮件——都在消耗它。消耗到一定程度,你的前额叶(负责理性决策的部分)就罢工了。这时候,你的大脑会切换到默认模式:选最容易的选项。
+
+这就是为什么你下班回家之后,明明知道应该运动,却躺到了沙发上。不是因为你的意志力在晚上变弱了,是因为你的前额叶白天已经超载了,它没有余力再帮你做一次"应该做"的决定。
+
+所以真正的自律,不是靠意志力逼自己去做"对的事",而是**减少决策**。你把一件事简化到不需要决策的程度,它就自然发生了。
+
+这听起来像是一个文字游戏,但它是被实验证明过的方法。在一项研究当中,两组人被告知需要开始一项运动计划。第一组被告知"每周运动三次",第二组被告知"每周运动三次,并且提前写好运动那天穿什么鞋"。结果第二组的执行率远高于第一组。差在哪里?就差在"提前写好穿什么鞋"这个动作,把"要不要运动"变成了一组已经做好的预设。
+
+小付后来做了一个在他自己看来"蠢到不好意思说"的动作。他把跑鞋放在床边——不是鞋柜里,是床边,晚上睡觉前就能看到的地方。第二天早上,他睁眼就看到跑鞋。他不需要做"要不要跑步"的决定。鞋子就在那里,穿上出门就行了。
+
+他把这个经验推广到了其他维度:
+
+- 想多喝水?把杯子放在你每次路过都能看到的地方,而不是厨房柜子里。
+- 想记账?把记账App的快捷方式放在手机桌面第一屏的正中央。
+- 想跟家人多聊天?把手机充电器放到客厅以外的地方,饭后那十五分钟,你没有手机可以看。
+
+这些改变,每一个都很小。但它们的共同点是:**它们在你做决定之前,已经把决定替你做完了。**
+
+> **金句:最好的自律,是不需要自律。**
+
+---
+
+## 为什么第三篇从这章开始
+
+你可能注意到了,这本书的结构是这样的:
+
+第一篇(第1-2章):帮你画地图。
+第二篇(第3-7章):带你认识五维的每一个角落。
+第三篇(第8-13章):教你具体怎么走。
+
+第一篇回答了"去哪",第二篇回答了"看什么",从这一章开始,我们要回答一个更实际的问题——**怎么动起来。**
+
+很多人的问题不是不知道往哪走,也不是不知道看什么。是他知道该做,但就是动不了。他在原地站了很久,心里想了一百遍,脚下一步没迈。
+
+从这一章开始,我们用六章的篇幅,搭建一套"行为算法"。它不是大道理,是一组可以执行、可以重复、可以优化的步骤。每一步都很小,小到你不可能失败。但如果你做完了这六步,你的家庭会在半年内,从"救火模式"切换到"系统运行模式"。
+
+第一步,就是最小输入。
+
+穿上那双鞋。迈出那道门。最难的,永远不是跑多远,是系鞋带那五秒钟。
+
+---
+
+## 编程式复盘
+
+> 每章结尾,我们用"编程思维"回看一个家庭场景。不懂编程的读者跳过即可,不会影响你对本章的理解。但如果你看懂了,你会心一笑。
+
+```python
+# 场景:小付想跑步,但三个月没动过
+
+def 小付的晚上():
+    if 想跑步():
+        # 问题在这里——"想跑步"是一个太模糊的条件
+        执行计划 = 评估_启动成本("换衣服+穿鞋+热身+跑5km+拉伸+洗澡")
+        if 执行计划 > 阈值:
+            return "算了明天吧"  # 大脑的默认选项
+        else:
+            return "出门跑步"
+    else:
+        return "继续刷手机"
+
+# 优化后:用最小输入绕过成本评估
+
+def 小付的优化版本():
+    穿上跑鞋()  # 成本: 5秒, 不会触发阈值
+    # 一旦穿上鞋, 后续决策自动简化
+    if 已经穿上鞋():
+        return "出门走一圈"  # 不再需要"跑步"这个大目标
+    return "算了明天吧"
+```
+
+这段代码的逻辑,可以用在任何家庭场景里——想早睡、想少吼孩子、想多陪家人。只要把"目标"从结果改成第一动作,成功率就会翻倍。
+
+---
+
+## 本章行动卡
+
+这一章的行动卡是最不需要"做"的——它们只需要你"开始"。
+
+**行动卡一:回答一个"最小"的问题**
+
+从五维中选一个你最想改善的维度。然后问自己:如果只能做一件20秒内能完成的事——那是什么?不追求"最好的",只追求"最开始的"。明天只做这一个动作。做完就是胜利。
+
+**行动卡二:移动一件东西**
+
+找一个你想改变的习惯对应的物品——跑鞋、水杯、书、记账本。把它从一个"存放的地方"移到你每天必经的路上。就这一个动作。然后观察:这件东西放在那里之后,你有没有比平时更经常看到它、想到它。
+
+**行动卡三:问家人一个问题**
+
+晚饭时问一句:"如果每个人每天只需要为家里做一件20秒的事——你选什么?"不强求每个人都回答。有人想了三天才说也没关系。重点是让这个问题在家里"落地"——它会在不经意间起作用。
+
+**行动卡四:划出一段"不做决定"的时间**
+
+明天选一个固定时间段——可以是起床后的30分钟,也可以是睡前的15分钟。在这段时间里,你不做任何选择,不打开购物App,不看信息流。只做一件事:你提前决定好的那件。然后问自己:不做选择的时候,你是不是反而更清楚自己想做什么了?
+
+---
+
+## 本章要点
+
+- 启动的障碍不是意志力,是"启动成本"。大脑会自动评估切换成本,成本太高就拒绝执行
+- 20秒启动法则:把目标拆成一个20秒内能完成的第一动作,绕过大脑的风险评估
+- 最小输入清单:每个维度都有20秒就能做的动作(健康=喝水、学习=问问题、财富=记一笔、关系=发消息、心=深呼吸)
+- 家庭角色最小化:每个成员认领一个角色,每天只做对应的最小输入
+- 自律的本质是减少决策,不是增加意志力
+- 从今天开始:找到那个最小输入,先做一次
+
+*下一章预告:循环执行——让好习惯自动运行*
+
+
+========================================
+  第九章-循环执行.md
+========================================
+
+# 第9章:循环执行——让好习惯自动运行
+
+> **算法类比:`while(habit) { execute(); reward(); }`——循环体决定结果。写程序如此,养成习惯也是如此。**
+
+---
+
+小付坚持跑步三周了。每天早上,穿上跑鞋,出门,跑十五到二十分钟,回来洗澡,吃早饭,上班。
+
+到了第四周,有一天早上他醒来,看着床边那双跑鞋,心里冒出一个念头:"今天不跑了吧。"
+
+不是身体累。不是没睡好。是一种说不清的感觉——不知道为什么要继续。
+
+他还是穿上跑鞋出门了,但跑的时候一直在想一个问题:我能坚持多久?
+
+这是一个很常见的问题。大多数人的"改变"都死在这个阶段——不是启动不了,是没法持续。第8章解决了"怎么开始",这一章解决的是"怎么不停"。这就是"循环执行"要回答的问题。
+
+## 从"一次"到"自动"
+
+任何习惯的养成,都要经历三个阶段:
+
+**第一阶段:有意识的不适应。**你知道该做什么,做起来很别扭。小付第一次穿上跑鞋的时候,感觉全身都不对劲——步子不对、呼吸不对、路上的狗都在看他。
+
+**第二阶段:有意识的适应。**你开始习惯了,但需要提醒自己。小付每天早上看到跑鞋,会有一个声音说"穿上它"。他需要刻意地、主动地做出选择。
+
+**第三阶段:无意识的自动。**你不需要想了。就像刷牙一样——你不会在每天早上问自己"今天要不要刷牙",你走进卫生间,自然而然地就拿起牙刷。习惯变成了条件反射。
+
+问题是,大多数人停在第一和第二阶段之间。
+
+他们不是不想继续,是缺少一个东西:**一个让习惯自动运行的循环系统。**
+
+在编程里,循环结构是最基础的逻辑——你写一个条件,告诉程序在条件满足的时候重复执行某段代码。如果条件永远不满足,循环就不会启动;如果循环体里没有更新条件,循环就会无限运行。
+
+习惯养成就是写一个属于自己的循环。条件是你的"触发信号",循环体是你的"执行动作",而更新条件的那个步骤——是你的"奖励"。
+
+## 习惯回路四要素
+
+小付后来了解到一个模型,叫"习惯回路"。它不是他发明的,是麻省理工学院的研究者发现的,后来被《习惯的力量》这本书普及。简单的说,每一个习惯都由四个要素组成:
+
+**触发 → 动作 → 奖励 → 信念**
+
+**触发:提醒你该做了。**
+
+小付的触发不是闹钟,是他的跑鞋。在第一章我们说过,他把跑鞋放在床边——这就够了。每天早上睁眼,看到跑鞋,大脑就知道:该出门了。
+
+触发不需要复杂,不需要响亮。它只需要稳定——每天在同一个时间、同一个地点出现。
+
+**动作:最小输入。**
+
+穿上跑鞋,出门。不需要想着"跑五公里",不需要想着"今天要跑出新纪录"。只需要完成那个最小输入——穿上鞋,走出去。第8章的方法在这里再次出现。循环执行不是加大剂量,是保持剂量不变。
+
+**奖励:做完了之后得到的正向反馈。**
+
+这是最容易被忽略也最重要的环节。很多人坚持不下来的原因,不是不够自律,是没有给大脑一个继续的理由。
+
+小付的奖励是什么?最初是跑完之后洗个热水澡的感觉——那种"我做了一件好事"的微妙满足感。后来他发现了一个更好的奖励:他跑完之后,小艾会用崇拜的眼神看着他说:"爸爸你又去跑步了?"这个眼神,比任何App上的打卡记录都管用。
+
+**信念:你相信这件事值得做。**
+
+这是最深的一层。如果小付不相信跑步对他有好处,就算有触发、有动作、有奖励,他也坚持不了多久。信念是循环的燃料——它不会因为你某天没跑就熄灭,但如果你从根本上怀疑这件事的意义,循环就会停。
+
+小付的信念来自一个很简单的发现:跑了三周以后,他的睡眠质量明显好了。以前躺下要翻来覆去半小时,现在十分钟之内就能睡着。这个体感,比任何健康科普文章都有说服力。
+
+> **金句:习惯不是靠毅力坚持的,是靠系统自动运行的。**
+
+## 多巴胺重塑周期
+
+现在来说一个关于时间的数字。
+
+你可能听过"21天养成一个习惯"——这个说法流传很广,但它不完全准确。神经科学的研究发现,习惯形成的时间因人而异,从18天到254天都有。但有一个节奏是确定的,那就是**多巴胺重塑周期**。
+
+多巴胺不只是"快乐分子",它的真实作用是"预期奖励"——当你做了一件事并且得到好结果,大脑会记录这个对应关系;下次你看到触发信号,大脑会提前释放多巴胺,让你产生"想去做"的感觉。这就是习惯的生理基础。
+
+这个重塑过程有三个关键时间点:
+
+**第3天:新鲜感消退。**
+
+你做了三天,还没有看到明显的变化。你的大脑开始问:"这真的有用吗?"这是最容易放弃的时刻。不是因为累,是因为反馈没到。
+
+**第7天:第一个体感出现。**
+
+如果你每天都做同一件小事,到第七天左右,你的身体或情绪会出现第一个微小的"信号"。可能是你发现走楼梯没那么喘了,可能是你发现睡前那一刻脑子没那么乱了。这个信号非常微弱,但它告诉你的大脑——"这件事可能真的有用"。
+
+**第14天:体感变得稳定。**
+
+到两周的时候,那个最初的信号会变得可预测。你知道今天跑完步,今晚会睡得好;你知道今天记了一笔账,月底看账单的时候不会吓一跳。可预测的正反馈,是习惯固化的关键——你的大脑开始信任这个循环。
+
+小付在第7天的时候,发现自己跑完步那天工作效率特别高。他以前一直以为是自己"状态好",后来才意识到,是运动之后的血氧和脑部供血提升了专注力。这个发现让他很兴奋——不是因为工作效率高了,是因为他终于"看见"了改变。
+
+第14天的时候,他已经不满足于跑步了——他开始在周末带小艾一起走。小艾走不动了,他就蹲下来背他走。那件事跟跑步无关,但它让小付觉得:"我正在变成一个不一样的爸爸。"
+
+> **金句:坚持不需要强大的意志力,只需要在第一次想放弃的时候,告诉自己再等三天。**
+
+## 家庭角色协同
+
+习惯是个人的事,但家庭的习惯系统需要协同。
+
+小付家的"家庭角色轮值"制度在第一章就已经启动了。但有一个问题:每个人坚持了几天,新鲜感过去之后,就开始松懈了。健康官小艾忘记问"今天喝水了吗",财务官小付睡前忘了记账,关系官轮到小茜的时候,她忙起来就忘了发消息。
+
+这不是态度问题,是缺少一个协同机制。于是小付引入了一个新规则——**每周日晚上,全家一起吃一顿"复盘饭"。**
+
+不是正式的会议。就是晚饭的时候,每个人花五分钟说三件事:
+1. 这周我做了什么
+2. 我觉得做得好的是什么
+3. 有什么需要调整的
+
+规则也很简单:不批评、不打断、不评价。每个人说自己的,不评论别人。
+
+这一招的效果出乎意料。小艾第一次说"我这周忘了检查大家喝水"的时候,小茜说了一句"没关系,我们下周互相提醒"。小艾点了点头,第二周他真的记得了。不是因为责任感,是因为他知道——有人会听见他有没有做到。
+
+小付发现一个规律:当一家人知道"每周会有一个时刻,大家都在说同一件事"的时候,每个人都会不自觉地在那一周里更留意自己的角色。这不是监督,是**共享的注意**——你知道有人跟你在一起做同一件事,你就不容易停下来。
+
+## 家庭仪式设计
+
+如果说角色协同是把习惯"各归各位",那家庭仪式就是把习惯嵌入家庭的"时间线"——让它变成像三餐一样自然的存在。
+
+有三个时间段特别适合嵌入习惯,因为它们本身就具有"规律性":
+
+### 1. 晨间三件套
+
+每天早上,全家一起做三件事。每件事不超过两分钟。
+
+小付家后来形成的晨间仪式是:
+- 喝一杯水(健康官带头)
+- 说一件今天期待的事(任何人)
+- 出门前拥抱一下
+
+就这么简单。但小付发现,自从有了这个晨间拥抱,他跟小茜之间"说话越来越少"的问题,悄悄地改善了很多。"每天早上有一个拥抱,就算白天没时间聊天,好像也没那么疏远。"他说。
+
+### 2. 餐桌分享圈
+
+晚餐时间,是大多数家庭唯一能凑齐所有人的时刻。不要只在饭桌上聊"作业写完了吗""考试考了多少分"——这些话聊多了,孩子会开始逃避餐桌。
+
+试试聊这些:
+- "今天有没有一件让你觉得开心的事?"
+- "今天有没有遇到什么困难?"
+- "今天有没有帮到别人?"
+
+不用三个都问。选一个,每天轮流。你会发现,当孩子习惯了在餐桌上说话,他也会习惯在遇到真正的问题时,在餐桌上开口。
+
+### 3. 睡前折返跑
+
+睡前十分钟,是情绪沉淀的时间。小付后来养成的一个习惯是:睡前到小艾房间坐五分钟。什么都不做,就是坐着。有时候小艾会跟他聊学校的事,有时候小艾已经困了,他就帮他把被子掖好,说一句"今天你辛苦了"。
+
+他以前觉得这些话很肉麻,说不出口。但有一次他听到小艾跟小茜说:"爸爸今天跟我说'辛苦了'。"那一刻他知道——有些话你觉得没必要说,但对听到的人来说,很重要。
+
+这三个仪式,没有一个需要超过五分钟。但它们的共同点是:**发生在固定的时间、固定的地点,做固定的事。**不需要每天再想"今天要不要做"——它就像晚饭后的那碗汤,自然而然。
+
+## 编程式复盘
+
+```
+# 场景:小付第三周的"不想跑了"
+
+def 习惯循环(trigger, action, reward, belief):
+    day = 1
+    while belief:  # 信念是循环条件
+        if trigger_occurs(trigger):
+            action()  # 执行最小输入
+            feedback = get_reward(reward)
+            if day < 14:
+                # 前两周,奖励是外部预设的
+                print("坚持中,体感积累中...")
+            elif day >= 14 and feedback > 阈值:
+                # 两周后,体感成为内部奖励,循环自我强化
+                belief = strengthen(belief, feedback)
+            else:
+                # 没有正反馈,信念减弱
+                belief = weaken(belief)
+                if belief < 最小值:
+                    break  # 循环终止
+        day += 1
+    return "习惯已固化" if belief > 最小值 else "需要调整触发或奖励"
+
+# 小付的优化:在循环中增加"共享注意"
+
+def 家庭协同循环(成员列表, 每周复盘日=7):
+    for 每个人 in 成员列表:
+        每个人.启动("最小输入")
+    while True:
+        if 到达(每周复盘日):
+            for 每个人 in 成员列表:
+                每个人.分享("做了啥", "好的", "调整")
+                # 共享注意 → 信念强化
+                每个人.belief += 0.1 * 每个人.被看见的次数
+```
+
+循环执行的核心不是"每天都要做得完美",是"循环不要断"。偶尔断了一天,没关系,隔天接上就行。最怕的不是断,是断了之后告诉自己"反正已经断了,算了吧"。
+
+在编程里,一个循环因为错误退出了,你会查日志、修bug、重新部署。你不会把整个程序删了。
+
+对习惯,也应该这样。
+
+## 本章行动卡
+
+这一章没有"新习惯"。这一章是帮你把已经开始的习惯连起来。
+
+**行动卡一:回答四个问题,写一句话**
+
+选一个你正在做的习惯。回答四个问题:什么时候做?做什么?做完之后感觉怎么样?你为什么觉得它值得做?不用写长篇,一句话就够了。写下来,贴在每天能看到的地方。第二天你看它的时候——它不是在提醒你"要做",是在告诉你"你已经做过了"。
+
+**行动卡二:设一个闹钟,写一句你不信的话**
+
+如果这是你开始做某件事的第三天——设一个闹钟。闹钟备注写:"第七天会有变化。"你现在可能不信,但第七天回头看的时候,你可能会发现一些第一天注意不到的东西。
+
+**行动卡三:全家人找一餐饭的时间**
+
+不一定是"家庭会议",就是一起吃饭。规则只有一条:不聊成绩、不聊工作、不聊钱。如果饭桌上沉默了一会儿——不急着填满它。有时候沉默之后第一个开口的人,说的才是今天真正想说的话。
+
+**行动卡四:连续七天,只做同一件小事**
+
+选一件两分钟内能做完的事。每天早上做,连续做七天。到第七天的时候问自己两个问题:这件事还需要我"提醒自己"去做吗?如果不需要了——那要加下一件吗?不加也可以。一件事做七天的效果,远比七件事各做一天的加起来要大。
+
+## 本章要点
+
+- 习惯回路由四个要素组成:触发、动作、奖励、信念。缺少任何一个,循环都会中断
+- 多巴胺重塑周期有三个关键节点:第3天(新鲜感消退)、第7天(第一个体感)、第14天(体感稳定)
+- 家庭角色协同:共享注意是让每个人坚持下去的隐形动力——你知道有人跟你在一起做同一件事,你就不容易停下来
+- 家庭仪式设计的三个黄金时刻:早晨(一小时启动)、餐桌(一日连接)、睡前(一日沉淀)
+- 习惯不需要完美,循环不要断——断了一天没关系,隔天接上就行
+
+*下一章预告:反馈校验——看见改变正在发生*
+
+
+========================================
+  第十章-反馈校验.md
+========================================
+
+# 第10章:反馈校验——看见改变正在发生
+
+> **算法类比:`console.log(status)`——没有日志的程序无法调试。没有反馈的改变无法持续。**
+
+---
+
+小付坚持了一个月——跑步、喝水、记账、跟小茜每周一次"不谈家事"的对话。
+
+他做了。但他不确定:这一个月,到底有没有用?
+
+他感觉睡眠好了一点。但"好了一点"是多少?他也感觉跟小茜之间的气氛好像没那么僵了。但"没那么僵"算什么标准?他觉得自己在变好,但他说不清楚好在哪里。
+
+他想起以前在公司做项目的时候,每次上线新功能,都有数据看——页面访问量、用户停留时间、转化率。有数据,就知道自己做得对不对。但在家里,他什么数据都没有。他只能靠"感觉"。而"感觉"是最不可靠的东西——你今天睡得好觉得"一切都在变好",明天跟小茜拌了一句嘴就觉得"什么都没变"。
+
+反馈不是锦上添花。它是持续行动的燃料。没有反馈,你会在黑暗中跑步——你不知道自己跑了多远,不知道方向对不对,不知道自己是不是在原地踏步。
+
+大多数人放弃,不是因为不够努力,是因为他们看不到努力的结果。
+
+> **金句:放弃不是因为累,是因为看不见——看不见自己已经在变好。**
+
+## 反馈闭环
+
+反馈不是一句简单的"你做得好"或"你做得不好",它是一个闭环。这个闭环有四个环节:
+
+**行为 → 数据 → 感知 → 强化**
+
+**行为**:你做的事。小付坚持跑步、喝水、记账。
+
+**数据**:行为留下的记录。你跑了多少分钟、今天喝了几杯水、这个月花了多少钱。数据是中性的——它不评价你好不好,它只告诉你发生了什么。
+
+**感知**:你对数据的解读。"我比上周多跑了十分钟"——这个感知会产生一种情绪:成就感、满足感、或者"还不够"的紧迫感。不管是什么情绪,重要的是:你"看到"了。
+
+**强化**:感知带来的行为调整。你觉得"有效",所以继续做;你觉得"没什么变化",所以调整方法。强化是闭环的出口,也是下一个循环的入口。
+
+小付之前缺的不是行为,是数据。他做事了,但没有记录,所以没有"数据→感知"这个环节。他的大脑接收不到"你正在变好"的证据,于是那个"何必呢"的声音就越来越响。
+
+小付后来做了一件事——他拿了一个笔记本,每天睡前花两分钟写下三行字:
+- 今天跑了多少分钟
+- 今天有没有跟小茜好好说话
+- 今天有没有一件让自己觉得开心的事
+
+就三行。不评价,不分析,只是写。
+
+一周以后,他翻回去看。他看到"周二:跑了15分钟,周三:跑了0分钟(下雨),周四:跑了18分钟"。他不是在评判自己"周三不应该断",而是看到——"周四我接上了"。
+
+他看到"周一:跟小茜聊了十分钟工作的事,周三:一起看了一集剧,周五:一起在阳台站了一会儿"。他不是在评价"这些事太小",而是意识到——原来我们不是没话说,是没注意到自己在说话。
+
+这个小小的记录,改变了他对"正在发生什么"的认知。
+
+## 五维能量地图
+
+小付的笔记本记录了他个人的变化。但家庭是一个系统,他需要一个更大的视角——五维能量地图。
+
+这是一个非常简单但极其有效的工具。用法如下:
+
+**每个月的最后一天,全家人(愿不愿意参与都行)各自给家庭的五个维度打分。1到10分。**
+
+不是精确的评估,是一种"体感分数"——你觉得这个月,这个维度怎么样?
+
+小付家第一个月打出来的分数:
+
+| 维度 | 小付打分 | 小茜打分 | 小艾(如果参与) |
+|:----:|:--------:|:--------:|:------------:|
+| 身 | 6 | 5 | — |
+| 智 | 7 | 7 | — |
+| 富 | 6 | 5 | — |
+| 行 | 5 | 4 | — |
+| 心 | 7 | 6 | — |
+
+打分不是重点。重点是两个人在交换分数的时候,发生了什么。
+
+小付看到小茜给"行"打了4分,比自己低1分。他问:"你觉得我们这个月的关系怎么样?"小茜说:"比上个月好一点,但还是——就那样吧。"
+
+她没有抱怨。她只是在陈述那个分数。但就是这个分数,让小付意识到:"行"是他俩共同的短板,而且小茜比他自己更敏感于这件事。
+
+他们没在这个晚上解决任何问题。但他们都知道了:下个月,这个地方要多用点力。
+
+这就是五维能量地图的力量——它不给答案,但它让人看见。
+
+**第二个关键动作:看趋势,不看单次分数。**
+
+第一个月的分数没有任何意义。意义从第二个月开始。当你有两个月的分数,你可以比较——这个维度是在涨还是在跌?是稳定地涨还是大起大落?
+
+到了第三个月,小付发现自己的"身"从5分涨到了7分。不是因为奇迹,是因为他连续跑了两个月。数据不会骗人。当你看到那条线在往上走,不需要有人夸你,你自己就知道——有用。
+
+**第三个关键动作:用五行相生分析"怎么办"。**
+
+这是五维框架最精妙的地方。当你发现一个维度分数很低的时候,不一定非要直接去补它。根据五行相生的逻辑,你可以补它的"上游"。
+
+比如,小付的"行"(人际关系)分数低。五行相生关系是:**富生行**。也就是说,财富维度的改善可以带动关系维度的改善。
+
+这听起来有点反直觉——钱跟夫妻关系有关系?但小付仔细想想,发现是真的。他之前跟小茜关系紧张的一个隐形原因,是财务压力——每个月底算账的时候,两个人的情绪都会变差。当他开始记账、开始做一些小副业、开始让财务变得"可看见"之后,他发现自己跟小茜聊钱的时候,语气变了。不再是一副"我们又要没钱了"的紧张感,而是一种"我们来看看这个月怎么样"的从容。
+
+从容的语气,比紧张的语气,更容易开启一次真正的对话。
+
+> **金句:当你不知道从哪里下手的时候,不要盯着短板看,看看短板的上游——那里可能藏着答案。**
+
+## 家庭数据工具:一张纸就够了
+
+谈到"数据"、"记录"、"反馈",很多人第一反应是:又要装App了?
+
+不需要。一张纸,一支笔,就够了。
+
+小付用的那个笔记本,不是什么"智能健康管理本"。就是一个普通的本子——封面上印着一只猫,他女儿买的,9块9。他在扉页上写了五个字:身、智、富、行、心。每天睡前,在对应的栏目下面写一句话。
+
+就一句话。
+
+"今天走了8000步。"
+"辅导作业的时候没有吼。"
+"买了一箱水果,花了45块。"
+"给妈打了一个电话。"
+"睡前做了三次深呼吸。"
+
+一个月后,他翻这个本子的时候发现一件事:他以为这个月"什么都没做",但翻下来,他做了很多。那些事都很小——不是换了一个人、不是家庭翻天覆地。但他在做。那个本子上的每一行字,都在告诉他:你正在一点一点地变好。
+
+你不需要专业的工具来跟踪家庭的改变。你需要的是一个让你"看见"的窗口。一张纸就够了。
+
+**以下是可以直接用的三个工具:**
+
+**工具一:每日一行。** 一个本子,五个栏目。每天每栏写一句话。不评价,只记录。睡前两分钟搞定。
+
+**工具二:每月一图。** 每个月最后一天,给五维打分。把分数连成一条线——然后看三个月的趋势。不用太在意涨跌,在意的是你一直在这个循环里。
+
+**工具三:每季一测。** 如果你家有孩子在做DAN测评,或者你在用任何可量化的工具(体重、体脂率、睡眠时长、每月储蓄率),一个季度测一次。不用更频繁——数据太多也会变成噪音。
+
+这三个工具,不需要任何App。但它们合在一起,会给你一个极其珍贵的东西:**你正在变好的证据。**
+
+## 获得感形成机制
+
+反馈为什么这么重要?因为它触发了一个更深层的心理机制——获得感。
+
+获得感跟"获得了多少"没有直接关系。小付一个月跑了60分钟(平均每天两分钟),不多。但他看到那个记录的时候,他有获得感——他看到自己每天都在做,没有断。获得感来自于"我看见自己在做"这件事本身,跟做了多少没有关系。
+
+这就是为什么很多人在健身房办了年卡却去了三个月就不去了:他们不是没有运动,是看不到变化——体重没掉、肌肉没长、线条没出来。没有获得感,行动就停。
+
+所以,如果你想让改变持续下去,不要依赖"结果"上的获得感(体重下降了、钱变多了),要建立"过程"上的获得感(今天我做了、这周我没有断、这个月我比上个月好一点点)。
+
+过程上的获得感,是自己可以控制的。结果上的获得感,取决于很多你控制不了的因素。
+
+小付后来发现了一个规律:只要他连续记录同一件事超过七天,他对这件事的态度就会发生变化——从"坚持"变成"习惯"。"坚持"需要意志力,"习惯"不需要。中间的桥梁,就是那七天的记录带给他的获得感——他看到自己做成了,于是相信自己还能做下去。
+
+## 看见孩子正在变好
+
+家庭反馈还有一个非常特别的应用场景:**孩子。**
+
+大多数家长是怎么给孩子反馈的?考了100分——表扬。考了80分——"怎么丢了20分?"考了60分——批评。
+
+你给孩子的反馈,永远发生在"结果"层面。但孩子的成长,不是一条直线——它是一个一个微小的、看不见的过程。如果你只在结果上给他反馈,你就错过了他百分之九十的努力。
+
+小付后来换了一种方法。他不再只问小艾"考了多少分"。他开始记录小艾那些"没有结果但有过程"的时刻:
+
+- "今天你自己把书包整理了。"(身——主动管理)
+- "刚才那道题你想了五分钟才问。"(智——独立思考)
+- "你把自己不玩的玩具送给了邻居弟弟。"(行——分享)
+- "今天你主动说了一句'妈妈辛苦了'。"(心——表达爱)
+
+他把这些事记在那本9块9的本子上。一个月后,他把本子拿给小艾看。小艾翻着翻着就笑了。他没说"我好棒"——他指着一行字说:"妈妈那天真的哭了。"
+
+他记得的不是自己做了什么好事。他记得的是,他做的事被人看见了。
+
+对孩子的反馈,最重要的不是"纠正"他,而是**让他看见自己正在变好。**
+
+> **金句:孩子最需要的不是被纠正,是被看见——看见他正在努力成为一个更好的人。**
+
+## 编程式复盘
+
+```python
+# 场景:小付想知道跑步一个月有没有效果
+
+def 反馈校验(行为记录):
+    # 没有数据时——全凭感觉
+    感觉状态 = 模糊评估("嗯……好像好了一点")
+    if 没有数据支撑():
+        return "感觉不可靠,随便一个坏消息就能推翻"
+
+    # 有数据时——看到趋势
+    数据 = 行为记录.汇总()
+    if 数据.趋势() == "上升":
+        信心指数 += 0.3
+        return "你正在变好,证据在这里"
+    elif 数据.趋势() == "持平":
+        return "没变好但也没变差,可以考虑调整了"
+    else:
+        return "有数据总比没有好——现在你知道该调整什么了"
+
+# 有没有数据,是"继续"和"放弃"之间的关键变量
+
+def 家庭反馈系统(成员们):
+    """
+    每个月运行一次
+    输入: 成员体感分数
+    输出: 趋势图 + 一个"下月重点"
+    """
+    五维分数 = [成员.打分() for 成员 in 成员们]
+    平均分 = 计算趋势(五维分数)
+    if 平均分.连续三月上升():
+        信念系统.加强("我们的方向是对的")
+    elif 平均分.连续三月下降():
+        建议动作 = 五行相生分析(最低分)
+        return f"下个月重点: 提升{最低分维度}的上游变量"
+    return "下个月继续记录"
+```
+
+在编程里,你不可能优化一段没有日志的代码。你连它哪里错了都不知道。
+
+在家庭里也一样。你不可能优化一个你看不见的系统。你的感受会骗你,你的记忆会美化或者丑化。但白纸黑字上的数据不会。
+
+记录本身,就是改变的一部分。
+
+## 本章行动卡
+
+这一章的行动卡,不是为了"记录"而记录。是为了让你看到你正在变好的证据。
+
+**行动卡一:每天写一句话,不加评价。** 找一个本子,睡前写一句话——只写事实,不写感受。比如"今天跑了15分钟"、"今天跟小茜聊了十分钟,没聊孩子"、"今天没跑步"。不用评价做得好不好。连续写七天,第七天翻回去看——你可能会被自己做了多少事吓到。
+
+**行动卡二:月底做一个"不问对错"的打分。** 这个月最后一天,给家庭的五个维度各打一个1-10分。就你一个人打,不用跟任何人交换。打完问自己一个问题:这个分数跟上个月比,是高了、低了、还是一样?不用找原因。看到趋势本身,就是最重要的反馈。
+
+**行动卡三:观察孩子一个"没有结果"的时刻。** 这一周,留意孩子一个"不是在完成任务"的瞬间——他在发呆、在反复做同一件事、在自言自语。不用告诉他你看到了。你自己知道就行了。然后问自己:他在那个瞬间,是什么状态?那个状态,跟他在写作业的时候有什么不同?
+
+**行动卡四:回答一个"如果"的问题。** 如果你连续记录了三个月回头去看——你觉得你会最惊讶地发现什么?不用现在回答。把这个问题写在本子的第一页,三个月后再翻开看。你会发现,你当时猜的答案,跟实际看到的,可能完全不一样。
+
+## 本章要点
+
+- 放弃不是因为累,是因为看不见自己在变好——反馈是持续行动的燃料
+- 反馈闭环:行为→数据→感知→强化。大多数人缺的不是行为,是数据
+- 五维能量地图:每月打分,连点成线,季度看趋势。不看单次,看方向
+- 五行相生分析:找不到解决方法时,补短板的上游——而不是死磕短板本身
+- 过程获得感比结果获得感更可控:不依赖"瘦了多少斤",依赖"今天我做了"
+- 一张纸、一支笔就够了——不需要App,不需要复杂的工具
+
+*下一章预告:系统升级——从"我试过"到"我就是"*
+
+
+========================================
+  第十一章-系统升级.md
+========================================
+
+# 第11章:系统升级——从"我试过"到"我就是"
+
+> **算法类比:v1.0 → v1.1 → v1.2。不是重写系统,是持续迭代——家庭幸福的版本号,从来不跳大版本。**
+
+---
+
+小付家"系统"已经跑了三个月。
+
+他们有了晨间仪式(拥抱+一杯水),有了"复盘饭"(每周日晚上),有了记账的习惯(每天睡前两分钟),有了五维打分(月底一次)。所有的事都在做。
+
+但小付发现了一个新问题:**事情太多了。**
+
+他开始觉得每天有太多"要做的事"——跑步、喝水、记账、写日志、陪伴侣聊十分钟、每周复盘、月底打分、季度测评。每件事都不大,但加起来变成了一张长长的清单。他有时候做完一件事,发现自己已经没精力做下一件了。然后他开始简化——今天不跑步了吧,今天不写日志了吧,这个月打分晚几天也没事吧。
+
+简化没有错。但如果系统因为"事情多"就开始垮掉,那说明系统还在第一阶段——**每个习惯都是独立的、靠意志力驱动的单机程序。** 系统的第二阶段,是让习惯互相连接、互相支撑——从"一个一个做"变成"一件事带动另一件事"。
+
+这一章讲的就是:如何从 v1.0 升级到 v1.1、v1.2,而不是重新发明一个系统。
+
+> **金句:系统升级不是推翻重来,是在现有架构上做一次精炼的迭代。**
+
+## 瓶颈识别:第一个瓶颈永远是"我觉得不需要系统"
+
+这个故事有一个反直觉的起点。
+
+小付当时已经跑了两个月、记了一个月的账、做了两次五维打分。有一次他跟一个同事聊起这些事,同事说:"你活得太累了吧,过日子搞那么复杂干嘛?"
+
+这句话小付想了很久。不是因为被打击了,是因为他心里其实也有一部分在认同:**是啊,过日子为什么要靠"系统"?**
+
+这是一个很真实的矛盾。当你开始认真经营家庭的时候,总会有一个声音说:这样太刻意了,太不自然了。别人家不搞这些,不也过得好好的?
+
+这个声音就是系统升级的第一个瓶颈——**你觉得你不需要系统。**
+
+但小付后来想明白了一件事:他不是"搞得太复杂",他是以前根本没意识到自己在运行什么。
+
+每个家庭都在运行一套系统。区别只是:有些系统的设计者是短视频算法、消费广告、社会比较心理和上一代人的惯性——而你从来没有打开过源码看看。小付家之前那套"系统",就是夫妻各忙各的、工资全花光、孩子作业做不完、周末刷手机过去。那也是一套系统——只是没有人设计和维护它。
+
+他说服自己的一句话是:**系统不是不自然,无意识的惯性才是。**
+
+你在手机上刷了两个小时的短视频,不是因为你懒——那是你的注意力系统被算法接管了。你跟伴侣一周没好好说过一句话,不是因为你不想——那是你的沟通系统没有被设计过。你每个月不知道钱花哪了,不是因为你记性不好——那是你的财务系统根本没有日志。
+
+意识到自己已经在运行一个(糟糕的)系统,比什么都重要。因为只有在这个前提下,你才会认真地去做一次升级。
+
+## 回路升级:从单循环到双循环
+
+在前两章,我们建立了两个循环:
+
+一个是**第9章的习惯回路**——触发→动作→奖励→信念。这是"执行循环"。
+一个是**第10章的反馈闭环**——行为→数据→感知→强化。这是"校验循环"。
+
+在 v1.0 阶段,这两个循环是分开的。你执行,然后你校验——它们像两条独立的流水线。但在 v1.1 版本里,它们应该合并成一条回路:
+
+**执行 → 记录 → 看到 → 调整 → 更好地执行**
+
+这条合起来的回路,才是真正的"家庭系统升级"。
+
+小付的 v1.1 升级是这样的:
+
+以前的习惯回路:早上看到跑鞋(触发)→ 出门跑15分钟(动作)→ 洗热水澡(奖励)→ 觉得有用(信念)。
+
+升级后的回路:早上看到跑鞋(触发)→ 跑15分钟(动作)→ 睡前在"身"栏目下写"跑了15分钟"(记录)→ 一周后看到自己每天都在跑(看到)→ 觉得"我确实在变好"(信念强化)→ 下周一睁眼看到跑鞋的时候,不需要纠结了(更好的执行)。
+
+看到了吗?加了两个很小的步骤——记录和回顾。它们没有增加太多时间,但它们把两个循环连在了一起。执行产生数据,数据强化信念,信念反过来让执行更轻松。
+
+**任何系统升级的第一步,永远不是加新功能,而是把已有的功能连起来。**
+
+## 抗干扰升级:家庭防火墙
+
+系统升级的第二件事,是设置防火墙。
+
+不是因为外面都是坏人。是因为外面的干扰太多了——而且它们被精心设计过,比你更懂如何攻破你的注意力。
+
+**第一堵墙:算法推荐防控。**
+
+小付发现,他每晚"睡前两分钟"写日志的习惯,经常被一件事打断——他坐在床上,掏出手机,准备写日志,然后看到一条推送通知。"就点开看一下"——然后半小时过去了。
+
+这不是小付意志力差。这是几百个顶尖工程师设计出来的产品,在跟一个刚跑完步、脑部供氧还没恢复的普通人抢注意力。这不是公平竞争。
+
+小付的解决方案很简单:把写日志的笔和本子放在床头柜上,写日志的时候不拿手机。就这么简单。
+
+但就是这么简单的一个改变,让他的日志完成率从 40% 回到了 90%。
+
+不需要卸载 App。不需要关闭所有推送。只需要在你的系统和外界的干扰之间,加一个物理隔离。你的手机放在客厅充电,你躺在床上看书——就这么简单。
+
+**第二堵墙:外人评价脱敏。**
+
+"你活得太累了吧。"
+"你给孩子报那么多班干嘛?"
+"你们家还记账?至于吗?"
+"这么小的孩子学什么英语?懂吗?"
+
+熟人评价是最隐蔽的干扰。它不会推送通知,但它会在你心里留下一个问号:我是不是真的做错了?
+
+小付后来学会了一句话:**"我们试一下,不合适再调。"**
+
+这句话的妙处在于:它不是反驳,不是辩解,也不是心虚。它表明你只是在做一次"实验"——实验是可以调整的。实验没有对错,只有"有效"和"无效"。当你把家庭经营当成实验,别人的评价就不再是攻击,只是一个(通常缺乏信息量的)反馈。
+
+如果有人坚持说"你这样太刻意了",你可以在心里给他分配一个角色——"友情提示功能,v0.1版本,准确率未知"。然后继续做你的事。
+
+**第三堵墙:与自己和解。**
+
+最后一层防火墙是自己。那个"今天就算了吧"的声音。
+
+小付发现一件事:当他连续两天没跑步的时候,"今天就算了吧"这个声音会变大。当他连续六天都跑了的时候,这个声音会变得几乎没有。
+
+也就是说,**抗干扰能力不是靠意志力的厚度,是靠习惯的连续性。** 连续的时间越长,干扰的攻击力越弱。如果断了,不要想着"重新计算天数",直接"明天接上"。——断一天不会让系统崩溃,断一周才会。
+
+## 功能膨胀管理
+
+系统升级最常见的陷阱,不是功能太少,是功能太多。
+
+小付一开始只有跑步。后来加了喝水提醒,加了记账,加了日志,加了每周复盘,加了五维打分,加了跟小茜的非事务性对话。每件事本身都是好的,但加在一起——他发现自己不是在"生活",是在"执行任务"。
+
+**这是一个系统的功能膨胀。** 也是很多"积极改变"最终失败的主要原因——你做得太多,做到最后,你做的每一件事都变成了负担。
+
+小付的解决方法是一个季度一次的"系统瘦身"。每个季度的最后一个月末,他在复盘饭上问三个问题:
+
+1. **这个季度,哪一件事我们坚持得最好?**
+2. **这个季度,哪一件事我们其实没怎么做?**
+3. **如果只留下三件事,我们会留下什么?**
+
+第三个问题是最关键的。它逼着你做减法。因为只有当你知道"只留三件"的时候,你才知道什么是最重要的。
+
+小付家第一季度留的三件事:跑步(身)、复盘饭(行)、记账(富)。其他事——记录、打分、拥抱——变成了"有就做,没有也不强求"的第二梯队。
+
+说也奇怪。当他把这些事从"必须做"变成"可以做"之后,他反而做得更轻松了。以前写日志像任务,现在写日志像休息。
+
+功能膨胀的解法不是多,是**精。** 做少一点,做长一点,比做很多然后放弃,有用一百倍。
+
+> **金句:最好的系统不是功能最多的系统,是能跑最久的系统。**
+
+## 版本号管理
+
+还有一个非常微妙的心理机制。
+
+小付发现自己有一个心理模式:他想改变的时候,总是想"大改"。比如从完全不记账,一下子跳到"每天记账、做预算、月末复盘"。他坚持了五天,第六天断了,第七天就放弃了——然后在心里给自己下了个结论:"我不是记账那块料。"
+
+这不是小付的问题。这是人的问题——我们倾向于高估自己一次性做重大改变的能力。
+
+解法是**版本号管理。**
+
+在软件工程里,版本号有一个约定:v1.0 → v1.1 → v1.2 是小修小补,v1.0 → v2.0 是大版本升级。大版本升级成本高、风险大、容易翻车。小版本迭代成本低、风险可控、随时能回滚。
+
+"这周开始每天记账"——这是 v2.0 的思维。
+"这周先记下每天花的最大一笔钱"——这是 v1.1 的思维。
+
+小付后来用的方法是:**永远不要从 v1.0 跳到 v2.0。** 他的跑步习惯从"每天15分钟"起步(v1.0),后来加上了晨间拉伸(v1.1),然后加上了跑后日志(v1.2),后来改成了"跑一休一"(v1.3)——因为他发现隔天跑更适合他的节奏。
+
+每一次改动都很小。但几个小改动之后,他回头看——已经跟三个月前完全不一样了。而他几乎没有感觉"自己在坚持"。
+
+如果你想做一个改变,不要问自己"怎么一下子做到完美"。问:**"从 v1.0 到 v1.1,最小的那个改动是什么?"**
+
+## 挫折修复速度
+
+系统升级的最后一个板块,也是最现实的一个板块——**系统肯定会出 bug。**
+
+小付升级到 v1.2 的时候,有一次出问题最严重。公司临时安排他出差一周,他的晨间仪式、跑步习惯、睡前日志——全部断了。他回来之后,那条"每天都做"的连续记录断了七天。他看着那个七天的空白期,感觉就像看到自己"失败了"。
+
+但他这次做了一件跟以前不同的事:他没有说"算了,反正断了,重新开始吧"——也没有说"我要加倍努力补回来"。
+
+他说的是:**"先恢复 v1.0,再考虑升级。"**
+
+他回来的第一天,只做了一件事:穿上跑鞋,出门跑了15分钟。没有记日志,没有记账,没有复盘。就一件事。第二天,他加回了日志。第三天,他加回了记账。
+
+他不再追求"回到断裂前的状态"。他从"最小输入"重新开始。
+
+这就是系统的第三个关键能力:**修复速度比完美度重要。**
+
+一个系统出 bug 不可怕。可怕的是出 bug 之后,你花了很长时间来修复——或者在修复过程中丧失了信心。快修比好修更重要。出差回来第一天只跑15分钟——这不是"退步",这是"快速恢复系统运行"。
+
+> **金句:系统升级不是为了永远不故障,是为了故障之后能更快地恢复。**
+
+## 本章行动卡
+
+这一章的行动卡,是为了让你从"做更多"变成"做更少,但更稳"。
+
+**行动卡一:列一个清单,圈出三个。** 翻出你这段时间在做的事——所有的好习惯、新尝试、"应该做"的事。列出来。然后圈三个:如果只能留三个,你留哪三个?剩下的全部告诉自己"有就做,没有也行"。不是放弃它们,是给最重要的那三件留出空间。
+
+**行动卡二:移动一件东西,代替一个习惯。** 找一个你经常被打断的习惯。问自己:如果把这个习惯需要用到的工具放在手边,把手机放在另一个房间——会发生什么?不用真的做,先想。如果答案让你有点心动,明天试试。
+
+**行动卡三:给下一件想做的事标一个版本号。** 如果你有一个想开始的改变,不要问"怎么做完美"。问:从v0到v1.0,最小的那一个改动是什么?给它标上v1.0。做满两周之后,再问自己:v1.1应该改什么?版本号的好处是——你不会在v1.0的时候要求自己做到v2.0。你只会想:比上一版好一点点就够了。
+
+**行动卡四:写一个"断了之后的第一件事"。** 想一个场景——如果你的习惯全断了(出差、生病、过年),回来之后你做的第一件事是什么?写下那一件。只写一件。把它放在你每天能看到的地方。不是因为你会断,是因为你知道断了之后还能接上——这个知道,比任何计划都重要。
+
+## 本章要点
+
+- 每个家庭都在运行一套系统——区别只是你有没有意识地去设计它
+- 系统升级的第一步不是加新功能,是把已有的功能(执行循环+反馈循环)连起来
+- 家庭防火墙三层:物理隔离(对算法)、认知脱敏(对评价)、连续性修复(对自己)
+- 功能膨胀管理:每季度做一次"只留三件事"的减法——做少一点,做久一点,比做很多然后放弃强一百倍
+- 版本号思维:从 v1.0 到 v1.1,不要跳 v2.0——最小的改动才有最大的持续概率
+- 修复速度比完美度重要:出故障后快速恢复 v1.0,再考虑升级
+
+*下一章预告:端口开放——把家庭能量释放出去*
+
+
+========================================
+  第十二章-端口开放.md
+========================================
+
+# 第12章:端口开放——把家庭能量释放出去
+
+> **算法类比:`server.listen(PORT)`——一个只监听本地回环地址的服务,再稳定也没有用。家庭也需要对外开放端口,才能产生真正的价值。**
+
+---
+
+小付有一个朋友,叫老周。
+
+老周是小付以前的同事。他有一个习惯让所有人都觉得奇怪——每到周末,他会带着老婆孩子回父母家吃饭。不是偶尔,是几乎每周都去。从他家到他父母家,开车四十分钟,来回一个半小时。光路上就要这么久,周末就这么没了。
+
+有一次小付忍不住问他:"你不觉得累吗?"
+
+老周说:"累啊。但我们家前几年出了点事。"
+
+他没说是什么事。但小付后来从其他人那里听到了——老周的父亲突发心梗,因为发现得早,救回来了。那之后老周就想:如果那天不是碰巧被发现了呢?如果父母住得更远呢?如果他没有每周回去,错过了一些征兆呢?
+
+从那以后,他每周回去,雷打不动。
+
+小付那时候在想:**一个家庭这么大,光靠两个人撑着真的够吗?**
+
+---
+
+## 万事靠自己是个陷阱
+
+这是中国文化里最常见的家庭叙事:万事靠自己。
+
+你要自己解决孩子上学的问题,自己解决父母的养老问题,自己应对工作中所有的不确定性。如果做不好,是你能力不够。如果你问别人帮忙,是"添麻烦"。我们从小被教育"不要给别人添麻烦"——所以当真正的麻烦来的时候,大多数人选择的反应不是求助,而是硬撑。
+
+但"万事靠自己"这套系统,在设计上就有一个致命的缺陷:**单点故障。**
+
+你一个人倒了,整个系统就停了。你生病了,孩子没人接。你失业了,房贷没人还。你情绪崩了,所有沟通都中断。这就是为什么那么多看起来好好的家庭,在遇到一次意外之后就一蹶不振——不是他们不够强,是他们的系统没有冗余、没有备份、没有外部节点。
+
+家庭系统的端口开放,不是为了社交——是为了**建立冗余。**
+
+> **金句:你不必一个人撑起整个家。真正稳固的家庭,不是没有意外的家庭,是在意外来临时有人帮忙撑住的家庭。**
+
+## 三种开放等级
+
+端口开放不是"把所有事都告诉别人"——是有策略地、分等级地开放。
+
+**第一级:闭门——你最核心的事,只属于你自己。**
+
+不是所有的端口都需要打开。家庭内部的矛盾、夫妻之间的私密对话、孩子的成长隐私——这些是应该关门的。每一段好的关系,都需要一个不被外人评判的空间。闭门不是封闭,是保护。
+
+**第二级:邀请——打开一扇门,只让特定的人进来。**
+
+这些人是你可以求助的。他们不一定能帮你解决所有问题,但他们是"可以开口"的人。你可以在他们面前说"我不行了"——而他们不会给你讲大道理,不会评价你,不会说"我早就告诉过你"。
+
+很多人以为这种关系需要很多。不需要。小付后来数了一下,他真正"可以开口"的人,不超过五个。一个是他姐,另一个是十几年的老同学,还有两个是前同事(包括老周),再加上小茜——那是五个。五个已经够了。够了的意思不是"足够解决问题",是"你不需要一个人扛"。
+
+**第三级:共创——跟外面的人一起做一件事。**
+
+这是最高等级的开放。它不是你"寻求帮助",也不是"接受支持"——是你跟别人一起,共同创造一些东西。可能是几个家庭一起组一个兴趣小组,可能是你参与小区里的公共事务,可能是你跟几个朋友合伙做一件小生意。
+
+共创的意义不只是"获得资源"。它有更深的价值:**当你跟别人一起做事的时候,你会看到不同的家庭是怎么处理同一类问题的。** 这种"参照系"是任何书本上都学不到的。你会看到有的家庭处理冲突的方式比你从容,有的家庭在教育上的困惑跟你们家一样——甚至,有的家庭还不如你们家。
+
+你不需要通过"被帮助"来获得力量。你跟别人一起做了什么事——那个过程本身,就在告诉你:你不是一个人在战斗。
+
+## 除了自己人,还有谁
+
+端口开放的另一个方向:**不只有血缘和家人。**
+
+小付家搬到新小区之后,小茜认识了隔壁楼的三个妈妈。她们建了一个小群,日常聊的内容无非是:哪家幼儿园好、附近哪个菜场的菜新鲜、谁家孩子在学什么。
+
+看起来就是普通的妈妈群。但有一次小茜跟小付说了一件事:其中一个妈妈吴姐,老公在外地工作,平时一个人带孩子。有一次孩子发烧,她一个人抱着孩子去急诊,在医院折腾了一整夜。第二天早上她在群里发了一条消息:"能不能帮忙接一下孩子放学?"
+
+两个小时后,另一个妈妈帮她接了孩子,还管了一顿饭。
+
+小茜说:"你知道吗?那个群里有六个人,但我们之前谁也没见过谁。"
+
+小付沉默了很久。他在想:如果那天是小茜一个人在家,孩子发烧了——他能找谁?
+
+很多家庭的端口,长期处于 closed 状态。不是因为不需要,是因为没有"开口的习惯"。开口不是麻烦别人。开口是你给别人一个机会——让他们证明他们愿意帮你。你帮过别人,你知道那种"帮上了"的感觉很好。那你为什么不让别人也有这种感觉呢?
+
+**"被需要"是一种能力,"让别人有机会需要你"是另一种能力。**
+
+## 对外输出:帮助别人就是帮助自己
+
+端口开放不只是"输入"——也有"输出"。
+
+输出就是:把你家的经验、能力、资源,输出给外面的人。你不是在"教别人",你在"把自己的系统变成一个多节点网络中的一个节点"。
+
+小付有一个同事在做的事让他印象很深。那个同事是一个业余木工爱好者——周末在车库里做小凳子、小书架,做好了送人。不是卖,是送。他送过邻居、送过孩子的老师、送过小区保安。
+
+有一次小付问他:"你花那么多时间做,送出去又不收钱,图什么?"
+
+他说:"你试过就知道了。"
+
+有一天家里水管爆了。小付不在家,小茜在家,完全不知道水阀在哪。她急得团团转,试过所有能想到的办法——给物业打电话说师傅在别家修要等一个小时,给小付打电话说"你赶紧回来"。然后她想到了那个做木工的邻居。她打了他的电话。对方在电话里告诉她水阀在哪,五分钟之内就帮她关上了。
+
+不是因为他会修水管。是因为他"被输出过"——他输出过他的木工、他的时间、他的友善。在小茜最需要帮助的时候,她的本能是找"那个被输出过的人"。因为输出过的人,看起来像是"愿意帮忙的人"。
+
+端口开放的收益,常常以你意想不到的方式回来。
+
+> **金句:对外输出不是为了回报——但你每一次的输出,都在为未来存一个"被帮助的可能"。**
+
+## 被看见,被需要,被支持
+
+这是端口开放最动人的一层回报。
+
+小付以前觉得"被看见"是一个很虚的词——被谁看见?看见了又怎样?但后来他理解了:被看见不是被评价,是当你做了一些事之后,有人知道你在做。
+
+他周末去小区里跑步,门卫大爷跟他打招呼。跑了一段时间之后,大爷说:"你今天跑晚了一点啊。"那不是一句寒暄——那是大爷注意到他了。他被看见了。
+
+小茜加入了社区读书会。第一次去的时候她谁也不认识,坐在角落里。但有人主动问她:"你是新来的吧?你最近在看什么书?"她被看见了。后来有个妈妈跟她说:"上次你在群里分享的那本书,我去看了,很好看。"她又多了一个"被看见"的时刻。
+
+"被看见"带来的是"被需要"。"被看见"三次之后,小茜在读书会里开始主动分享——她觉得这个地方安全的。她分享了她跟小付做家庭系统的一些尝试。有人说"这个你们也在做啊"——那是第一次有人跟她说,她做的事,别人也在做。
+
+"被需要"带来的是"被支持"。
+
+有一次小付出差,小茜一个人带小艾去看病。排队的时候她发了一条朋友圈——没有抱怨,就说"排队一小时起步"。然后她收到了七条回复。有人说"我帮你带饭",有人说"哪家医院?我来陪你坐一会儿",有人说"别急,我家上次也这样"。那七条回复没有一条能缩短排队时间。但它们让小茜觉得——"我不是一个人。"
+
+你看,端口开放的回报不是直接的。它不是"你帮了别人,别人马上还给你"的即时交易。它是一个缓慢的积累——每一次被看见、每一次被需要、每一次被支持,都在加固你家庭系统的外部支撑层。当真正的风浪来的时候,不是一个人扛,是很多人帮你一起扛。
+
+## 编程式端口开放
+
+```python
+# 场景:小付的家庭端口开放策略
+
+class 家庭端口:
+    def __init__(self):
+        self.端口映射 = {
+            "核心家庭": {"模式": "闭门", "访问者": ["小付", "小茜", "小艾"]},
+            "信任圈":   {"模式": "邀请", "访问者": ["姐姐", "老同学", "老周", "吴姐"]},
+            "社区网":   {"模式": "输出", "访问者": ["小区邻居", "同事", "读书会"]}
+        }
+
+    def 开放(self, 层级, 动作):
+        if 层级 == "邀请":
+            # 向信任圈开放求助端口
+            print(f"我在{动作}上需要帮忙,有没有人有经验?")
+            # 这不是示弱,这是让其他人有机会进入你的支持系统
+        elif 层级 == "输出":
+            # 对外输出你的能力
+            print(f"我在{动作}上有些经验,有需要可以找我聊聊")
+            # 输出过的端口,在需要的时候会自动变成双向通道
+            
+    def 求助(self, 问题类型):
+        if 问题类型 in ["紧急", "需要人"]:
+            return "打开信任圈端口,直接打电话"
+        elif 问题类型 in ["信息", "经验"]:
+            return "打开社区网端口,发消息问问"
+        else:
+            return "先闭门处理,不行再升级"
+```
+
+端口开放的核心不在于"认识多少人"。在于你知道——**不同的事,找不同的人。**
+
+很多家庭的问题不是不认识人,是不分什么事都自己扛。生病了自己扛,财务危机了自己扛,孩子教育问题自己扛。但有些事,你不说出去,别人永远不会知道你需要帮忙。而你不知道的是——你身边的人,其实等着你开口很久了。
+
+## 本章行动卡
+
+这一章的行动卡不教你"社交技巧"。它们只是帮你看到:你并不需要一个人撑所有事。
+
+**行动卡一:回答一个"如果真的需要"的问题。** 如果今天你遇到一件一个人解决不了的事——你会打给谁?写下那个名字。不用多,第一个想到的人就行。然后问自己:上一次你主动联系他是什么时候?如果超过三个月了,今天发一条消息。不用说什么重要的事。一张照片、一个表情、一句"突然想到你"——都行。
+
+**行动卡二:分享一件你做过的小事。** 不是"分享经验",就是说说你做过的一件事——"今天试了一个新菜"、"周末去了一个公园"、"最近在看一本书"。不教别人怎么做,只说"我做了"。在朋友圈写一段话,在群里说一句话都行。你不需要是专家,你只需要是一个"愿意说"的人。
+
+**行动卡三:在电梯里多说一句话。** 下次在电梯里碰到一个认识的但不太熟的人,在你该下电梯之前,多说一句。不要求什么深刻话题。"今天电梯好快"也是一种连接。做完之后问自己:说那句话之前和之后,气氛有什么不一样?
+
+**行动卡四:回答一个"如果"的问题。** 如果今天你突然需要有人帮你接孩子——你能找到几个可以打这个电话的人?0个也没关系。知道这个数字,比假装不需要别人帮忙,重要得多。
+
+## 本章要点
+
+- "万事靠自己"是最脆弱的家庭模式——你一个人倒了,整个系统就停了
+- 端口开放三个等级:闭门(保护核心)、邀请(建立信任圈)、共创(拓展外部网络)
+- 开口不是添麻烦——你给别人一个「被你需要」的机会,对双方都是礼物
+- 对外输出不是为了回报——但每一次输出,都在为未来存一个"被帮助的可能"
+- 被看见→被需要→被支持——外部连接的三个层次,层层加固家庭系统
+- 不同层级的问题找不同的人:急诊找信任圈,经验分享找社区网
+
+*下一章预告:网络效应——你的幸福是最好的传播*
+
+
+========================================
+  第十三章-网络效应.md
+========================================
+
+# 第13章:网络效应——你的幸福是最好的传播
+
+> **算法类比:梅特卡夫定律——网络的价值 ≈ n²。一个幸福的家庭不只是它自己幸福,它会成为更多人改变的开始。**
+
+---
+
+小付自己也没想到,事情会这样发展。
+
+起因很简单。有一次他们公司团建,在饭桌上聊起"育儿"——好几个有孩子的同事都在抱怨:孩子不听话、作业没人辅导、夫妻因为教育问题吵个不停。小付说了一句:"我们家最近还行。"
+
+一群人看着他。"什么叫'还行'?"
+
+小付就说了他开始跑步的事。说了那本9块9的笔记本的事。说了五维打分的事。他没觉得这些事有什么值得说的——他不讲大道理,不讲方法论,就讲他每天做了什么,讲了三个月之后发生了什么变化。
+
+他说完了之后,有两个人加了他微信。其中一个人说:"你刚才说的那个五维打分,能再发我看看吗?"
+
+那之后的一周,那个同事真的在家打了分。他拍了张照片发给小付,说:"我们家'行'只有3分,怪不得最近总吵架。"
+
+小付意识到一件事:**你跟别人说你有一个"家庭系统",别人会觉得你在说教。但你跟别人说"我每天早上看到跑鞋就出门跑15分钟",别人会觉得——这件事他也可以做。**
+
+真实的故事,比任何理论都有传播力。
+
+> **金句:一个普通家庭的真实故事,胜过一百个专家的抽象建议。**
+
+## 一个幸福家庭的隐秘影响力
+
+你也许没意识到,你的家庭正在影响别人——不管你知不知道。
+
+回想一下,你有没有过这样的经历:去一个朋友家吃饭,发现他们家的气氛跟你们家不一样?不是装修不一样,不是菜好不好吃——就是那个氛围。他们说话的方式、他们看彼此的眼神、他们在饭桌上聊的内容。你从那个家走出来之后,心里有一种说不上来的感觉。不是嫉妒,是**参照**——你看到了另一种可能性。
+
+每个家庭都在无意识地影响周围的人。你过得好,你的朋友会看到;你过得不好,你的朋友也会看到。区别在于:**当你过得好的时候,你成了别人的"参照系"——你让他们看到,原来一个普通家庭也可以这样生活。**
+
+小付后来从他的同事那里听说了一件事。那个同事回家打了五维分之后,跟他老婆聊了这件事。他老婆说:"这个确实可以参考。"然后她把这个方法告诉了她闺蜜。那个闺蜜又告诉了她的同事。
+
+小付不知道那个链条传到了哪里。但他突然理解了:如果你把一件简单的事做到位了,它就会有网络效应——不是因为你厉害,是因为你提供了一个"可复制的样本"。
+
+## 可复制的样本
+
+"可复制"是网络效应的前提。不是所有幸福的家庭都能被复制——但"简单到别人也可以试试"的经验,是可以的。
+
+小付总结了一下,他的经验能被传播,有几个特点:
+
+**第一,动作极小。** 他没说自己"每天跑五公里,风雨无阻"——他说的是"每天穿上鞋,出门走两分钟"。后者比前者容易复制一百倍。如果他说的是五公里,大部分人在听到的那一刻就已经放弃了——因为做不到。但"两分钟",每个人都可以。
+
+**第二,起点极低。** 他说的不是"结婚二十年从不吵架"的模范夫妻经验——他说的是"以前也吵,后来发现记个账竟然能缓解吵架"。这个起点,跟大多数人的现实是一致的。不是"完美到学不了",是"普通到有共鸣"。
+
+**第三,结果可见但不过度。** 他说的是"睡眠变好了""跟小茜好像没那么僵了"。他没说"我们家庭幸福指数飙升500%"。这些结果听起来很真实——不是虚假广告,是真实体感。
+
+可复制的样本不需要完美。需要的是:**别人听完之后,心里想的是"我也可以试试"。**
+
+这就是为什么普通家庭的故事比专家建议更有传播力——不是因为它说得更对,是因为它离你更近。
+
+> **金句:你的经验能影响多少人,不取决于它有多正确,取决于它有多容易复制。**
+
+## 从被看见到被效仿
+
+网络效应的起点是"被看见"。
+
+小茜在社区读书会分享五维打分的时候,她没想着"传播"什么。她只是讲了一件"我们家在做的事"。讲完之后,有三个妈妈过来问细节。其中一个人回家之后真的画了一个五维表格,贴在了冰箱上。
+
+两周后,那个妈妈在群里发了一张照片——她老公在冰箱上贴了一张便签,写了一句话:"这周的行,我想提一分。"下面画了一个箭头,指向行那一栏。
+
+一个动作就这样传了下去。
+
+小付和小茜没有做任何"推广"——他们只是在自己家做了一些事,然后在合适的场合说出了这些事。结果这些事像种了一颗树——树上掉下来的种子,不知道被风吹到了哪里,就这样慢慢发了芽。
+
+## 真实的力量
+
+你有没有发现一个现象:现在网上有太多"专家"了。
+
+育儿专家、情感专家、理财专家、人生导师——每个人都在教你怎么生活。但你真的会照着那些专家的建议做吗?大部分时候你不会。因为专家的话"太对了",对到你知道自己做不到。
+
+但一个普通人的一句话,会让你愿意试试。
+
+因为普通人说的不是"你应该怎样",是"我做了什么"。一个是命令,一个是邀请。命令让人抗拒,邀请让人好奇。
+
+小付后来发现,他在公司团建上随口说的那些话,比他在任何正式场合听到的"家庭讲座"都有效果。不是因为他讲得好,是因为他讲得"不对"——他的经验里有失败、有反复、有"有时候我也不知道有没有用"。但这种不确定,恰好是最有说服力的部分。因为真实的生活就是这样——不确定的、起起伏伏的、靠一点一点的小动作慢慢变好的。
+
+**真实,是传播的唯一通行证。**
+
+## 从改变自己到改变身边
+
+网络效应到最后,会发生一件有趣的事:你不再只是为了自己而做。
+
+小付有一天早上起床,穿跑鞋的时候,想到了那个在冰箱上贴便签的同事。他不知道自己为什么会想到他——但他突然意识到:他今天出去跑15分钟,不只是为了他自己。他的记录、他的分享、他的"也不确定有没有用但还是在做"——正在成为某个他认识或不认识的人的参照系。
+
+他不需要成为谁的生活导师。他只需要继续做那件简单的事——穿上跑鞋,出门。因为有人正在看着。
+
+不是被监督的那种"看着"。是当你过得好,你周围的人会感受到。你的状态、你说话的方式、你处理冲突的方式——这些细微的变化,你身边的人会捕捉到。他们可能不会当面说"你最近变化挺大",但他们心里会有一种"好像哪里不一样了"的感觉。当那扇门打开一个小缺口,他们会想:也许我也能试试。
+
+这就是家庭幸福的社会效应——你变好了,你周围的世界也会变好一点点。不是因为你做了什么惊天动地的事,是因为你成了一个活生生的证据:一个普通的家庭,一个普通的上班族,一个普通的妈妈——也可以通过一些很小的事,让生活变得不一样。
+
+> **金句:改变自己不是自私——你变好了,你的家庭就好了一点;你的家庭好了一点,你影响的人就好了一点。这是最小的公益。**
+
+## 编程式网络效应
+
+```python
+# 场景:小付的家庭经验如何产生网络效应
+
+def 家庭经验传播(经验, 传播者):
+    if 经验.复杂度 > 3:  # 超过三个步骤,复制率下降80%
+        return "太复杂了,别人记不住"
+    if 经验.起点 > 普通人水平:
+        return "门槛太高了,别人不想试"
+    if 经验.结果可信度 == "过度夸张":
+        return "听起来像鸡汤,没人信"
+    
+    # 一段经验可以传播的条件:
+    # 1. 动作极小(两分钟可以做完)
+    # 2. 起点极低(谁都可以做)
+    # 3. 结果真实(不夸大,不完美)
+    
+    复制率 = 计算传播系数(经验)
+    网络价值 = 复制率 ** 2  # 梅特卡夫定律
+    
+    if 网络价值 > 1:
+        print(f"{传播者}的家庭经验正在发生网络效应")
+        print(f"被影响的人数正在以{复制率}x的速率增长")
+        print("传播者不需要做任何额外的事——继续过好自己的生活就行了")
+    
+    return 网络价值
+
+
+def 家庭系统社会价值():
+    """
+    一个家庭系统的真正价值:
+    直接价值: 让自己家变得更好
+    间接价值: 成为其他家庭的参照系
+    网络价值: 一个变好的家庭,会带动更多家庭变好
+    """
+    return "你过好自己的日子,就是在改变世界"
+```
+
+这就是网络效应最妙的地方:你不需要做"传播"这件事本身。你只需要把你的系统维护好、让你的家庭变好一点点——然后,在某一次不经意的对话里,你的故事就从一个人传到另一个人。
+
+传到最后,它变成了一个谁也说不清从哪里开始的涟漪。你唯一能确定的,是那个起点——一个普通家庭做了一些普通的事,然后发现,原来普通的力量,才是最大的力量。
+
+## 本章行动卡
+
+这一章的行动卡,不是为了让你去"影响别人"。是为了让你看见——当你过好了,自然会有人看见。
+
+**行动卡一:用三句话说清楚你做的一件小事。** 选一件你家的日常小事,用三句话说清楚:我做了什么?有多简单?有什么变化?不发给任何人,先写下来。写完之后问自己:如果我是第一次听说这件事——我会想试试吗?
+
+**行动卡二:跟一个朋友只说你做了什么。** 下次跟朋友聊到家庭相关的话题,不说"我觉得你应该……",只说"我们家最近在……"。不加建议,不加评价。然后观察对方的反应——他有没有追问?他有没有说"我家也……"?他有没有沉默?每个反应都在告诉你一些东西。
+
+**行动卡三:回答一个问题:你想成为谁家的参照系?** 不用回答别人,回答自己就行。如果你不想,继续过你的日子也没问题。如果你想——你已经不需要再做额外的事了。你只需要继续做你已经在做的事。因为总有人在看着,只是你不知道。
+
+## 本章要点
+
+- 每个家庭都在无意识地影响周围的人——你过好了,就成了别人的"参照系"
+- 可复制的样本三个特征:动作极小、起点极低、结果真实不过度
+- 真实的故事比专家建议有传播力——不是因为说得对,是因为离得近
+- 网络效应不需要"推广"——你只需要继续过好你的日子,你的故事会自己传播
+- 改变自己不是自私:你变好了,你的家庭就好了一点;你的家庭好了一点,你影响的人就好了一点——这是最小的公益
+
+*下一章预告:终章——绘制你家的幸福全景图*
+
+
+========================================
+  终章-绘制你家的幸福全景图.md
+========================================
+
+# 终章:绘制你家的幸福全景图
+
+> **只有全景,才能对话复杂性。**
+
+---
+
+小付翻开那个封面上印着一只猫的笔记本。
+
+从他开始记录到现在,已经过去了一年零三个月。
+
+本子已经写了一半。他翻到第一页——那个时候的字写得歪歪扭扭的,内容也乱七八糟:"今天跑了10分钟(跑了三圈)"、"跟小茜说了三句话(多了)"、"小艾今天没哭(难得)"。他看着这些文字,觉得那时候的自己像一个刚开始学走路的人,每一步都在担心会摔倒。
+
+他又翻到最近的一页。字还是不好看,但内容不一样了。"这周跑了四次(平均18分钟)"、"小茜这周做了读书会分享"、"小艾自己整理了书包连续五天"。
+
+变化不是一夜之间发生的。他甚至说不清具体是哪一天开始的。他只是日复一日地——穿上跑鞋、睡前写一行字、月底打一次分——然后突然有一天发现,那些他以为"可能永远也做不到"的事,已经变成了日常。
+
+你现在读完了前面的全部内容。
+
+你了解了五维框架——身、智、富、行、心。你知道了最小输入的方法。你理解了习惯回路、反馈校验、循环执行。你知道了系统升级和端口开放。
+
+但读完了之后呢?
+
+> **金句:一本书的价值,不在于你读完了它,而在于你读完它之后,做的那件最小的事。**
+
+## 全景回顾:从焦虑到系统
+
+让我们站在终点回头看一眼来时路。
+
+**第1章** 描绘了一条铁轨——焦虑的两条铁轨。很多家庭的焦虑,其实是在这两条铁轨上一个不停地折返跑。你不知道怎么停下来,是因为你只在"一条线上思考",而不是在"一个系统里解决"。
+
+**第2章** 给出了幸福三支柱:快乐、意义、参与。一个稳定的家庭,不是追求快乐到极致,是把三根柱子都立起来,缺哪根补哪根。
+
+**第3章到第7章** 是五维框架的展开。它们各自独立,又通过五行相生连在一起。你不是要成为一个"五维全能"的人——你只需要找到那个最小输入,然后从那里开始。
+
+**第8章** 解决了"怎么开始"的问题。最小输入的概念——把目标缩小到不可能失败的程度。做出最小的行动,让系统动起来,远远好过做最完美的计划却从未开始。
+
+**第9章** 解决了"怎么不停"的问题。习惯回路——触发、动作、奖励、信念。你不需要强大的意志力,你只需要设计一个自动运行的循环。
+
+**第10章** 解决了一个更隐性的问题——"怎么知道自己有没有变好"。记录、反馈、可视化。你不需要靠感觉来判断——你的数据会告诉你真相。
+
+**第11章** 告诉你系统不是一次建成的。从 v1.0 到 v1.1——迭代而不是颠覆,修复速度比完美度重要。
+
+**第12章** 把家庭从封闭系统变成了开放系统。端口开放——你不是一个人在撑这个家,你也不需要一个人撑。
+
+**第13章** 讲的是:当你把这一切都做起来之后,它会有一种出人意料的效应——你的幸福会成为别人的参照系。你不必刻意传播,你的生活本身就在传播。
+
+这就是这趟旅程的完整路线图。从一个人的焦虑出发,到一个系统的全景呈现。
+
+## 五维全景操作系统
+
+现在,我们把这13章的内容浓缩成一张图。你可以把这一页撕下来,贴在冰箱上。
+
+```
+╔══════════════════════════════════════════════════════════╗
+║              五维全景操作系统 — 操作面版                  ║
+╠══════════════════════════════════════════════════════════╣
+║                                                          ║
+║   ┌──────────────────────────────────────────────────┐   ║
+║   │              核 心 价 值 观                      │   ║
+║   │         "不完美,但在一起变好"                   │   ║
+║   └──────────────────────────────────────────────────┘   ║
+║                                                          ║
+║   ┌─────────┐  ┌─────────┐  ┌─────────┐                 ║
+║   │  身 🟢   │  │  智 🔵   │  │  富 🟡   │                 ║
+║   │ 木 → 生长│  │ 火 → 照亮│  │ 土 → 承载│                 ║
+║   │ 运 动    │  │ 学 习    │  │ 理 财    │                 ║
+║   │ 睡 眠    │  │ 阅 读    │  │ 利 他    │                 ║
+║   │ 饮 食    │  │ 创 造    │  │ 节 流    │                 ║
+║   └─────────┘  └─────────┘  └─────────┘                 ║
+║                                                          ║
+║   ┌─────────┐  ┌─────────┐                              ║
+║   │  行 🟣   │  │  心 ❤️   │                              ║
+║   │ 金 → 连接│  │ 水 → 滋养│                              ║
+║   │ 家 庭    │  │ 情 绪    │                              ║
+║   │ 社 交    │  │ 安 全    │                              ║
+║   │ 边 界    │  │ 意 义    │                              ║
+║   └─────────┘  └─────────┘                              ║
+║                                                          ║
+║   ┌──────────────────────────────────────────────────┐   ║
+║   │              运 行 机 制                          │   ║
+║   │   最小输入 → 循环执行 → 反馈校验 → 系统升级      │   ║
+║   │           端口开放 → 网络效应                     │   ║
+║   └──────────────────────────────────────────────────┘   ║
+║                                                          ║
+║   ┌──────────────────────────────────────────────────┐   ║
+║   │              每日操作面板                         │   ║
+║   │  晨间:一杯水 + 一个拥抱 + 一件期待的事           │   ║
+║   │  日间:完成最小输入(选一个维度做五分钟)           │   ║
+║   │  睡前:一行记录 + 一次深呼吸                      │   ║
+║   │  每周:一次复盘饭                                 │   ║
+║   │  每月:一次五维打分                               │   ║
+║   │  每季:一次功能审查 + 版本号更新                  │   ║
+║   └──────────────────────────────────────────────────┘   ║
+║                                                          ║
+╚══════════════════════════════════════════════════════════╝
+```
+
+这张图就是你家的幸福全景操作面板。你不需要记住书里的每一句话,你只需要知道:如果某个维度觉得不舒服,就去那个维度对应的区域看看——你忘了什么,就可以补上什么。
+
+## 你自己的DAN测评(五维自检问卷)
+
+在开始之前,像小付家第一次在餐桌上做的那样,给现在的你家的五个维度打一个分。
+
+这不是考试。没有标准答案。每个问题选最能代表你当前感受的选项,不要想太久——第一感觉通常是最准的。
+
+### 身——身体与活力维度
+
+1. 过去一周,你每天平均睡眠时间大约是多少?
+   A. 7小时以上  B. 6-7小时  C. 5-6小时  D. 经常小于5小时
+
+2. 过去一个月,你每周有几次让身体活动起来的时刻(散步、跑步、做操都可以)?
+   A. 几乎每天  B. 每周3-4次  C. 每周1-2次  D. 几乎没有
+
+3. 你对自己的身体状况的整体感觉是?
+   A. 精力充足,很少疲劳  B. 偶尔疲劳但能恢复
+   C. 经常觉得累  D. 长期处于疲劳状态
+
+### 智——学习与成长维度
+
+4. 过去一个月,你有没有做过一件"学到新东西"的事(读书、听课、查资料、跟人请教都算)?
+   A. 经常有  B. 有过几次  C. 很少  D. 几乎没有
+
+5. 当你遇到不懂的问题时,你的第一反应是?
+   A. 主动去查、去学  B. 会查但有时拖着
+   C. 等别人告诉我  D. 算了不想管
+
+6. 你家孩子的学习状态,你感觉是?
+   A. 孩子主动且开心  B. 主动但有点压力
+   C. 需要催促  D. 长期抗拒
+
+### 富——财富与价值维度
+
+7. 你知道你家上个月的总支出大概是多少吗?
+   A. 很清楚,有记录  B. 大概知道,没有精确记录
+   C. 不太清楚  D. 完全不知道
+
+8. 除了工资收入之外,你家有没有其他的收入来源(哪怕很小)?
+   A. 有,稳定且有增长  B. 有,但不稳定
+   C. 正在尝试  D. 没有,也没想过
+
+9. 你家目前的储蓄状态让你感觉?
+   A. 有安全感  B. 一般,能应对小意外
+   C. 不太够  D. 几乎没有储蓄
+
+### 行——关系与连接维度
+
+10. 过去一周,你跟伴侣之间有过一次"非事务性"的对话吗(不聊家务、孩子、钱)?
+    A. 有,好几次  B. 有,一次  C. 好像没有  D. 已经不记得了
+
+11. 当你遇到困难时,你觉得自己有可以开口求助的人吗(不包括家人)?
+    A. 有,好几个  B. 有一两个  C. 不太确定  D. 没有
+
+12. 你家跟双方父母的关系,整体上让你感觉?
+    A. 和谐且有边界  B. 和谐但有点累
+    C. 有些紧张  D. 长期有冲突
+
+### 心——安全感与情感维度
+
+13. 在这个家里,你能做真实的自己吗?
+    A. 完全可以  B. 大部分时候可以
+    C. 有时候需要掩饰  D. 常常觉得不能说真话
+
+14. 你家有没有一些固定的"家庭仪式"(哪怕很小,比如睡前说晚安、周末一起做早餐)?
+    A. 有,且一直在坚持  B. 有,但不稳定
+    C. 以前有,现在没了  D. 从来没有
+
+15. 你对自己家庭的未来感觉是?
+    A. 乐观,方向明确  B. 比较乐观,但有些不确定
+    C. 有点焦虑  D. 很焦虑,不知道怎么办
+
+---
+
+**计分方式**:A=3分,B=2分,C=1分,D=0分
+
+- **身**(1-3题):___ / 9
+- **智**(4-6题):___ / 9
+- **富**(7-9题):___ / 9
+- **行**(10-12题):___ / 9
+- **心**(13-15题):___ / 9
+
+**怎么看结果:**
+
+- **≥7分:这个维度比较健康。** 继续保持就好,不用刻意加码。
+- **4-6分:这个维度需要留意。** 找到最小输入,从这个维度开始。
+- **≤3分:这个维度可能已经很紧绷了。** 不要急着补短板,回到第3章看看它的上游维度(五行相生)——也许补上游比直接补它更有效。
+
+但最重要的不是分数。是你在打完分之后问自己的那个问题:**我看到了什么?**
+
+## 应用指南:你应该从哪开始?
+
+读完一本书和真正开始做,中间隔着一条河。为了方便你跨过这条河,我根据不同类型的情况,写了几份"启动指南":
+
+### 场景一:你很忙,一天只有5分钟
+
+不要想着"全面升级家庭系统"——那是 v2.0 的思维。你的 v1.0 是:
+1. 选一个维度(推荐"身",因为它最直接、最容易感知)
+2. 设置一个最小的动作:喝水、伸懒腰、深呼吸——都可以
+3. 每天做完后在本子上画一个勾
+
+坚持两周,再看要不要加。
+
+### 场景二:你们夫妻关系紧张,不知道怎么一起做
+
+不要试图让对方"加入你的系统"。你的第一步是:
+1. 把第9章"晨间拥抱"和"餐桌分享圈"这两个仪式试着引入
+2. 不做讨论、不评价效果——先做一周
+3. 一周后问对方一个问题:"你觉得这个可以继续吗?"
+
+很多关系紧张的家庭,问题不是"方向不对",是"太久没有在一个轻松的场景里一起做同一件事"。
+
+### 场景三:你已经在做一些事,但总觉得不够
+
+你需要的不是加新动作,是做一次"系统瘦身"(第11章)。
+1. 列出你现在做的所有"家庭系统动作"
+2. 圈出"如果只留三个,我留哪三个"
+3. 剩下的全部降级。做减法比加法更需要勇气。
+
+### 场景四:你对孩子的成长很焦虑
+
+回到第6章心维度和第7章行维度问自己一个问题:**你给孩子的安全感足够吗?**
+如果答案是否定的,你先不需要研究"报什么班"——你先需要每天用五分钟做一件事:蹲下来,看着孩子的眼睛,问一句"今天你开心吗"。
+
+## 最后:一封信
+
+如果你愿意,把这一页当作小付写给你的。
+
+---
+
+**十年后的小付,写给现在的你**
+
+嘿,你好。
+
+我不知道你现在读这本书的时候,是什么样的心情。
+
+你可能像我当初一样——每天晚上躺下来的时候,脑子里全是"明天要做的事",但又觉得什么事都没做好。你可能对家庭有些失望,对自己也有些失望。你可能觉得"改变"这个词离你太远了——那是有钱人、有闲人、有精力的人才配拥有的东西。
+
+我完全理解。
+
+因为我也曾那样想过。
+
+我后来做的每一件事——跑步、记账、记录、复盘——我从来没有想过它们会彻底改变我的生活。我当时只是想:试试吧。不行就算了。
+
+但你知道后来发生了什么吗?不是奇迹,不是一夜之间天翻地覆。而是有一天,我站在阳台上,看着小艾在楼下跟小朋友玩,小茜在厨房做饭,窗外有阳光照进来——那一刻我突然意识到:我已经很久没有焦虑过了。
+
+不是问题都解决了。问题还是有一堆。工作上的、家里的、钱的问题。但我不再害怕它们了。因为我知道——不管明天发生什么,我有一套系统可以应对。穿上跑鞋出门跑15分钟,睡前写一行字,月底打一次分。就这么简单。
+
+我曾经以为幸福家庭是一个"结果"——你得赚到足够的钱、买到合适的房子、找到对的人、把孩子教育好——然后有一天,你就幸福了。
+
+但后来我知道了:幸福不是一个终点,是一条路。
+
+你不需要等到一切都准备好了才开始走。你只需要知道下一个脚踏在哪里。
+
+你已经在读了这本书,这本身就是你在踏出第一步的证据。
+
+继续走吧。不用太快。每一步都不用太大。
+
+但不要停。
+
+总有一天,你会回头看到自己已经走了多远。
+
+那时候你会发现——你不是在变好。你一直是好的。你只是现在才看见。
+
+——小付
+
+---
+
+> **最后一句:你的家庭不需要完美,只需要——不完美,但在一起变好。**
+
+
+========================================
+  附录-工具包汇总.md
+========================================
+
+# 附录:家庭幸福全景工具包
+
+> **可撕下的实用工具集——不需要重读全书,遇到问题直接翻这一章。**
+
+---
+
+## 一、每日记录模板
+
+### 每日一行
+
+```
+日期: ________  星期: ________
+
+身 : _________________________________
+智 : _________________________________
+富 : _________________________________
+行 : _________________________________
+心 : _________________________________
+
+今天的感受(一句话): _________________________________
+```
+
+**说明**:每天睡前花两分钟,每栏写一句话。不评价,只记录。完成了就写"跑了15分钟",没完成就写"没跑"——记录本身就够了。
+
+---
+
+## 二、每周复盘饭议程
+
+**时间**: 每周日晚上(或其他全家能凑齐的时间)
+**时长**: 15-20分钟
+**规则**: 不批评、不打断、不评价
+
+**流程**:
+
+```
+1. 轮流说(每人3分钟):
+   这周我做了什么?
+   我觉得做得好的是什么?
+   有什么想调整的?
+
+2. 一起确定(5分钟):
+   下周有没有什么特别的事要准备?
+   (出差、考试、聚会、体检等)
+
+3. 一个肯定(2分钟):
+   每个人对其他家庭成员的某件事说一句"我看到你做了……"
+```
+
+**提示**: 让孩子先说。他们愿意说的时候,是最好的观察窗口。
+
+---
+
+## 三、月度五维打分表
+
+### 第___月 家庭五维能量地图
+
+| 维度 | 我 | 伴侣 | 孩子(可选) | 备注 |
+|:----:|:--:|:----:|:----------:|:----:|
+| 身 | /10 | /10 | /10 | |
+| 智 | /10 | /10 | /10 | |
+| 富 | /10 | /10 | /10 | |
+| 行 | /10 | /10 | /10 | |
+| 心 | /10 | /10 | /10 | |
+
+**打分参考**:
+- **8-10分**: 这个月这个维度很好,继续保持
+- **5-7分**: 还行,有些地方可以更好
+- **3-4分**: 明显感觉到问题,需要关注
+- **1-2分**: 这个月在这个维度上几乎没做什么
+
+**打完分之后讨论**:
+1. 最低分的那个维度——是直接补,还是补它的上游?
+2. 最高分的那个维度——做了什么让它这么好?能不能复制到别的维度?
+3. 这个月的分数跟上个月比——趋势是涨还是跌?
+
+---
+
+## 四、季度系统审查清单
+
+**每三个月做一次**。配合五维打分一起做。
+
+### 功能审查
+
+| 问题 | 回答 |
+|:----|:----:|
+| 这个季度,哪一件事我们坚持得最好? | |
+| 这个季度,哪一件事我们其实没怎么做? | |
+| 如果只留下三件事,我们会留下什么? | |
+| 我们是不是加了太多新动作,需要砍掉一些? | |
+
+### 版本号回顾
+
+```
+上一版本: v___.___
+本季度升级内容:
+1. _________________________________
+2. _________________________________
+3. _________________________________
+
+下一版本目标(v___.___):
+_________________________________
+```
+
+### 端口审查
+
+| 外部节点 | 状态(活跃/休眠/断开) | 需要做什么? |
+|:---------|:--------------------:|:-----------:|
+| 信任圈(可以求助的人) | | |
+| 社区网(邻居/同事/群) | | |
+| 对外输出(分享经验) | | |
+
+---
+
+## 五、五行相生速查表
+
+**当你发现一个维度分数低的时候,先看它的上游。**
+
+| 维度 | 五行 | 相生(谁生它) | 相生(它生谁) | 补上游的建议 |
+|:----:|:---:|:------------:|:------------:|:-----------|
+| 身 | 木 | 水(心) | 火(智) | 情绪安全了,身体才会有行动力 |
+| 智 | 火 | 木(身) | 土(富) | 身体状态好了,学习效率自然提高 |
+| 富 | 土 | 火(智) | 金(行) | 学到的东西是可以变现的 |
+| 行 | 金 | 土(富) | 水(心) | 经济宽裕了,才有余力经营关系 |
+| 心 | 水 | 金(行) | 木(身) | 好的关系是情绪安全感的基础 |
+
+**实战用法**:
+
+- 如果"身"分数低(没精力、睡不好)→ 先看"心"(情绪压力大不大)→ 先解决情绪,再解决身体
+- 如果"行"分数低(关系紧张、不想社交)→ 先看"富"(是不是有财务压力)→ 先把钱理清楚,关系会自然改善
+- 如果"智"分数低(不想学、学不进)→ 先看"身"(是不是太累了)→ 休息够了,学习能力就回来了
+
+---
+
+## 六、关键概念速查表
+
+| 概念 | 对应章节 | 一句话定义 |
+|:----|:--------:|:----------|
+| 五维能量模型 | 第3-7章 | 家庭幸福的五个维度:身(木)、智(火)、富(土)、行(金)、心(水) |
+| 五行相生 | 第3-7章 | 一个维度的改善会带动它的下游维度——补上游比补短板更有效 |
+| 最小输入 | 第8章 | 把目标缩小到不可能失败的程度——每天两分钟比每天两小时更容易持续 |
+| 习惯回路 | 第9章 | 触发→动作→奖励→信念——习惯不是靠毅力坚持的,是靠系统自动运行的 |
+| 反馈闭环 | 第10章 | 行为→数据→感知→强化——没有反馈,你会在黑暗中跑步 |
+| 多巴胺重塑周期 | 第9章 | 第3天(新鲜感消退)→ 第7天(第一个体感出现)→ 第14天(体感稳定) |
+| 功能膨胀 | 第11章 | 系统最常见的陷阱不是功能太少,是功能太多——做少一点,做久一点 |
+| 版本号管理 | 第11章 | 从 v1.0 到 v1.1,不要跳 v2.0——最小的改动有最大的持续概率 |
+| 端口开放 | 第12章 | 系统对外开放端口:闭门(核心保护)→ 邀请(信任圈)→ 共创(外部网络) |
+| 网络效应 | 第13章 | 一个幸福的家庭会成为其他家庭的参照系——你的经验是最好的传播 |
+| 家庭防火墙 | 第11章 | 抗干扰三层防御:物理隔离(算法)、认知脱敏(评价)、连续性修复(自己) |
+| 共享注意 | 第9章 | 当全家人知道"每周有一个时刻大家都在说同一件事",每个人都会更投入 |
+| 过程获得感 | 第10章 | 基于"我做了"而不是"我得到了"的满足感——过程上的获得感是自己可控的 |
+| 快速恢复 | 第11章 | 系统出故障后,先恢复 v1.0,再考虑升级——修复速度比完美度重要 |
+
+---
+
+## 七、一句话索引
+
+如果你只能记住每章的一句话,记住这些就够了:
+
+| 章 | 一句话 |
+|:--:|:-------|
+| 1 | 焦虑不是因为有问题,是因为不知道问题在哪 |
+| 2 | 幸福不是没有痛苦,是快乐、意义和参与三根柱子撑着 |
+| 3(身) | 身体是一切的底层——别跟身体讲道理 |
+| 4(智) | 学习不是孩子的专利,大人停止学习的那天就停止成长了 |
+| 5(富) | 钱不是目标,是价值的度量衡——你让别人的生活变好了多少,钱就是那个刻度 |
+| 6(心) | 安全感不是从来不变,是变了之后有人接住你 |
+| 7(行) | 好的关系不是没有冲突,是冲突之后还能坐在一起吃饭 |
+| 8 | 开始不靠意志力,靠把目标缩小到不可能失败 |
+| 9 | 习惯不是靠毅力坚持的,是靠系统自动运行的 |
+| 10 | 放弃不是因为累,是因为看不见自己在变好 |
+| 11 | 系统升级不是为了永远不故障,是为了故障之后能更快地恢复 |
+| 12 | 你不必一个人撑起整个家——端口开放不是示弱,是让更多人有机会帮你 |
+| 13 | 你过好自己的日子,就是在改变别人 |
+| 终 | 你的家庭不需要完美——不完美,但在一起变好 |
+
+---
+
+## 八、启动路径图
+
+不知道从哪里开始?按这个顺序走:
+
+```
+第1步: 「终章」DAN自检问卷
+  ↓ 打完分,知道哪个维度最低
+第2步: 回到对应维度章节(第3-7章)
+  ↓ 看"最小输入"是什么
+第3步: 「第8章」开始做
+  ↓ 用"每日一行"模板记录
+第4步: 「第9章」坚持两周以上
+  ↓ 用"每周复盘饭"保持共享注意
+第5步: 「第10章」月底打分
+  ↓ 看到数据,知道下个月调什么
+第6步: 「第11章」季度审查
+  ↓ 做减法、定版本号、继续
+```
+
+从任何一步开始都可以。重要的是:**不要读完,要开始。**
+
+---
+
+*工具包到此结束。需要时可单独打印使用。*
+
+
+========================================
+  主动健康-书籍策划方案.md
+========================================
+
+# 《家的算法》——浠艾福(Care Family)主动健康书籍策划方案
+
+> 策划日期:2026-07-30
+> 版本:v1.1(第三篇重构为"家庭幸福算法·六步执行")
+
+---
+
+## 一、书籍定位
+
+| 维度 | 定位 |
+|:----:|------|
+| **类型** | 混合型——品牌理念书 + 大众实用指南 |
+| **受众** | 有孩子的家长群体、关注健康养生的中年人、泛大众读者、教育/健康行业从业者 |
+| **范围** | 五维全景(身·智·富·行·心) |
+| **篇幅** | 约 200-300 页 |
+| **架构** | 问题驱动金字塔——问题驱动法(方案二)+ 金字塔结构法(方案三)融合 |
+
+---
+
+## 二、整体框架
+
+```
+┌─────────────────────────────────────────────┐
+│              序章 · 一个普通家庭的周末                │
+│       (场景代入:同时面对健康/教育/财务/关系挑战)        │
+├─────────────────────────────────────────────┤
+│  第一篇:重新定义家庭幸福(2章)               │
+│  → 从痛点出发,引出幸福三支柱                    │
+│    第1章:我们到底在为什么焦虑?                  │
+│    第2章:幸福三支柱——一个家庭的顶层设计         │
+├─────────────────────────────────────────────┤
+│  第二篇:五维全景——给全家的一站式幸福提案(5章)  │
+│  → 每章 = 一个痛点 → 一个维度 → 一套方法        │
+│    第3章:身——主动健康,守住家庭的基本盘         │
+│    第4章:智——赋能未来,给孩子面对未来的底气     │
+│    第5章:富——利他创富,家庭经济的第二曲线       │
+│    第6章:行——人际和谐,以关系滋养幸福           │
+│    第7章:心——大爱相随,让家成为真正的港湾       │
+├─────────────────────────────────────────────┤
+│  第三篇:家庭幸福算法·六步执行指南(6章)         │
+│  → 每个家庭都需要的底层行为操作系统               │
+│    第8章:最小输入——小到不可能失败               │
+│    第9章:循环执行——让好习惯自动运行             │
+│    第10章:反馈校验——看见改变正在发生            │
+│    第11章:系统升级——从"我试过"到"我就是"      │
+│    第12章:端口开放——一个人的觉醒感染一家人      │
+│    第13章:网络效应——一个家庭到一群家庭          │
+├─────────────────────────────────────────────┤
+│  终章 · 绘制你家的幸福全景图                     │
+│  → 行动号召 + 愿景升华                         │
+├─────────────────────────────────────────────┤
+│  附录                                          │
+│  A:五维家庭自测问卷  B:推荐阅读清单  C:行动卡汇总  │
+└─────────────────────────────────────────────┘
+```
+
+---
+
+## 三、详细章节设计
+
+### 序章 · 一个普通家庭的周末
+
+以一个典型中国家庭的周六为场景切入,通过一天中发生的多重冲突(健康/教育/财务/关系/意义),提出全书的**核心问题**:
+
+> 为什么我们明明很努力,家庭却总在"救火"——而不是真正幸福?
+
+引出核心观点:**家庭幸福不是单点问题的逐一解决,而是需要一个系统工程。**
+
+---
+
+### 第一篇:重新定义家庭幸福
+
+#### 第1章:我们到底在为什么焦虑?
+
+**问题驱动**
+- 当代中国家庭焦虑地图:健康焦虑、教育焦虑、财务焦虑、关系焦虑、意义焦虑
+- **核心洞察**:这些焦虑的共同根源是——我们被外部标准推着走
+- **转折**:从"解决问题"到"构建系统"
+
+#### 第2章:幸福三支柱——一个家庭的顶层设计
+
+- **衣食无忧**(身+富):无病无灾有底气,持续进账有保障
+- **受人尊敬**(智+行):真才实学+和谐关系=社会价值
+- **子女传承**(心+智):血脉之外的智慧与爱,才是真正的传承
+- 引入五行哲学作为底层思维框架(相生相克、动态平衡)
+
+---
+
+### 第二篇:五维全景
+
+每章统一结构:**痛点场景 → 核心理念 → 实用方法 → 家庭行动卡**
+
+#### 第3章:身——主动健康,守住家庭的基本盘
+
+**五行属土 | 土厚德载物,身是万物的根基**
+
+| 板块 | 内容 |
+|:----:|------|
+| 痛点 | "年年体检正常,为什么突如其来的大病把一个家打垮了?"——从被动医疗到主动健康 |
+| 核心理念 | 主动健康三层次:不做有害的事 → 做对的事 → 建立系统 |
+| 实用方法 | 家庭饮水革命、五维健康画像、家庭健康日志 |
+| 行动卡 | 记录睡眠质量、升级饮用水源、全家饭后散步 |
+
+#### 第4章:智——赋能未来,给孩子面对未来的底气
+
+**五行属金 | 金者坚也,智慧乃立身之本**
+
+| 板块 | 内容 |
+|:----:|------|
+| 痛点 | "我花了几十万报班,孩子却说'妈妈我恨你'"——从盲目报班到陪伴式成长 |
+| 核心理念 | 面向未来的四种底层能力:认知力、自驱力、抗挫力、审美力 |
+| 实用方法 | 家庭三问、成长档案法、游戏化学习 |
+| 行动卡 | 孩子当小老师、开放式游戏、讨论AI与人的关系 |
+
+#### 第5章:富——利他创富,家庭经济的第二曲线
+
+**五行属水 | 水善利万物而不争,富在利他中生长**
+
+| 板块 | 内容 |
+|:----:|------|
+| 痛点 | "工资涨了,焦虑却没少"——单一收入的风险 |
+| 核心理念 | 利他创富三步走:找到利他优势 → 能力产品化 → 从利他到创富 |
+| 实用方法 | 家庭资源地图、最小闭环验证、财务健康自检 |
+| 行动卡 | 家庭财富会议、盘点不必要支出、分享助人故事 |
+
+#### 第6章:行——人际和谐,以关系滋养幸福
+
+**五行属木 | 木曰曲直,行贵在舒展通达**
+
+| 板块 | 内容 |
+|:----:|------|
+| 痛点 | "对陌生人客客气气,对家人却控制不住脾气"——家是讲道理还是讲爱? |
+| 核心理念 | 家庭和谐三原色:亲子关系(从控制到陪伴)、夫妻关系(从合伙人到同行者)、社交关系(从应酬到滋养) |
+| 实用方法 | 家庭会议制度、三明治沟通法、关系能量账户 |
+| 行动卡 | 一整天不批评人、全家做一件"无目的"的事、写感谢纸条 |
+
+#### 第7章:心——大爱相随,让家成为真正的港湾
+
+**五行属火 | 火曰炎上,心以温暖照亮家族**
+
+| 板块 | 内容 |
+|:----:|------|
+| 痛点 | "春节回家,和父母不知道说什么好"——房子越来越大,家的感觉越来越淡 |
+| 核心理念 | 大爱三境界:看见自己(情绪觉察)→ 看见家人(爱的语言)→ 看见传承(家族价值观) |
+| 实用方法 | 家族故事会、情绪停机坪、家庭仪式感 |
+| 行动卡 | 采访父母的梦想、分享今日开心事、创造家庭小仪式 |
+
+---
+
+### 第三篇:家庭幸福算法·六步执行指南
+
+> **本篇定位**:前两篇回答了"幸福是什么"和"幸福有哪些维度",本篇回答**"怎么做到"**。
+>
+> 六步遵循行为改变的底层逻辑:从微小动作启动 → 固化习惯 → 验证效果 → 内化身份 → 影响家人 → 扩散社区。每一步都是上一步的自然延伸,像算法一样可执行、可迭代。
+>
+> 作者计算机背景 × 家庭健康实践的双重视角贯穿本篇,每章结尾附一段「编程式复盘」——用代码思维回看一个家庭场景。
+
+#### 第8章:最小输入——小到不可能失败
+
+**算法类比**:`min_input() → 任何大于 0 的输入都比 0 好`
+
+| 板块 | 内容 |
+|:----:|------|
+| 核心问题 | "我知道该怎么做,就是启动不了"——行为启动的神经生理障碍 |
+| 关键概念 | 20秒启动法则:把任务拆到20秒内能完成,否则大脑不启动 |
+| 家庭应用 | 不是"每天运动30分钟",而是"换上运动鞋";不是"全面控糖",而是"每餐先吃三口蔬菜" |
+| 角色最小化 | 每个家庭成员在五维中各自的最小输入动作(健康官=倒杯水,学习官=问一个开放问题……) |
+| 反常识 | 自律不是意志力问题,是「前额叶负荷管理」问题——意志力是用来减少决策的 |
+| 编程式复盘 | 一个"想早睡却刷手机到凌晨"的场景,拆解成 if/else 分支 |
+
+#### 第9章:循环执行——让好习惯自动运行
+
+**算法类比**:`while(habit) { execute(); reward(); }` —— 循环体决定结果
+
+| 板块 | 内容 |
+|:----:|------|
+| 核心问题 | "坚持了三天就放弃了"——从单次动作到条件反射 |
+| 关键概念 | 习惯回路四要素(触发→动作→奖励→信念);多巴胺重塑周期 |
+| 家庭角色协同 | 五维角色制度:健康官/学习官/财务官/关系官/心育官轮值,让坚持变成"系统自动运行" |
+| 家庭仪式设计 | 晨间三件套、餐桌分享圈、睡前折返跑——把习惯嵌入家庭时间线 |
+| 编程式复盘 | 用 for 循环 vs while 循环比喻"有终点的坚持"和"无止境的习惯" |
+
+#### 第10章:反馈校验——看见改变正在发生
+
+**算法类比**:`console.log(status) → 没有日志的程序无法调试`
+
+| 板块 | 内容 |
+|:----:|------|
+| 核心问题 | "我怎么知道这样有用?"——获得感缺失是放弃的第一原因 |
+| 关键概念 | 反馈闭环:行为→数据→感知→强化;获得感形成机制 |
+| 五维能量地图 | 每月家庭雷达图打分(原第8章核心内容移至此处),五行相生分析找出短板的上游 |
+| 家庭数据工具 | 家庭健康日志、A2测评追踪、简单表格(不需App,一张纸搞定) |
+| 编程式复盘 | 用 debug 日志类比"写下来的数据比感觉可靠",print("睡眠", score) |
+
+#### 第11章:系统升级——从"我试过"到"我就是"
+
+**算法类比**:`version 2.0 → 不是修复 bug,是重构架构`
+
+| 板块 | 内容 |
+|:----:|------|
+| 核心问题 | "我还是那个控制不住脾气的妈妈"——行为改变的最后一公里:身份认同 |
+| 关键概念 | 身份重塑:自我叙事从"我应该"变成"我是这种人";不是"我在戒烟",而是"我不抽烟" |
+| 家庭文化迭代 | 每个家庭都有自己的操作系统版本——v1.0 "生存模式" → v2.0 "问题驱动" → v3.0 "系统运行" |
+| 方法 | 家族故事会、家庭价值观宣言、给孩子写一封"我眼中的你" |
+| 编程式复盘 | 用 git commit 比喻"每一次改变都是对自我的版本管理——你不需要完美,只需要一次一次 commit" |
+
+#### 第12章:端口开放——一个人的觉醒如何感染一家人
+
+**算法类比**:`open_port(8080) → 向外广播信号`
+
+| 板块 | 内容 |
+|:----:|------|
+| 核心问题 | "我改变了,但家人还在原地"——个人改变如何突破家庭系统的惯性 |
+| 关键概念 | 社会神经共振:有人陪伴、示范、认可,启动门槛指数下降;行为传染效应 |
+| 家庭内扩散策略 | 不改变家人,只"展示数据"("我这周睡眠提升了15%");邀请而非要求;小胜积累信任 |
+| 实战场景 | 妻子想健康饮食但丈夫无动于衷 → 先做自己的部分 → 数据说话 → 丈夫主动加入 |
+| 编程式复盘 | 用 API 调用比喻"你不能控制对方的输出,但可以改变自己的请求参数" |
+
+#### 第13章:网络效应——一个家庭到一群家庭
+
+**算法类比**:`network_effect() → 每个新节点的加入让整个网络更有价值`
+
+| 板块 | 内容 |
+|:----:|------|
+| 核心问题 | "我们一家人变好了,然后呢?"——从家庭幸福到社区幸福 |
+| 关键概念 | 网络效应:单个家庭改变的价值 < 一群家庭互相支持的价值;健康文化场域 |
+| 扩散路径 | 家庭内稳定 → 朋友圈"晒小进步" → 邻居/同学家长围观 → 小圈子互助 → 社区文化 |
+| 案例 | "我们小区三个家庭一起打卡早睡,三个月后整栋楼都知道" |
+| 长期主义 | 不是"革命"是"进化"——每次只动一个维度,每个维度只改一个习惯;21天启动计划(第1周身、第2周行、第3周心+智) |
+| 编程式复盘 | 用分布式系统比喻"一个家庭是一个节点,千万个家庭构成幸福网络" |
+
+---
+
+### 终章 · 绘制你家的幸福全景图
+
+三条核心信息回顾:
+1. **幸福不是单点优化,而是系统工程**
+2. **先诊断再行动,让数据说话**
+3. **长期主义 + 微小改变 = 复利效应**
+
+> 写给读者的一封信:
+> 五维只是一个框架,一张空白地图。
+> 真正的答案,在你家的饭桌上、散步的路上、睡前的那十分钟里。
+
+---
+
+### 附录
+
+- **附录A**:五维家庭自测问卷(读者可直接使用)
+- **附录B**:推荐阅读/资源清单
+- **附录C**:家庭行动卡汇总(可撕下/复印使用)
+
+---
+
+## 四、各章篇幅估算
+
+| 篇章 | 章节 | 页码 |
+|:----:|:----:|:----:|
+| 序章 | 一个普通家庭的周末 | 10页 |
+| 第一篇 | 第1章:我们到底在为什么焦虑? | 25页 |
+| | 第2章:幸福三支柱 | 25页 |
+| 第二篇 | 第3章:身——主动健康 | 35页 |
+| | 第4章:智——赋能未来 | 35页 |
+| | 第5章:富——利他创富 | 30页 |
+| | 第6章:行——人际和谐 | 30页 |
+| | 第7章:心——大爱相随 | 30页 |
+| 第三篇 | 第8章:最小输入 | 18页 |
+| | 第9章:循环执行 | 18页 |
+| | 第10章:反馈校验 | 18页 |
+| | 第11章:系统升级 | 18页 |
+| | 第12章:端口开放 | 16页 |
+| | 第13章:网络效应 | 16页 |
+| 终章 | 绘制你家的幸福全景图 | 10页 |
+| 附录 | 自测问卷/行动卡汇总 | 10页 |
+| **合计** | **13章 + 序终章** | **~300页** |
+
+---
+
+## 五、写作风格建议
+
+| 维度 | 建议 |
+|:----:|------|
+| 语调 | 温暖、真诚、有洞察力,避免高高在上的说教 |
+| 文风 | 故事化叙述为主(案例、场景),数据/方法论为辅 |
+| 每章节奏 | 场景代入 → 问题提出 → 理念展开 → 方法落地 → 行动号召 |
+| 品牌融入 | 浠艾福作为"理念提出者"而非"产品推销者",全书不出现产品广告 |
+| 案例原则 | 真实案例 + 脱敏处理(化名、模糊时间),参照公众号文章规范 |
+
+---
+
+## 六、书名
+
+**确定书名:《家的算法》**
+
+**副标题:五维能量让幸福有迹可循**
+
+> 书名解析:"家的算法"以"算法"这一现代概念比喻家庭幸福的系统方法论,暗示幸福不是靠运气、不是随缘,而是有方法、可复现、可经营的。有技术感但不冰冷,有差异化且易于传播。
+>
+> 作者计算机专业背景贯穿全书:第三篇六步法本身是一套"行为算法",每章结尾设「编程式复盘」专栏——用代码思维回看一个家庭场景,让有技术背景的读者会心一笑,也让没有技术背景的读者觉得新鲜有趣。
+
+---
+
+## 七、专家合作策略
+
+### 合作方式:推荐序 + 学术顾问团
+
+| 角色 | 人数 | 职责 | 领域 |
+|:----:|:----:|------|:----:|
+| **推荐序作者** | 2-3位 | 为书写推荐序,提供个人背书 | 医学/心理学/社会学/教育 |
+| **学术顾问** | 3-4位 | 审阅大纲、核验专业内容、列入扉页顾问名单 | 对应五维各领域 |
+
+### 已提名专家
+
+| 专家 | 身份 | 建议角色 | 对应章节 | 说明 |
+|:----:|------|:--------:|:--------:|------|
+| **张挽时** | 空军总医院磁共振科主任医师、教授、少将,全军放射医学首席专家,国务院特殊津贴 | **推荐序**(医学权威视角) | 第3章:身 | 资深医学权威,虽专攻影像诊断,但其"医疗健康是全民关注的"理念与主动健康一致。建议以"从治病到防病"角度写序 |
+| **王利刚** | 中科院心理所副研究员、硕导,中国心理学会科普委副主任 | **学术顾问**(心理学) | 第4章:智、第7章:心 | 研究方向(青少年心理发展、自我控制、家庭教育)与五维高度契合,也是双培强基工程核心专家 |
+| **双培强基工程** | 人民日报《人民周刊》+中科院心理所联合发起 | **案例/数据合作** | 第4章:智、第10章:反馈校验 | DAN素质能力测评体系可作为书中"智"维度的数据来源和案例基础 |
+
+### 专家画像建议(备选补充)
+
+| 所需领域 | 建议寻找方向 | 对应书中章节 |
+|:--------:|------------|:-----------:|
+| **临床医学/预防医学** | 知名三甲医院医生、健康管理专家 | 第3章:身 |
+| **发展心理学/教育心理学** | 高校教授、知名心理学者 | 第4章:智、第7章:心 |
+| **家庭社会学/婚姻家庭** | 社科院研究员、家庭治疗师 | 第6章:行、第7章:心 |
+| **营养学/运动医学(可选)** | 营养学专家 | 第3章:身 |
+
+### 署名方案
+
+```
+封面:
+
+     家的算法
+     ——五维能量让幸福有迹可循
+
+     浠艾福 著
+     ×××  ×××  ×××  推荐序
+
+扉页:
+
+     学术顾问
+     张XX 教授 · 北京协和医院
+     李XX 教授 · 北京大学心理学系
+     王XX 研究员 · 中国社会科学院
+     (根据实际邀请情况调整)
+
+封底/腰封:
+
+     ×××(知名医生):
+     "这不是一本教你治病,而是教你不再需要治病的书。"
+
+     ×××(心理学教授):
+     "我做了三十年家庭咨询,第一次看到有人把幸福讲得这么清楚又这么系统。"
+```
+
+### 优势
+
+- **品牌归属清晰**:书的主人是"浠艾福",专家是背书者而非争夺者
+- **可信度达标**:推荐序+顾问团对出版社和读者来说都足够权威
+- **协调成本低**:专家只需审阅大纲+写序,2-3个月可完成,无需深度参与写作
+- **营销有抓手**:每位专家都是一个流量入口(粉丝/行业影响力)
+
+
+========================================
+  内容素材整合与章节映射.md
+========================================
+
+# 《家的算法》内容素材整合与章节映射
+
+> 整理日期:2026-07-30
+> 来源:web\articles(56篇健康科普)、运营文案\小红书内容(11篇已发布内容)、发布记录
+
+---
+
+## 一、素材总览
+
+| 来源 | 数量 | 内容特征 | 主要可用章节 |
+|:----:|:----:|---------|:-----------:|
+| web\articles | 56篇HTML | 技术性健康科普(肠道菌群、水素水、疾病预防等),有临床数据支撑 | 第3章 身 |
+| 小红书内容 | 11篇已发布 | 案例化、数据化、带20秒行动指令,风格亲切 | 第3-13章 |
+| 小红书方法论 | 六阶模型+发布指南 | 内容创作底层框架,可提炼为书中"行为改变"理论 | 第8-13章 |
+
+---
+
+## 二、web\articles 健康文章分类与可用素材
+
+### 2.1 肠道菌群系列(5篇 + 配图)
+
+| 文件 | 核心内容 | 书中可用场景 |
+|:----|---------|:-----------|
+| `gut-microbiome-immune.html` | 100万亿微生物调控免疫系统,Th17/Treg平衡,SCFAs抗炎,肠漏与自身免疫 | 第3章"身":肠道是健康的第一道防线 |
+| `gut-microbiota-obesity.html` | 菌群与肥胖的因果关系,Akkermansia菌 | 第3章:体重管理的肠道视角 |
+| `gut-microbiota-testing.html` | 肠道菌群检测方法与指标解读 | 第10章"反馈校验":数据化健康管理 |
+| `leaky-gut.html` | 肠漏症机制(Fasano模型),与多种慢性病关联 | 第3章:从肠漏看整体健康 |
+| `pancreatitis.html` | 胰腺炎与肠道菌群关系,FMT治疗 | 第3章:疾病案例 |
+
+**关键数据**:菌群检测数据、SCFAs抗炎机制、肠漏模型图谱
+
+### 2.2 水/氢水系列(3篇 + 6张图表)
+
+| 文件 | 核心内容 | 书中可用场景 |
+|:----|---------|:-----------|
+| `hydrogen-water-sleep.html` | 氢水改善睡眠的5项临床RCT证据,PSQI评分,交感/副交感神经 | 第3章:饮水革命 + 第8章"最小输入"(换杯水就是启动) |
+| `tap-water-pollution.html` | 自来水污染现状与健康风险 | 第3章:家庭饮水安全 |
+| `water-purifier-guide.html` | 净水器选购指南 | 第3章:行动卡素材 |
+
+**关键数据**:HYDRAPPET RCT (2025, n=36) PSQI显著改善;Mizuno双盲 (2017) 交感/副交感平衡;Tan et al. (2024) 长新冠睡眠改善
+
+### 2.3 疾病科普系列(8篇)
+
+| 文件 | 对应疾病 | 书中可用场景 |
+|:----|---------|:-----------|
+| `cancer.html` | 癌症预防 | 第3章:主动健康 vs 被动医疗 |
+| `diabetes.html` | 糖尿病 | 第3章:生活方式病 |
+| `stroke.html` | 脑卒中 | 第3章 |
+| `alzheimer.html` | 阿尔茨海默 | 第3章 + 第7章"心":脑健康与家庭记忆 |
+| `osteoporosis.html` | 骨质疏松 | 第3章 |
+| `metabolic-syndrome.html` | 代谢综合征 | 第3章 |
+| `cardio-cerebro.html` | 心脑血管 | 第3章 |
+| `uric-acid.html` | 高尿酸/痛风 | 第3章 |
+
+**用法**:每篇含疾病机制+预防方案,可作为第3章"为什么主动健康比被动医疗重要"的论据
+
+### 2.4 益生菌/益生元系列(4篇)
+
+| 文件 | 核心内容 | 书中可用场景 |
+|:----|---------|:-----------|
+| `probiotics-science.html` | 益生菌科学证据 | 第3章:精准营养 |
+| `probiotics-guide.html` | 益生菌选购指南 | 第3章:行动卡 |
+| `prebiotics-science.html` | 益生元科学证据 | 第3章 |
+| `prebiotics-guide.html` | 益生元食物清单 | 第3章:日常饮食 |
+
+### 2.5 其他
+
+| 文件 | 核心内容 | 书中可用场景 |
+|:----|---------|:-----------|
+| `exercise-mood-cognition.html` | 运动改善情绪与认知 | 第3章 + 第4章"智":运动的双重价值 |
+| `plastic-health.html` | 塑料微粒健康风险 | 第3章 |
+| `indicator-*.html` (7篇) | 健康指标解读(微生物多样性、神经递质、维生素等) | 第10章"反馈校验":健康数据化 |
+| `turmeric.html` / `puerarin.html` / `enagic-turmeric.html` | 天然营养素 | 第3章 |
+
+---
+
+## 三、小红书已发布内容 → 章节映射
+
+### 3.1 完整映射表
+
+| 文章 | 维度 | 核心话题 | 关键数据 | 可用章节 |
+|:----|:----:|---------|---------|:-------:|
+| 第一篇-暑假没意思 | 心/行/智 | 亲子关系、归属感 | 78%孩子认为"爸妈不关心我感受";归属感2.1/10 | 第7章 心 / 第6章 行 |
+| 第二篇-没意思背后 | 心/智 | 自主感、四无问题 | 自主感3.3→4.5,归属感2.0→7.3(3个月) | 第4章 智 / 第7章 心 |
+| 第二篇-不是不想专注(大脑没吃饱) | 智 | 肠脑轴、注意力、铁营养 | 注意力49%,双歧杆菌0.22%,铁10/100 | 第4章 智 / 第3章 身(肠脑轴) |
+| 第三篇-早睡20秒 | 身 | 睡眠、20秒启动 | 入睡提前125分钟(30天),焦虑量表降7分 | 第3章 身 / 第8章 最小输入 |
+| 第三篇-购物车里… | 富 | 家庭财务盲区 | "月入2万,看不见钱流向" | 第5章 富 |
+| 第四篇-记账第一分钟 | 富 | 记账、财商 | 年记账家庭儿童财商+19分(n=246) | 第5章 富 |
+| 第四篇-通讯录1493人 | 行 | 社会连接、孤独感 | "1493个好友,凌晨两点没人问" | 第6章 行 |
+| 第五篇-吼完孩子后悔一晚上 | 心 | 情绪脑劫持、深呼吸 | 边缘系统比前额叶快几毫秒;焦虑量表1周降7分 | 第7章 心 / 第8章 最小输入 |
+| 第五篇-吼完孩子试试这个情绪开关 | 心 | 闻花香+吹蜡烛法 | 7天吼叫从5次降到1次 | 第7章 心 / 第8章 |
+| 第六篇-哈佛呼吸法3分钟 | 身 | 4-7-8呼吸、副交感神经 | 从躺下到睡着15分钟 | 第3章 身 / 第8章 |
+| 第七篇-复盘孩子本周3个进步 | 智 | 周复盘、正向反馈 | A2测评3个月平均提升0.6分 | 第4章 智 / 第9章 循环执行 |
+
+### 3.2 核心可复用框架(源自小红书方法论)
+
+**1. 健康行为三定律**
+- 20秒启动法则
+- 多巴胺重塑周期(3天/7天/14天可感知变化)
+- 社会神经共振(打卡+陪伴)
+
+→ 适用于第8章(最小输入)、第9章(循环执行)、第12章(端口开放)
+
+**2. 六阶×五维映射矩阵**
+```
+六阶 ↓ \ 五维 →  身      智      富      行      心
+①有效启动      穿鞋出门  问开放题  记一笔  发问候  深呼吸
+②持续坚持      早睡打卡 周复盘   月定投  群接龙  情绪日记
+③获得感形成    体感数据  A2提升  资产图  关系温度 焦虑降分
+④身份重塑      健康管理  相信节奏 长期主义 给温度  理解情绪
+⑤意见领袖化    带家人控  影响妈妈群 分享财商  帮邻居  情绪模板
+⑥社会扩散      小区晨练 班级打卡 理财读书会 邻里互助 妈妈互助月
+```
+
+→ 适用于第8-13章,作为每章的"家庭行动卡"模板
+
+**3. 内容案例规范**
+- 化名:小茜、小付、小艾、小然(复用同一化名形成系列)
+- 数据来源标注:"浠艾福家庭健康报告 2026H1,n=246"
+- 脱敏:不出现真实姓名、学校、住址
+
+---
+
+## 四、专家资源匹配
+
+| 专家 | 可提供的核心资源 | 书中具体用途 |
+|:----|----------------|:-----------|
+| **王利刚**(中科院心理所) | 青少年心理发展研究数据、自我控制理论、家庭教育方法论 | 第4章"智":自主感/胜任感/归属感三维框架;第7章"心":家庭情绪管理 |
+| **双培强基工程** | DAN素质能力测评体系(A2/B4报告)、真实测评数据(脱敏) | 第4章"智":A2六维分作为案例;第10章"反馈校验":测评前后对比数据 |
+| **张挽时**(空军总医院) | 医学权威背书,从早期诊断到预防的视角 | 第3章"身":推荐序,强调"从治病到防病" |
+
+---
+
+## 五、未发布/待读取素材
+
+| 来源 | 文件 | 状态 |
+|:----|:----|:----|
+| 发布记录\ | 历史记录.md(公众号文章) | 文件路径异常,待定位 |
+| web\articles | 其余约40篇HTML | 批量提取摘要需专项处理 |
+| 小红书内容 | 发布数据复盘清单.md / 小红书发布指南.md / 账号资料更新速查卡.md | 运营文档,书中可用度低 |
+
+---
+
+## 六、素材使用原则
+
+1. **web\articles = 论据库**:数据、机制、研究结论 → 用于支撑第3章的科学性
+2. **小红书 = 案例库**:故事、场景、行动指令 → 用于第3-13章的场景代入和行动卡
+3. **方法论 = 框架库**:三定律、六阶矩阵、3/7/14天节奏 → 用于第8-13章的核心方法论
+4. **所有素材必须二次加工**:不直接搬运原文,改写为书的口吻(温暖+有洞察力)
+5. **数据引用标注统一**:"浠艾福家庭健康报告"+"样本量"
+
+---
+
+*本文档为素材索引,详细内容需逐篇阅读原文*
+
+
+========================================
+  竞品调研分析.md
+========================================
+
+# 《家的算法》竞品调研分析
+
+> 日期:2026-07-30
+> 目的:明确《家的算法》在市场中的差异化定位
+
+---
+
+## 一、调研范围
+
+围绕家庭幸福、健康管理、家庭教育、家庭关系四个相关赛道,调研2020-2025年出版的畅销书及代表性著作。
+
+---
+
+## 二、竞品分类分析
+
+### 2.1 家庭健康管理类
+
+| 书名 | 作者 | 出版信息 | 核心内容 | 页数 | 定价 |
+|:----|:----|:--------|---------|:----:|:----:|
+| 《家庭健康管理全书》 | 冯雪 | 天津科技出版社 2025 | 生活方式管理、饮食/运动/睡眠全方位覆盖,纯健康视角 | 905页 | ¥168 |
+| 《主动医学》 | 段玉聪/樊光辉 | 中国科技出版社 2025.8 | AI赋能主动健康,偏学术/科技视角,融合《黄帝内经》治未病 | 360页 | ¥128 |
+| 《越主动 越健康》 | 董建群 | 人卫出版社 2023 | 主动健康干预知识和技能,慢性病自我管理 | - | ¥70 |
+| 《DK家庭医生》 | 英国DK公司 | 中国大百科全书出版社 2015 | 经典医学百科工具书,疾病诊断+自助处理 | 648页 | ¥350 |
+
+**分析**:
+- 健康类竞品全部聚焦在"身体"维度,未涉及家庭关系、教育、财务等
+- 《家庭健康管理全书》虽全面但偏工具书(905页),阅读门槛高
+- 《主动医学》结合AI概念,但仍是医疗视角
+- **我们的差异化**:健康只是五维之一,且以"主动幸福"而非"主动防病"为定位
+
+---
+
+### 2.2 家庭关系/心理学类
+
+| 书名 | 作者 | 出版信息 | 核心内容 | 页数 | 定价 |
+|:----|:----|:--------|---------|:----:|:----:|
+| 《为何家会伤人》 | 武志红 | 北京联合出版公司 百万畅销 | 中国家庭问题深层剖析,心理学视角 | - | - |
+| 《经营幸福的家》 | 伊莱恩·吉布森 | 北京联合出版公司 2024.7 | 美国家庭治疗视角,家庭系统分析 | 224页 | ¥59 |
+| 《幸福家庭的7个习惯》 | 史蒂芬·柯维 | 中国青年出版社 经典 | 高效能7习惯在家庭中的应用 | - | - |
+| 《稳稳的幸福》 | 舒平 | 清华大学出版社 2015 | 家庭关系+孩子成才同步解决方案 | - | - |
+
+**分析**:
+- 此类书籍多从"问题/伤痛"出发(疗愈、解决焦虑),视角偏消极
+- 武志红的《为何家会伤人》影响力极大,但定位为"揭示问题"而非"构建方案"
+- 引进书(柯维、吉布森)缺乏中国家庭文化的根基感
+- **我们的差异化**:视角更积极、建设性——不是"治病"而是"构建系统";以中国五行哲学为底层
+
+---
+
+### 2.3 育儿教育类
+
+| 书名 | 作者 | 出版信息 | 核心内容 |
+|:----|:----|:--------|---------|
+| 《不强势的父母,了不起的孩子》 | 王丹/丁韵融 | 人民邮电出版社 2024 | 自驱力/学习力/情绪力/创造力/沟通力/幸福力 6种能力 |
+| 《积极养育》 | 张轩溢/杨泓 | 人民邮电出版社 2024.10 | 培养自驱/坚韧/有爱的孩子 |
+| 《笑得出来的养育》 | 李一诺 | 湛庐文化 | 父母自我觉察与疗愈 |
+| 《别和叛逆期的孩子较劲》 | 尚阳 | 2023.12 | 亲子沟通50招 |
+
+**分析**:
+- 育儿书市场极大,但全部聚焦"如何养孩子",忽略家庭系统整体
+- 父母角色被窄化为"教育者",而非"家庭经营者"
+- **我们的差异化**:不把家庭等同于"育儿",而是涵盖夫妻、财务、传承、健康的全系统
+
+---
+
+### 2.4 多维/模型体系类
+
+| 书名 | 作者 | 出版信息 | 维度体系 | 局限 |
+|:----|:----|:--------|:--------:|:----|
+| 《幸福婚姻的五种能力》 | 明心橙/明心勇 | 北京理工大学出版社 2022 | 幸福婚姻五维模型 | 仅限婚姻领域 |
+| 《整体幸福教养》 | 田小芬 | 台海出版社 2024.9 | 八维幸福心系统 | 偏教育+心理学,体系复杂(8维) |
+| 《中国式创业家庭》 | 朱建安 | 浙江大学出版社 2024 | 家庭动力学分析 | 偏创业家庭,受众窄 |
+
+**分析**:
+- "多维模型"在书籍中并不罕见,但现有体系各有局限:
+  - 要么只覆盖单一领域(婚姻、教育)
+  - 要么体系过于复杂(八维),不易记忆和传播
+- **我们的差异化**:
+  - 五维(身智富行心)简洁易记,与五行对应,有文化厚度
+  - 覆盖家庭全维度,不偏科
+  - 有相生相克的动态关系,不是静态分类
+
+---
+
+## 三、竞争优势总结
+
+### 3.1 市场空白定位图
+
+```
+                   单一维度 ◄────────────► 全景系统
+                        │                    │
+    健康管理类 ◄────────┤                    │
+    育儿教育类 ◄────────┤                    │
+    家庭关系类 ◄────────┤                    │
+                        │                    │
+                        ▼                    ▼
+                  问题/疗愈导向         主动构建导向
+                        │                    │
+    武志红系列 ◄────────┤                    │
+     疗愈类书 ◄────────┤                    │
+                        │              ◄───  《家的算法》
+                        │                     │
+                        ▼                     ▼
+```
+
+### 3.2 六大差异化维度
+
+| 维度 | 竞品现状 | 《家的算法》 |
+|:----:|---------|------------|
+| **范围** | 单一维度(健康/关系/教育/财务) | **五维全景(身智富行心),覆盖家庭全维度** |
+| **哲学根基** | 西方心理学/医学为主 | **五行哲学 + 中国家庭文化,文化认同感强** |
+| **视角** | 问题/疗愈导向("为何家会伤人") | **主动构建导向("家的算法"),正向积极** |
+| **工具性** | 少有可量化的工具 | **五维能量地图、家庭角色分工、21天计划** |
+| **结构** | 或偏理论太抽象,或偏技巧太零碎 | **每章:痛点→理念→方法→行动卡,闭环可操作** |
+| **书名** | 偏传统/直白 | **《家的算法》——有差异、有记忆点、易传播** |
+
+### 3.3 竞品对本书的威胁评估
+
+| 竞品 | 威胁程度 | 理由 |
+|:----|:--------:|------|
+| 《家庭健康管理全书》冯雪 | ⭐⭐⭐ | 健康维度极详细,可能分流"身"章节的读者预期 |
+| 《为何家会伤人》武志红 | ⭐⭐⭐ | 家庭心理类标杆,品牌效应强 |
+| 《主动医学》段玉聪 | ⭐⭐ | 概念上有重叠(主动),但定位不同(医疗 vs 家庭幸福) |
+| 《幸福婚姻的五种能力》 | ⭐⭐ | 也有"五维",但受众窄(仅婚姻) |
+| 《稳稳的幸福》 | ⭐ | 概念重叠但出版时间早(2015),且无品牌加持 |
+| 柯维系列 | ⭐ | 经典但引进书,中国文化代入感弱 |
+
+### 3.4 应对策略
+
+1. **强调"全景"而非"单点"**——竞品都是单一维度,本书是唯一覆盖身智富行心的系统方案
+2. **正面语境**——不做"问题书",做"构建书",与武志红等形成差异化互补
+3. **五行哲学壁垒**——中国传统文化根基,引进书无法复制
+4. **工具化落地**——能量地图、家庭角色分工、行动卡,竞品无此配套
+5. **书名即定位**——"算法"带科技感、方法论感,与其他书名形成区隔
+
+---
+
+## 四、目标读者购买动机分析
+
+| 读者群体 | 买这本书的原因 | 之前可能买什么书 |
+|---------|---------------|----------------|
+| 家长(父母) | 不仅是育儿,而是想系统性经营家庭 | 育儿书、教育类 |
+| 健康关注者 | 不止是身体,而是关联到幸福全局 | 健康管理书 |
+| 大众读者 | 被书名吸引,"家的算法"引发好奇 | 家庭关系书 |
+| 从业者 | 系统框架可用于工作(教育/咨询/健康) | 专业工具书 |
+
+---
+
+## 五、结论
+
+《家的算法》处于一个**显著的市场空白位置**:
+
+1. 没有一本书以"五维全景"视角覆盖家庭全部维度
+2. 没有一本书将中国五行哲学与现代家庭管理结合
+3. 没有一本书同时具备"系统性理论框架"和"可量化工具"
+
+**核心Slogan方向:**
+
+> 家庭幸福不是平衡,是算法。
+> 五维能量,让幸福有迹可循。
+
+
+========================================
+  design/coaching-integration-design.md
+========================================
+
+# 教练技术融入方案设计
+
+> 融入,不挑明。读者吸收方法,但不觉得在读教练教材。
+
+## 一、核心原则
+
+### 三条红线
+
+| 规则 | 说明 |
+|:----|:------|
+| **不命名** | 不出现"GROW模型""深度倾听""有力提问""教练式沟通"等术语 |
+| **只应用** | 所有教练技术通过对话和行动卡"演"出来,让读者自然吸收 |
+| **不要不给** | 不给没被要的东西——不替角色解决问题,角色自己找到答案 |
+
+### "不要不给"的定义
+
+全书最核心的教练原则。具体含义:
+- **不给建议** → 用提问代替
+- **不给答案** → 让对方自己找到
+- **不给评判** → 先倾听,再回应
+- **不给安慰** → 先接住情绪,再一起看方向
+
+这条原则不仅用于角色之间的互动,也用于作者与读者之间的关系——不替读者总结"你应该怎么做",而是用行动卡让读者自己得出结论。
+
+---
+
+## 二、三层改造体系
+
+### 第一层:对话改造(全书所有对话场景)
+
+**目标**:让小付、小茜、小艾之间的沟通方式自然体现教练核心能力。
+
+#### 1.1 深度倾听
+
+**原文风格(改造前):**
+> 小付说:"你应该早点跟他说。"
+> 小茜说:"我知道,但我说不出口。"
+> "那你就别想那么多,直接说。"
+
+**教练风格(改造后):**
+> 小付没接话。他等了两秒。
+> "你觉得最难开口的是哪一句?"
+> 小茜愣了一下,想了想:"第一句吧。"
+> 小付点了点头:"嗯。"
+> 然后什么都没说。
+> 过了好一会儿,小茜自己开口了:"其实我知道该怎么说,就是缺一个开口的时机。"
+
+**要点**:小付没有给建议,没有催促,没有安慰。他只是让小茜自己说出来了。
+
+#### 1.2 有力提问
+
+**改造前:**
+> "你应该去跟他聊聊。"
+> "我觉得你们可以试试这个方法。"
+
+**改造后:**
+> "你觉得怎么做会比较舒服?"
+> "如果这件事有人能帮你,你希望那个人是谁?"
+> "如果结果可以很理想,你希望看到什么?"
+
+**使用规则**:全书所有"建议型表达"替换为"提问型表达"。角色可以问,但不替对方答。
+
+#### 1.3 不评判回应
+
+**改造前:**
+> "这有什么好担心的,你想多了。"
+> "别哭了,没事的。"
+
+**改造后:**
+> "你在担心什么?"
+> "你哭是因为…?"
+> 不说话,先陪他坐着。
+
+**使用规则**:情绪场景中,先接住情绪,再处理问题。小艾哭的时候,小付不急着说"别哭了",而是蹲下来等他平复。
+
+#### 1.4 相信对方有答案
+
+全书最底层的教练信念。在以下场景体现:
+- 小艾遇到问题时,小付不是教他怎么做,而是问"你打算怎么办"
+- 小茜倾诉工作烦恼时,小付不是给解决方案,而是问"你心里有答案了吗"
+- 小付自己遇到困惑时,小茜也用同样方式对他
+
+**效果**:读者看到的是一个"不替别人活"的家庭——每个人都有自己的空间和能力。
+
+#### 对话改造标志
+
+所有对话场景在改完后需要满足以下全部条件:
+- [ ] 没有一句"你应该…"(来自角色对角色)
+- [ ] 没有一句"我早就告诉过你"
+- [ ] 每个冲突场景中,至少有一处提问代替建议
+- [ ] 每个情绪场景中,至少有一处先倾听后回应
+- [ ] 提问来自不同角色(小付、小茜、小艾都有"教练时刻")
+
+---
+
+### 第二层:方法层(重点第6-7章,其他章节视场景嵌入)
+
+**目标**:在家庭方法的叙述段落中,让教练流程自然浮现,但不命名。
+
+#### 2.1 第6章(心)— 安全感与"不给"
+
+**现有结构**:第6章讲安全感、情绪接纳、家庭底层温度。
+
+**改造方向**:
+- 在小付与小艾的互动中,加入"忍住不给"的段落——小付很想给建议,但忍住了,保持沉默,等小艾自己开口
+- 这一段的叙述节奏放慢,让"不说话的陪伴"产生感染力
+- 在"安全感"的定义段落中自然融入教练信念:**真正的安全感不是有人帮你解决问题,是有人相信你自己能解决**
+- 情绪场景中加入"复述"手法(不命名):小付听完后说"所以你是觉得……对吗?"——让读者自然学到此方法
+
+#### 2.2 第7章(行)— 关系与提问
+
+**现有结构**:第7章讲关系连接、冲突修复、边界设置。
+
+**改造方向**:
+- 冲突修复段落中,小付和小茜的对话从"你总是…""你为什么不…"改为教练式提问——"你觉得我们刚刚的问题在哪?""你希望下次怎么处理?"
+- 加入"沉默"——在夫妻对话中,重要提问之后留出空白,让读者也感受到那个等待的空间
+- 关系修复的步骤不写成"第一步道歉,第二步沟通",而是通过对话自然呈现:提问→等待→确认→再提问
+- 在"边界设置"段落中嵌入"不要不给"——好的边界不是要求对方怎样,是明确自己可以给什么、不能给什么
+
+#### 2.3 其他章节的轻嵌入
+
+| 章节 | 嵌入点位 | 方式 |
+|:----|:---------|:-----|
+| 第4章(智) | 小付学习新东西的场景 | 用提问代替"查资料"——先问自己"我想解决什么问题" |
+| 第5章(富) | 利他优势定位 | 用教练式问句引导读者自己发现利他优势 |
+| 第8章(最小输入) | 方法说明 | 最小输入本身就是教练式思维——不要求一步到位 |
+| 第9章(循环执行) | 复盘饭环节 | 小付在复盘饭上只提问,不评价 |
+
+---
+
+### 第三层:行动卡(全部章节)
+
+**目标**:所有行动卡的问题改为教练式提问,让读者自己找到答案。
+
+#### 3.1 通用替换规则
+
+| 改造前(指示型) | 改造后(教练型) |
+|:----------------|:----------------|
+| 列出三件事…… | 如果有一件事你想最先改变,你会选哪一件? |
+| 写下你该做什么…… | 如果你做了,你觉得最大的不同会是什么? |
+| 分析一下原因…… | 如果跳出来看,你觉得问题可能出在哪? |
+| 制定一个计划…… | 如果明天你就要开始,你会做的第一步是什么? |
+| 评价一下自己…… | 1-10分你给自己打几分?如果提高1分,需要发生什么? |
+
+#### 3.2 四种教练问句类型分布
+
+**奇迹问句**(想象问题已经解决):
+- "如果三个月后你家在'行'这个维度上变好了,你会最先注意到什么变化?"
+- "假设你已经在做这件事了——你觉得那是什么样子的?"
+
+**量尺问句**(让抽象变具体):
+- "1-10分,你给这个习惯的坚持程度打几分?"
+- "如果要提高1分,你需要做的一件最小的事是什么?"
+
+**应对问句**(发现已有的能力和资源):
+- "以前有没有遇到过类似的情况?你是怎么处理的?"
+- "这么难你还撑下来了,你是靠什么做到的啊?"
+
+**例外问句**(找到成功经验):
+- "有没有一次你们没有吵架?那次有什么不一样?"
+- "这周你有没有一次主动学习的时刻?当时发生了什么?"
+
+#### 3.3 各章行动卡改造示例
+
+**第3章(身)行动卡改造:**
+- 原:「写下你每天可以做的运动,选一个开始」
+- → 改:「如果只做一件最不费力的事让身体动起来——你会选什么?」
+- 原:「列一个作息改善计划」
+- → 改:「1-10分你给现在的作息打几分?如果要涨1分,最小的一步是什么?」
+
+**第6章(心)行动卡改造(重点):**
+- 原:「写一句你想对孩子说的话」
+- → 改:「如果今天你对孩子只说一句话,哪一句你觉得他/她最需要听到?」
+- 原:「回忆一件让你感到安全的事」
+- → 改:「你家的哪个时刻让你觉得'可以不用那么紧张'?那个时刻有什么特别的地方?」
+
+**第7章(行)行动卡改造(重点):**
+- 原:「写下你可以改善关系的一件事」
+- → 改:「如果让你选一个场景修得更好——你会选哪个?怎么做会让它不一样?」
+- 原:「想一想你跟伴侣最近一次吵架的原因」
+- → 改:「上次你觉得没被理解的时候——你希望对方做什么不一样的事?」
+
+**第10章(反馈校验)行动卡改造:**
+- 原:「记录你每天做的事」
+- → 改:「如果这个月只记录一件事——你会选什么?为什么它最重要?」
+
+---
+
+## 三、改造优先级
+
+### 第一批:高影响低改动
+
+| 文件 | 改造内容 | 预估改动量 |
+|:-----|:---------|:----------:|
+| 第七章-行-内容草稿.md | 对话改造 + 方法层 + 行动卡 | 中 |
+| 第六章-心-内容草稿.md | 对话改造 + 方法层 + 行动卡 | 中 |
+| 各章行动卡 | 全部替换为教练式提问 | 每张卡2-3行 |
+
+### 第二批:中影响中改动
+
+| 文件 | 改造内容 | 预估改动量 |
+|:-----|:---------|:----------:|
+| 序章、第1章、第2章 | 对话改造(小付家初期的互动) | 每处1-2句 |
+| 第八章-最小输入.md | 行动卡改造 | 少量 |
+| 第九章-循环执行.md | 行动卡改造 + 复盘饭对话 | 少量 |
+
+### 第三批:低影响点缀
+
+| 文件 | 改造内容 | 预估改动量 |
+|:-----|:---------|:----------:|
+| 第3、4、5章 | 行动卡改造 + 少量对话点缀 | 少量 |
+| 第11-13章、终章 | 行动卡改造 | 少量 |
+
+---
+
+## 四、"不要不给"的具体场景清单
+
+| # | 场景 | 所在章节 | 当前状态 | "不要不给"应用 |
+|:-:|:-----|:--------:|:---------|:--------------|
+| 1 | 小付想告诉小艾怎么系鞋带 | 序章 | 已写 | 改:小付蹲下来,等小艾自己试 |
+| 2 | 小茜倾诉工作烦恼,小付给建议 | 第1章 | 已写 | 改:小付问"你觉得怎么办",不给建议 |
+| 3 | 小艾摔倒了哭,小付说"没事" | 第3章 | 已写 | 改:小付先不说话,蹲在旁边等 |
+| 4 | 小付要教小艾学习方法 | 第4章 | 已写 | 改:小付问"你试过什么方法管用" |
+| 5 | 小茜说跟闺蜜闹矛盾了 | 第7章 | 已写 | 改:小付说"嗯"+"你希望怎么处理" |
+| 6 | 小付想指导小茜做读书分享 | 第12章 | 已写 | 改:小付问"你需要我做什么" |
+
+---
+
+## 五、质量控制
+
+### 改造完成后自查清单
+
+- [ ] 全书没有任何教练术语出现(GROW、倾听层级、教练技术等)
+- [ ] 每句角色之间的"建议型表达"已改为"提问型表达"
+- [ ] 情绪场景中,角色先接住情绪再处理问题
+- [ ] 所有行动卡的问题形式不是指示型,而是开放式或量尺式
+- [ ] 小付、小茜、小艾三个角色都有发出"教练式提问"的时刻
+- [ ] 第6章有"沉默陪伴"段落(不替对方解决问题)
+- [ ] 第7章有"提问代替建议"的冲突修复段落
+- [ ] "不要不给"在至少4个不同章节中自然呈现
+- [ ] 全书读下来,读者不会意识到"这用了教练技术",但会感觉"这个方法很有用"
+
+
+========================================
+  design/coaching-integration-plan.md
+========================================
+
+# 教练技术融入实施计划
+
+**目标**:在全书中融入教练式对话、方法和行动卡(B层方案),不命名教练术语
+
+**优先级**:第一批(高影响低改动)→ 第二批(中影响中改动)→ 第三批(低影响点缀)
+
+**工具**:逐章编辑,每章作为独立任务
+
+---
+
+## 任务清单
+
+### 第一批:重点章节改造
+
+- [ ] **任务1**:第6章(心)— 对话改造 + "不要不给"场景 + 方法段落 + 行动卡
+- [ ] **任务2**:第7章(行)— 对话改造 + 提问式冲突修复 + "不要不给"场景 + 行动卡
+- [ ] **任务3**:各章行动卡统一改造(第3-13章、终章、附录)
+
+### 第二批:对话层轻改造
+
+- [ ] **任务4**:序章 + 第1-2章 — 初期对话改造
+- [ ] **任务5**:第8-10章 — 对话点缀 + 行动卡复查
+
+### 第三批:剩余章节点缀
+
+- [ ] **任务6**:第3-5章 + 第11-13章 — 行动卡复查 + 少量对话植入
+
+---
+

+ 241 - 0
book/design/coaching-integration-design.md

@@ -0,0 +1,241 @@
+# 教练技术融入方案设计
+
+> 融入,不挑明。读者吸收方法,但不觉得在读教练教材。
+
+## 一、核心原则
+
+### 三条红线
+
+| 规则 | 说明 |
+|:----|:------|
+| **不命名** | 不出现"GROW模型""深度倾听""有力提问""教练式沟通"等术语 |
+| **只应用** | 所有教练技术通过对话和行动卡"演"出来,让读者自然吸收 |
+| **不要不给** | 不给没被要的东西——不替角色解决问题,角色自己找到答案 |
+
+### "不要不给"的定义
+
+全书最核心的教练原则。具体含义:
+- **不给建议** → 用提问代替
+- **不给答案** → 让对方自己找到
+- **不给评判** → 先倾听,再回应
+- **不给安慰** → 先接住情绪,再一起看方向
+
+这条原则不仅用于角色之间的互动,也用于作者与读者之间的关系——不替读者总结"你应该怎么做",而是用行动卡让读者自己得出结论。
+
+---
+
+## 二、三层改造体系
+
+### 第一层:对话改造(全书所有对话场景)
+
+**目标**:让小付、小茜、小艾之间的沟通方式自然体现教练核心能力。
+
+#### 1.1 深度倾听
+
+**原文风格(改造前):**
+> 小付说:"你应该早点跟他说。"
+> 小茜说:"我知道,但我说不出口。"
+> "那你就别想那么多,直接说。"
+
+**教练风格(改造后):**
+> 小付没接话。他等了两秒。
+> "你觉得最难开口的是哪一句?"
+> 小茜愣了一下,想了想:"第一句吧。"
+> 小付点了点头:"嗯。"
+> 然后什么都没说。
+> 过了好一会儿,小茜自己开口了:"其实我知道该怎么说,就是缺一个开口的时机。"
+
+**要点**:小付没有给建议,没有催促,没有安慰。他只是让小茜自己说出来了。
+
+#### 1.2 有力提问
+
+**改造前:**
+> "你应该去跟他聊聊。"
+> "我觉得你们可以试试这个方法。"
+
+**改造后:**
+> "你觉得怎么做会比较舒服?"
+> "如果这件事有人能帮你,你希望那个人是谁?"
+> "如果结果可以很理想,你希望看到什么?"
+
+**使用规则**:全书所有"建议型表达"替换为"提问型表达"。角色可以问,但不替对方答。
+
+#### 1.3 不评判回应
+
+**改造前:**
+> "这有什么好担心的,你想多了。"
+> "别哭了,没事的。"
+
+**改造后:**
+> "你在担心什么?"
+> "你哭是因为…?"
+> 不说话,先陪他坐着。
+
+**使用规则**:情绪场景中,先接住情绪,再处理问题。小艾哭的时候,小付不急着说"别哭了",而是蹲下来等他平复。
+
+#### 1.4 相信对方有答案
+
+全书最底层的教练信念。在以下场景体现:
+- 小艾遇到问题时,小付不是教他怎么做,而是问"你打算怎么办"
+- 小茜倾诉工作烦恼时,小付不是给解决方案,而是问"你心里有答案了吗"
+- 小付自己遇到困惑时,小茜也用同样方式对他
+
+**效果**:读者看到的是一个"不替别人活"的家庭——每个人都有自己的空间和能力。
+
+#### 对话改造标志
+
+所有对话场景在改完后需要满足以下全部条件:
+- [ ] 没有一句"你应该…"(来自角色对角色)
+- [ ] 没有一句"我早就告诉过你"
+- [ ] 每个冲突场景中,至少有一处提问代替建议
+- [ ] 每个情绪场景中,至少有一处先倾听后回应
+- [ ] 提问来自不同角色(小付、小茜、小艾都有"教练时刻")
+
+---
+
+### 第二层:方法层(重点第6-7章,其他章节视场景嵌入)
+
+**目标**:在家庭方法的叙述段落中,让教练流程自然浮现,但不命名。
+
+#### 2.1 第6章(心)— 安全感与"不给"
+
+**现有结构**:第6章讲安全感、情绪接纳、家庭底层温度。
+
+**改造方向**:
+- 在小付与小艾的互动中,加入"忍住不给"的段落——小付很想给建议,但忍住了,保持沉默,等小艾自己开口
+- 这一段的叙述节奏放慢,让"不说话的陪伴"产生感染力
+- 在"安全感"的定义段落中自然融入教练信念:**真正的安全感不是有人帮你解决问题,是有人相信你自己能解决**
+- 情绪场景中加入"复述"手法(不命名):小付听完后说"所以你是觉得……对吗?"——让读者自然学到此方法
+
+#### 2.2 第7章(行)— 关系与提问
+
+**现有结构**:第7章讲关系连接、冲突修复、边界设置。
+
+**改造方向**:
+- 冲突修复段落中,小付和小茜的对话从"你总是…""你为什么不…"改为教练式提问——"你觉得我们刚刚的问题在哪?""你希望下次怎么处理?"
+- 加入"沉默"——在夫妻对话中,重要提问之后留出空白,让读者也感受到那个等待的空间
+- 关系修复的步骤不写成"第一步道歉,第二步沟通",而是通过对话自然呈现:提问→等待→确认→再提问
+- 在"边界设置"段落中嵌入"不要不给"——好的边界不是要求对方怎样,是明确自己可以给什么、不能给什么
+
+#### 2.3 其他章节的轻嵌入
+
+| 章节 | 嵌入点位 | 方式 |
+|:----|:---------|:-----|
+| 第4章(智) | 小付学习新东西的场景 | 用提问代替"查资料"——先问自己"我想解决什么问题" |
+| 第5章(富) | 利他优势定位 | 用教练式问句引导读者自己发现利他优势 |
+| 第8章(最小输入) | 方法说明 | 最小输入本身就是教练式思维——不要求一步到位 |
+| 第9章(循环执行) | 复盘饭环节 | 小付在复盘饭上只提问,不评价 |
+
+---
+
+### 第三层:行动卡(全部章节)
+
+**目标**:所有行动卡的问题改为教练式提问,让读者自己找到答案。
+
+#### 3.1 通用替换规则
+
+| 改造前(指示型) | 改造后(教练型) |
+|:----------------|:----------------|
+| 列出三件事…… | 如果有一件事你想最先改变,你会选哪一件? |
+| 写下你该做什么…… | 如果你做了,你觉得最大的不同会是什么? |
+| 分析一下原因…… | 如果跳出来看,你觉得问题可能出在哪? |
+| 制定一个计划…… | 如果明天你就要开始,你会做的第一步是什么? |
+| 评价一下自己…… | 1-10分你给自己打几分?如果提高1分,需要发生什么? |
+
+#### 3.2 四种教练问句类型分布
+
+**奇迹问句**(想象问题已经解决):
+- "如果三个月后你家在'行'这个维度上变好了,你会最先注意到什么变化?"
+- "假设你已经在做这件事了——你觉得那是什么样子的?"
+
+**量尺问句**(让抽象变具体):
+- "1-10分,你给这个习惯的坚持程度打几分?"
+- "如果要提高1分,你需要做的一件最小的事是什么?"
+
+**应对问句**(发现已有的能力和资源):
+- "以前有没有遇到过类似的情况?你是怎么处理的?"
+- "这么难你还撑下来了,你是靠什么做到的啊?"
+
+**例外问句**(找到成功经验):
+- "有没有一次你们没有吵架?那次有什么不一样?"
+- "这周你有没有一次主动学习的时刻?当时发生了什么?"
+
+#### 3.3 各章行动卡改造示例
+
+**第3章(身)行动卡改造:**
+- 原:「写下你每天可以做的运动,选一个开始」
+- → 改:「如果只做一件最不费力的事让身体动起来——你会选什么?」
+- 原:「列一个作息改善计划」
+- → 改:「1-10分你给现在的作息打几分?如果要涨1分,最小的一步是什么?」
+
+**第6章(心)行动卡改造(重点):**
+- 原:「写一句你想对孩子说的话」
+- → 改:「如果今天你对孩子只说一句话,哪一句你觉得他/她最需要听到?」
+- 原:「回忆一件让你感到安全的事」
+- → 改:「你家的哪个时刻让你觉得'可以不用那么紧张'?那个时刻有什么特别的地方?」
+
+**第7章(行)行动卡改造(重点):**
+- 原:「写下你可以改善关系的一件事」
+- → 改:「如果让你选一个场景修得更好——你会选哪个?怎么做会让它不一样?」
+- 原:「想一想你跟伴侣最近一次吵架的原因」
+- → 改:「上次你觉得没被理解的时候——你希望对方做什么不一样的事?」
+
+**第10章(反馈校验)行动卡改造:**
+- 原:「记录你每天做的事」
+- → 改:「如果这个月只记录一件事——你会选什么?为什么它最重要?」
+
+---
+
+## 三、改造优先级
+
+### 第一批:高影响低改动
+
+| 文件 | 改造内容 | 预估改动量 |
+|:-----|:---------|:----------:|
+| 第七章-行-内容草稿.md | 对话改造 + 方法层 + 行动卡 | 中 |
+| 第六章-心-内容草稿.md | 对话改造 + 方法层 + 行动卡 | 中 |
+| 各章行动卡 | 全部替换为教练式提问 | 每张卡2-3行 |
+
+### 第二批:中影响中改动
+
+| 文件 | 改造内容 | 预估改动量 |
+|:-----|:---------|:----------:|
+| 序章、第1章、第2章 | 对话改造(小付家初期的互动) | 每处1-2句 |
+| 第八章-最小输入.md | 行动卡改造 | 少量 |
+| 第九章-循环执行.md | 行动卡改造 + 复盘饭对话 | 少量 |
+
+### 第三批:低影响点缀
+
+| 文件 | 改造内容 | 预估改动量 |
+|:-----|:---------|:----------:|
+| 第3、4、5章 | 行动卡改造 + 少量对话点缀 | 少量 |
+| 第11-13章、终章 | 行动卡改造 | 少量 |
+
+---
+
+## 四、"不要不给"的具体场景清单
+
+| # | 场景 | 所在章节 | 当前状态 | "不要不给"应用 |
+|:-:|:-----|:--------:|:---------|:--------------|
+| 1 | 小付想告诉小艾怎么系鞋带 | 序章 | 已写 | 改:小付蹲下来,等小艾自己试 |
+| 2 | 小茜倾诉工作烦恼,小付给建议 | 第1章 | 已写 | 改:小付问"你觉得怎么办",不给建议 |
+| 3 | 小艾摔倒了哭,小付说"没事" | 第3章 | 已写 | 改:小付先不说话,蹲在旁边等 |
+| 4 | 小付要教小艾学习方法 | 第4章 | 已写 | 改:小付问"你试过什么方法管用" |
+| 5 | 小茜说跟闺蜜闹矛盾了 | 第7章 | 已写 | 改:小付说"嗯"+"你希望怎么处理" |
+| 6 | 小付想指导小茜做读书分享 | 第12章 | 已写 | 改:小付问"你需要我做什么" |
+
+---
+
+## 五、质量控制
+
+### 改造完成后自查清单
+
+- [ ] 全书没有任何教练术语出现(GROW、倾听层级、教练技术等)
+- [ ] 每句角色之间的"建议型表达"已改为"提问型表达"
+- [ ] 情绪场景中,角色先接住情绪再处理问题
+- [ ] 所有行动卡的问题形式不是指示型,而是开放式或量尺式
+- [ ] 小付、小茜、小艾三个角色都有发出"教练式提问"的时刻
+- [ ] 第6章有"沉默陪伴"段落(不替对方解决问题)
+- [ ] 第7章有"提问代替建议"的冲突修复段落
+- [ ] "不要不给"在至少4个不同章节中自然呈现
+- [ ] 全书读下来,读者不会意识到"这用了教练技术",但会感觉"这个方法很有用"

+ 28 - 0
book/design/coaching-integration-plan.md

@@ -0,0 +1,28 @@
+# 教练技术融入实施计划
+
+**目标**:在全书中融入教练式对话、方法和行动卡(B层方案),不命名教练术语
+
+**优先级**:第一批(高影响低改动)→ 第二批(中影响中改动)→ 第三批(低影响点缀)
+
+**工具**:逐章编辑,每章作为独立任务
+
+---
+
+## 任务清单
+
+### 第一批:重点章节改造
+
+- [ ] **任务1**:第6章(心)— 对话改造 + "不要不给"场景 + 方法段落 + 行动卡
+- [ ] **任务2**:第7章(行)— 对话改造 + 提问式冲突修复 + "不要不给"场景 + 行动卡
+- [ ] **任务3**:各章行动卡统一改造(第3-13章、终章、附录)
+
+### 第二批:对话层轻改造
+
+- [ ] **任务4**:序章 + 第1-2章 — 初期对话改造
+- [ ] **任务5**:第8-10章 — 对话点缀 + 行动卡复查
+
+### 第三批:剩余章节点缀
+
+- [ ] **任务6**:第3-5章 + 第11-13章 — 行动卡复查 + 少量对话植入
+
+---

+ 81 - 0
clear-opencode-sessions.bat

@@ -0,0 +1,81 @@
+@echo off
+setlocal enabledelayedexpansion
+
+echo [1/3] 正在查找所有opencode会话...
+echo.
+
+set SESSIONS_FOUND=0
+
+for /f "usebackq tokens=*" %%A in (`opencode session list 2^>nul ^| findstr /R "[a-f0-9\-]\{32,\}"`) do (
+    set "SID=%%A"
+    for /f "tokens=* delims= " %%B in ("!SID!") do set SID=%%B
+    if not "!SID!"=="" (
+        echo  删除会话: !SID!
+        opencode session delete !SID! >nul 2>&1
+        set /a SESSIONS_FOUND+=1
+    )
+)
+
+if !SESSIONS_FOUND!==0 (
+    echo   (未发现通过CLI列出的会话)
+) else (
+    echo   共删除 !SESSIONS_FOUND! 个会话(CLI方式)
+)
+echo.
+
+set DELETED=0
+for %%P in ("%LOCALAPPDATA%\opencode" "%APPDATA%\opencode" "%USERPROFILE%\.opencode") do (
+    if exist "%%P\sessions" (
+        for /r "%%P\sessions" %%F in (*.json) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+        for /r "%%P\sessions" %%F in (*.jsonl) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+        for /r "%%P\sessions" %%F in (*.sqlite) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+        for /r "%%P\sessions" %%F in (*.db) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+        rmdir /s /q "%%P\sessions" >nul 2>&1
+    )
+    if exist "%%P\sessionstore" (
+        for /r "%%P\sessionstore" %%F in (*.json) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+        for /r "%%P\sessionstore" %%F in (*.jsonl) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+        for /r "%%P\sessionstore" %%F in (*.sqlite) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+        for /r "%%P\sessionstore" %%F in (*.db) do (
+            del /q /f "%%F" >nul 2>&1 && set /a DELETED+=1
+        )
+    )
+)
+
+echo.
+echo [2/3] 直接删除 !DELETED! 个残留文件
+echo.
+
+echo [3/3] 清理阻塞进程...
+taskkill /F /FI "IMAGENAME eq opencode.exe" >nul 2>&1
+taskkill /F /FI "IMAGENAME eq node.exe" /FI "WINDOWTITLE eq *opencode*" >nul 2>&1
+
+for /f "tokens=5 delims=," %%P in ('netstat -ano ^| findstr ":4090"') do (
+    taskkill /F /PID %%P >nul 2>&1
+)
+
+echo   清理完毕
+echo.
+echo ===== 以下文件/目录被安全保留 =====
+echo   [技能]    %USERPROFILE%\.config\opencode\skills\
+echo   [插件]    %USERPROFILE%\.config\opencode\plugins\
+echo   [MCP]     %USERPROFILE%\.config\opencode\mcp\
+echo   [配置]    %USERPROFILE%\.config\opencode\opencode.json
+echo   [OMF链]   %APPDATA%\opencode\omf.json
+echo.
+echo 会话清理完成!
+pause

+ 30 - 0
clear_sessions.ps1

@@ -0,0 +1,30 @@
+# OpenCode 会话清理脚本
+# 删除所有会话历史,保留插件/MCP/provider等配置
+# 用法: powershell -File clear_sessions.ps1
+
+$cli = "$env:LOCALAPPDATA\OpenCode\opencode-cli.exe"
+if (-not (Test-Path $cli)) {
+    Write-Error "opencode-cli not found at $cli"
+    exit 1
+}
+
+Write-Host "Fetching all sessions..." -ForegroundColor Cyan
+$sessions = & $cli db "SELECT id FROM session ORDER BY time_created;" --format json 2>&1 | ConvertFrom-Json
+$total = $sessions.Count
+
+if ($total -eq 0) {
+    Write-Host "No sessions to delete." -ForegroundColor Green
+    exit 0
+}
+
+Write-Host "Deleting $total sessions..." -ForegroundColor Yellow
+$i = 0
+foreach ($s in $sessions) {
+    $i++
+    $pct = [math]::Round($i / $total * 100, 1)
+    Write-Progress -PercentComplete ($pct) -Activity "Deleting sessions" -Status "$i / $total ($pct%)" -CurrentOperation $s.id
+    & $cli session delete $s.id 2>&1 | Out-Null
+}
+
+Write-Host "Done. Deleted $total sessions." -ForegroundColor Green
+Write-Host "Config at ~/.config/opencode/ is untouched (plugins, MCP, providers preserved)." -ForegroundColor Cyan

+ 17 - 0
create-role-users.sql

@@ -0,0 +1,17 @@
+-- 手动创建测试用户 SQL
+-- 执行方式: mysql -h192.168.16.251 -P3306 -uzxyj -pzxyj@123 zxyj < create-role-users.sql
+
+-- 先确认当前 role 字段类型
+SHOW COLUMNS FROM users WHERE Field = 'role';
+
+-- 创建用户(密码字段留空,用验证码登录)
+INSERT INTO users (phone, nickname, role, real_name, password, openid, family_id, created_at, updated_at) VALUES
+('13900139000', '文章管理员', 'article_admin', '文章管理', '', 'admin_article_001', 0, NOW(), NOW()),
+('13900139001', '活动管理员', 'activity_admin', '活动管理', '', 'admin_activity_001', 0, NOW(), NOW()),
+('13900139002', '商品管理员', 'supplier_admin', '商品管理', '', 'admin_supplier_001', 0, NOW(), NOW()),
+('13900139003', '供应商体系管理员', 'supplier_admin', '供应商管理', '', 'admin_vendor_001', 0, NOW(), NOW()),
+('13900139004', '营养师管理员', 'nutritionist', '营养管理', '', 'admin_nutritionist_001', 0, NOW(), NOW()),
+('13900139005', '成长规划师', 'teacher', '规划师', '', 'admin_teacher_001', 0, NOW(), NOW());
+
+-- 验证结果
+SELECT id, phone, nickname, role, real_name FROM users WHERE phone LIKE '139001390%' ORDER BY phone;

+ 83 - 0
docs/CHANGELOG.md

@@ -0,0 +1,83 @@
+# 文档变更记录
+
+## 2026-06-14 — 文档归档整理
+
+### 变更说明
+
+为消除开发干扰,将历史需求和设计文档迁移至 `docs/backup/`,主目录仅保留最新版本的文档。
+
+### 保留的文档
+
+| 目录 | 文件 | 说明 |
+|------|------|------|
+| `需求分析/` | `底签页面详细设计.md` | 5个 TabBar 页面详细设计 v2.0(含首页/身泰/心智/行远/富沛) |
+| | `TabBar重构需求.md` | 5-Tab 重构原始需求 |
+| | `健康能量设计.md` | 五维能量系统设计 |
+| | `会员与销售体系设计.md` | 会员等级与销售体系 |
+| `系统设计/` | `小程序页面重设计划.md` | 小程序页面改造规划 |
+| `设计/` | `角色权限-UC矩阵-v2.md` | 角色权限矩阵 |
+| `superpowers/specs/` | `2026-06-13-five-dimension-pages-redesign.md` | **三页统一改造设计**(含堆叠图、游客模式、权限模型) |
+| | `2026-06-04-pre-login-discovery-design.md` | 登录前浏览设计 |
+| | `2026-06-02-care-family-club-design.md` | 平台升级设计规格(哲学/架构) |
+| | `2026-06-05-five-dimension-energy-design.md` | 五维能量系统设计 |
+| | `2026-06-08-article-publishing-system-design.md` | 文章发布系统设计 |
+| | `2026-06-08-five-dimension-wuxing-philosophy.md` | 五行哲学对照 |
+| `superpowers/plans/` | `2026-06-13-five-dimension-pages-redesign.md` | **三页改造实施计划**(10 Task) |
+| | `2026-06-13-guest-mode-implementation.md` | **游客模式实施计划**(10 Task) |
+| | `2026-06-12-danshop-integration-design.md` | DanShop 电商集成设计(P0) |
+| | `2026-06-11-5-tab-pages.md` | 5 TabBar 页面实施计划 |
+
+## 2026-06-14 — 行远页新增「重要关系维护」功能
+
+### 变更说明
+
+行远(行动/木)页新增关系维护模块,用于管理用户的重要人际关系(家人/朋友/伴侣/同事等),支持从手机通讯录导入联系人。
+
+### 新增文件
+
+| 文件 | 类型 | 说明 |
+|------|:----:|------|
+| `docs/superpowers/specs/2026-06-14-action-page-relationship-design.md` | 设计 | 关系维护功能设计 |
+| `docs/superpowers/plans/2026-06-14-action-page-relationship.md` | 计划 | 关系维护实施计划 |
+| `cfc-backend/.../entity/Contact.java` | entity | 通讯录关系实体 |
+| `cfc-backend/.../service/ContactService.java` | service | 关系 CRUD + 导入逻辑 |
+| `cfc-backend/.../controller/ContactController.java` | controller | 关系 API 接口 |
+| `cfc-frontend/components/ContactCard.vue` | component | 关系卡片组件 |
+| `cfc-frontend/components/ContactImport.vue` | component | 通讯录导入浮层 |
+| `cfc-frontend/pages/action/contact-detail.vue` | page | 关系详情/编辑页 |
+
+### 核心设计决策
+
+| 决策 | 选择 |
+|------|------|
+| 关系归属维度 | **行远(行动)** — 五行属木,对应"关系践行、社群连接" |
+| 联系人导入 | 微信 `wx.chooseContact` + 后端查重 + 补充信息浮层 |
+| 亲密度 | 0-100 数值,根据 contactCount / lastContactAt 自动计算 + 用户可 ±20 微调 |
+| 关系区块位置 | 行远页「今日待办」与「热门活动」之间 |
+| 生日提醒 | 近期生日在卡片上标注"还有 N 天",后续可扩展推送 |
+| 互动记录 | 后端记录每次查看/编辑联系人(可选手动标记"联系了") |
+
+---
+
+### 核心设计决策(最新)
+
+| 决策 | 选择 |
+|------|------|
+| TabBar 5页 | 首页 / 身泰 / 心智 / 行远 / 富沛(始终可见) |
+| 首页角色分流 | 游客→发现页 / parent-index / child-index / teacher-index→收归 parent-index |
+| 心智双维度展示 | **堆叠图**:一根柱叠加心能量+智能量 |
+| 私密活动可见性 | `visibility` + `visibleScope`(family/role/user) + `visibleTo` 三字段 |
+| 游客价格 | 隐藏数值,显示"登录查看" |
+| 游客空数据 | 显示「登录后查看更多」占位 |
+| 后端过滤 | 根据 JWT + userId/role/familyId 统一过滤 |
+| 行远页新增 | 重要关系维护 + 通讯录导入 |
+
+### 已归档(移至 `docs/backup/`)
+
+| 原位置 | 文件 |
+|--------|------|
+| 需求分析/ | v1.2-心智增强-版本计划/阶段总结, 底签页面内容设计(旧版), 需求分析文档, 领域对比分析×4 |
+| 系统设计/ | 心知家庭-系统设计报告(.docx/.md) |
+| superpowers/specs/ | 2026-03/05/06月历史specs 共13个 |
+| superpowers/plans/ | 2026-03/05/06月历史plans 共23个 |
+| docs/根目录 | requirements-analysis.md, API-INTEGRATION.md, badge/dan/guide/report/task-requirements, 参考资料, product-plan, plans |

+ 110 - 0
docs/E2E-DEPLOYMENT-GUIDE.md

@@ -0,0 +1,110 @@
+# E2E 测试部署指南
+
+## 背景
+
+所有 E2E 测试(17 个 Playwright 文件,100+ 场景)因 uni-app H5 前端未部署到浏览器可见的 URL 而被阻塞。
+
+当前 `playwright.config.js` 的 `baseURL: https://cfc.iwintrue.com` 指向的是 API 后端(Spring Boot),不是前端页面。
+
+## 解决方案
+
+将 uni-app 前端以 H5 模式构建并部署到 Web 服务器。
+
+## 部署步骤
+
+### 1. 安装依赖
+
+```bash
+cd cfc-frontend
+npm install
+```
+
+### 2. H5 构建
+
+```bash
+# 构建 uni-app H5 版本
+npm run build:h5
+
+# 产物在 dist/build/h5/ 目录
+```
+
+如果 `package.json` 中没有 `build:h5` 脚本,手动执行:
+
+```bash
+npx uni-app build --platform h5
+```
+
+### 3. 上传到 Web 服务器
+
+```bash
+# 部署到 192.168.16.251(与 cfc-web 同一台服务器)
+rsync -av --delete dist/build/h5/ 192.168.16.251:/var/www/cfc-h5/
+```
+
+### 4. Nginx 配置
+
+在 `cfc.iwintrue.com` 的 nginx 配置中添加:
+
+```nginx
+location /cfc-h5/ {
+    alias /var/www/cfc-h5/;
+    try_files $uri $uri/ /cfc-h5/index.html;
+}
+```
+
+或者使用子域名(推荐):
+
+```nginx
+server {
+    listen 80;
+    server_name h5.cfc.iwintrue.com;
+
+    root /var/www/cfc-h5;
+    index index.html;
+
+    location / {
+        try_files $uri $uri/ /index.html;
+    }
+}
+```
+
+**重要**: uni-app H5 使用 hash 路由(`#/`),上述配置中 `try_files` 确保 SPA 路由刷新时正确 fallback 到 index.html。
+
+### 5. 更新 Playwright 配置
+
+```javascript
+// playwright.config.js
+const config = {
+    // 使用子域名部署时:
+    baseURL: 'https://h5.cfc.iwintrue.com',
+    // 或使用路径部署时:
+    // baseURL: 'https://cfc.iwintrue.com/cfc-h5/',
+};
+```
+
+### 6. 验证部署
+
+访问部署后的 URL,确认:
+- `https://h5.cfc.iwintrue.com/` 返回 uni-app 首页
+- `https://h5.cfc.iwintrue.com/#/pages/index/index` 能正常打开页面
+
+## 备选方案(本地开发)
+
+```bash
+# 启动 uni-app H5 开发服务器
+cd cfc-frontend
+npm run dev:h5  # 默认监听 localhost:8080
+
+# 更新 playwright.config.js 的 baseURL
+# baseURL: 'http://localhost:8080'
+```
+
+## 当前 E2E 状态
+
+| 组件 | URL | 状态 |
+|------|-----|------|
+| API 后端 | `cfc.iwintrue.com` | ✅ 可用 |
+| cfc-web 管理端 | 需本地启动 | ⚠️ 仅开发 |
+| uni-app H5 | 待部署 | ❌ 不可用 |
+
+**所有 E2E 测试在 uni-app H5 部署后即可运行。**

+ 198 - 0
docs/analysis/article-detail-features.md

@@ -0,0 +1,198 @@
+# 文章详情页功能状态与补充设计
+
+## 当前状态
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 阅读计时 | ✅ 已完成 | 每秒计时,每30秒上报后端 |
+| 分享 | ✅ 已完成 | 微信分享 + 海报生成 |
+| 自动完成阅读 | ❌ 未实现 | 达到阅读时长后自动触发 |
+| 文章评论 | ❌ 未实现 | 需新建评论系统 |
+| 评论审核 | ❌ 未实现 | 管理员/发布人审核 |
+| AI答题 | ❌ 未实现 | 浠宝/福宝提问 |
+| 评论能量 | ❌ 未实现 | 评论后奖励能量 |
+| 答题能量 | ❌ 未实现 | 答完题奖励能量 |
+
+## 补充设计方案
+
+### 一、自动完成阅读
+
+**触发条件:** `readingSeconds >= article.readTime * 60`
+
+**前端逻辑(article-detail.vue):**
+```javascript
+reportReadingTime() {
+  // 现有上报逻辑...
+  
+  // 新增:检查是否达到完成条件
+  if (!this.readingCompleted && this.readingSeconds >= (this.article.readTime || 3) * 60) {
+    this.completeReading()
+  }
+},
+async completeReading() {
+  this.readingCompleted = true
+  // 隐藏计时器显示
+  // 调用后端记录完成阅读
+  await completeArticleRead({ articleId, childId, durationSeconds: this.readingSeconds })
+  // 弹出浠宝答题
+  this.showQuizDialog()
+}
+```
+
+**前端显示变化:**
+- 达到时长后,右上角的 `已读 X分X秒` 标签隐藏
+- 后台继续计时但不显示
+
+**后端新增接口:**
+```java
+POST /api/articles/complete-read
+body: { articleId, childId, durationSeconds }
+→ 创建 ArticleReadingRecord(如果已达阅读时长)
+→ 发放积分 + 能量
+```
+
+### 二、文章评论系统
+
+#### 数据库表
+
+```sql
+CREATE TABLE article_comments (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    article_id BIGINT NOT NULL COMMENT '文章ID',
+    parent_id BIGINT COMMENT '父评论ID(回复时填充)',
+    reply_to_id BIGINT COMMENT '引用的评论ID',
+    user_id BIGINT NOT NULL COMMENT '评论用户ID',
+    content TEXT NOT NULL COMMENT '评论内容',
+    status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/approved/rejected',
+    audit_by BIGINT COMMENT '审核人ID',
+    audit_at DATETIME COMMENT '审核时间',
+    earned_energy INT DEFAULT 0 COMMENT '获得的能量',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    INDEX idx_article (article_id),
+    INDEX idx_article_status (article_id, status),
+    INDEX idx_parent (parent_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章评论';
+```
+
+#### 后端接口
+
+| 接口 | 说明 | 角色 |
+|------|------|------|
+| `POST /api/articles/comments/list` | 获取已审核评论列表 | 所有人 |
+| `POST /api/articles/comments/create` | 提交评论(状态=pending) | 登录用户 |
+| `POST /api/articles/comments/audit` | 审核评论(approved/rejected) | 管理员/文章发布人 |
+| `POST /api/articles/comments/my` | 查看我的评论 | 登录用户 |
+
+#### 审核流程
+
+```
+用户提交评论 → status=pending
+  ├─ 文章发布人 → 可在文章详情页审核
+  ├─ 文章管理员 → 可在管理后台审核
+  └─ 超级管理员 → 可在管理后台审核
+      ↓
+  审核通过 → status=approved → 前端显示
+  审核驳回 → status=rejected → 仅作者可见(显示"审核未通过")
+```
+
+#### 评论的回复结构
+
+```
+评论A(用户1)
+  ├─ 回复B(用户2)引用"评论A"内容
+  │   └─ 回复C(用户1)引用"回复B"内容(同一层,通过reply_to_id引用)
+  └─ 回复D(用户3)引用"评论A"内容
+```
+
+前端展示:
+```
+[用户1] 这篇文章写得真好!
+  ├ [用户2] @用户1 同意!→ 引用原文
+  └ [用户3] @用户1 学到了很多
+```
+
+### 三、AI答题功能
+
+#### 触发时机
+
+阅读完成时 → 自动弹出浠宝/福宝对话框
+
+#### 交互流程
+
+```
+浠宝弹出:"👋 阅读完成!考考你三个问题~"
+  ↓
+问题1: "文章中提到...?"(从文章内容提取)
+  → 用户选择/输入答案
+  ↓
+问题2: "..." 
+  → 用户选择/输入答案
+  ↓
+问题3: "..."
+  → 用户选择/输入答案
+  ↓
+"🎉 全部答对!获得 15 能量!"
+  ↓
+关闭对话框,回到文章底部
+```
+
+#### 后端实现
+
+使用 Dify Workflow API 生成题目:
+```java
+POST /api/articles/quiz/generate
+body: { articleId, childId }
+→ 调用 Dify Workflow,传入文章内容
+→ 返回 3 个问题(含选项和正确答案)
+
+POST /api/articles/quiz/submit
+body: { articleId, childId, answers: [{questionId, answer}] }
+→ 比对答案
+→ 答对 X 题 → 发放 X*5 能量
+```
+
+#### 前端实现
+
+```vue
+<!-- 浠宝答题弹窗 -->
+<view class="quiz-dialog" v-if="showQuiz">
+  <view class="quiz-mascot">
+    <image :src="mascotAvatar" />
+    <text>{{ mascotName }}: {{ mascotMessage }}</text>
+  </view>
+  <view class="quiz-question" v-for="(q, i) in quizQuestions" :key="i">
+    <text class="q-title">问题{{ i+1 }}: {{ q.question }}</text>
+    <view class="q-options">
+      <text v-for="opt in q.options" class="q-option"
+        :class="{ selected: selectedAnswers[i] === opt }"
+        @click="selectedAnswers[i] = opt">{{ opt }}</text>
+    </view>
+  </view>
+  <button @click="submitQuiz">提交答案</button>
+</view>
+```
+
+### 四、能量奖励汇总
+
+| 行为 | 能量值 | 说明 |
+|------|--------|------|
+| 完成阅读 | 5 | 达到阅读时长自动发放 |
+| 发表评论 | 3 | 评论提交后发放 |
+| 评论审核通过 | 2 | 额外奖励 |
+| 答题全对 | 15 | 3题全对 |
+| 答题对1题 | 5 | 答对1题 |
+| 答题对2题 | 10 | 答对2题 |
+
+### 五、实施路线图
+
+| 步骤 | 内容 | 涉及文件 | 估算工时 |
+|------|------|---------|---------|
+| 1 | 后端:ArticleComment 实体 + Mapper | 2文件 | 1h |
+| 2 | 后端:ArticleCommentController + Service | 2文件 | 2h |
+| 3 | 后端:article_comments 表迁移 + schema.sql | 2文件 | 0.5h |
+| 4 | 后端:完成阅读/答题/Dify接口 | 3文件 | 2h |
+| 5 | 前端:article-detail 评论区域 | 1文件 | 2h |
+| 6 | 前端:浠宝答题弹窗 | 1文件 | 2h |
+| 7 | 后端:管理后台评论审核接口 | 1文件 | 1h |
+| 8 | 前端:管理后台评论审核页面 | 1文件 | 1.5h |
+| | **合计** | **13文件** | **~12h** |

+ 193 - 0
docs/analysis/dimension-filter-design.md

@@ -0,0 +1,193 @@
+# 维度参数获取与筛选设计分析
+
+## 概述
+
+四个核心实体(活动、商品、文章、任务)都有"五维归属"的概念,但存储和查询方式各不相同。当前设计目标是:**根据维度筛选时,只要该实体在对应维度的权重 > 0 就命中**。
+
+## 实体维度字段对比
+
+| 实体 | 表名 | 旧字段 | 新字段 | 维度筛选方式 |
+|------|------|--------|--------|-------------|
+| **Activity** | activities | `dimension_code` (单值) | `dimension_weights` (JSON) | `JSON_EXTRACT(dimension_weights, '$.{dim}') > 0` OR `dimension_code = {dim}` |
+| **Product** | products | `domain` (单值) | `dimension_weights` (JSON) | `JSON_EXTRACT(dimension_weights, '$.{dim}') > 0` OR `domain = {dim}` |
+| **Article** | articles | `related_dimensions` (逗号分隔) | `dimension_weights` (JSON) | `JSON_EXTRACT(dimension_weights, '$.{dim}') > 0` OR `related_dimensions LIKE %{dim}%` |
+| **Task** | tasks | 无 | 无 | ❌ 不支持维度筛选 |
+
+## 逐项分析
+
+### 1. Activity(活动)✅ 已实现
+
+**实体字段:**
+```java
+private String dimensionCode;        // 旧: 单值, 如 "body"
+private String dimensionWeights;     // 新: JSON, 如 {"body":30,"mind":0,"wisdom":0,"action":70,"wealth":0}
+```
+
+**筛选逻辑(ActivityService.list() 第53-63行):**
+```java
+if (dimensionCode != null && !dimensionCode.isEmpty()) {
+    query.and(w -> w
+        .apply("COALESCE(JSON_EXTRACT(dimension_weights, '$." + dimensionCode + "'), 0) > 0")
+        .or().eq(Activity::getDimensionCode, dimensionCode)
+    );
+}
+```
+
+**状态:** ✅ 已实现权重感知筛选,兼容旧版 `dimensionCode`
+
+### 2. Product(商品)✅ 已实现
+
+**实体字段:**
+```java
+private String domain;               // 旧: 单值, 如 "body"
+private String dimensionWeights;     // 新: JSON, 如 {"body":30,"mind":0,"wisdom":0,"action":70,"wealth":0}
+```
+
+**筛选逻辑(ProductService.list() 第56-67行):**
+```java
+String dimCode = query.getDimensionCode() != null ? query.getDimensionCode() : query.getDomain();
+if (dimCode != null && !dimCode.isEmpty()) {
+    wrapper.and(w -> w
+        .apply("COALESCE(JSON_EXTRACT(dimension_weights, '$." + dimCode + "'), 0) > 0")
+        .or().eq(Product::getDomain, dimCode)
+    );
+}
+```
+
+**注意:** 查询参数名已统一为 `dimensionCode`,兼容旧版 `domain`。`ProductListQueryDTO` 中同时保留两个字段,优先使用 `dimensionCode`。
+
+**状态:** ✅ 已实现权重感知筛选,参数名已统一
+
+### 3. Article(文章)✅ 已实现
+
+**实体字段:**
+```java
+private String relatedDimensions;    // 旧: 逗号分隔, 如 "body,mind"
+private String dimensionIds;         // 维度ID列表JSON
+private String dimensionWeights;     // 新: JSON, 如 {"body":30,"mind":0,...}
+```
+
+**筛选逻辑(ArticleService.getPublicList() 第93-98行):**
+```java
+if (dimensionCode != null && !dimensionCode.trim().isEmpty()) {
+    wrapper.and(w -> w
+        .apply("COALESCE(JSON_EXTRACT(dimension_weights, '$." + dimensionCode.trim() + "'), 0) > 0")
+        .or().like(Article::getRelatedDimensions, dimensionCode.trim())
+    );
+}
+```
+
+**自动生成权重的逻辑(ArticleService 第702-706行):**
+当管理员设置 `relatedDimensions` 时,自动调用 `buildEqualWeights()` 生成等比例权重:
+```java
+private String buildEqualWeights(String relatedDimensions) {
+    String[] parts = relatedDimensions.split(",");
+    int equalWeight = 100 / parts.length;
+    // 为每个维度分配 equalWeight
+}
+```
+
+**状态:** ✅ 已实现权重感知筛选,兼容旧版 `relatedDimensions`
+
+### 4. Task(任务)✅ 已支持维度筛选
+
+**实体字段(新增):**
+```java
+private String dimensionCode;        // 新: 单值, 如 "body"
+private String dimensionWeights;     // 新: JSON, 如 {"body":30,"mind":0,"wisdom":0,"action":70,"wealth":0}
+```
+
+**创建任务时传入(CreateTaskDTO):**
+```java
+private String dimensionCode;        // 五维维度
+private String dimensionWeights;     // 五维权重JSON
+```
+
+**筛选逻辑(TaskService.getTodayTasks()):**
+```java
+if (dimensionCode != null && !dimensionCode.isEmpty()) {
+    wrapper.and(w -> w
+        .apply("COALESCE(JSON_EXTRACT(dimension_weights, '$." + dimensionCode + "'), 0) > 0")
+        .or().eq(Task::getDimensionCode, dimensionCode)
+    );
+}
+```
+
+**调用方式:**
+```json
+POST /api/tasks/today
+{"childId": 1003, "dimensionCode": "body"}
+```
+
+**状态:** ✅ 已实现权重感知筛选,与活动/商品/文章统一模式
+
+### 数据库迁移
+
+```sql
+ALTER TABLE tasks ADD COLUMN dimension_code VARCHAR(20) COMMENT '五维维度: body/mind/wisdom/action/wealth';
+ALTER TABLE tasks ADD COLUMN dimension_weights JSON COMMENT '五维权重';
+```
+
+迁移编号:`迁移107`,在 DatabaseInitializer.runMigrations() 中。| 任务 | `POST /api/tasks/today` | `dimensionCode` | `{"dimensionCode":"body"}` |
+
+## 架构设计
+
+### JSON 权重格式
+
+所有实体统一使用 JSON 格式存储五维权重:
+```json
+{
+  "body": 0,
+  "mind": 30,
+  "wisdom": 20,
+  "action": 50,
+  "wealth": 0
+}
+```
+
+- 权重值范围:0-100(整数)
+- 0 = 不关联该维度
+- > 0 = 关联该维度,值越大关联度越高
+- 所有权重之和不一定等于 100(可以只设置部分维度)
+
+### 筛选原理
+
+使用 MySQL 的 `JSON_EXTRACT` 函数:
+```sql
+COALESCE(JSON_EXTRACT(dimension_weights, '$.body'), 0) > 0
+```
+
+- 如果 `dimension_weights` 为 NULL 或 JSON 中不含该 key,返回 0
+- 如果权重 > 0,表示该实体关联此维度,命中筛选
+
+### 兼容旧数据
+
+三种实体都保留了旧字段的兼容查询:
+- Activity: `dimension_code` 精确匹配
+- Product: `domain` 精确匹配
+- Article: `related_dimensions` LIKE 模糊匹配
+
+## 前端调用方式
+
+| 实体 | 列表接口 | 维度参数名 | 示例 |
+|------|---------|-----------|------|
+| 活动 | `POST /api/activity/list` | `dimensionCode` | `{"dimensionCode":"body"}` |
+| 商品 | `POST /api/product/list` | `domain` | `{"domain":"body"}` |
+| 文章 | `POST /api/articles/list` | `dimensionCode` | `{"dimensionCode":"body"}` |
+| 任务 | `POST /api/tasks/today` | `dimensionCode` | `{"childId":1003,"dimensionCode":"body"}` |
+
+## 建议
+
+### 统一参数名 ✅ 已完成
+商品列表已将查询参数统一为 `dimensionCode`(兼容旧版 `domain`),与活动/文章/任务一致。
+
+### Task 增加维度支持 ✅ 已完成
+Task 已增加 `dimensionCode` + `dimensionWeights` 字段,创建任务时可传入,今日任务列表支持按维度筛选。
+
+### 创建/编辑时的维度设置
+| 实体 | 创建接口 | 维度参数 | 说明 |
+|------|---------|---------|------|
+| 活动 | `POST /api/admin/activity/create` | `dimensionCode` + `dimensionWeights` | 管理后台设置 |
+| 商品 | `POST /api/product/create` | `domain` + `dimensionWeights` | 管理后台设置 |
+| 文章 | `POST /api/admin/articles/create` | `relatedDimensions` | 自动生成 `dimensionWeights` |
+| 任务 | `POST /api/tasks/create` | 不支持 | 通过 category 间接关联 |

+ 245 - 0
docs/analysis/energy-behavior-integration.md

@@ -0,0 +1,245 @@
+# 能量行为配置与系统功能的关联机制
+
+## 当前实现:硬编码调用
+
+### 调用链路
+
+```
+用户完成动作
+    ↓
+业务 Service (TaskService / GameRecordService / ...)
+    ↓
+调用 energyService.awardEnergy(childId, sourceType, sourceId, amount, desc, expireDays)
+    ↓
+awardEnergy() 内部:
+    1. 查 energy_source_config → sourceType + sourceId 精确匹配
+    2. 有配置 → 按配置维度比例分配
+    3. 无配置 → 全部归入 action(行) 维度
+    ↓
+    4. 日上限检查
+    5. 按比例分配到各维度
+    6. 更新余额 + 写流水
+```
+
+### 具体例子:完成任务
+
+```java
+// TaskService.java 第414-424行 — 完成任务时触发
+try {
+    int energyAmount = Math.abs(pointsEarned);  // 能量值 = 任务积分
+    if (energyAmount > 0) {
+        energyService.awardEnergy(
+            childId,           // 孩子ID
+            "task",            // sourceType = "task"
+            taskId,            // sourceId = 具体任务ID
+            energyAmount,      // 能量值 = 积分
+            "完成任务: " + title,  // 描述
+            null               // 不过期
+        );
+    }
+} catch (Exception e) {
+    log.warn("能量发放失败(不影响积分)");
+}
+```
+
+### 问题:维度分配全部走 Fallback
+
+`awardEnergy()` 内部查 `energy_source_config`:
+```sql
+SELECT * FROM energy_source_config
+WHERE source_type = 'task' AND source_id = 123;
+```
+
+`energy_source_config` 表中只有 `source_type='product'` 的5条记录,没有 `task` 的配置。
+所以 `resolveDimensionRatios()` 返回空 → 触发 Fallback:
+```java
+// 默认全部归入 action(行) 维度,100%
+return Collections.singletonMap(action.getId(), 10000);
+```
+
+**结果:所有来源的能量都进入了 action 维度。**
+
+## 改造方案:配置驱动
+
+### 新表:energy_behavior_config
+
+每条记录定义一个"行为"的完整能量规则:
+
+```sql
+energy_behavior_config (
+    behavior_code   VARCHAR(32)  -- 行为编码: task_complete / game_finish / ...
+    behavior_name   VARCHAR(50)  -- 行为名称: 完成任务 / 完成游戏 / ...
+    default_amount  INT          -- 默认能量值
+    amount_source   VARCHAR(32)  -- 能量值来源: fixed / points / order_amount / config
+    dimension_assign JSON        -- 维度分配: [{"dim":"action","ratio":100}]
+    daily_limit     INT          -- 每日上限
+    cooldown_seconds INT         -- 冷却时间
+    expire_days     INT          -- 过期天数
+    enabled         TINYINT      -- 是否启用
+)
+```
+
+### 改造后的调用链路
+
+```
+用户完成动作
+    ↓
+业务 Service (TaskService)
+    ↓
+调用 energyService.awardByBehavior(childId, "task_complete", context)
+    ↓
+awardByBehavior() 内部:
+    1. 查 energy_behavior_config → behavior_code = "task_complete"
+    2. 配置不存在或不启用 → 返回,不给能量
+    3. 配置存在 → 读取 amount_source 和 dimension_assign
+         │
+         ├─ amount_source = "points"    → 从 context 取积分值
+         ├─ amount_source = "fixed"     → 用 default_amount
+         ├─ amount_source = "order_amount" → 从 context 取订单金额
+         └─ amount_source = "config"    → 从关联配置表读取
+         │
+         └─ dimension_assign = [{"dim":"action","ratio":50},{"dim":"wisdom","ratio":50}]
+             → 按比例分配到各维度
+    ↓
+    4. 日上限检查
+    5. 分配到各维度 → 更新余额 + 写流水
+```
+
+### 具体例子:改造后
+
+```java
+// TaskService.java — 改造后
+// 不再直接调用 awardEnergy,而是调用 awardByBehavior
+
+// 构造上下文:包含所有可能需要的参数
+Map<String, Object> context = new HashMap<>();
+context.put("childId", childId);
+context.put("sourceId", taskId);
+context.put("points", pointsEarned);          // 积分值
+context.put("taskTitle", task.getTitle());
+
+energyService.awardByBehavior(childId, "task_complete", context);
+```
+
+```java
+// EnergyService.java — 新增方法
+public void awardByBehavior(Long childId, String behaviorCode, Map<String, Object> context) {
+    // 1. 查配置
+    EnergyBehaviorConfig config = behaviorConfigMapper.selectOne(
+        new LambdaQueryWrapper<EnergyBehaviorConfig>()
+            .eq(EnergyBehaviorConfig::getBehaviorCode, behaviorCode)
+            .eq(EnergyBehaviorConfig::getEnabled, 1)
+    );
+    if (config == null) return;  // 无配置或未启用,不给能量
+
+    // 2. 计算能量值
+    int amount = 0;
+    switch (config.getAmountSource()) {
+        case "fixed":
+            amount = config.getDefaultAmount();
+            break;
+        case "points":
+            Integer points = (Integer) context.get("points");
+            amount = points != null ? Math.abs(points) : config.getDefaultAmount();
+            break;
+        case "order_amount":
+            Integer orderAmount = (Integer) context.get("orderAmount");
+            amount = orderAmount != null ? orderAmount : config.getDefaultAmount();
+            break;
+    }
+    if (amount <= 0) return;
+
+    // 3. 解析维度分配配置
+    // dimension_assign = [{"dim":"action","ratio":50},{"dim":"wisdom","ratio":50}]
+    JSONArray dimAssign = JSON.parseArray(config.getDimensionAssign());
+    Map<Long, Integer> dimRatios = new LinkedHashMap<>();
+    for (int i = 0; i < dimAssign.size(); i++) {
+        JSONObject item = dimAssign.getJSONObject(i);
+        String dimCode = item.getString("dim");
+        int ratio = item.getInt("ratio");
+        EnergyDimension dim = getDimByCode(dimCode);
+        if (dim != null) {
+            dimRatios.put(dim.getId(), ratio * 100);  // 转为10000制
+        }
+    }
+    if (dimRatios.isEmpty()) return;
+
+    // 4. 日上限检查
+    if (isDailyLimitExceeded(childId, dimRatios.keySet(), amount)) {
+        log.warn("日上限已达,跳过: behaviorCode={}, childId={}", behaviorCode, childId);
+        return;
+    }
+
+    // 5. 按比例分配 + 更新余额 + 写流水
+    Map<Long, Integer> allocations = calculateAllocations(amount, dimRatios);
+    // ... 更新各维度余额和流水 ...
+}
+```
+
+## 所有行为如何关联到系统代码
+
+### 现有行为(19个)
+
+| behavior_code | 触发位置 | 当前代码 |
+|--------------|---------|---------|
+| `task_complete` | `TaskService.completeTask()` | 硬编码 `awardEnergy(childId, "task", ...)` |
+| `game_finish` | `GameRecordService.completeGame()` | 硬编码 `awardEnergy(childId, "game", ...)` |
+| `activity_checkin` | `ActivityService.checkin()` | 硬编码 `awardEnergy(childId, "activity", ...)` |
+| `article_read` | `ArticleService.completeArticleRead()` | 硬编码 `awardEnergy(childId, "article", ...)` |
+| `product_purchase` | `ProductOrderService.handlePayment()` | 硬编码 `awardEnergy(childId, "product", ...)` |
+| `health_checkin` | `HealthCheckinService.checkin()` | 硬编码 `awardEnergy(childId, "health_checkin", ...)` |
+| `finance_checkin` | `FinanceCheckinService.checkin()` | 硬编码 `awardEnergy(childId, "checkin", ...)` |
+| `emotion_checkin` | `EmotionCheckinService.checkin()` | 硬编码 `awardEnergy(childId, "emotion_checkin", ...)` |
+| `appointment_submit` | `AssessmentAppointmentService.create()` | 硬编码 `awardEnergy(childId, "appointment", ...)` |
+| `appointment_complete` | `AssessmentAppointmentService.complete()` | 硬编码 `awardEnergy(childId, "appointment", ...)` |
+| `streak_daily` | `StreakService.checkStreak()` | 硬编码 `awardEnergy(childId, "streak", ...)` |
+| `streak_milestone` | `StreakService.checkStreak()` | 硬编码同上 |
+| `growth_task` | `GrowthTaskService.completeTask()` | 硬编码 `awardEnergy(childId, "growth_day", ...)` |
+| `micro_action` | `MicroActionService.complete()` | 硬编码 `awardEnergy(childId, "micro_action", ...)` |
+| `onboarding` | `OnboardingService.claim()` | 硬编码 `awardEnergy(childId, "onboarding", ...)` |
+| `invite_milestone` | `InviteMilestoneService.check()` | 硬编码 `awardEnergy(childId, "invite_milestone", ...)` |
+| `dimension_sync` | `DimensionEnergySyncService.sync()` | 硬编码 `awardEnergy(childId, "dimension", ...)` |
+
+### 新增行为(5个,尚未实现)
+
+| behavior_code | 触发位置 | 实现方式 |
+|--------------|---------|---------|
+| `invite_friend` | `CommissionService.bindReferral()` | 绑定推荐人时触发 |
+| `invite_family` | `FamilyInviteService.acceptByCode()` | 家庭成员接受邀请时触发 |
+| `report_upload` | `HealthReportController.uploadAndParse()` | 上传体检报告时触发 |
+| `plan_complete` | `GrowthPlanService.reviewPlan()` | 完成成长计划时触发 |
+| `wisdom_report` | `DanAssessmentController.uploadReport()` | 上传智测评报告时触发 |
+
+## 改造步骤
+
+### 第一步:替换现有硬编码调用(最小改动)
+
+不改业务逻辑,只在 `awardEnergy()` 方法内部增加配置读取逻辑:
+
+```java
+// EnergyService.awardEnergy() — 改造
+public Map<String, Integer> awardEnergy(Long childId, String sourceType, Long sourceId, ...) {
+    // 新增:先查 behavior_config
+    EnergyBehaviorConfig config = matchBehaviorConfig(sourceType);
+    if (config != null && config.getEnabled()) {
+        // 使用配置的维度分配
+        return awardByConfig(childId, config, sourceType, sourceId, totalAmount, description, daysToExpire);
+    }
+    // 无配置 → 原有逻辑(查 energy_source_config + Fallback)
+    ...
+}
+```
+
+这样所有现有调用代码不用改,只需要在 `awardEnergy()` 内部增加一个配置查询点。
+
+### 第二步:添加配置数据
+
+在 `energy_behavior_config` 表中插入预置数据,每个 `sourceType` 对应一条配置。
+
+### 第三步:管理后台
+
+实现管理后台的 CRUD 页面,让管理员可以:
+1. 启用/禁用某个行为
+2. 修改能量值
+3. 修改维度分配比例
+4. 查看各行为每日发放统计

+ 256 - 0
docs/analysis/energy-config-system-design.md

@@ -0,0 +1,256 @@
+# 能量配置管理系统设计
+
+## 当前问题
+
+1. **能量来源分散**:19个来源的能能量值硬编码在 Java 代码中,修改需要改代码+重新部署
+2. **维度分配单一**:所有来源默认全部归入 action(行)维度,其他维度几乎没有能量流入
+3. **缺少配置管理**:无法通过管理后台动态调整能量发放规则
+4. **消费体系不完整**:目前只有心愿兑换扣减和未报名签到惩罚两种消耗
+
+## 设计目标
+
+| 目标 | 说明 |
+|------|------|
+| 可配置 | 管理员通过后台配置每种行为给多少能量、分到哪些维度 |
+| 维度均衡 | 不同行为分配到不同维度,五维都有能量流入 |
+| 消费闭环 | 每种能量有对应的消费场景,消费后可转化为其他能量或权益 |
+| 实时生效 | 配置变更后即时生效,无需重启 |
+
+## 一、能量来源配置(energy_source_config 增强)
+
+### 当前表结构(不完整)
+```sql
+CREATE TABLE energy_source_config (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    source_type VARCHAR(32) NOT NULL COMMENT '来源类型: task/game/activity/...',
+    source_id BIGINT COMMENT '来源ID(0=全局配置)',
+    dimension_id BIGINT NOT NULL COMMENT '维度ID',
+    ratio INT NOT NULL COMMENT '分配比例(10000=100%)',
+    created_at DATETIME
+);
+```
+
+### 增强后的表结构
+```sql
+CREATE TABLE energy_behavior_config (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    behavior_code VARCHAR(32) NOT NULL UNIQUE COMMENT '行为编码: task_complete/game_finish/...',
+    behavior_name VARCHAR(50) NOT NULL COMMENT '行为名称: 完成任务/完成游戏/...',
+    description VARCHAR(200) COMMENT '行为描述',
+    default_amount INT NOT NULL DEFAULT 5 COMMENT '默认能量值',
+    amount_source VARCHAR(32) DEFAULT 'fixed' COMMENT '能量值来源: fixed(固定)/points(跟随积分)/order_amount(跟随金额)/config(从配置表读取)',
+    dimension_assign JSON NOT NULL COMMENT '维度分配: [{"dim":"body","ratio":50},{"dim":"action","ratio":50}]',
+    daily_limit INT DEFAULT 0 COMMENT '每日上限(0=不限制)',
+    cooldown_seconds INT DEFAULT 0 COMMENT '冷却时间(秒,0=无冷却)',
+    expire_days INT DEFAULT 0 COMMENT '过期天数(0=永久)',
+    enabled TINYINT DEFAULT 1 COMMENT '是否启用',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_behavior_code (behavior_code)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量行为配置表';
+```
+
+### 预置行为配置
+
+| behavior_code | behavior_name | 默认值 | 维度分配 | 说明 |
+|--------------|---------------|--------|---------|------|
+| `task_complete` | 完成任务 | =积分 | body:0, mind:0, wisdom:0, action:100, wealth:0 | 任务奖励归行 |
+| `game_finish` | 完成游戏 | =积分 | body:0, mind:30, wisdom:50, action:20, wealth:0 | 游戏益智归智+心 |
+| `activity_checkin` | 活动签到 | 5 | body:30, mind:0, wisdom:0, action:70, wealth:0 | 活动归行+身 |
+| `article_read` | 阅读文章 | =积分 | body:0, mind:30, wisdom:50, action:20, wealth:0 | 阅读归智+心 |
+| `product_purchase` | 商品购买 | =金额 | body:0, mind:0, wisdom:0, action:0, wealth:100 | 消费归富 |
+| `health_checkin` | 健康打卡 | 5 | body:100, mind:0, wisdom:0, action:0, wealth:0 | 健康归身 |
+| `finance_checkin` | 理财打卡 | 5 | body:0, mind:0, wisdom:0, action:0, wealth:100 | 理财归富 |
+| `emotion_checkin` | 情绪打卡 | 5 | body:0, mind:100, wisdom:0, action:0, wealth:0 | 情绪归心 |
+| `appointment_submit` | 提交测评预约 | 10 | body:0, mind:0, wisdom:0, action:100, wealth:0 | 预约归行 |
+| `appointment_complete` | 完成测评 | 30 | body:0, mind:50, wisdom:50, action:0, wealth:0 | 测评归心+智 |
+| `streak_daily` | 连续打卡每日 | 5 | body:30, mind:20, wisdom:0, action:50, wealth:0 | 坚持归行+身 |
+| `streak_milestone` | 打卡里程碑 | 配置值 | body:30, mind:20, wisdom:0, action:50, wealth:0 | 里程碑归行+身 |
+| `growth_task` | 成长任务 | 配置值 | 按任务维度 | 跟随任务配置 |
+| `micro_action` | 微行动 | 1 | body:0, mind:0, wisdom:0, action:100, wealth:0 | 微行动归行 |
+| `onboarding` | 新手引导 | 配置值 | body:20, mind:20, wisdom:20, action:20, wealth:20 | 引导均衡分配 |
+| `invite_milestone` | 邀请里程碑 | 配置值 | body:0, mind:20, wisdom:0, action:40, wealth:40 | 邀请归行+富 |
+| `dimension_sync` | 维度同步 | 计算值 | 按评分维度 | 跟随评分 |
+| **`invite_friend`** | **邀请好友加入** | **20** | **body:0, mind:0, wisdom:0, action:50, wealth:50** | **新增: 邀请好友归行+富** |
+| **`invite_family`** | **邀请家庭成员** | **10** | **body:0, mind:30, wisdom:0, action:40, wealth:0** | **新增: 邀家人归行+心** |
+| **`report_upload`** | **上传体检报告** | **30** | **body:100, mind:0, wisdom:0, action:0, wealth:0** | **新增: 体检归身** |
+| **`plan_complete`** | **完成规划计划** | **20** | **按计划维度** | **新增: 跟随计划维度** |
+| **`wisdom_report`** | **上传智测评报告** | **30** | **body:0, mind:0, wisdom:100, action:0, wealth:0** | **新增: 智测评归智** |
+
+## 二、能量消费配置
+
+### 消费表结构
+```sql
+CREATE TABLE energy_consumption_config (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    consumption_code VARCHAR(32) NOT NULL UNIQUE COMMENT '消费编码: coupon_exchange/wish_redeem/...',
+    consumption_name VARCHAR(50) NOT NULL COMMENT '消费名称: 兑换优惠券/心愿兑换/...',
+    source_dimension VARCHAR(20) NOT NULL COMMENT '消耗维度: wealth/action/body/mind/wisdom',
+    amount INT NOT NULL COMMENT '消耗数量',
+    target_type VARCHAR(32) NOT NULL COMMENT '目标类型: coupon(优惠券)/energy(能量转换)/points(积分)/...',
+    target_id BIGINT COMMENT '目标ID(如优惠券ID,0=通用)',
+    convert_dimension VARCHAR(20) COMMENT '转换目标维度(当target_type=energy时)',
+    convert_ratio INT DEFAULT 100 COMMENT '转换比例(100=100%, 消耗N获得N)',
+    min_balance INT DEFAULT 0 COMMENT '最低余额要求',
+    description VARCHAR(200) COMMENT '消费描述',
+    enabled TINYINT DEFAULT 1,
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_consumption_code (consumption_code)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量消费配置表';
+```
+
+### 预置消费配置
+
+| consumption_code | 消耗维度 | 消耗量 | 目标类型 | 转换/结果 | 说明 |
+|-----------------|---------|--------|---------|-----------|------|
+| `coupon_exchange` | wealth(富) | 100 | coupon | 兑换10元优惠券 | 消耗富能量得优惠券 |
+| `wish_redeem` | action(行) | 变量 | wish | 完成心愿兑换 | 消耗行能量兑换心愿 |
+| `energy_convert_wealth_to_action` | wealth(富) | 变量 | energy→action | 1:1 转为行动能量 | 富→行转换 |
+| `energy_convert_action_to_body` | action(行) | 变量 | energy→body | 1:1 转为身体能量 | 行→身转换 |
+| `energy_convert_wealth_to_wisdom` | wealth(富) | 变量 | energy→wisdom | 2:1 转为智慧能量 | 富→智转换(损耗) |
+| `activity_penalty` | 活动维度 | 变量 | penalty | 未报名签到扣减 | 惩罚扣减 |
+
+## 三、能量转换规则
+
+### 五维相生转换
+
+```
+身(body)  → 可通过运动/健康行为获得
+心(mind)  → 可通过情绪管理/心理活动获得
+智(wisdom) → 可通过学习/测评/阅读获得
+行(action) → 可通过任务/活动/坚持获得
+富(wealth) → 可通过消费/推广/理财获得
+```
+
+### 允许的转换(消耗一种能量,获得另一种)
+
+| 转换 | 消耗 | 获得 | 比例 | 场景 |
+|------|------|------|------|------|
+| 富→行 | 100 富 | 100 行 | 1:1 | 财富能量兑换优惠券时触发 |
+| 富→智 | 200 富 | 100 智 | 2:1 | 购买课程/学习资源 |
+| 行→身 | 50 行 | 50 身 | 1:1 | 运动消耗转化 |
+| 行→心 | 50 行 | 50 心 | 1:1 | 社交活动转化 |
+| 心→智 | 30 心 | 30 智 | 1:1 | 情绪稳定后学习效率提升 |
+| 身→行 | 30 身 | 30 行 | 1:1 | 身体健康后行动力提升 |
+
+## 四、管理后台界面设计
+
+### 4.1 能量行为配置页
+
+```
+┌─────────────────────────────────────────────────────┐
+│  能量行为配置                                        │
+│  ┌──────┬────────┬──────┬────────────┬───────────┐  │
+│  │ 行为 │ 默认值 │ 维度分配 │ 每日上限 │ 操作      │  │
+│  ├──────┼────────┼──────┼────────────┼───────────┤  │
+│  │完成任务│ =积分  │ 行100% │ 200      │ ✏️ ⛔     │  │
+│  │完成游戏│ =积分  │ 智50% │ 200      │ ✏️ ⛔     │  │
+│  │健康打卡│ 5     │ 身100% │ 50       │ ✏️ ⛔     │  │
+│  │ ...   │ ...    │ ...   │ ...      │ ...       │  │
+│  └──────┴────────┴──────┴────────────┴───────────┘  │
+│  [+ 新增行为]                                         │
+└─────────────────────────────────────────────────────┘
+```
+
+### 4.2 能量消费配置页
+
+```
+┌─────────────────────────────────────────────────────┐
+│  能量消费配置                                        │
+│  ┌──────────┬────────┬──────┬────────┬───────────┐  │
+│  │ 消费场景 │ 消耗维度 │ 数量 │ 获得   │ 操作      │  │
+│  ├──────────┼────────┼──────┼────────┼───────────┤  │
+│  │兑换优惠券│ 富     │ 100  │ 10元券 │ ✏️ ⛔     │  │
+│  │富→行转换 │ 富     │ 变量 │ 行1:1  │ ✏️ ⛔     │  │
+│  │ ...     │ ...    │ ...  │ ...    │ ...       │  │
+│  └──────────┴────────┴──────┴────────┴───────────┘  │
+│  [+ 新增消费]                                         │
+└─────────────────────────────────────────────────────┘
+```
+
+## 五、后端实现方案
+
+### 5.1 能量发放流程改造
+
+```
+当前流程:
+  Hardcode: awardEnergy(childId, "task", taskId, points, "描述", null)
+                                       ↓
+改造后流程:
+  EnergyBehaviorConfig config = getConfig("task_complete");
+  if (config != null && config.enabled) {
+      int amount = resolveAmount(config, context);  // 从配置或上下文计算
+      Map<String, Integer> dimMap = config.getDimensionAssign();
+      awardEnergyByDim(childId, dimMap, amount, "task", taskId, "描述");
+  } else {
+      // 无配置时使用默认行为(保持兼容)
+      awardEnergy(childId, "task", taskId, points, "描述", null);
+  }
+```
+
+### 5.2 维度分配发放
+
+```java
+public void awardEnergyByDim(Long childId, Map<String, Integer> dimRatios,
+                              Integer totalAmount, String sourceType,
+                              Long sourceId, String description) {
+    // 按比例分配到各维度
+    for (Map.Entry<String, Integer> entry : dimRatios.entrySet()) {
+        String dimCode = entry.getKey();
+        int ratio = entry.getValue();  // 如 50 表示50%
+        int dimAmount = totalAmount * ratio / 100;
+        if (dimAmount > 0) {
+            awardEnergyByDimCode(childId, dimCode, dimAmount, sourceType, sourceId, description);
+        }
+    }
+}
+```
+
+### 5.3 消费/转换流程
+
+```java
+@Transactional
+public Result<?> consumeEnergy(Long childId, String consumptionCode, Map<String, Object> params) {
+    EnergyConsumptionConfig config = getConsumptionConfig(consumptionCode);
+    if (config == null || !config.enabled) return Result.error("消费配置不存在");
+
+    // 1. 校验余额
+    int balance = energyService.getBalance(childId, config.getSourceDimension());
+    if (balance < config.getAmount()) return Result.error("能量不足");
+
+    // 2. 扣除能量
+    energyService.deductEnergyByCode(childId, config.getSourceDimension(), config.getAmount(), config.getDescription());
+
+    // 3. 执行目标操作
+    switch (config.getTargetType()) {
+        case "coupon":
+            // 发放优惠券
+            couponService.issueToUser(config.getTargetId(), userId);
+            break;
+        case "energy":
+            // 转换为其他维度能量
+            int convertAmount = config.getAmount() * config.getConvertRatio() / 100;
+            energyService.awardEnergyByDimCode(childId, config.getConvertDimension(),
+                convertAmount, "energy_convert", 0L, "能量转换");
+            break;
+        case "wish":
+            // 心愿兑换
+            break;
+    }
+
+    return Result.success("消费成功");
+}
+```
+
+## 六、实施路线图
+
+| 阶段 | 内容 | 涉及 |
+|------|------|------|
+| **P0** | 新增 missing 能量来源代码实现 | 邀请好友/家人、上传报告、完成计划等 |
+| **P1** | 创建 `energy_behavior_config` 表 + 管理后台CRUD | 后端 + 管理端 |
+| **P1** | 改造 `awardEnergy()` 调用改为从配置读取 | 后端重构 |
+| **P2** | 创建 `energy_consumption_config` 表 + 管理后台CRUD | 后端 + 管理端 |
+| **P2** | 实现能量转换引擎 | 后端 |
+| **P3** | 迁移旧数据到新配置表 | 数据迁移 |
+| **P3** | 废弃旧的 `energy_source_config` 表 | 清理 |

+ 83 - 0
docs/analysis/energy-sources-analysis.md

@@ -0,0 +1,83 @@
+# 五维能量来源分析
+
+## 所有能量获取来源
+
+| # | 来源 | sourceType | 触发行为 | 能量值 | 过期天数 | 说明 |
+|---|------|-----------|---------|--------|---------|------|
+| 1 | **完成任务** | `task` | 孩子完成任务(家长审核通过) | = 任务积分(1-10) | 永久 | 积分越高能量越多 |
+| 2 | **完成游戏** | `game` | 孩子完成小游戏 | = 获得积分(1-10) | 永久 | 游戏积分同步 |
+| 3 | **活动签到** | `activity` | 活动签到 | = 签到积分(默认5) | 永久 | 积分可配置 |
+| 4 | **阅读文章** | `article` | 阅读文章后完成任务 | = 文章积分 | 永久 | 积分由文章配置 |
+| 5 | **商品购买** | `product` | 支付成功 | = 订单总金额(分) | 30天 | 按消费金额计算 |
+| 6 | **健康打卡** | `health_checkin` | 完成健康打卡 | 默认5(可配置) | 30天 | 身维度 |
+| 7 | **理财打卡** | `checkin` | 完成理财打卡 | 默认5(可配置) | 永久 | 富维度 |
+| 8 | **情绪打卡** | `emotion_checkin` | 完成情绪打卡 | 5 | 0天(不过期) | 心维度 |
+| 9 | **预约测评** | `appointment` | 提交测评预约 | 10 | 永久 | 预约即给 |
+| 10 | **完成测评** | `appointment` | 规划师完成测评录入 | 30 | 永久 | 完成后给 |
+| 11 | **连续打卡** | `streak` | 每日打卡(每日) | 5 | 永久 | 每天连续打卡给 |
+| 12 | **打卡里程碑** | `streak` | 达到里程碑天数 | 里程碑奖励积分 | 永久 | 如7天/30天/100天 |
+| 13 | **成长任务** | `growth_day` | 完成每日成长任务 | 任务配置值 | 1天 | 每日任务 |
+| 14 | **微行动** | `micro_action` | 完成微行动 | 1 | 30天 | 每次1点 |
+| 15 | **新手引导** | `onboarding` | 完成引导任务 | 任务配置值 | 30天 | 一次性 |
+| 16 | **邀请里程碑** | `invite_milestone` | 达到邀请人数里程碑 | 里程碑配置值 | 30天 | 按邀请人数 |
+| 17 | **维度同步** | `dimension` | 健康维度数据上传 | 计算值(见下方) | 30天 | 根据维度评分计算 |
+| 18 | **能量规则引擎** | `eventType` | 各类事件(可配置) | 规则配置值 | 永久 | 动态规则 |
+| 19 | **手动发放** | `task`(对外) | 家长手动发放 | 自定义(1-200) | 永久 | 通过/grant接口 |
+
+## 能量分配方式
+
+`awardEnergy()` 方法内部按以下规则分配能量到各维度:
+
+### 有 `energy_source_config` 配置时
+从 `energy_source_config` 表读取 `source_type + source_id` 对应的维度比例配置。
+
+### 无配置时(默认 Fallback)
+默认全部归入 **行动维度(action)**,比例 100%。
+
+```java
+// 默认 Fallback → 行(action) 100%
+EnergyDimension action = getDimByCode("action");
+return Collections.singletonMap(action.getId(), 10000); // 100%
+```
+
+### 日上限控制
+
+| 限制类型 | 值 | 说明 |
+|---------|-----|------|
+| 全局日上限 | 200 | 所有维度合计每天最多200 |
+| 身(body) | 50 | 身维度每天最多50 |
+| 心(mind) | 40 | 心维度每天最多40 |
+| 智(wisdom) | 80 | 智维度每天最多80 |
+| 行(action) | 60 | 行维度每天最多60 |
+| 富(wealth) | 50 | 富维度每天最多50 |
+
+## 动态值说明
+
+### 商品购买能量
+```
+能量值 = 订单总金额(单位:分)
+例如:购买100元商品 → 10000分 → 获得10000能量 → 全部分配到action维度
+```
+
+### 维度同步能量
+```
+能量值 = 归一化维度评分 × 权重因子
+评分范围0-100,权重因子从sys_config读取
+```
+
+### 成长任务/引导/里程碑
+这些能量值存储在对应的数据库表中,由管理员在管理后台配置:
+
+| 表 | 字段 | 说明 |
+|----|------|------|
+| `growth_task` | `reward_energy` | 每日成长任务能量奖励 |
+| `onboarding_task` | `reward_energy` | 新手引导各步骤能量奖励 |
+| `invite_milestone` | `reward_energy` | 邀请里程碑能量奖励 |
+
+## 能量消耗来源
+
+| # | 用途 | 维度 | 说明 |
+|---|------|------|------|
+| 1 | 心愿兑换扣除 | `action`(行) | 孩子兑换心愿时扣减 |
+| 2 | 未报名签到惩罚 | 活动维度 | 未报名参加活动签到扣减 |
+| 3 | 能量规则引擎 | 规则配置 | 动态规则触发的扣除 |

+ 410 - 0
docs/analysis/family-member-card-fix-plan.md

@@ -0,0 +1,410 @@
+# 家庭成员关系卡片 — 修复方案
+
+## 总体目标
+
+让 `FamilyMemberCard` 从"简单的成员选择器"升级为"包含关系标签、交互操作、丰富信息的家庭关系卡片"。
+
+## 方案概览
+
+| 层 | 改动量 | 核心变更 |
+|----|--------|---------|
+| 后端 DTO | 小 | FamilyMemberDTO 增加 relationship 字段 |
+| 后端 Service | 中 | FamilyMembersController.list() 增加关系计算逻辑 |
+| 前端组件 | 中 | FamilyMemberCard 增加关系标签/操作按钮/交互 |
+| 前端容器 | 小 | FamilyMemberStrip 增加长按菜单支持 |
+
+---
+
+## 第一步:后端 — FamilyMemberDTO 增加关系字段
+
+### 修改 FamilyMemberDTO
+
+```java
+// DTO 中增加以下字段(从 family_relationships 表计算)
+private String relationship;     // 与当前用户的关系: 爸爸/妈妈/儿子/女儿/配偶
+private Integer generation;      // 辈分: 1/2/3
+private Boolean isSpouse;        // 是否配偶
+private String relativeLabel;    // 关系标签显示名(如"爸爸 · 二代")
+```
+
+### 修改 FamilyMembersController.list()
+
+```java
+@PostMapping("/list")
+public Result<List<FamilyMemberVO>> list(@RequestAttribute("userId") Long userId) {
+    User user = userMapper.selectById(userId);
+    if (user == null || user.getFamilyId() == null) {
+        return Result.error("用户未加入家庭");
+    }
+    List<FamilyMember> members = familyMemberMapper.selectList(
+        new LambdaQueryWrapper<FamilyMember>()
+            .eq(FamilyMember::getFamilyId, user.getFamilyId())
+    );
+    // 为每个成员计算关系标签
+    List<FamilyMemberVO> result = members.stream().map(m -> {
+        FamilyMemberVO vo = FamilyMemberVO.from(m);
+        // 计算关系
+        String relation = calculateRelation(userId, m.getUserId(), m.getGeneration(), m.getIsSpouse());
+        vo.setRelationship(relation);
+        vo.setRelativeLabel(buildRelativeLabel(relation, m.getGeneration()));
+        return vo;
+    }).collect(Collectors.toList());
+    return Result.success(result);
+}
+```
+
+### 关系计算逻辑
+
+```java
+/**
+ * 计算当前用户与目标成员的关系
+ * 依赖 family_relationships 表中的双向关系数据
+ */
+private String calculateRelation(Long currentUserId, Long memberUserId,
+                                  Integer generation, Boolean isSpouse) {
+    if (isSpouse != null && isSpouse) return "配偶";
+
+    // 查询 family_relationships 表获取关系
+    FamilyRelationship rel = relationshipMapper.selectOne(
+        new LambdaQueryWrapper<FamilyRelationship>()
+            .eq(FamilyRelationship::getMemberId, currentUserId)
+            .eq(FamilyRelationship::getRelatedMemberId, memberUserId)
+    );
+    if (rel != null && rel.getRelationshipType() != null) {
+        return rel.getRelationshipType();  // 如 "爸爸"/"妈妈"/"儿子"/"女儿"
+    }
+
+    // Fallback: 根据 generation 推断
+    if (generation != null) {
+        if (generation == 1) return "长辈";
+        if (generation == 2) return "同辈";
+        if (generation == 3) return "晚辈";
+    }
+    return "家庭成员";
+}
+
+/**
+ * 构建关系标签显示文本
+ */
+private String buildRelativeLabel(String relation, Integer generation) {
+    String gen = generation != null ? " · 第" + generation + "代" : "";
+    return relation + gen;
+}
+```
+
+### 新建 FamilyMemberVO
+
+```java
+@Data
+public class FamilyMemberVO {
+    private Long id;
+    private Long userId;
+    private String nickname;
+    private String avatar;
+    private String phone;
+    private String gender;
+    private Integer generation;
+    private Boolean isSpouse;
+    private String relationship;     // 关系: 爸爸/妈妈/儿子/女儿/配偶
+    private String relativeLabel;    // 显示标签: "爸爸 · 二代"
+    private Integer totalPoints;
+    private BigDecimal trustScore;
+    private BigDecimal intimacyScore;
+    private Date lastInteractionAt;
+    private Integer streakDays;
+
+    public static FamilyMemberVO from(FamilyMember m) {
+        FamilyMemberVO vo = new FamilyMemberVO();
+        BeanUtils.copyProperties(m, vo);
+        return vo;
+    }
+}
+```
+
+---
+
+## 第二步:后端 — 关系数据查询
+
+### 查询 family_relationships 表
+
+```sql
+-- family_relationships 表结构(已存在)
+CREATE TABLE family_relationships (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    family_id BIGINT NOT NULL,
+    member_id BIGINT NOT NULL COMMENT '关系主体',
+    related_member_id BIGINT NOT NULL COMMENT '关系客体',
+    relationship_type VARCHAR(20) NOT NULL COMMENT '关系类型: 爸爸/妈妈/儿子/女儿/丈夫/妻子',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+);
+```
+
+### 注入 RelationshipMapper
+
+```java
+@Resource
+private FamilyRelationshipMapper familyRelationshipMapper;
+```
+
+### 迁移109:family_members 表补充关系索引
+
+```java
+// 迁移109: family_members 表添加关系查询索引
+try {
+    jdbcTemplate.execute("ALTER TABLE family_members ADD INDEX idx_family_user (family_id, user_id)");
+    log.info("已添加family_members关系查询索引");
+} catch (Exception e) {
+    // 索引已存在,忽略
+}
+```
+
+---
+
+## 第三步:前端 — FamilyMemberCard 增强
+
+### 改造后的模板
+
+```vue
+<template>
+  <view class="family-member-card" :class="{ selected: isSelected, [member.effectiveRole || '']: true }"
+        @click="onClick" @longpress="onLongPress">
+    <!-- 头像区域 -->
+    <view class="card-avatar-wrap">
+      <image class="card-avatar" :src="member.avatar || defaultAvatar" mode="aspectFill" />
+      <!-- 关系标签徽章 -->
+      <view class="card-relation-badge" :style="{ background: relationColor }">
+        <text class="card-relation-text">{{ member.relationship || member.roleLabel || '成员' }}</text>
+      </view>
+      <!-- 配偶标记 -->
+      <view class="card-spouse-mark" v-if="member.isSpouse">
+        <text class="spouse-icon">💍</text>
+      </view>
+    </view>
+
+    <!-- 昵称 -->
+    <text class="card-nickname">{{ member.nickname }}</text>
+
+    <!-- 关系标签 + 辈分 -->
+    <view class="card-relation-line">
+      <text class="card-relation-label">{{ member.relativeLabel || '' }}</text>
+    </view>
+
+    <!-- 联系方式(仅当有电话时显示) -->
+    <view class="card-contact-row" v-if="member.phone" @click.stop="onCall">
+      <text class="contact-icon">📞</text>
+      <text class="contact-phone">{{ member.phone }}</text>
+    </view>
+
+    <!-- 能量分数 -->
+    <view class="card-energy" v-if="energyScore !== null && energyScore !== undefined">
+      <text class="energy-value">{{ energyScore }}</text>
+      <text class="energy-unit">分</text>
+    </view>
+
+    <!-- 选中标记 -->
+    <view class="card-selected-mark" v-if="isSelected">
+      <text class="mark-icon">✓</text>
+    </view>
+  </view>
+</template>
+```
+
+### 改造后的脚本
+
+```javascript
+export default {
+  props: {
+    member: { type: Object, required: true },
+    isSelected: { type: Boolean, default: false },
+    energyScore: { type: Number, default: null },
+    showActions: { type: Boolean, default: false }  // 是否显示操作按钮
+  },
+  computed: {
+    defaultAvatar: function() { return '/static/default-avatar.png' },
+    relationColor: function() {
+      var rel = this.member && this.member.relationship
+      if (rel === '爸爸' || rel === '妈妈') return '#F97316'  // 父母-橙色
+      if (rel === '儿子' || rel === '女儿') return '#0EA5E9'  // 子女-蓝色
+      if (rel === '配偶') return '#EC4899'                     // 配偶-粉色
+      if (rel === '爷爷' || rel === '奶奶') return '#6B7280'   // 祖辈-灰色
+      var role = this.member && this.member.effectiveRole
+      if (role === 'parent') return '#F97316'
+      if (role === 'child') return '#0EA5E9'
+      if (role === 'teacher') return '#8B5CF6'
+      return '#9CA3AF'
+    }
+  },
+  methods: {
+    onClick: function() {
+      this.$emit('select', this.member)
+    },
+    onLongPress: function() {
+      this.$emit('longpress', this.member)
+    },
+    onCall: function() {
+      if (this.member.phone) {
+        uni.makePhoneCall({ phoneNumber: this.member.phone })
+      }
+    }
+  }
+}
+```
+
+### 改造后的样式(关键部分)
+
+```css
+.card-relation-badge {
+  position: absolute;
+  bottom: -4rpx;
+  left: 50%;
+  transform: translateX(-50%);
+  padding: 2rpx 10rpx;
+  border-radius: 12rpx;
+  white-space: nowrap;
+  max-width: 100rpx;
+}
+.card-relation-text {
+  font-size: 16rpx;
+  color: #FFFFFF;
+  font-weight: 500;
+}
+.card-spouse-mark {
+  position: absolute;
+  top: -4rpx;
+  right: -4rpx;
+  width: 28rpx;
+  height: 28rpx;
+}
+.card-relation-line {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-top: 2rpx;
+}
+.card-relation-label {
+  font-size: 18rpx;
+  color: #9CA3AF;
+}
+.card-contact-row {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-top: 4rpx;
+}
+.contact-icon { font-size: 20rpx; }
+.contact-phone { font-size: 18rpx; color: #3B82F6; margin-left: 4rpx; }
+```
+
+---
+
+## 第四步:前端 — FamilyMemberStrip 增加长按菜单
+
+```vue
+<template>
+  <view class="family-member-strip">
+    <scroll-view scroll-x :show-scrollbar="false" v-if="members.length >= 4">
+      <view class="strip-inner scroll-mode">
+        <FamilyMemberCard
+          v-for="member in members"
+          :key="member.id"
+          :member="member"
+          :isSelected="member.id === selectedMemberId"
+          :energyScore="getMemberEnergy(member)"
+          @select="onSelect"
+          @longpress="onLongPress"
+        />
+      </view>
+    </scroll-view>
+    <!-- 长按操作菜单 -->
+    <uni-popup ref="actionMenu" type="bottom">
+      <view class="action-menu">
+        <view class="action-item" @click="switchToMember">
+          <text class="action-icon">🔄</text>
+          <text>切换到该成员</text>
+        </view>
+        <view class="action-item" @click="editMember">
+          <text class="action-icon">✏️</text>
+          <text>编辑资料</text>
+        </view>
+        <view class="action-item" @click="removeMember" v-if="isParent">
+          <text class="action-icon">🗑️</text>
+          <text style="color:#EF4444">移除成员</text>
+        </view>
+        <view class="action-item cancel" @click="closeMenu">取消</view>
+      </view>
+    </uni-popup>
+  </view>
+</template>
+```
+
+```javascript
+export default {
+  data() {
+    return {
+      longPressedMember: null,
+      isParent: false
+    }
+  },
+  methods: {
+    onLongPress: function(member) {
+      this.longPressedMember = member
+      this.$refs.actionMenu.open()
+    },
+    switchToMember: function() {
+      this.closeMenu()
+      if (this.longPressedMember) {
+        uni.navigateTo({ url: '/pages/home-pages/child-index?memberId=' + this.longPressedMember.id })
+      }
+    },
+    editMember: function() {
+      this.closeMenu()
+      if (this.longPressedMember) {
+        uni.navigateTo({ url: '/pages/profile-extra/family-members?editId=' + this.longPressedMember.id })
+      }
+    },
+    removeMember: function() {
+      this.closeMenu()
+      // 调用 /api/family/member/kick
+    },
+    closeMenu: function() {
+      this.$refs.actionMenu.close()
+    }
+  }
+}
+```
+
+---
+
+## 第五步:适配现有页面
+
+现有9个使用 `FamilyMemberStrip` 的页面需要适配:
+
+| 页面 | 改动 | 说明 |
+|------|------|------|
+| parent-index | 不需要改 | 直接使用增强后的组件 |
+| child-index | 不需要改 | 直接使用增强后的组件 |
+| mind/body/wisdom/wealth/action/index | 不需要改 | 直接使用增强后的组件 |
+| index-home | 不需要改 | 直接使用增强后的组件 |
+
+组件增强后,现有页面无需修改即可获得关系标签、联系按钮等新功能。
+
+---
+
+## 实施路线图
+
+| 步骤 | 内容 | 涉及文件 | 估算工时 |
+|------|------|---------|---------|
+| 1 | 创建 FamilyMemberVO + 修改 FamilyMembersController.list() | 后端 2 文件 | 1h |
+| 2 | 实现关系计算逻辑 | 后端 1 文件 | 1h |
+| 3 | 迁移109:添加索引 | 后端 1 文件 | 0.5h |
+| 4 | 增强 FamilyMemberCard 组件 | 前端 1 文件 | 1.5h |
+| 5 | 增强 FamilyMemberStrip 组件(长按菜单) | 前端 1 文件 | 1h |
+| 6 | 测试验证 | 前后端 | 1h |
+| | **合计** | **7 文件** | **~6h** |
+
+## 风险与注意事项
+
+1. **兼容性**:增强后的 FamilyMemberCard 新增 props 都有默认值,现有页面无需修改即可使用
+2. **关系数据**:如果 `family_relationships` 表中没有数据,Fallback 逻辑使用 `generation` 推断
+3. **小程序限制**:`uni.makePhoneCall` 需要用户授权,`uni-popup` 需要 uni-ui 组件库
+4. **权限控制**:移除成员操作需要校验当前用户角色(仅家长可操作)

+ 164 - 0
docs/analysis/family-member-card-gap-analysis.md

@@ -0,0 +1,164 @@
+# 家庭成员关系卡片 — 需求与实现差距分析
+
+## FamilyMemberStrip 当前实现
+
+### 组件结构
+
+```
+FamilyMemberStrip(横向滚动容器)
+  └── FamilyMemberCard(单个成员卡片)
+        ├── 头像(avatar)
+        ├── 角色标签(roleBadge: parent/child/teacher/elderly)
+        ├── 昵称(nickname)
+        ├── 能量分数(energyScore,可选)
+        └── 选中标记(isSelected)
+```
+
+### 数据来源
+
+`/api/family/member/list` 返回的 `FamilyMember` 对象,包含:
+```
+id, familyId, userId, nickname, phone, avatar, gender, birthday,
+generation, isSpouse, totalPoints, trustScore, intimacyScore, ...
+```
+
+### 当前使用场景(9个页面)
+
+| 页面 | 用途 |
+|------|------|
+| parent-index | 家长首页成员选择器 |
+| child-index | 孩子首页成员选择器 |
+| mind/body/wisdom/wealth/action/index | 五维首页成员选择器 |
+| index-home | 首页成员选择 |
+
+## 需求设计 vs 当前实现差距
+
+### 差距矩阵
+
+| # | 功能 | 需求 | 当前实现 | 差距 |
+|---|------|------|---------|------|
+| 1 | **关系标签** | 显示成员与当前用户的关系(爸爸/妈妈/儿子/女儿/配偶) | 只显示 `roleLabel`(parent/child/teacher),没有家庭关系语义 | ❌ 缺少关系标签 |
+| 2 | **辈分/世代** | 显示辈分信息(如"二代") | FamilyMember 有 `generation` 字段,但未展示 | ❌ 未使用 |
+| 3 | **配偶标记** | 标记配偶关系 | `isSpouse` 字段存在,但未展示 | ❌ 未使用 |
+| 4 | **联系方式** | 快速拨打电话/发消息 | 无电话显示,无快捷操作 | ❌ 缺少 |
+| 5 | **成员编辑** | 编辑成员信息(昵称/头像/角色) | 无编辑入口 | ❌ 缺少 |
+| 6 | **移除成员** | 从家庭中移除成员 | 无移除操作 | ❌ 缺少 |
+| 7 | **角色切换** | 一键切换到该成员视角 | 只有 `member/switch` API 但卡片未集成 | ❌ 缺少 |
+| 8 | **成员详情** | 点击进入成员详情页 | 只有 `select` 事件,无导航到详情页 | ❌ 缺少 |
+| 9 | **长按菜单** | 长按弹出操作菜单(编辑/切换/移除) | 无长按交互 | ❌ 缺少 |
+| 10 | **关系色** | 根据关系类型显示不同配色 | 只有4种角色色(parent橙/child蓝/teacher紫/elderly灰) | ⚠️ 部分实现 |
+| 11 | **能量分数** | 显示成员五维能量综合分数 | 已实现,但只显示一个总分 | ⚠️ 部分实现 |
+| 12 | **选中状态** | 高亮当前选中的成员 | 已实现 | ✅ |
+| 13 | **横向滚动** | 成员多时可横向滚动 | 已实现(scroll-view) | ✅ |
+| 14 | **头像显示** | 显示成员头像 | 已实现,有默认头像 fallback | ✅ |
+
+### 关键差距详细说明
+
+### 1. 关系标签(高优先级)
+
+当前 `roleBadge` 显示的是系统角色(parent/child/teacher),但用户需要看到的是**家庭关系**:
+- 爸爸、妈妈、儿子、女儿、爷爷、奶奶、丈夫、妻子
+
+`FamilyMember` 实体中没有直接的关系字段。关系信息存在于 `family_relationships` 表中(双向关系),需要通过 `/api/family/relationship/list` 获取。
+
+**实现方案:**
+```json
+// 需要的 API 返回数据
+{
+  "id": 1003,
+  "nickname": "小明",
+  "relationship": "儿子",     // 当前用户的儿子
+  "generation": 2,           // 第二代
+  "isSpouse": false,
+  "avatar": "...",
+  "phone": "138xxxx"
+}
+```
+
+### 2. 交互操作(高优先级)
+
+当前卡片只能点击选中,缺少以下操作:
+
+| 操作 | 触发方式 | 功能 |
+|------|---------|------|
+| 切换视角 | 点击 | 切换到该成员视角(家长可用) |
+| 编辑资料 | 长按菜单/编辑按钮 | 修改昵称、头像 |
+| 移除成员 | 长按菜单 | 从家庭中移除(仅限家长操作) |
+| 拨打电话 | 点击电话图标 | 调用系统拨号 |
+
+### 3. 信息展示(中优先级)
+
+当前卡片信息过于简单,缺少:
+- 关系标签(如"爸爸 · 二代")
+- 联系电话
+- 最近互动时间
+- 信任度/亲密度分数(`trustScore`, `intimacyScore` 字段已存在但未使用)
+
+## 建议改造方案
+
+### FamilyMemberCard 增强
+
+```vue
+<template>
+  <view class="family-member-card" :class="{ selected: isSelected }"
+        @click="onClick" @longpress="onLongPress">
+    <!-- 头像 -->
+    <view class="card-avatar-wrap">
+      <image class="card-avatar" :src="member.avatar || defaultAvatar" />
+      <view class="card-role-badge" :style="{ background: relationColor }">
+        <text>{{ member.relationship || member.roleLabel || '成员' }}</text>
+      </view>
+    </view>
+    <!-- 昵称 + 辈分 -->
+    <text class="card-nickname">{{ member.nickname }}</text>
+    <text class="card-generation" v-if="member.generation">
+      第{{ member.generation }}代
+    </text>
+    <!-- 联系方式 -->
+    <view class="card-contact" v-if="member.phone" @click.stop="callMember">
+      <text class="contact-icon">📞</text>
+    </view>
+    <!-- 能量分数 -->
+    <view class="card-energy" v-if="energyScore !== null">
+      <text class="energy-value">{{ energyScore }}</text>
+    </view>
+    <!-- 选中标记 -->
+    <view class="card-selected-mark" v-if="isSelected">✓</view>
+  </view>
+</template>
+```
+
+### 新增 API 需求
+
+| 端点 | 说明 | 当前状态 |
+|------|------|---------|
+| `GET /api/family/member/list` | 返回含 relationship 字段 | ❌ 需增加 relationship 字段 |
+| `GET /api/family/relationship/list` | 获取家庭成员关系 | ✅ 已存在 |
+| `POST /api/family/member/switch` | 切换到成员视角 | ✅ 已存在 |
+| `POST /api/family/member/update` | 更新成员信息 | ✅ 已存在 |
+| `POST /api/family/member/kick` | 移除成员 | ✅ 已存在 |
+
+### 后端改造:FamilyMemberDTO 增加 relationship 字段
+
+```java
+// FamilyMemberDTO 增加
+private String relationship;    // 与当前用户的关系: 爸爸/妈妈/儿子/女儿
+private Integer generation;     // 辈分
+private Boolean isSpouse;       // 是否配偶
+private BigDecimal trustScore;  // 信任度
+private BigDecimal intimacyScore; // 亲密度
+```
+
+### 后端改造:FamilyMembersController.list() 增加关系计算
+
+```java
+// 查询家庭成员列表时,同时计算每个成员与当前用户的关系
+List<FamilyMember> members = familyMemberMapper.selectList(...);
+// 查询关系类型配置
+List<RelationshipType> relationTypes = relationshipTypeMapper.selectList(...);
+// 为每个成员计算关系标签
+for (FamilyMember member : members) {
+    String relation = relationshipService.calculateRelation(currentUserId, member.getUserId());
+    member.setRelationship(relation);
+}
+```

+ 287 - 0
docs/analysis/member-selection-analysis.md

@@ -0,0 +1,287 @@
+# 所有功能接口参数分析
+
+> 请逐项判断:**哪些功能应该支持选择家庭成员(memberId)?**
+
+## 参数说明
+
+| 参数 | 语义 | 谁操作 |
+|------|------|--------|
+| `childId` | 孩子自己操作 | 孩子用户执行,不需要选人 |
+| `memberId` | 用户选择家庭成员 | 家长可为任何家庭成员代操作(含孩子、配偶、老人) |
+| 无参数 | 自己操作自己 | 不需要选人 |
+
+## 按功能模块列出
+
+### 认证与用户管理
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 1 | 登录/注册 | 多个 | 无 | 自己 | 自己登录 |
+| 2 | 用户信息 | `/api/user/info` | 无 | 自己 | 自己的信息 |
+| 3 | 角色列表 | `/api/family/user/roles` | 无 | 自己 | 自己的角色 |
+| 4 | 切换到孩子视图 | `/api/family/member/switch` | `memberId` | 家长 | 切换到孩子视角 |
+| 5 | 切换回家长 | `/api/family/user/switch-back-to-parent` | 无 | 自己 | 切换回来 |
+
+### 家庭管理
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 6 | 家庭成员列表 | `/api/family/member/list` | 无 | 自己 | 查看家庭 |
+| 7 | 孩子列表 | `/api/family/children` | 无 | 自己 | 查看孩子 |
+| 8 | 关系问卷生成 | `/api/family/questionnaire/generate` | **`memberId`** | 家长 | 为某成员生成问卷 |
+| 9 | 关系质量评分 | `/api/family/relationship/scores` | 无 | 自己 | 家庭关系 |
+| 10 | 互动类型/列表 | `/api/family/interaction/*` | 无 | 自己 | 家庭互动 |
+| 11 | 邀请码 | `/api/family/invite-code` | 无 | 自己 | 自己的邀请码 |
+| 12 | 待审批绑定 | `/api/family/pending-bindings` | 无 | 自己 | 家庭绑定 |
+
+### 任务管理
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 13 | 创建任务 | `/api/tasks/create` | `childId` | 家长 | 给某孩子创建任务 |
+| 14 | 今日任务列表 | `/api/tasks/today` | `childId` | 孩子 | 孩子看自己的任务 |
+| 15 | 完成任务 | `/api/tasks/{id}/complete` | 无 | 孩子 | 孩子完成任务 |
+| 16 | 任务历史 | `/api/tasks/history` | `childId` | 孩子 | 孩子看自己的历史 |
+| 17 | 待审核列表 | `/api/tasks/pending-review` | 无 | 家长 | 家长审核 |
+| 18 | 审核任务 | `/api/tasks/{id}/review` | 无 | 家长 | 家长审核 |
+| 19 | 即将到期任务 | `/api/task-reminders/upcoming/{childId}` | `childId` | 家长 | 查看某孩子的到期任务 |
+| 20 | 任务统计 | `/api/task-reminders/statistics/{childId}` | `childId` | 家长 | 查看某孩子的任务统计 |
+
+### 心愿管理
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 21 | 创建心愿 | `/api/wishes/create` | 无 | 孩子 | 孩子自己的心愿 |
+| 22 | 待处理心愿 | `/api/wishes/pending` | 无 | 家长 | 家长审批 |
+| 23 | 心愿列表 | `/api/wishes/list` | 无 | 孩子 | 孩子看自己的心愿 |
+
+### 五维能量系统
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 24 | 能量概览 | `/api/energy/overview` | `childId` | 家长/孩子 | 看某孩子的能量 |
+| 25 | 能量沙盘 | `/api/energy/sandbox` | 无 | 家长 | 家庭能量聚合 |
+| 26 | 能量流水 | `/api/energy/logs` | `childId` | 家长/孩子 | 看某孩子的流水 |
+| 27 | 发放能量 | `/api/energy/grant` | `childId` | 家长 | 给某孩子发能量 |
+| 28 | 心愿扣除 | `/api/energy/deduct-for-wish` | `childId` | 孩子 | 孩子兑换扣除 |
+| 29 | 五维分数历史 | `/api/energy/score-history` | **`memberId, memberType`** | 家长 | 查看某成员的历史分数 |
+| 30 | 维度概览 | `/api/dimension/overview` | **`memberId`** | 家长 | 查看某成员的维度 |
+| 31 | 维度历史 | `/api/dimension/history` | **`memberId`** | 家长 | 查看某成员的维度历史 |
+| 32 | 富维度详情 | `/api/energy/wealth-detail` | **`memberId, memberType`** | 家长 | 某成员的财富详情 |
+| 33 | 家庭收入汇总 | `/api/earnings/family/summary` | 无 | 自己 | 家庭收入 |
+
+### 健康打卡
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 34 | 综合打卡 | `/api/daily/checkin/comprehensive` | `childId` | 孩子 | 孩子自己打卡 |
+| 35 | 运动打卡 | `/api/health/exercise/create` | **`memberId`** | 自己 | 自己运动打卡 |
+| 36 | 饮食打卡 | `/api/health/meal/create` | **`memberId`** | 自己 | 自己饮食打卡 |
+| 37 | 睡眠打卡 | `/api/health/sleep/create` | **`memberId`** | 自己 | 自己睡眠打卡 |
+| 38 | 喝水打卡 | `/api/health/water/create` | **`memberId`** | 自己 | 自己喝水打卡 |
+| 39 | 冥想打卡 | `/api/health/meditation/create` | **`memberId`** | 自己 | 自己冥想打卡 |
+| 40 | 打卡列表 | `/api/daily/checkin/list` | **`memberId`** | 自己 | 看自己的打卡记录 |
+| 41 | 打卡统计 | `/api/daily/checkin/stats` | **`memberId`** | 自己 | 自己统计 |
+| 42 | 打卡进度 | `/api/daily/checkin/streak` | **`memberId`** | 自己 | 自己连续打卡 |
+| 43 | 健康积分 | `/api/health/score/overview` | `childId` | 孩子 | 孩子健康积分 |
+| 44 | 健康时间线 | `/api/health/timeline/list` | `childId` | 孩子 | 孩子健康时间线 |
+| 45 | 健康预警 | `/api/health/alert/list` | `childId` | 孩子 | 孩子健康预警 |
+
+### 成长档案
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 46 | 创建成长档案 | `/api/growth/record/create` | `childId` | 家长 | 为某孩子创建档案 |
+| 47 | 档案列表 | `/api/growth/record/list` | 无 | 家长 | 自己家庭的档案 |
+| 48 | 指定孩子档案 | `/api/growth/record/child/{childId}` | `childId` | 家长 | 某孩子的档案 |
+| 49 | 档案详情 | `/api/growth/record/{id}` | 无 | 家长 | 某条档案详情 |
+| 50 | 生长记录列表 | `/api/health/growth/list` | **`memberId`** | 家长 | 某成员的生长记录 |
+| 51 | 创建生长记录 | `/api/health/growth/create` | 无 | 家长 | 记录生长数据 |
+| 52 | 创建成长计划 | `/api/growth/plan/create` | `childId` | 规划师 | 为某孩子制定计划 |
+| 53 | 查看孩子计划 | `/api/growth/plan/child/{childId}` | `childId` | 家长 | 某孩子的计划 |
+
+### DAN测评
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 54 | 测评材料列表 | `/api/assessment/materials` | 无 | 自己 | 查看材料 |
+| 55 | 创建测评订单 | `/api/dan-assessment/order/create` | `childId` | 家长 | 为某孩子购买测评 |
+| 56 | 评估师列表 | `/api/assessment/appointment/assessor-list` | 无 | 自己 | 查看评估师 |
+| 57 | 最新测评结果 | `/api/assessment/latest-result` | `childId` | 家长 | 某孩子的结果 |
+| 58 | 测评历史 | `/api/assessment/history` | `childId` | 家长 | 某孩子的历史 |
+| 59 | 家长自评 | `/api/parent/assessment/create` | `childId` | 家长 | 为某孩子自评 |
+| 60 | 自评记录 | `/api/parent/assessment/records` | 无 | 自己 | 自己的自评 |
+
+### 商城交易
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 61 | 商品列表 | `/api/product/list` | 无 | 自己 | 浏览商品 |
+| 62 | 购物车 | `/api/cart/list` | 无 | 自己 | 自己的购物车 |
+| 63 | 创建订单 | `/api/product/order/create` | 无 | 自己 | 自己下单 |
+| 64 | 我的订单 | `/api/product/order/my` | 无 | 自己 | 自己的订单 |
+| 65 | 收货地址 | `/api/consignee/list` | 无 | 自己 | 自己的地址 |
+
+### 积分兑换
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 66 | 积分余额 | `/api/points/balance` | `childId` | 孩子 | 孩子自己的积分 |
+| 67 | 积分流水 | `/api/points/logs` | `childId` | 孩子 | 孩子自己的流水 |
+| 68 | 兑换商品列表 | `/api/points/exchange/products` | 无 | 自己 | 浏览可兑换商品 |
+| 69 | 兑换积分 | `/api/points/exchange` | `childId` | 孩子 | 孩子兑换 |
+
+### 小游戏
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 70 | 游戏列表 | `/api/game/list` | 无 | 自己 | 浏览游戏 |
+| 71 | 完成游戏 | `/api/game/complete` | `childId` | 孩子 | 孩子自己玩游戏 |
+| 72 | 游戏历史 | `/api/game/history` | `childId` | 孩子 | 孩子自己的历史 |
+| 73 | 最佳成绩 | `/api/game/best` | `childId` | 孩子 | 孩子自己的成绩 |
+| 74 | 排行榜 | `/api/game/leaderboard` | 无 | 自己 | 全局排行榜 |
+
+### 营养与饮食
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 75 | 食谱推荐 | `/api/meal/recommend` | 无 | 自己 | 推荐食谱 |
+| 76 | 饮食日志 | `/api/meal/logs` | 无 | 自己 | 自己的饮食日志 |
+| 77 | 营养摄入统计 | `/api/meal/nutrition/summary` | 无 | 自己 | 自己的营养统计 |
+| 78 | 食材推荐指数 | `/api/food/recommendation/index` | 无 | 自己 | 食材推荐 |
+| 79 | 营养偏好 | `/api/nutrition/profile/get` | 无 | 自己 | 自己的偏好 |
+| 80 | 维度推荐商品 | `/api/recommend/dimension-products` | **`memberId`** | 家长 | 为某成员推荐商品 |
+| 81 | 营养知识库 | `/api/nutrition/beijing/kb/list` | 无 | 自己 | 知识库浏览 |
+
+### 心理与情绪
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 82 | 情绪打卡 | `/api/mind/checkin/create` | `childId` | 孩子 | 孩子自己打卡 |
+| 83 | 情绪列表 | `/api/mind/checkin/list` | `childId` | 孩子 | 孩子自己的情绪 |
+| 84 | 最新情绪 | `/api/mind/checkin/latest` | `childId` | 孩子 | 孩子最新情绪 |
+| 85 | 情绪趋势 | `/api/mind/checkin/trend` | `childId` | 孩子 | 孩子情绪趋势 |
+| 86 | 情绪统计 | `/api/mind/checkin/stats` | `childId` | 孩子 | 孩子情绪统计 |
+| 87 | 筛查历史 | `/api/mind/screening/history` | `childId` | 孩子 | 孩子筛查历史 |
+| 88 | 心理运势 | `/api/mind/fortune` | 无 | 自己 | 自己的运势 |
+| 89 | EMI报告 | `/api/mind/emireport/latest` | `childId` | 孩子 | 孩子EMI报告 |
+
+### 身体健康检测
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 90 | 健康报告列表 | `/api/health/report/list` | `childId` | 家长 | 某孩子的报告 |
+| 91 | 最新报告 | `/api/health/report/latest` | `childId` | 家长 | 某孩子的最新报告 |
+| 92 | 指标明细 | `/api/health/indicator/list` | `childId` | 家长 | 某孩子的指标 |
+| 93 | 营养缺乏分析 | `/api/health/nutrition/deficiency` | `childId` | 家长 | 某孩子的营养分析 |
+| 94 | 上传PDF报告 | `/api/growth/record/upload-and-parse` | `childId` | 家长 | 上传某孩子的报告 |
+
+### 活动管理
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 95 | 活动列表 | `/api/activity/list` | 无 | 自己 | 浏览活动 |
+| 96 | 活动详情 | `/api/activity/detail` | 无 | 自己 | 查看详情 |
+| 97 | 活动报名 | `/api/activity/register` | `childId` | 家长 | 为某孩子报名 |
+| 98 | 取消报名 | `/api/activity/cancel-registration` | `childId` | 家长 | 取消某孩子的报名 |
+| 99 | 我的报名 | `/api/activity/my-registrations` | `childId` | 自己 | 自己的报名记录 |
+| 100 | 活动签到 | `/api/activity/checkin` | `childId` | 自己 | 报的谁谁签到,不需要选人 |
+| 101 | 活动评价提交 | `/api/activity/feedback/submit` | `childId` | 自己 | 参加者评价 |
+| 102 | 活动评价列表 | `/api/activity/feedback/list` | 无 | 自己 | 查看评价 |
+
+### 内容与媒体
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 103 | 文章列表 | `/api/articles/list` | 无 | 自己 | 浏览文章 |
+| 104 | 文章分类 | `/api/articles/categories` | 无 | 自己 | 浏览分类 |
+| 105 | 精选文章 | `/api/articles/featured` | 无 | 自己 | 浏览精选 |
+| 106 | 每日贴士 | `/api/articles/daily-tip` | 无 | 自己 | 浏览贴士 |
+| 107 | 我的分享 | `/api/share/my` | 无 | 自己 | 自己的分享 |
+| 108 | 保存文字记录 | `/api/media/upload-text` | 无 | 自己 | 自己记录 |
+
+### AI助手
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 109 | AI会话列表 | `/api/ai/conversations` | 无 | 自己 | 自己的会话 |
+| 110 | AI管家会话 | `/api/ai/butler/sessions` | 无 | 自己 | 自己的管家 |
+
+### 会员与订阅
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 111 | 会员等级 | `/api/membership/levels` | 无 | 自己 | 查看等级 |
+| 112 | 我的会员 | `/api/membership/my` | 无 | 自己 | 自己的会员 |
+| 113 | 订阅状态 | `/api/membership/subscription` | 无 | 自己 | 自己的订阅 |
+
+### 管理后台
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 114 | 用户管理 | `/api/admin/users` | 无 | 管理员 | 管理用户 |
+| 115 | 家庭管理 | `/api/admin/families` | 无 | 管理员 | 管理家庭 |
+| 116 | 任务管理 | `/api/admin/tasks` | 无 | 管理员 | 管理任务 |
+| 117 | 商品管理 | `/api/admin/product/*` | 无 | 管理员 | 管理商品 |
+| 118 | 订单管理 | `/api/admin/product/order/*` | 无 | 管理员 | 管理订单 |
+| 119 | 规划师审核 | `/api/admin/guide/*` | 无 | 管理员 | 审核规划师 |
+
+### 规划师体系
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 120 | 我的信息 | `/api/guide/my` | 无 | 规划师 | 自己的信息 |
+| 121 | 绑定家庭 | `/api/guide/families/bound-families` | 无 | 规划师 | 自己的绑定 |
+| 122 | 家庭任务概览 | `/api/guide/families/{familyId}/overview` | 无 | 规划师 | 某家庭概览 |
+| 123 | 孩子任务 | `/api/guide/families/{familyId}/children/{childId}/tasks` | `childId` | 规划师 | 某孩子的任务 |
+| 124 | 批量审核 | `/api/guide/families/{familyId}/tasks/batch-review` | 无 | 规划师 | 批量审核 |
+| 125 | 训练方案 | `/api/guide/training-plans/*` | 无 | 规划师 | 管理方案 |
+| 126 | 活动管理 | `/api/guide/activities/*` | 无 | 规划师 | 管理活动 |
+
+### 管家服务
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 127 | 管家档案 | `/api/butler/profile` | 无 | 管家 | 自己的档案 |
+| 128 | 家庭成员列表 | `/api/butler/members` | 无 | 管家 | 管家的成员 |
+
+### 营养师管理
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 129 | 营养师状态 | `/api/nutritionist/status` | 无 | 营养师 | 自己的状态 |
+| 130 | 营养师申请 | `/api/nutritionist/apply` | 无 | 自己 | 申请成为营养师 |
+
+### 圈子与联系人
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 131 | 我的圈子 | `/api/circle/my-circles` | **`memberId`** | 自己 | 某成员的圈子 |
+| 132 | 发现圈子 | `/api/circle/discover` | `childId` | 孩子 | 孩子发现圈子 |
+| 133 | 联系人列表 | `/api/contact/list` | 无 | 自己 | 自己的联系人 |
+| 134 | 家庭挑战 | `/api/family/challenge/list` | `childId` | 孩子 | 孩子的挑战 |
+
+### 知识库与邀请
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 135 | 知识库列表 | `/api/admin/knowledge-base/list` | 无 | 管理员 | 管理知识 |
+| 136 | 生成邀请码 | `/api/invite/code/generate` | 无 | 自己 | 生成邀请码 |
+| 137 | 邀请列表 | `/api/invite/list` | 无 | 自己 | 邀请记录 |
+| 138 | 里程碑列表 | `/api/invite/milestone/list` | 无 | 自己 | 邀请里程碑 |
+
+### 其他功能
+
+| # | 功能 | 接口 | 当前参数 | 操作者 | 说明 |
+|---|------|------|---------|--------|------|
+| 139 | 吉祥物 | `/api/user/mascot/get` | 无 | 自己 | 自己的吉祥物 |
+| 140 | 每日反馈 | `/api/feedback/today` | `childId` | 孩子 | 孩子自己的反馈 |
+| 141 | 引导进度 | `/api/onboarding/progress` | 无 | 自己 | 自己的引导 |
+
+## 汇总速查
+
+| 参数类型 | 接口数 | 典型功能 |
+|---------|--------|---------|
+| `childId`(孩子自己操作) | ~30 | 任务、游戏、积分、心愿、情绪、能量概览、健康报告、活动报名 |
+| **`memberId`(可选成员)** | **~20** | **健康打卡、维度管理、生长记录、圈子、推荐、问卷** |
+| 无参数(自己操作自己) | ~90 | 认证、家庭、商城、文章、AI、会员、管理后台 |

+ 922 - 0
docs/architecture/2026-07-20-SB3-upgrade-plan.md

@@ -0,0 +1,922 @@
+# Spring Boot 3.x 升级 + Dify 替代 Implementation Plan
+
+> **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:** 将 cfc-backend 从 Spring Boot 2.7.18 + Java 8 升级到 Spring Boot 3.4.x + Java 21 LTS,用 Spring AI + AxonHub 替换 Dify 全部功能。
+
+**Architecture:** 分层替代 Dify:Spring AI 承担 AI 应用层(对话/RAG/工具),AxonHub 承担模型路由层(分发/降级/计费),专用工具承担文档预处理。5 阶段串行,每阶段有独立编译/测试验证 + git tag 回退点。
+
+**Tech Stack:** Java 21, Spring Boot 3.4.x, Spring AI 1.x, AxonHub (axonhub.iwintrue.com), MyBatis-Plus 3.5.9, springdoc-openapi 2.7, exp4j 0.4.8, jjwt 0.12.6, mysql-connector-java 8.0.33, sqlite-vec, docling (PDF预处理)
+
+---
+
+## Global Constraints
+
+1. **Java 21 LTS** — JDK 21 必须安装到所有开发/CI/生产环境,maven-compiler-plugin source/target=21
+2. **Spring Boot BOM** — 以 spring-boot-starter-parent 3.4.x 为根 BOM,避免传递依赖冲突
+3. **javax → jakarta** — 所有 javax.* import 必须改为 jakarta.*,包括但不限于 persistence/annotation/validation/servlet/sql
+4. **Nashorn 已废弃** — WisdomMathService 中的 ScriptEngine eval 必须替换为 exp4j
+5. **springdoc v2** — artifactId 从 `springdoc-openapi-ui` 改为 `springdoc-openapi-starter-webmvc-ui`
+6. **jjwt 0.12** — `Jwts.parserBuilder()` 改为 `Jwts.parser()`, Keys API 变化
+7. **统一 @PostMapping** — 遵循项目现有规范,禁止 @GetMapping/@PutMapping/@DeleteMapping
+8. **统一 Result 响应** — 所有接口返回 `Result<T>` (code/message/data)
+9. **不再依赖 Dify** — 全部 8 个 Service + 3 个 Controller 必须改为 Spring AI ChatClient
+10. **AxonHub 统一网关** — 所有模型调用经 `axonhub.iwintrue.com`,Spring AI 配置 `base-url` 指向 AxonHub
+11. **多模型编排** — 支持工作流各节点使用不同 `ChatModel` Bean(DeepSeek/Qwen/本地模型等),通过 `@Qualifier` 注入
+12. **PDF 预处理** — 复杂文档预处理使用 Python 专有工具(docling / unstructured.io),不在 Spring AI ETL 中处理
+
+---
+
+## 文件变更清单
+
+### 创建
+| 文件 | 用途 |
+|------|------|
+| `src/main/java/com/etotem/cfc/service/ai/LLMService.java` | Spring AI ChatClient 封装 |
+| `src/main/java/com/etotem/cfc/service/ai/SystemPromptLoader.java` | System Prompt 外部化加载 |
+| `src/main/java/com/etotem/cfc/service/ai/RAGService.java` | 本地知识库查询 |
+| `src/main/java/com/etotem/cfc/config/SpringAiConfig.java` | Spring AI ChatClient Bean 配置 |
+| `resources/prompts/family-advisor.yaml` | 家庭顾问 System Prompt |
+| `resources/prompts/growth-plan.yaml` | 成长规划 System Prompt |
+| `resources/prompts/diet-recommend.yaml` | 饮食推荐 System Prompt |
+| `resources/prompts/math-tutor.yaml` | 数学辅导 System Prompt |
+| `scripts/doc-preprocess/` | PDF 预处理 Python 脚本(docling) |
+
+### 修改
+| 文件 | 变更类型 |
+|------|---------|
+| `pom.xml` | 全部依赖版本更新 + 新增 |
+| `src/main/resources/application.yml` | Spring AI 配置、springdoc 配置调整 |
+| 所有 `@Entity` 类 (~80) | javax.persistence → jakarta.persistence |
+| 所有 DTO 类 (~200) | javax.validation → jakarta.validation |
+| 所有 Service 类 (~60) | javax.annotation → jakarta.annotation |
+| 所有 Controller 类 (~48) | javax.servlet → jakarta.servlet (如果使用) |
+| 所有 Config 类 | 同上 |
+| `JwtUtil.java` | jjwt 0.12 API 适配 |
+| `WisdomMathService.java` | Nashorn → exp4j |
+| `AIService.java` | 重构为 LLMService 封装 |
+| `DifySyncService.java` | 替换为本地知识库同步 |
+| `AiConversationSummaryService.java` | 替换为 Spring AI MemoryAdvisor |
+| `AiUserFactService.java` | 替换为 @Tool + ChatClient |
+| 其余 Dify 相关 4 个 Service | 逐一替换 |
+| `AiChatController.java` + 2 个相关 Controller | Spring AI 实现 |
+| 删除 `springdoc-openapi-ui` 依赖 | v1→v2 artifact 替换 |
+
+---
+
+## 任务分解
+
+### Phase 0 — 前置准备(3 天)
+
+#### Task 0.1: 环境准备 + BOM 对齐
+
+**Files:**
+- Modify: `pom.xml`
+
+**Interfaces:**
+- Produces: `mvn clean compile` 通过(尚未改 javax,暂时只对齐依赖)
+
+- [ ] **Step 1:更新 parent 和 properties**
+
+在 `pom.xml` 中修改:
+```xml
+<parent>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-parent</artifactId>
+    <version>3.4.3</version>      <!-- 2026年最新 3.4.x -->
+    <relativePath/>
+</parent>
+<properties>
+    <java.version>21</java.version>
+    <mybatis-plus.version>3.5.9</mybatis-plus.version>
+    <jjwt.version>0.12.6</jjwt.version>
+</properties>
+```
+
+- [ ] **Step 2:替换 springdoc v1 → v2**
+
+找到并替换:
+```xml
+<!-- 删除 -->
+<dependency>
+    <groupId>org.springdoc</groupId>
+    <artifactId>springdoc-openapi-ui</artifactId>
+    <version>1.8.0</version>
+</dependency>
+
+<!-- 添加 -->
+<dependency>
+    <groupId>org.springdoc</groupId>
+    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+    <version>2.7.0</version>
+</dependency>
+```
+
+- [ ] **Step 3:移除 jjwt 旧版本,确认 BOM 覆盖**
+
+```xml
+<!-- jjwt 版本已通过 properties 控制 -->
+<dependency>
+    <groupId>io.jsonwebtoken</groupId>
+    <artifactId>jjwt-api</artifactId>
+    <version>${jjwt.version}</version>
+</dependency>
+<dependency>
+    <groupId>io.jsonwebtoken</groupId>
+    <artifactId>jjwt-impl</artifactId>
+    <version>${jjwt.version}</version>
+    <scope>runtime</scope>
+</dependency>
+<dependency>
+    <groupId>io.jsonwebtoken</groupId>
+    <artifactId>jjwt-jackson</artifactId>
+    <version>${jjwt.version}</version>
+    <scope>runtime</scope>
+</dependency>
+```
+
+- [ ] **Step 4:添加 exp4j 依赖**
+
+```xml
+<dependency>
+    <groupId>net.objecthunter</groupId>
+    <artifactId>exp4j</artifactId>
+    <version>0.4.8</version>
+</dependency>
+```
+
+- [ ] **Step 5:编译验证**
+
+运行:
+```bash
+mvn clean compile
+```
+Expected: 编译失败(因为 javax 包名不存在,这是预期的。失败信息用来确认 Phase 1 的替换范围)
+
+- [ ] **Step 6:录制 javax 报错清单**
+
+```bash
+mvn clean compile 2>&1 | Select-String "javax\." | Sort-Object -Unique > docs/javax-errors.txt
+```
+
+查看输出行数:`Get-Content docs/javax-errors.txt | Measure-Object`
+
+- [ ] **Step 7:打基线 tag**
+
+```bash
+git tag v2.7.18-baseline
+git push origin v2.7.18-baseline
+```
+
+---
+
+#### Task 0.2: 确认 Nashorn 影响范围
+
+**Files:**
+- Read: `src/main/java/.../WisdomMathService.java`
+
+- [ ] **Step 1:提取 Nashorn 表达式求值用例**
+
+在 WisdomMathService 中搜索所有 `engine.eval(` 和 `ScriptEngine` 出现的位置,提取所有使用的表达式样例(记录输入和输出)。
+
+```java
+// 按行记录类似这样的调用
+engine.eval("12+38*2");        // → 88
+engine.eval("Math.round(a)");  // → 四舍五入
+// ... 记录全部
+```
+
+- [ ] **Step 2:验证 exp4j 是否覆盖全部语法**
+
+对照提取的表达式,确认 exp4j 支持:
+- 四则运算 + - * / ✅
+- 括号 ✅
+- 幂运算 ^ ✅
+- Math 函数: abs, sin, cos, log, round, ceil, floor ✅
+
+对于不支持的函数(如果有),记录到 Phase 2 的自定义函数实现方案。
+
+---
+
+### Phase 1 — javax → jakarta 迁移(5 天)
+
+#### Task 1.1: 实体类包名替换
+
+**Files:**
+- Modify: `src/main/java/com/etotem/cfc/entity/` 下全部 Entity 类(~80 个)
+
+**Interfaces:**
+- Produces: 全部 Entity 类编译通过(包名迁移后)
+
+- [ ] **Step 1:全局替换 javax.persistence → jakarta.persistence**
+
+```bash
+# PowerShell 在 entity 目录下执行
+Get-ChildItem -Path "src/main/java/com/etotem/cfc/entity" -Filter "*.java" -Recurse | 
+  ForEach-Object { (Get-Content $_.FullName) -replace "javax\.persistence\.", "jakarta.persistence." | 
+  Set-Content $_.FullName }
+```
+
+- [ ] **Step 2:编译验证**
+
+```bash
+mvn clean compile 2>&1 | Select-String "ERROR"
+```
+Expected: javax 错误行数减少(仅 entity 包部分消除)
+
+---
+
+#### Task 1.2: DTO 校验注解替换
+
+**Files:**
+- Modify: `src/main/java/com/etotem/cfc/dto/` 下全部 DTO 类(~200 个)
+
+- [ ] **Step 1:全局替换 javax.validation → jakarta.validation**
+
+```bash
+Get-ChildItem -Path "src/main/java/com/etotem/cfc/dto" -Filter "*.java" -Recurse | 
+  ForEach-Object { (Get-Content $_.FullName) -replace "javax\.validation\.", "jakarta.validation." | 
+  Set-Content $_.FullName }
+```
+
+- [ ] **Step 2:编译验证**
+
+```bash
+mvn clean compile 2>&1 | Select-String "ERROR" | Select-String "javax"
+```
+Expected: 仅剩非 persistence/validation 的 javax 错误
+
+---
+
+#### Task 1.3: 全局 javax.* 收尾替换
+
+**Files:**
+- Modify: 所有剩余包含 `javax.*` 的 Java 文件
+
+- [ ] **Step 1:扫描所有剩余 javax.* import**
+
+```bash
+Get-ChildItem -Path "src/main/java" -Filter "*.java" -Recurse | 
+  Select-String "^import javax\." | 
+  ForEach-Object { $_.Filename + ": " + $_.Line.Trim() } | 
+  Sort-Object -Unique
+```
+
+- [ ] **Step 2:按以下规则逐条替换**
+
+| 原 import | 目标 import |
+|-----------|------------|
+| `javax.annotation.Resource` | `jakarta.annotation.Resource` |
+| `javax.annotation.PostConstruct` | `jakarta.annotation.PostConstruct` |
+| `javax.annotation.PreDestroy` | `jakarta.annotation.PreDestroy` |
+| `javax.servlet.http.HttpServletRequest` | `jakarta.servlet.http.HttpServletRequest` |
+| `javax.servlet.http.HttpServletResponse` | `jakarta.servlet.http.HttpServletResponse` |
+| `javax.servlet.Filter` | `jakarta.servlet.Filter` |
+| `javax.servlet.FilterChain` | `jakarta.servlet.FilterChain` |
+| `javax.servlet.ServletException` | `jakarta.servlet.ServletException` |
+| `javax.sql.DataSource` | `jakarta.sql.DataSource` |
+| `javax.xml.bind.*` | 确认是否使用,如使用需加 jakarta.xml.bind 依赖 |
+
+- [ ] **Step 3:逐文件编译验证**
+
+每替换完一批,运行:
+```bash
+mvn clean compile
+```
+
+修复残留错误,直到零错。
+
+- [ ] **Step 4:打阶段 tag**
+
+```bash
+git add -A
+git commit -m "phase1: javax → jakarta migration complete"
+git tag v3.0-javax-migrated
+```
+
+---
+
+### Phase 2 — 行为适配 + Nashorn 替换(4 天)
+
+#### Task 2.1: WisdomMathService Nashorn → exp4j
+
+**Files:**
+- Modify: `src/main/java/.../service/WisdomMathService.java`
+
+- [ ] **Step 1:编写 exp4j 替换实现**
+
+```java
+// 替换前
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptEngine;
+
+ScriptEngineManager mgr = new ScriptEngineManager();
+ScriptEngine engine = mgr.getEngineByName("nashorn");
+Object result = engine.eval("12+38*2");
+
+// 替换后
+import net.objecthunter.exp4j.ExpressionBuilder;
+
+double result = new ExpressionBuilder("12+38*2").build().evaluate();
+```
+
+如果需要支持 Math.round/ceil/floor 等函数,注册自定义函数:
+```java
+import net.objecthunter.exp4j.function.Function;
+
+Function roundFunc = new Function("round", 1) {
+    @Override
+    public double apply(double... args) {
+        return Math.round(args[0]);
+    }
+};
+
+Expression exp = new ExpressionBuilder(expression)
+    .function(roundFunc)
+    .build();
+```
+
+- [ ] **Step 2:编译验证**
+
+```bash
+mvn clean compile
+```
+Expected: 零错误
+
+---
+
+#### Task 2.2: jjwt 0.12 API 适配
+
+**Files:**
+- Modify: 搜索所有使用 jjwt 的文件
+
+- [ ] **Step 1:找到所有 jjwt 调用**
+
+```bash
+Get-ChildItem -Path "src/main/java" -Filter "*.java" -Recurse | 
+  Select-String "Jwts\.|Keys\.|SignatureAlgorithm" | 
+  ForEach-Object { $_.Filename + "(" + $_.LineNumber + "): " + $_.Line.Trim() }
+```
+
+- [ ] **Step 2:按规则适配**
+
+```java
+// jjwt 0.11                          // jjwt 0.12
+Jwts.builder()                         // 基本不变(返回 Builder 类型更新)
+    .signWith(key, SignatureAlgorithm.HS256)  // → .signWith(key) 自动推导算法
+Jwts.parserBuilder()                   // → Jwts.parser()
+    .setSigningKey(key)                // → .verifyWith(key) 或 .decryptWith(key)
+    .build()
+    .parseClaimsJws(token)             // 基本不变
+Keys.secretKeyFor(SignatureAlgorithm.HS256)  // → Jwts.SIG.HS256.keyBuilder().build()
+```
+
+- [ ] **Step 3:编译验证**
+
+```bash
+mvn clean compile
+```
+
+---
+
+#### Task 2.3: Spring Boot 3 行为变更适配
+
+**Files:**
+- Modify: `src/main/resources/application.yml`
+
+- [ ] **Step 1:检查路径匹配策略**
+
+添加/确认配置(如果现有代码依赖 Ant 风格路径匹配):
+```yaml
+spring:
+  mvc:
+    pathmatch:
+      matching-strategy: ant-path-matcher
+```
+
+- [ ] **Step 2:检查 springdoc 配置**
+
+```yaml
+# v1 (如有)
+springdoc:
+  swagger-ui:
+    path: /swagger-ui.html
+
+# v2 相同,但验证可用
+```
+
+- [ ] **Step 3:编译运行验证**
+
+```bash
+mvn clean compile
+```
+
+验证应用启动:
+```bash
+mvn spring-boot:run
+```
+Expected: 应用启动成功,Swagger UI 可访问 /swagger-ui.html(或 v2 默认路径)
+
+---
+
+#### Task 2.4: springdoc v2 Swagger UI 验证
+
+- [ ] **Step 1:启动应用**
+
+```bash
+mvn spring-boot:run
+```
+
+- [ ] **Step 2:访问 Swagger UI 验证 API 文档正确渲染**
+
+```bash
+curl http://localhost:9082/v3/api-docs | Select-Object -First 20
+```
+Expected: 返回 OpenAPI 3.0 JSON,paths 字段包含 /api/ 路由
+
+- [ ] **Step 3:打阶段 tag**
+
+```bash
+git commit -am "phase2: Spring Boot 3 behavior adaptation complete"
+git tag v3.0-build-ready
+```
+
+---
+
+### Phase 3 — Spring AI 集成 + Dify 替换(5 天)
+
+#### Task 3.1: 引入 Spring AI 依赖 + 配置
+
+**Files:**
+- Modify: `pom.xml`
+- Modify: `src/main/resources/application.yml`
+
+- [ ] **Step 1:添加 Spring AI BOM + starter**
+
+```xml
+<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.ai</groupId>
+            <artifactId>spring-ai-bom</artifactId>
+            <version>1.0.0</version>   <!-- 2026年最新 1.x -->
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+<dependencies>
+    <dependency>
+        <groupId>org.springframework.ai</groupId>
+        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework.ai</groupId>
+        <artifactId>spring-ai-pdf-document-reader</artifactId>
+    </dependency>
+</dependencies>
+```
+
+- [ ] **Step 2:配置 AxonHub 模型网关(application.yml)**
+
+所有模型调用走 AxonHub 统一网关,不直连任何模型 Provider:
+
+```yaml
+spring:
+  ai:
+    openai:                                     # 默认模型 → AxonHub → DeepSeek
+      base-url: https://axonhub.iwintrue.com/v1
+      api-key: ${AXONHUB_API_KEY}
+      chat:
+        options:
+          model: deepseek-chat
+          temperature: 0.7
+    dashscope:                                   # 第二模型 → AxonHub → Qwen (可选)
+      api-key: ${AXONHUB_API_KEY}
+      chat:
+        options:
+          model: qwen-max
+    ollama:                                      # 本地模型 (不经过 AxonHub)
+      base-url: http://localhost:11434
+      chat:
+        options:
+          model: qwen2.5:7b
+    vectorstore:
+      sqlite:
+        path: ${cfc.data.dir:/data/cfc}/knowledge.db
+```
+
+- [ ] **Step 3:编译验证**
+
+```bash
+mvn clean compile
+```
+
+---
+
+#### Task 3.2: 创建 LLMService 核心封装
+
+**Files:**
+- Create: `src/main/java/com/etotem/cfc/service/ai/LLMService.java`
+- Create: `src/main/java/com/etotem/cfc/config/SpringAiConfig.java`
+
+- [ ] **Step 1:创建 SpringAiConfig(含多模型支持)**
+
+```java
+package com.etotem.cfc.config;
+
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.model.ChatModel;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class SpringAiConfig {
+
+    /** 默认聊天客户端(经 AxonHub 路由) */
+    @Bean
+    ChatClient chatClient(ChatClient.Builder builder) {
+        return builder.build();
+    }
+
+    /**
+     * 如需在工作流中使用不同模型,注入命名后的 ChatModel Bean:
+     * @Resource @Qualifier("openAiChatModel")  private ChatModel deepSeek;
+     * @Resource @Qualifier("dashScopeChatModel") private ChatModel qwen;
+     * @Resource @Qualifier("ollamaChatModel")   private ChatModel localModel;
+     *
+     * Spring AI 自动注册以下 Bean(按 application.yml 配置):
+     *   openAiChatModel     → AxonHub → DeepSeek
+     *   dashScopeChatModel  → AxonHub → Qwen (如果配置了 dashscope)
+     *   ollamaChatModel     → localhost:11434 (如果配置了 ollama)
+     */
+}
+```
+
+- [ ] **Step 2:创建 LLMService(含多模型编排)**
+
+```java
+package com.etotem.cfc.service.ai;
+
+import jakarta.annotation.Resource;
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.memory.ChatMemory;
+import org.springframework.ai.chat.memory.InMemoryChatMemory;
+import org.springframework.ai.chat.model.ChatModel;
+import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+import reactor.core.publisher.Flux;
+
+@Service
+public class LLMService {
+
+    @Resource
+    private ChatClient chatClient;
+
+    @Resource @Qualifier("openAiChatModel")
+    private ChatModel deepSeekModel;         // → AxonHub → DeepSeek
+
+    @Resource @Qualifier("dashScopeChatModel")
+    private ChatModel qwenModel;             // → AxonHub → Qwen
+
+    @Resource @Qualifier("ollamaChatModel")
+    private ChatModel localModel;            // → 本地 Ollama
+
+    private final ChatMemory chatMemory = new InMemoryChatMemory();
+
+    // 默认模型聊天
+    public String chat(String query, String systemPrompt, String conversationId) {
+        return chatClient.prompt()
+                .system(systemPrompt)
+                .user(query)
+                .advisors(new MessageChatMemoryAdvisor(chatMemory, conversationId, 10))
+                .call()
+                .content();
+    }
+
+    // 指定模型的聊天(工作流各节点可用不同模型)
+    public String chatWithModel(String query, String systemPrompt,
+                                 String conversationId, ChatModel model) {
+        return ChatClient.builder(model).build()
+                .prompt()
+                .system(systemPrompt)
+                .user(query)
+                .advisors(new MessageChatMemoryAdvisor(chatMemory, conversationId, 10))
+                .call()
+                .content();
+    }
+
+    // 流式聊天
+    public Flux<String> stream(String query, String systemPrompt, String conversationId) {
+        return chatClient.prompt()
+                .system(systemPrompt)
+                .user(query)
+                .advisors(new MessageChatMemoryAdvisor(chatMemory, conversationId, 10))
+                .stream()
+                .content();
+    }
+
+    // 多模型工作流示例
+    public WorkflowResult executeMultiModelWorkflow(String input) {
+        // Step 1: DeepSeek 做意图分类(强推理)
+        String intent = ChatClient.builder(deepSeekModel).build()
+                .prompt().user("分类用户意图: " + input).call().content();
+        // Step 2: Qwen 做长文本分析(长上下文)
+        String analysis = ChatClient.builder(qwenModel).build()
+                .prompt().system("分析专家").user(intent).call().content();
+        // Step 3: 本地模型格式化输出(零成本)
+        String output = ChatClient.builder(localModel).build()
+                .prompt().user("格式化: " + analysis).call().content();
+        return new WorkflowResult(intent, analysis, output);
+    }
+}
+```
+
+- [ ] **Step 3:编译验证**
+
+```bash
+mvn clean compile
+```
+
+---
+
+#### Task 3.3: System Prompt 外部化
+
+**Files:**
+- Create: `resources/prompts/family-advisor.yaml`
+- Create: `resources/prompts/growth-plan.yaml`
+- Create: `resources/prompts/diet-recommend.yaml`
+- Create: `resources/prompts/math-tutor.yaml`
+- Create: `src/main/java/.../service/ai/SystemPromptLoader.java`
+
+- [ ] **Step 1:创建 SystemPromptLoader**
+
+```java
+package com.etotem.cfc.service.ai;
+
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.stereotype.Component;
+import org.yaml.snakeyaml.Yaml;
+import jakarta.annotation.Resource;
+import java.util.Map;
+
+@Component
+public class SystemPromptLoader {
+
+    @Resource
+    private ResourceLoader resourceLoader;
+
+    public String load(String promptName) {
+        Resource resource = resourceLoader.getResource("classpath:prompts/" + promptName + ".yaml");
+        // 解析 YAML,返回 prompt 字段
+        Map<String, String> data = new Yaml().load(resource.getInputStream());
+        return data.get("prompt");
+    }
+}
+```
+
+- [ ] **Step 2:创建可替换的原 Dify Prompt 映射表**
+
+从数据库 chat_assistant 表的 description/system_prompt 字段提取:
+```yaml
+# resources/prompts/family-advisor.yaml
+prompt: |
+  你是家庭成长顾问,帮助家长理解孩子的成长需求。
+  请基于五维能量体系(身/心/智/行/富)提供建议。
+  ...
+```
+
+---
+
+#### Task 3.4: AIService 重构为 LLMService
+
+**Files:**
+- Modify: `src/main/java/.../service/AIService.java`
+- Modify: `src/main/java/.../controller/AiChatController.java`
+
+- [ ] **Step 1:重构 AIService**
+
+```java
+// 原有 AIService 用 OkHttp 调 Dify API,改为注入 LLMService
+@Service
+public class AIService {
+
+    @Resource
+    private LLMService llmService;
+
+    @Resource
+    private SystemPromptLoader promptLoader;
+
+    public String sendMessage(String assistantType, String query, String conversationId) {
+        String systemPrompt = promptLoader.load(assistantType);
+        return llmService.chat(query, systemPrompt, conversationId);
+    }
+
+    // 流式版本
+    public Flux<String> sendMessageStream(String assistantType, String query, String conversationId) {
+        String systemPrompt = promptLoader.load(assistantType);
+        return llmService.stream(query, systemPrompt, conversationId);
+    }
+}
+```
+
+- [ ] **Step 2:编译验证 + 冒烟测试**
+
+```bash
+mvn clean compile
+mvn spring-boot:run
+# 调用 /api/ai/chat/send 验证响应
+```
+
+---
+
+#### Task 3.5: DifySyncService → RAGService
+
+**Files:**
+- Create: `src/main/java/.../service/ai/RAGService.java`
+- Modify: `src/main/java/.../service/DifySyncService.java`
+
+- [ ] **Step 1:创建 RAGService**
+
+```java
+package com.etotem.cfc.service.ai;
+
+import org.springframework.ai.vectorstore.VectorStore;
+import org.springframework.ai.document.Document;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import java.util.List;
+
+@Service
+public class RAGService {
+
+    // sqlite-vec 或其他 VectorStore 实现
+    // 先使用搜索+vector 方案,第一期可简化为 keyword search
+    @Resource
+    private VectorStore vectorStore;
+
+    public List<Document> search(String query, int topK) {
+        return vectorStore.similaritySearch(query, topK);
+    }
+
+    public void addDocument(Document doc) {
+        vectorStore.add(List.of(doc));
+    }
+}
+```
+
+- [ ] **Step 2:DifySyncService 标记为待迁移**
+
+保留原有接口签名,内部改为从本地知识库读取:
+```java
+@Service
+public class DifySyncService {
+
+    @Resource
+    private RAGService ragService;
+
+    public List<String> searchKnowledge(String query) {
+        return ragService.search(query, 5).stream()
+                .map(Document::getContent)
+                .collect(Collectors.toList());
+    }
+}
+```
+
+---
+
+#### Task 3.6: 剩余 6 个 Dify 相关 Service 替换
+
+**Files:**
+- Modify: 逐个修改以下 Service(每个独立的文件修改,验证后继续下一个)
+  - `AiConversationSummaryService.java`
+  - `AiUserFactService.java`
+  - 其余 4 个
+
+- [ ] **Step 1-6:逐一替换**
+
+每个 Service 的工作模式:
+1. 读取当前代码,理解其调用的 Dify API(chat-messages / workflows / datasets)
+2. 映射到 LLMService 或 RAGService 的对应方法
+3. 替换实现,保持接口签名不变(最小化 Controller 层变动)
+4. 编译验证
+
+---
+
+#### Task 3.7: 打阶段 tag
+
+- [ ] **Step 1:提交 + tag**
+
+```bash
+git commit -am "phase3: Spring AI integration + Dify migration complete"
+git tag v3.0-spring-ai
+```
+
+---
+
+### Phase 4 — 回归验证 + 上线(3 天)
+
+#### Task 4.1: 全量功能回归
+
+- [ ] **Step 1:Spring Boot 启动验证**
+
+```bash
+mvn spring-boot:run
+```
+Expected: 应用启动成功,无 Error 日志
+
+- [ ] **Step 2:所有 Controller API 冒烟测试**
+
+使用 Postman 用例集或 curl 脚本验证以下关键路径:
+```
+POST /api/ai/chat/send          → AI 聊天正常
+POST /api/ai/chat/stream        → 流式返回正常
+POST /api/auth/login             → JWT 正常签发
+POST /api/user/info              → 用户信息正常
+... 以及全部 48 个 Controller
+```
+
+- [ ] **Step 3:数学表达式精度对比验证**
+
+```
+输入: "12+38*2"   → 期望: 88.0
+输入: "(1+2)^3"   → 期望: 27.0
+输入: "round(3.7)" → 期望: 4.0
+输入: "abs(-5)"   → 期望: 5.0
+... 提取全部原表达式用例
+```
+
+---
+
+#### Task 4.2: 性能基准对比
+
+- [ ] **Step 1:记录原 Dify 链路延迟(基線)**
+
+如果 Dify 仍可用,取 10 次请求的 P50/P95/P99 延迟。
+如果 Dify 已不可用,使用 Phase 3 完成后的测试数据。
+
+- [ ] **Step 2:记录 Spring AI 链路延迟**
+
+对相同查询,取 10 次请求的 P50/P95/P99 延迟。
+
+- [ ] **Step 3:确认不比原链路差**
+
+延迟、错误率均不劣化则可进入上线。
+
+---
+
+#### Task 4.3: 灰度上线
+
+- [ ] **Step 1:灰度 10% 流量(1 天)**
+
+Nginx/网关配置 10% 流量指向新版本,监控错误率。
+
+- [ ] **Step 2:灰度 50% 流量(1 天)**
+
+确认 10% 稳定后扩大到 50%,继续监控。
+
+- [ ] **Step 3:全量上线 + Dify 实例保留下线**
+
+100% 流量切到新版本,Dify 实例暂停但不销毁(数据保留 30 天)。
+
+- [ ] **Step 4:打最终 tag**
+
+```bash
+git tag v3.0-production
+```
+
+---
+
+## 执行顺序图
+
+```
+Phase 0 ── Task 0.1 (BOM对齐)
+         └── Task 0.2 (Nashorn范围)
+
+Phase 1 ── Task 1.1 (Entity)
+         ├── Task 1.2 (DTO)
+         └── Task 1.3 (全局收尾)
+
+Phase 2 ── Task 2.1 (exp4j)
+         ├── Task 2.2 (jjwt)
+         ├── Task 2.3 (SB3行为)
+         └── Task 2.4 (springdoc验证)
+
+Phase 3 ── Task 3.1 (Spring AI依赖)
+         ├── Task 3.2 (LLMService)
+         ├── Task 3.3 (System Prompt)
+         ├── Task 3.4 (AIService重构)
+         ├── Task 3.5 (RAGService)
+         └── Task 3.6 (剩余Service)
+
+Phase 4 ── Task 4.1 (功能回归)
+         ├── Task 4.2 (性能对比)
+         └── Task 4.3 (灰度上线)
+```
+
+Phase 1 可在 Task 1.1 + 1.2 中 2 人并行。
+Phase 3 的 Task 3.2-3.6 建议 1 人连续完成(上下文依赖强)。
+其余阶段按顺序执行。

+ 691 - 0
docs/assessment-market-plan.md

@@ -0,0 +1,691 @@
+# DAN 测评商城化改造 — 实施计划
+
+> 版本: v1.0
+> 日期: 2026-07-10
+> 状态: 待实施
+
+---
+
+## 业务模型
+
+```
+供应商管理员 ──维护──> 商品(单包/套餐)
+     │
+     ▼
+商城体系 ──购买──> 家长
+     │
+     ▼
+发放测评额度(采购与测评执行解耦)
+     │
+     ▼
+预约 → 确定具体测评项目 → 执行测评
+     │
+     ▼
+报告(规划师录入 / 家长上传 / 后续API自动获取)
+     │
+     ▼
+规划师给出结构化指导意见
+     │
+     ▼
+系统自动生成个性化任务方案
+     │
+     ▼
+规划师审核方案 ──> 家长确认方案 ──> 执行跟踪
+     │                              │
+     └── 驳回/修改 ←────────────────┘
+                                        │
+                                        ▼
+                                方案完成 → 复测提醒 → 再次购买/测评
+```
+
+---
+
+## 全五阶段依赖关系
+
+```
+阶段一 (商品化)
+   ↓
+阶段二 (采购与执行解耦)  ←─ 依赖阶段一的商品购买流程
+   ↓
+阶段三 (报告双通道)  ←─ 独立,可与阶段二并行
+   ↓
+阶段四 (方案生成引擎)  ←─ 依赖阶段三的完整结果数据
+   ↓
+阶段五 (审核→确认→执行)  ←─ 依赖阶段四的方案生成
+```
+
+---
+
+## 阶段一:测评商品化
+
+### 目标
+
+将 DAN 测评单包/套餐作为 `Product` 存在于商城体系中,由供应商管理员维护。
+
+### 实体扩展
+
+#### Product 类型扩展
+
+```java
+// entity/Product.java — 新增常量
+public static final String TYPE_ASSESSMENT = "assessment";
+```
+
+`productType` 字段已存在,无需改表。
+
+#### AssessmentProduct 扩展实体
+
+**DB 迁移(`schema.sql` + `DatabaseInitializer`)**:
+
+```sql
+CREATE TABLE IF NOT EXISTS assessment_products (
+    id              BIGINT AUTO_INCREMENT PRIMARY KEY,
+    product_id      BIGINT NOT NULL COMMENT '关联products表',
+    assessment_type VARCHAR(20) NOT NULL COMMENT 'single=单包, bundle=套餐',
+    total_sessions  INT NOT NULL DEFAULT 1 COMMENT '包含测评次数',
+    validity_days   INT NOT NULL DEFAULT 365 COMMENT '有效期(天)',
+    guide_scope     VARCHAR(50) DEFAULT 'all' COMMENT '规划师范围: all/assigned/auto',
+    created_at      DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at      DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_product_id (product_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评商品扩展信息';
+```
+
+**实体**:
+
+```java
+// entity/AssessmentProduct.java
+@Data
+@TableName("assessment_products")
+public class AssessmentProduct implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long productId;
+    private String assessmentType;  // single / bundle
+    private Integer totalSessions;
+    private Integer validityDays;
+    private String guideScope;       // all / assigned / auto
+    private Date createdAt;
+    private Date updatedAt;
+}
+```
+
+#### DTO
+
+```java
+// dto/ProductCreateRequest.java
+@Data
+public class ProductCreateRequest {
+    private Product product;
+    private AssessmentProduct assessmentExt;  // productType=assessment 时必填
+}
+```
+
+### Service
+
+```java
+// service/AssessmentProductService.java
+@Service
+public class AssessmentProductService {
+    @Resource private AssessmentProductMapper mapper;
+
+    public AssessmentProduct getByProductId(Long productId) { ... }
+    
+    @Transactional
+    public void saveOrUpdate(Long productId, AssessmentProduct ext) {
+        mapper.delete(new LambdaQueryWrapper<AssessmentProduct>()
+                .eq(AssessmentProduct::getProductId, productId));
+        ext.setId(null);
+        ext.setProductId(productId);
+        mapper.insert(ext);
+    }
+}
+```
+
+### Controller 改造
+
+`AdminProductController.create()` 改造:当 `productType=assessment` 时,同时保存 `AssessmentProduct` 扩展信息。
+
+### 管理端前端
+
+新建 `cfc-web/views/admin/assessment-products.vue`:
+
+- 测评商品专用管理页
+- 商品表单:类型选择"测评"时展开额外字段(测评类型、次数、有效期、规划师范围)
+- 商品列表:类型标识、次数、状态列
+
+### 购买流程
+
+测评商品作为普通商品在商城展示,走现有 `ProductOrder` 体系:
+
+```
+用户浏览商城 → 点击测评商品 → 商品详情页
+                     ↓
+             选择购买数量 → 加入购物车/立即购买
+                     ↓
+             填写购买信息
+                     ↓
+             提交 → ProductOrder.create() → payment → paySuccess()
+```
+
+`ProductOrderService.paySuccess()` 中判断 `productType=assessment` 时,调用 `AssessmentQuotaService.grantQuota()`(阶段二实现,先留桩)。测评商品为虚拟商品,支付成功自动确认收货。
+
+### 验证标准
+
+```
+□ 管理员可在管理端创建/编辑/上下架测评商品
+□ 测评商品在商城展示,用户可下单购买
+□ 购买后走 ProductOrder 流程,productType='assessment'
+□ 管理端订单列表可区分测评商品订单
+□ 供应商可管理自己的测评商品
+```
+
+---
+
+## 阶段二:采购与测评执行解耦
+
+### 目标
+
+购买测评商品后获得"测评额度",具体测什么在测评时确定,而不是购买时绑定。
+
+### 测评额度表 assessment_quotas
+
+**DB 迁移**:
+
+```sql
+CREATE TABLE IF NOT EXISTS assessment_quotas (
+    id                BIGINT AUTO_INCREMENT PRIMARY KEY,
+    quota_no          VARCHAR(32) NOT NULL COMMENT '额度编号',
+    family_id         BIGINT NOT NULL COMMENT '家庭ID',
+    child_id          BIGINT COMMENT '指定孩子ID(NULL=不限)',
+    product_order_id  BIGINT NOT NULL COMMENT '来源订单ID',
+    product_id        BIGINT NOT NULL COMMENT '商品ID',
+    product_name      VARCHAR(100) NOT NULL COMMENT '商品名快照',
+    total_sessions    INT NOT NULL DEFAULT 1 COMMENT '总次数',
+    remaining_sessions INT NOT NULL DEFAULT 1 COMMENT '剩余次数',
+    validity_start    DATETIME NOT NULL COMMENT '有效期开始',
+    validity_end      DATETIME NOT NULL COMMENT '有效期截止',
+    status            VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT 'active/expired/used_all/cancelled',
+    created_at        DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at        DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_family (family_id),
+    INDEX idx_order (product_order_id),
+    UNIQUE KEY uk_quota_no (quota_no)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评额度表';
+```
+
+**实体**:
+
+```java
+// entity/AssessmentQuota.java
+@Data
+@TableName("assessment_quotas")
+public class AssessmentQuota implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private String quotaNo;
+    private Long familyId;
+    private Long childId;
+    private Long productOrderId;
+    private Long productId;
+    private String productName;
+    private Integer totalSessions;
+    private Integer remainingSessions;
+    private Date validityStart;
+    private Date validityEnd;
+    private String status;        // active / expired / used_all / cancelled
+    private Date createdAt;
+    private Date updatedAt;
+}
+```
+
+### 测评执行记录表 assessment_executions
+
+**DB 迁移**:
+
+```sql
+CREATE TABLE IF NOT EXISTS assessment_executions (
+    id                BIGINT AUTO_INCREMENT PRIMARY KEY,
+    quota_id          BIGINT NOT NULL COMMENT '关联额度ID',
+    child_id          BIGINT NOT NULL COMMENT '被测评孩子',
+    guide_id          BIGINT COMMENT '执行规划师ID',
+    assessment_type   VARCHAR(30) COMMENT '本次具体测评类型(如attention/memory/full)',
+    appointment_id    BIGINT COMMENT '关联预约ID',
+    result_id         BIGINT COMMENT '关联测评结果ID',
+    status            VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/in_progress/completed/cancelled',
+    scheduled_date    DATETIME COMMENT '预约执行时间',
+    completed_at      DATETIME COMMENT '实际完成时间',
+    notes             VARCHAR(500) COMMENT '备注',
+    created_at        DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at        DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_quota (quota_id),
+    INDEX idx_child (child_id),
+    INDEX idx_appointment (appointment_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评执行记录表';
+```
+
+### 额度服务 AssessmentQuotaService
+
+核心方法:
+
+| 方法 | 说明 | 调用方 |
+|------|------|--------|
+| `grantQuota(ProductOrder)` | 支付成功后发放额度 | `ProductOrderService.paySuccess()` |
+| `consumeQuota(quotaId, childId)` | 预约时消耗一次额度 | `AssessmentAppointmentService.createAppointment()` |
+| `getAvailableQuotas(familyId, childId)` | 查询家庭可用额度列表 | 前端展示 |
+| `getQuotaDetail(quotaId)` | 额度使用明细 | 前端展示 |
+
+### 支付回调集成
+
+```java
+// ProductOrderService.paySuccess() 中新增
+if ("assessment".equals(order.getProductType())) {
+    assessmentQuotaService.grantQuota(order);
+}
+```
+
+### 预约流程改造
+
+改造前:预约时创建订单 + 预约
+改造后:预约时消耗额度 → 创建预约 → 关联执行记录
+
+```java
+// AssessmentAppointmentController.createAppointment() 改造
+// 1. 消耗额度(内含校验)
+int remaining = quotaService.consumeQuota(quotaId, childId);
+// 2. 创建预约(只创建预约,不再创建订单)
+AssessmentAppointment appointment = appointmentService.createAppointment(...);
+// 3. 关联执行记录
+executionService.linkAppointment(quotaId, childId, appointment.getId());
+```
+
+### 旧 Controller 清理
+
+| 端点 | 处理 |
+|------|------|
+| `AssessmentOrderController.*` | 标记 `@Deprecated`,保留兼容 |
+| `DanAssessmentController` 中的订单方法 | 标记 `@Deprecated` |
+
+### 前端:我的额度页面
+
+新建 `pages/assessment/quota.vue`:展示家庭可用额度(剩余次数、有效期、进度条)
+
+**预约流程改造**:`apply.vue` 中先选择额度包 → 选择孩子 → 选择规划师+日期 → 提交
+
+### 验证标准
+
+```
+□ 购买测评商品后自动发放额度到家庭
+□ 家庭可用额度列表 API 返回正确
+□ 预约时消耗额度,剩余次数递减
+□ 额度过期自动标记 expired
+□ 执行记录完整追溯:订单→额度→预约→结果
+□ 前端"我的额度"页面展示所有可用额度
+□ 预约流程改为先选额度再预约
+```
+
+---
+
+## 阶段三:报告双通道 + 规划师指导意见
+
+### 目标
+
+家长可上传报告,规划师录入结果时附带结构化指导意见,预留 API 自动获取扩展点。
+
+### DanAssessmentResult 增加来源字段
+
+**DB 迁移**:
+
+```sql
+ensureColumn("dan_assessment_results", "source",
+    "VARCHAR(20) DEFAULT 'planner_entry' COMMENT '报告来源: planner_entry/parent_upload/auto_fetch'");
+```
+
+**状态常量**:
+
+```java
+public static final String SOURCE_PLANNER_ENTRY = "planner_entry";
+public static final String SOURCE_PARENT_UPLOAD = "parent_upload";
+public static final String SOURCE_AUTO_FETCH = "auto_fetch";
+```
+
+历史数据回填 `source = 'planner_entry'`。
+
+### 家长端上传报告 API
+
+```java
+@PostMapping("/api/dan-assessment/result/upload")
+public Result<DanAssessmentResult> uploadReport(
+    @RequestParam("file") MultipartFile file,
+    @RequestParam("childId") Long childId,
+    @RequestParam(value = "notes", required = false) String notes) {
+    // 1. 权限校验
+    // 2. 保存文件(FileStorageService)
+    // 3. 基础解析元信息
+    // 4. 创建结果记录(source=parent_upload, status=parent_uploaded)
+    // 5. 异步触发深度解析(OCR)
+}
+```
+
+### 文件存储服务
+
+```java
+// service/FileStorageService.java
+public String upload(MultipartFile file, String subDir) {
+    // UUID文件名 + 保存到本地文件系统
+    // 返回相对URL
+}
+```
+
+### 报告解析服务
+
+```java
+// service/ReportParseService.java
+// extractMeta(): 提取文件名、日期等元信息(同步)
+// asyncDeepParse(): 异步OCR深度解析(当前为桩,后续扩展)
+
+// ★ SPI 扩展点:ReportFetchProvider
+public interface ReportFetchProvider {
+    boolean supports(String sourceType);
+    DanAssessmentResult fetch(Long childId, Map<String, Object> params);
+}
+```
+
+### 规划师指导意见结构化
+
+**DB 迁移**:
+
+```sql
+CREATE TABLE IF NOT EXISTS growth_guidances (
+    id                BIGINT AUTO_INCREMENT PRIMARY KEY,
+    result_id         BIGINT NOT NULL COMMENT '关联测评结果ID',
+    dimension         VARCHAR(30) NOT NULL COMMENT '维度: attention/focus/memory/logic/emotion/general',
+    score             INT COMMENT '该维度得分(0-100)',
+    suggestion        TEXT NOT NULL COMMENT '建议内容',
+    priority          INT DEFAULT 0 COMMENT '优先级(0=普通, 1=重要, 2=紧急)',
+    sort_order        INT DEFAULT 0 COMMENT '排序',
+    created_at        DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at        DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_result (result_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评指导意见(结构化)';
+```
+
+**API**:
+
+| 端点 | 方法 | 说明 |
+|------|------|------|
+| `/api/dan-assessment/result/{resultId}/guidance/save` | POST | 保存结构化指导意见 |
+| `/api/dan-assessment/result/{resultId}/guidance` | GET | 获取指导意见 |
+
+### 前端改造
+
+| 页面 | 改动 |
+|------|------|
+| `upload-report.vue`(新建) | 家长上传报告页面(选择孩子、文件、备注)|
+| `results.vue` | 展示报告来源标签(规划师录入/家长上传/系统获取)|
+| `record.vue` | 指导意见改为结构化录入(每个维度独立建议框 + 优先级选择)|
+
+### 规划师确认家长上传报告
+
+```java
+@PostMapping("/api/dan-assessment/result/{resultId}/confirm-upload")
+// 规划师补充结构化评分后确认,status→completed
+```
+
+### 验证标准
+
+```
+□ 测评结果来源字段正确记录
+□ 家长可上传 PDF/JPG 格式报告
+□ 上传后状态为 parent_uploaded,等待规划师确认
+□ 规划师可查看上传的报告文件并补充结构化评分
+□ 指导意见从大文本升级为结构化多维度存储
+□ record.vue 录入界面支持每个维度独立指导意见
+□ 报告列表展示来源标签和图标
+```
+
+---
+
+## 阶段四:结果→任务方案自动生成引擎
+
+### 架构
+
+```
+DanAssessmentResult + GrowthGuidance[]
+        │
+        ▼
+AssessmentPlanGenerator
+        │
+    ┌───┴───┐
+    ▼       ▼
+  规则引擎  AI增强(后续SPI)
+    │       │
+    └───┬───┘
+        ▼
+TaskPlanInstance + TaskPlanItem[]
+        │
+        ▼
+  规划师审核 → 家长确认 → 执行跟踪(阶段五)
+```
+
+### 规则配置表 assessment_plan_rules
+
+**DB 迁移**:
+
+```sql
+CREATE TABLE IF NOT EXISTS assessment_plan_rules (
+    id              BIGINT AUTO_INCREMENT PRIMARY KEY,
+    dimension       VARCHAR(30) NOT NULL COMMENT '测评维度: attention/focus/memory/logic/emotion',
+    score_min       INT NOT NULL COMMENT '分数下限(含)',
+    score_max       INT NOT NULL COMMENT '分数上限(含)',
+    template_id     BIGINT NOT NULL COMMENT '关联TaskTemplatePackage ID',
+    priority        INT DEFAULT 0 COMMENT '优先级',
+    is_active       TINYINT(1) DEFAULT 1 COMMENT '是否启用',
+    created_at      DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at      DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_dimension (dimension),
+    INDEX idx_score (score_min, score_max)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='方案生成规则';
+```
+
+### 核心引擎 AssessmentPlanGenerator
+
+```java
+// 三步流程:
+// 1. collectScores(result): 从测评结果提取各维度得分
+// 2. matchRules(scores): 规则匹配 → 低分维度→对应训练模板包
+// 3. buildPlan(result, packages): 合并模板 → TaskPlanInstance
+
+// 关键逻辑:
+// - 匹配到多个模板时,取最长周期为主方案,其余合并
+// - 所有维度正常 → 生成维持型方案
+// - 方案状态为 generated(非直接 active)
+// - 方案关联 source_result_id 可追溯
+```
+
+### TaskPlanInstance 扩展
+
+**DB 迁移**:
+
+```sql
+ensureColumn("task_plan_instances", "source",
+    "VARCHAR(20) DEFAULT 'manual' COMMENT '方案来源: manual/assessment/template'");
+ensureColumn("task_plan_instances", "source_result_id",
+    "BIGINT COMMENT '关联测评结果ID(来源为assessment时)'");
+ensureColumn("task_plan_instances", "remark",
+    "TEXT COMMENT '方案备注(含指导意见摘要)'");
+```
+
+### 触发点
+
+| 触发点 | 位置 | 说明 |
+|--------|------|------|
+| 规划师提交结果 | `AssessmentService.recordResult()` | 结果 completed 时自动触发 |
+| 规划师确认家长上传报告 | `DanAssessmentController.confirmUpload()` | 确认后触发 |
+| AI 自动获取报告完成 | `ReportFetchProvider`(后续) | 占位 |
+
+### 预设训练模板
+
+在 `TaskTemplatePackage` 中预置(管理端创建):
+
+| 模板名称 | 维度 | 周期 | 任务示例 |
+|---------|------|------|---------|
+| 注意力基础训练(14天) | attention | 14天 | 舒尔特方格、静坐冥想、找不同 |
+| 注意力基础训练(7天) | attention | 7天 | 同上短周期 |
+| 注意力进阶训练(21天) | attention | 21天 | 舒尔特×2、冥想10分钟、拼图、阅读报告 |
+| 专注力基础训练(14天) | focus | 14天 | 番茄钟、单任务专注、干扰抑制 |
+| 记忆力训练(14天) | memory | 14天 | 数字记忆、图像记忆、故事复述 |
+| 逻辑力训练(14天) | logic | 14天 | 数独、逻辑推理、分类游戏 |
+| 综合维持方案(7天) | general | 7天 | 阅读、运动、情绪日记 |
+
+### 管理端规则配置
+
+新建 `cfc-web/views/admin/assessment-plan-rules.vue`:
+
+- 规则列表(维度/分数区间/关联模板/优先级/启用状态)
+- 规则 CRUD
+
+### 验证标准
+
+```
+□ 规则表可配置:维度 + 分数区间 → 训练模板
+□ 管理端有规则 CRUD 页面
+□ 规划师提交测评结果后自动调用生成器
+□ 匹配到多条规则时合并为一个方案
+□ 方案状态为 generated(非直接激活)
+□ 所有维度正常时生成维持型方案
+□ 方案关联 source_result_id,可追溯来源
+□ 方案 remark 包含指导意见摘要
+□ 规则不匹配时优雅降级
+```
+
+---
+
+## 阶段五:方案审核→确认→执行跟踪
+
+### 状态机
+
+```
+generated → pending_review → active → completed
+    │            │              │
+    └──→ cancelled ←───────────┘
+         (任何状态可取消)
+    generated: 系统生成,待规划师审核
+    pending_review: 规划师已审核,待家长确认
+    active: 已确认,执行中
+    completed: 全部完成
+    cancelled: 取消
+```
+
+### TaskPlanInstance 扩展审核字段
+
+**DB 迁移**:
+
+```sql
+ensureColumn("task_plan_instances", "reviewed_by", "BIGINT COMMENT '审核人(规划师ID)'");
+ensureColumn("task_plan_instances", "reviewed_at", "DATETIME COMMENT '审核时间'");
+ensureColumn("task_plan_instances", "review_comment", "VARCHAR(500) COMMENT '审核意见'");
+ensureColumn("task_plan_instances", "confirmed_by", "BIGINT COMMENT '确认人(家长ID)'");
+ensureColumn("task_plan_instances", "confirmed_at", "DATETIME COMMENT '确认时间'");
+ensureColumn("task_plan_instances", "activated_at", "DATETIME COMMENT '激活时间'");
+```
+
+### API 清单
+
+| 端点 | 角色 | 说明 |
+|------|------|------|
+| `POST /api/guide/plans/pending-review` | 规划师 | 获取待审核方案列表 |
+| `POST /api/guide/plans/{id}/detail` | 规划师/家长 | 方案详情(含所有任务项) |
+| `POST /api/guide/plans/{id}/review` | 规划师 | 审核方案(approve/reject) |
+| `POST /api/guide/plans/{id}/items/adjust` | 规划师 | 调整方案任务项 |
+| `POST /api/plans/pending-confirm` | 家长 | 获取待确认方案列表 |
+| `POST /api/plans/{id}/confirm` | 家长 | 确认/退回方案 |
+| `POST /api/plans/{id}/progress` | 家长 | 方案执行进度 |
+| `POST /api/plans/{id}/pause` | 家长 | 暂停方案 |
+| `POST /api/plans/{id}/resume` | 家长 | 恢复方案 |
+| `POST /api/plans/{id}/complete` | 系统 | 完成方案(触发复测提醒)|
+
+### 每日任务生成
+
+```java
+// service/TaskGenerationService.java
+// generateTodayTasks(planId): 从 TaskPlanItem → 当日 Task 实例
+
+// task/PlanTaskGenerator.java (定时任务)
+// @Scheduled(cron = "0 30 5 * * ?")
+// 每天 5:30 生成所有活跃方案的当日任务
+```
+
+### 复测提醒
+
+方案完成时根据 `DanAssessmentResult.nextReviewDate` 发送提醒:
+
+```
+┌─ 🎉 方案已完成! ───────────────┐
+│  DAN专注力训练方案(14天)          │
+│  完成度: 100%                     │
+│                                  │
+│  建议在 2026-08-10 前进行复测     │
+│  [立即预约复测]  [稍后再说]       │
+└──────────────────────────────────┘
+```
+
+### 前端页面清单
+
+| 页面 | 角色 | 说明 |
+|------|------|------|
+| `pages/guide/plan-review.vue` | 规划师 | 待审核方案列表 + 审核详情页 |
+| `pages/plans/pending-confirm.vue` | 家长 | 待确认方案列表 + 确认详情页 |
+| `pages/plans/dashboard.vue` | 家长 | 方案总览(进行中/已完成/待确认)|
+| `pages/plans/daily-view.vue` | 孩子 | 今日训练任务(执行入口)|
+| `pages/plans/weekly-view.vue` | 家长 | 周视图进度 |
+
+### 验证标准
+
+```
+□ 方案生成后状态为 generated,不直接激活
+□ 规划师可查看待审核方案列表和详情
+□ 规划师可调整方案任务项(增删改)
+□ 规划师审核通过→status=pending_review
+□ 家长确认→status=active,退回→返规划师
+□ 方案激活后自动生成当日任务
+□ 每日定时任务生成活跃方案的当日任务
+□ 方案执行进度可追踪
+□ 方案完成后触发复测提醒
+□ 可暂停和恢复执行中的方案
+```
+
+---
+
+## 全五阶段文件清单
+
+### 新增文件
+
+| 阶段 | 后端 | 前端 |
+|:----:|------|------|
+| 一 | `AssessmentProduct.java`, `AssessmentProductMapper.java`, `AssessmentProductService.java`, `ProductCreateRequest.java` | `views/admin/assessment-products.vue` |
+| 二 | `AssessmentQuota.java`, `AssessmentExecution.java`, `AssessmentQuotaMapper.java`, `AssessmentExecutionMapper.java`, `AssessmentQuotaService.java`, `AssessmentExecutionService.java`, `AssessmentQuotaController.java`, `AssessmentQuotaVO.java` | `pages/assessment/quota.vue` |
+| 三 | `GrowthGuidance.java`, `GrowthGuidanceMapper.java`, `GrowthGuidanceService.java`, `FileStorageService.java` | `pages/assessment/upload-report.vue` |
+| 四 | `AssessmentPlanRule.java`, `AssessmentPlanRuleMapper.java`, `AssessmentPlanGenerator.java`, `AssessmentPlanRuleService.java`, `AdminPlanRuleController.java` | `views/admin/assessment-plan-rules.vue` |
+| 五 | `GuidePlanReviewController.java`, `PlanConfirmController.java`, `TaskGenerationService.java`, `PlanTaskGenerator.java` | `pages/guide/plan-review.vue`, `pages/plans/pending-confirm.vue`, `pages/plans/dashboard.vue`, `pages/plans/daily-view.vue`, `pages/plans/weekly-view.vue` |
+
+### 修改文件
+
+| 阶段 | 后端 | 前端 |
+|:----:|------|------|
+| 一 | `Product.java`, `AdminProductController.java`, `ProductOrderService.java` | `pages/shop/detail.vue` |
+| 二 | `ProductOrderService.java`, `AssessmentAppointmentController.java`, `AssessmentOrderController.java`, `DanAssessmentController.java` | `apply.vue`, `purchase.vue` |
+| 三 | `DanAssessmentResult.java`, `ReportParseService.java`, `DanAssessmentController.java` | `record.vue`, `results.vue` |
+| 四 | `AssessmentService.java`, `TaskPlanInstance.java`, `TaskPlanService.java`, `DanAssessmentController.java` | — |
+| 五 | `TaskPlanInstance.java`, `TaskPlanService.java` | — |
+
+---
+
+## Sprint 建议
+
+```
+Sprint 1: 阶段一 + 阶段三(可并行)
+Sprint 2: 阶段二(依赖阶段一)+ 阶段五前端原型(与阶段四并行)
+Sprint 3: 阶段四 + 阶段五后端
+Sprint 4: 联调 + 测试 + 部署
+```

+ 17 - 0
docs/backup/README.md

@@ -0,0 +1,17 @@
+# 文档归档
+
+此目录存放已被新版本替代的历史需求、设计和计划文档。
+
+如需回溯某功能的变更历史,可在此查找。当前有效文档见 `docs/CHANGELOG.md`。
+
+## 目录结构
+
+```
+backup/
+├── root/                 # docs/ 根目录的旧文档
+├── 需求分析/              # 旧版需求分析
+├── 系统设计/              # 旧版系统设计
+└── superpowers/
+    ├── specs/             # 旧版设计规范
+    └── plans/             # 旧版实施计划
+```

+ 113 - 0
docs/backup/root/API-INTEGRATION.md

@@ -0,0 +1,113 @@
+# 前后端集成文档
+
+## API端点映射
+
+### 前端API调用 vs 后端Controller
+
+| 前端调用 (api.js) | 后端Controller | 方法 | 说明 |
+|------------------|----------------|------|------|
+| `login(data)` | `AuthController.login()` | POST | 微信登录 |
+| `getUserInfo()` | `AuthController.getUserInfo()` | GET | 获取用户信息 |
+| `getTodayTasks(childId)` | `TaskController.getTodayTasks()` | GET | 获取今日任务 |
+| `getTaskDetail(taskId)` | `TaskController.getTaskDetail()` | GET | 获取任务详情 |
+| `createTask(data)` | `TaskController.createTask()` | POST | 创建任务 |
+| `completeTask(taskId, data)` | `TaskController.completeTask()` | POST | 完成任务 |
+| `reviewTask(taskId, data)` | `TaskController.reviewTask()` | POST | 审核任务 |
+| `getFamilyTasks(familyId)` | `TaskController.getFamilyTasks()` | GET | 获取家庭任务列表 |
+| `getRewards(familyId)` | `RewardController.getFamilyRewards()` | GET | 获取家庭奖励列表 |
+| `getRewardDetail(rewardId)` | `RewardController.getRewardDetail()` | GET | 获取奖励详情 |
+| `createReward(data)` | `RewardController.createReward()` | POST | 创建奖励 |
+| `updateReward(rewardId, data)` | `RewardController.updateReward()` | PUT | 更新奖励 |
+| `getDefaultRewards()` | `RewardController.getDefaultRewards()` | GET | 获取系统预设奖励 |
+| `getPointsBalance(childId)` | `PointsController.getPointsBalance()` | GET | 获取孩子积分 |
+| `getPointsLog(childId)` | `PointsController.getPointsLog()` | GET | 获取积分流水 |
+
+## 数据格式
+
+### 请求头
+```
+Authorization: Bearer <jwt_token>
+Content-Type: application/json
+```
+
+### 响应格式
+所有API响应都使用统一的Result类包装:
+
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": { ... }
+}
+```
+
+### 错误响应
+```json
+{
+  "code": 500,
+  "message": "错误信息"
+}
+```
+
+## 配置
+
+### 后端配置 (application.yml)
+```yaml
+server:
+  port: 8080
+  servlet:
+    context-path: /api
+
+spring:
+  application:
+    name: zhixingyijia-backend
+  datasource:
+    url: jdbc:mysql://localhost:3306/zhixingyijia?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+    username: root
+    password: root
+
+jwt:
+  secret: zhixingyijia-secret-key-2026
+  expiration: 604800000
+```
+
+### 前端配置 (app.js)
+```javascript
+globalData: {
+  baseUrl: 'http://localhost:8080/api',
+  token: '',
+  userInfo: null,
+  role: ''  // parent 或 child
+}
+```
+
+## 集成测试
+
+### 测试环境
+- 后端:localhost:8080
+- 前端:微信开发者工具
+- 数据库:localhost:3306
+
+### 测试步骤
+1. 启动后端服务
+2. 在微信开发者工具中导入miniprogram目录
+3. 配置app.js中的baseUrl
+4. 测试登录功能
+5. 测试任务管理功能
+6. 测试奖励管理功能
+7. 测试积分管理功能
+
+## 注意事项
+
+1. **跨域问题**:开发环境下需要配置CORS
+2. **JWT Token**:前端需要在请求头中携带Token
+3. **数据验证**:后端需要对请求参数进行验证
+4. **错误处理**:前端需要处理各种错误情况
+5. **加载状态**:网络请求时显示加载状态
+
+## 开发建议
+
+1. 使用Swagger文档查看API接口:http://localhost:8080/api/swagger-ui.html
+2. 使用Postman测试API接口
+3. 使用微信开发者工具调试小程序
+4. 使用MySQL Workbench查看数据库

+ 306 - 0
docs/backup/root/badge-requirements.md

@@ -0,0 +1,306 @@
+# 勋章系统模块需求分析
+
+**版本**: V1.2
+**更新时间**: 2026-04-15
+
+---
+
+## 一、需求清单概览
+
+| 需求ID | 描述 | 优先级 | 状态 |
+|--------|------|--------|------|
+| BADGE-001 | 勋章定义与分类 | P1 | ❌ 未实现 |
+| BADGE-002 | 勋章解锁条件设置 | P1 | ❌ 未实现 |
+| BADGE-003 | 勋章自动授予逻辑 | P1 | ❌ 未实现 |
+| BADGE-004 | 勋章展示与收藏 | P1 | ❌ 未实现 |
+| BADGE-005 | 勋章有效期与过期 | P1 | ❌ 未实现 |
+| BADGE-006 | 勋章统计与排行 | P1 | ❌ 未实现 |
+
+---
+
+## 二、需求详细描述
+
+### 2.1 勋章定义与分类(BADGE-001)
+
+#### BADGE-001: 勋章定义与分类
+- **描述**:系统支持定义多种勋章类型,每种勋章有唯一的标识、名称、图标、等级和分类
+- **字段**:
+  - `badgeId`:勋章唯一标识
+  - `name`:勋章名称
+  - `description`:勋章描述
+  - `icon`:勋章图标
+  - `category`:勋章分类(学习类/运动类/家务类/打卡类/综合类)
+  - `level`:勋章等级(铜/银/金/钻石)
+  - `rarity`:稀有度(普通/稀有/史诗/传说)
+- **可选值**:
+  - 分类:`学习` / `运动` / `家务` / `阅读` / `打卡` / `综合`
+  - 等级:`铜牌` / `银牌` / `金牌` / `钻石`
+  - 稀有度:`普通` / `稀有` / `史诗` / `传说`
+
+---
+
+### 2.2 勋章解锁条件设置(BADGE-002)
+
+#### BADGE-002: 勋章解锁条件设置
+- **描述**:每种勋章可以设置解锁条件,达到条件后自动或手动解锁
+- **字段**:
+  - `triggerType`:触发类型(任务完成次数 / 连续打卡天数 / 积分累计 / 兑换次数)
+  - `threshold`:阈值
+  - `childOnly`:是否仅孩子可解锁
+- **可选值**:
+  - 触发类型:`task_count` / `streak_days` / `points_total` / `reward_count` / `custom`
+  - 阈值:整数,根据类型定义
+
+---
+
+### 2.3 勋章自动授予逻辑(BADGE-003)
+
+#### BADGE-003: 勋章自动授予逻辑
+- **描述**:系统根据解锁条件自动判断是否授予勋章,支持即时授予和家长审批后授予
+- **实现**:
+  - 定时任务扫描孩子的解锁条件
+  - 或在关键动作(任务完成、打卡)时触发检查
+  - 支持自动授予或需要审批
+- **状态记录**:
+  - `badgeId`:勋章ID
+  - `childId`:获得者
+  - `earnedAt`:获得时间
+  - `status`:有效/已过期/已撤销
+
+---
+
+### 2.4 勋章展示与收藏(BADGE-004)
+
+#### BADGE-004: 勋章展示与收藏
+- **描述**:孩子在个人主页或勋章墙展示已获得勋章,支持收藏功能
+- **前端页面**:
+  - 勋章墙:展示所有已获得勋章,按分类/时间排列
+  - 勋章详情:查看勋章名称、描述、获得时间、稀有度
+  - 收藏功能:将喜欢的勋章置顶
+- **展示规则**:
+  - 未获得的勋章显示为锁定状态
+  - 已获得的勋章显示正常图标和名称
+  - 收藏的勋章显示在最前
+
+---
+
+### 2.5 勋章有效期与过期(BADGE-005)
+
+#### BADGE-005: 勋章有效期与过期
+- **描述**:部分勋章可以设置有效期,过期后变为过期状态,但仍保留展示
+- **字段**:
+  - `expireDays`:有效期天数(-1 表示永久有效)
+  - `expireAt`:过期时间
+- **逻辑**:
+  - 定时任务每日检查勋章有效期
+  - 过期后勋章仍保留在展示页,但状态标记为“已过期”
+  - 可设置续期条件,重新激活勋章
+
+---
+
+### 2.6 勋章统计与排行(BADGE-006)
+
+#### BADGE-006: 勋章统计与排行
+- **描述**:提供勋章统计功能,包括个人勋章数量、分类统计、全家排行等
+- **统计维度**:
+  - 个人获得勋章总数
+  - 各分类勋章数量
+  - 各等级勋章数量
+  - 稀有度分布
+- **排行功能**:
+  - 家庭内排行:按勋章数量或积分排序
+  - 街道/区域排行(可选)
+
+---
+
+## 三、勋章数据模型
+
+### 3.1 Badge 勋章定义实体
+
+```java
+// 基础字段
+private Long id;
+private String badgeId;      // 勋章唯一标识
+private String name;         // 勋章名称
+private String description;  // 勋章描述
+private String icon;         // 勋章图标URL
+private String category;     // 勋章分类
+private String level;        // 勋章等级
+private String rarity;       // 稀有度
+
+// 解锁条件
+private String triggerType;  // 触发类型
+private Integer threshold;    // 阈值
+private Boolean needApproval; // 是否需要审批
+private Integer expireDays;  // 有效期天数
+
+// 系统字段
+private Integer sortOrder;   // 排序
+private Integer isActive;    // 是否启用
+private Date createdAt;
+private Date updatedAt;
+```
+
+### 3.2 ChildBadge 儿童勋章关联实体
+
+```java
+// 关联字段
+private Long id;
+private Long childId;        // 孩子ID
+private Long badgeId;        // 勋章ID(对应Badge.id)
+
+// 获得信息
+private Date earnedAt;       // 获得时间
+private Date expireAt;       // 过期时间
+private Integer status;      // 状态:1-有效 0-过期 -1-已撤销
+private Boolean isFavorite;  // 是否收藏
+
+// 系统字段
+private Date createdAt;
+private Date updatedAt;
+```
+
+### 3.3 状态说明
+
+| 状态码 | 含义 | 说明 |
+|--------|------|------|
+| 1 | 有效 | 勋章正常使用 |
+| 0 | 已过期 | 已超过有效期 |
+| -1 | 已撤销 | 被管理员撤销 |
+
+---
+
+## 四、勋章流程说明
+
+### 4.1 勋章生命周期
+
+```
+定义勋章 → 设置解锁条件 → 孩子达成条件 → 系统判断 → 授予勋章 → 展示/收藏 → 过期/续期
+```
+
+### 4.2 阶段与角色
+
+| 阶段 | 家长/管理员 | 孩子 | 系统 |
+|------|------------|------|------|
+| 定义阶段 | 创建/编辑勋章模板 | 不参与 | 校验字段 |
+| 解锁阶段 | 设置解锁条件 | 执行任务/打卡 | 检查触发条件 |
+| 授予阶段 | 审批(如需要) | 等待/获得 | 写入获得记录 |
+| 展示阶段 | 查看全家勋章 | 查看/收藏个人勋章 | 渲染勋章墙 |
+| 过期阶段 | 查看统计 | 查看过期勋章 | 检查并标记过期 |
+
+---
+
+## 五、API接口设计
+
+### 5.1 勋章管理
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| POST | /api/badges | 创建勋章定义 | 管理员 |
+| GET | /api/badges | 获取勋章列表 | 公开 |
+| GET | /api/badges/{id} | 获取勋章详情 | 公开 |
+| PUT | /api/badges/{id} | 编辑勋章定义 | 管理员 |
+| DELETE | /api/badges/{id} | 删除勋章 | 管理员 |
+
+### 5.2 勋章授予
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| POST | /api/badges/grant | 手动授予勋章 | 家长/管理员 |
+| POST | /api/badges/check | 检查并授予勋章 | 系统 |
+| GET | /api/badges/child/{childId} | 获取孩子的勋章 | 孩子/家长 |
+| PUT | /api/badges/{id}/favorite | 收藏/取消收藏 | 孩子 |
+
+### 5.3 勋章统计
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/badges/statistics/child/{childId} | 孩子勋章统计 | 孩子/家长 |
+| GET | /api/badges/statistics/family/{familyId} | 家庭勋章统计 | 家长 |
+| GET | /api/badges/ranking/family/{familyId} | 家庭内排行 | 家长 |
+
+---
+
+## 六、前端页面设计
+
+| 页面 | 路径 | 功能 |
+|------|------|------|
+| 勋章墙 | `/pages/badges/badges` | 展示已获得勋章 |
+| 勋章详情 | `/pages/badges/detail` | 勋章详细信息 |
+| 勋章库 | `/pages/badges/library` | 浏览所有勋章定义 |
+| 勋章统计 | `/pages/badges/statistics` | 统计与排行 |
+
+---
+
+## 七、待完善事项
+
+| 功能 | 优先级 | 说明 |
+|------|--------|------|
+| 勋章定义CRUD | P1 | 后端实体与API |
+| 解锁条件引擎 | P1 | 定时任务+事件触发 |
+| 勋章墙前端 | P1 | 小程序/WEB展示 |
+| 勋章过期逻辑 | P1 | 定时任务 |
+| 勋章统计排行 | P1 | 统计API |
+
+---
+
+## 八、数据库设计建议
+
+### 8.1 勋章定义表
+
+```sql
+CREATE TABLE badge (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    badge_id VARCHAR(50) UNIQUE NOT NULL,
+    name VARCHAR(100) NOT NULL,
+    description TEXT,
+    icon VARCHAR(255),
+    category VARCHAR(20),
+    level VARCHAR(20),
+    rarity VARCHAR(20),
+    trigger_type VARCHAR(20),
+    threshold INT DEFAULT 0,
+    need_approval TINYINT DEFAULT 0,
+    expire_days INT DEFAULT -1,
+    sort_order INT DEFAULT 0,
+    is_active TINYINT DEFAULT 1,
+    created_at DATETIME,
+    updated_at DATETIME
+);
+```
+
+### 8.2 儿童勋章关联表
+
+```sql
+CREATE TABLE child_badge (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    child_id BIGINT NOT NULL,
+    badge_id BIGINT NOT NULL,
+    earned_at DATETIME,
+    expire_at DATETIME,
+    status TINYINT DEFAULT 1,
+    is_favorite TINYINT DEFAULT 0,
+    created_at DATETIME,
+    updated_at DATETIME,
+    UNIQUE KEY uk_child_badge (child_id, badge_id)
+);
+```
+
+---
+
+## 九、后续开发建议
+
+### 9.1 第一阶段:基础功能
+1. Badge 实体与 CRUD API
+2. ChildBadge 关联表与授予逻辑
+3. 勋章墙前端展示
+
+### 9.2 第二阶段:解锁与过期
+1. 解锁条件引擎(定时任务)
+2. 勋章过期检查定时任务
+3. 收藏功能
+
+### 9.3 第三阶段:统计与扩展
+1. 勋章统计 API
+2. 家庭内排行
+3. 勋章续期与活动勋章

+ 792 - 0
docs/backup/root/dan-requirements.md

@@ -0,0 +1,792 @@
+# DAN测评模块需求分析
+
+**版本**: V1.4
+**更新时间**: 2026-04-16
+
+---
+
+## 一、需求背景与现状
+
+### 1.1 业务背景
+
+DAN测评是一个针对儿童注意力、专注力、记忆力、逻辑思维等多维能力的综合评估系统。测评结果用于:
+- 评估孩子当前的能力水平
+- 生成针对性的成长建议
+- 追踪能力发展趋势
+- 为家长提供教育参考
+- 支持任务模板智能推荐
+
+### 1.2 核心业务变化(V1.3 → V1.4)
+
+| 变化项 | V1.3(旧) | V1.4(新) |
+|--------|-----------|-----------|
+| 等级概念 | DAN等级 A/B/C/D | **取消**,改为测评包 |
+| 能力维度 | 固定五维(注意力/专注力/记忆力/逻辑/综合) | **指标体系**,可配置 |
+| 任务推荐 | 无 | 自动推荐+手动确认 |
+| 收费方式 | 无 | P2阶段与外部系统集成 |
+
+### 1.3 测评包定义
+
+| 测评包 | 适用年龄 | 类型 | 说明 |
+|--------|----------|------|------|
+| A1 | 7-9岁 | 儿童认知能力发展 | 儿童认知能力综合评估 |
+| A2 | 10岁以上 | 青少年核心素养 | 青少年核心素养综合评估 |
+| B1 | 7-9岁 | 儿童家庭环境 | 家庭环境评估 |
+| B2 | 10岁以上 | 青少年家庭环境 | 家庭环境评估 |
+| B3 | 7-9岁 | 儿童学习习惯 | 学习习惯评估 |
+| B4 | 10岁以上 | 青少年学习习惯 | 学习习惯评估 |
+| B5 | 7-9岁 | 儿童心理状态 | 心理状态评估 |
+| B6 | 10岁以上 | 职业发展 | 职业发展评估 |
+
+### 1.4 现有实现状态
+
+| 组件 | 状态 | 说明 |
+|------|------|------|
+| `DanAssessmentResult` 实体 | ⚠️ 已定义 | 存在于 `entity/DanAssessmentResult.java` |
+| `AssessmentAppointment` 实体 | ⚠️ 已定义 | 存在于 `entity/AssessmentAppointment.java` |
+| DAN测评 API | ❌ 不存在 | 无对应 Controller |
+| 预约 API | ⚠️ 部分实现 | 依赖 Appointment 实体 |
+| 前端页面 | ❌ 不存在 | 无对应页面 |
+
+---
+
+## 二、指标体系设计
+
+### 2.1 指标定义
+
+指标是测评的最小评估单元,每个指标有唯一的指标编码、所属能力维度、等级阈值。
+
+#### 指标属性
+
+| 属性 | 类型 | 说明 |
+|------|------|------|
+| indicatorCode | String | 指标编码,如 COG001(认知能力)、EMI001(情绪心理) |
+| indicatorName | String | 指标名称 |
+| dimension | String | 能力维度(COG/EMI/SOC/PHY) |
+| description | String | 指标说明 |
+| levelThresholds | JSON | 等级阈值,如 {"高":80,"中":60,"低":0} |
+| sortOrder | Integer | 排序 |
+
+#### 指标维度
+
+| 维度编码 | 维度名称 |
+|----------|----------|
+| COG | 认知能力 |
+| EMI | 情绪心理 |
+| SOC | 社会关系 |
+| PHY | 身体健康 |
+
+### 2.2 测评包-指标映射(dan_package_indicator)
+
+每个测评包包含一组指标,定义见下表:
+
+| 测评包 | 包含指标 |
+|--------|----------|
+| A1(儿童认知能力发展-7-9岁) | COG001, COG002, COG003, COG004, COG005 |
+| A2(青少年核心素养-10岁以上) | COG001, COG002, COG003, COG004, COG005, COG006 |
+| B1(儿童家庭环境-7-9岁) | EMI001, EMI002, SOC001 |
+| B2(青少年家庭环境-10岁以上) | EMI001, EMI002, EMI003, SOC001, SOC002 |
+| B3(儿童学习习惯-7-9岁) | SOC001, SOC002, PHY001 |
+| B4(青少年学习习惯-10岁以上) | SOC001, SOC002, SOC003, PHY001, PHY002 |
+| B5(儿童心理状态-7-9岁) | EMI001, EMI002, PHY001 |
+| B6(职业发展-10岁以上) | EMI001, EMI002, EMI003, PHY001, PHY002 |
+
+### 2.3 指标-任务模板映射(dan_indicator_template)
+
+每个指标可关联多个任务模板,用于测评后的任务推荐。
+
+| 指标 | 推荐任务模板类型 |
+|------|------------------|
+| COG001(认知灵活) | 认知灵活性训练、多任务切换 |
+| COG002(工作记忆) | 工作记忆训练、数字记忆 |
+| COG003(注意力广度) | 舒尔特方格、视觉搜索 |
+| COG004(注意力稳定性) | 专注力训练、静态任务 |
+| COG005(逻辑推理) | 逻辑思维训练、 puzzles |
+| COG006(问题解决) | 策略游戏、方案规划 |
+| EMI001(情绪识别) | 情绪日记、情绪识别训练 |
+| EMI002(情绪调节) | 情绪调节练习、放松训练 |
+| EMI003(抗压能力) | 压力应对训练、心理韧性 |
+| SOC001(社交技能) | 社交互动练习、沟通训练 |
+| SOC002(合作能力) | 团队合作任务、小组活动 |
+| PHY001(运动协调) | 运动游戏、协调性训练 |
+| PHY002(身体耐力) | 体能训练、耐力运动 |
+
+---
+
+## 三、需求清单
+
+### 3.1 需求列表
+
+| 需求ID | 描述 | 优先级 | 状态 |
+|--------|------|--------|------|
+| DAN-001 | 测评预约创建与管理 | P0 | ⚠️ 部分实现 |
+| DAN-002 | 测评结果录入与存储(按指标) | P0 | ⚠️ 已定义实体 |
+| DAN-003 | 测评结果列表查询 | P0 | ❌ 未实现 |
+| DAN-004 | 测评结果详情查看 | P0 | ❌ 未实现 |
+| DAN-005 | 指标得分展示 | P0 | ⚠️ 已定义字段 |
+| DAN-006 | 指标等级计算 | P0 | ❌ 未实现 |
+| DAN-007 | 历史趋势对比 | P1 | ❌ 未实现 |
+| DAN-008 | 成长建议生成(按指标) | P1 | ❌ 未实现 |
+| DAN-009 | 下次复测提醒 | P1 | ❌ 未实现 |
+| DAN-010 | 测评报告导出 | P1 | ❌ 未实现 |
+| DAN-011 | 测评统计报表 | P1 | ❌ 未实现 |
+| DAN-012 | 测评包管理 | P1 | ❌ 未实现 |
+| DAN-013 | 指标库管理 | P1 | ❌ 未实现 |
+| DAN-014 | 指标-模板映射管理 | P1 | ❌ 未实现 |
+| DAN-015 | 任务自动推荐 | P1 | ❌ 未实现 |
+| DAN-016 | 收费集成预留 | P2 | ❌ 未实现 |
+| DAN-017 | 成长规划师录入权限 | P0 | ⚠️ 已定义 |
+| DAN-018 | 家长查看权限 | P0 | ⚠️ 已定义 |
+| DAN-019 | 测评数据脱敏 | P2 | ❌ 未实现 |
+
+---
+
+## 四、需求详细说明
+
+### 4.1 测评包管理(DAN-012)
+
+#### 功能描述
+管理测评包的定义,包括测评包编码、名称、适用年龄范围、包含的指标列表。
+
+#### 字段定义
+
+| 字段 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| id | Long | 是 | 主键 |
+| packageCode | String | 是 | 测评包编码(A1/A2/B1-B6) |
+| packageName | String | 是 | 测评包名称 |
+| ageRangeMin | Integer | 是 | 适用最小年龄 |
+| ageRangeMax | Integer | 是 | 适用最大年龄 |
+| category | String | 是 | 分类(认知能力/核心能力/家庭环境/行为表现/心理状态) |
+| indicators | JSON | 是 | 指标编码数组,如 ["ATT001","MEM001"] |
+| description | String | 否 | 说明 |
+| isActive | Integer | 是 | 是否启用(1启用/0禁用) |
+| createdAt | Date | 是 | 创建时间 |
+| updatedAt | Date | 是 | 更新时间 |
+
+---
+
+### 4.2 指标库管理(DAN-013)
+
+#### 功能描述
+管理指标的定义,支持指标的增删改查。
+
+#### 字段定义
+
+| 字段 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| id | Long | 是 | 主键 |
+| indicatorCode | String | 是 | 指标编码(如 ATT001) |
+| indicatorName | String | 是 | 指标名称 |
+| dimension | String | 是 | 能力维度 |
+| description | String | 否 | 指标说明 |
+| levelThresholds | JSON | 是 | 等级阈值(如 {"高":80,"中":60,"低":0}) |
+| sortOrder | Integer | 否 | 排序 |
+| isActive | Integer | 是 | 是否启用 |
+| createdAt | Date | 是 | 创建时间 |
+| updatedAt | Date | 是 | 更新时间 |
+
+---
+
+### 4.3 指标-任务模板映射管理(DAN-014)
+
+#### 功能描述
+管理指标与任务模板的关联关系,支持自动推荐逻辑。
+
+#### 字段定义
+
+| 字段 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| id | Long | 是 | 主键 |
+| indicatorCode | String | 是 | 指标编码 |
+| templateId | Long | 是 | 任务模板ID |
+| weight | Integer | 否 | 推荐权重(1-10) |
+| isActive | Integer | 是 | 是否启用 |
+| createdAt | Date | 是 | 创建时间 |
+| updatedAt | Date | 是 | 更新时间 |
+
+---
+
+### 4.4 预约管理(DAN-001)
+
+#### 功能描述
+家长或成长规划师为孩子预约DAN测评,选择测评时间、成长规划师和测评包。
+
+#### 业务流程
+```
+家长/成长规划师 → 选择测评包 → 选择时间 → 预约记录生成 → 成长规划师确认 → 测评执行 → 标记完成
+```
+
+#### 字段定义
+
+| 字段 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| childId | Long | 是 | 预约的孩子 |
+| teacherId | Long | 是 | 成长规划师 |
+| packageCode | String | 是 | 测评包编码 |
+| appointmentDate | Date | 是 | 预约日期 |
+| appointmentTime | String | 是 | 预约时间(HH:mm) |
+| notes | String | 否 | 备注 |
+| status | String | 是 | pending/completed/cancelled |
+
+---
+
+### 4.5 测评结果录入与存储(DAN-002)
+
+#### 功能描述
+成长规划师完成测评后,录入测评结果并存储。测评结果按指标存储得分。
+
+#### 字段定义
+
+| 字段 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| id | Long | 是 | 主键 |
+| childId | Long | 是 | 测评的孩子 |
+| teacherId | Long | 是 | 成长规划师ID |
+| appointmentId | Long | 否 | 关联的预约ID |
+| packageCode | String | 是 | 测评包编码 |
+| indicatorScores | JSON | 是 | 指标得分数组 |
+
+```json
+// indicatorScores 示例
+[
+  {"code": "ATT001", "name": "注意力广度", "score": 85, "level": "高"},
+  {"code": "MEM001", "name": "短时记忆", "score": 72, "level": "中"},
+  {"code": "LOG001", "name": "逻辑推理", "score": 90, "level": "高"}
+]
+```
+
+#### 其他字段
+
+| 字段 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| assessmentDate | Date | 是 | 测评日期 |
+| durationMinutes | Integer | 否 | 测评时长 |
+| gameRecords | String | 否 | 游戏记录(JSON) |
+| analysisReport | String | 否 | 分析报告 |
+| growthSuggestions | String | 否 | 成长建议(按指标生成) |
+| nextReviewDate | Date | 否 | 下次复测日期 |
+| status | String | 是 | draft/completed/archived |
+| createdAt | Date | 是 | 创建时间 |
+| updatedAt | Date | 是 | 更新时间 |
+
+#### 状态流转
+- `draft`:草稿(成长规划师录入中)
+- `completed`:已完成(正式结果)
+- `archived`:已归档(历史记录)
+
+---
+
+### 4.6 测评结果列表查询(DAN-003)
+
+#### 功能描述
+根据孩子ID查询测评记录列表,支持筛选和分页。
+
+#### 筛选条件
+
+| 条件 | 类型 | 说明 |
+|------|------|------|
+| childId | Long | 孩子ID(必填) |
+| timeRange | String | 时间范围(recent_month/recent_quarter/all) |
+| packageCode | String | 测评包筛选 |
+| status | String | 状态筛选 |
+
+#### 返回字段
+- 列表展示:不包含详细分析报告和成长建议
+- 包含字段:id、assessmentDate、packageCode、indicatorScores 摘要、status
+
+---
+
+### 4.7 测评结果详情查看(DAN-004)
+
+#### 功能描述
+查看单次测评的完整结果。
+
+#### 展示内容
+
+| 模块 | 内容 |
+|------|------|
+| 基本信息 | 测评日期、成长规划师、测评包、测评时长 |
+| 指标得分 | indicatorScores 完整展示,按维度分组 |
+| 指标等级 | 每个指标的等级(高/中/低) |
+| 分析报告 | analysisReport 全文 |
+| 成长建议 | growthSuggestions 全文(按指标维度) |
+| 下次复测 | nextReviewDate |
+
+---
+
+### 4.8 指标等级计算(DAN-006)
+
+#### 功能描述
+根据指标得分和等级阈值计算指标等级。
+
+#### 计算规则
+1. 查询指标定义的 levelThresholds
+2. 根据得分判断等级:
+   - score >= 高阈值 → "高"
+   - score >= 中阈值 → "中"
+   - score < 中阈值 → "低"
+
+#### 示例
+```json
+// 指标定义
+{"indicatorCode": "ATT001", "levelThresholds": {"高":80,"中":60,"低":0}}
+
+// 得分85 → 等级"高"
+// 得分65 → 等级"中"  
+// 得分55 → 等级"低"
+```
+
+---
+
+### 4.9 历史趋势对比(DAN-007)
+
+#### 功能描述
+展示孩子历次测评各指标的趋势变化。
+
+#### 展示内容
+- 折线图:各指标得分趋势
+- 表格:历史测评记录对比
+- 维度汇总:按能力维度的平均得分
+
+#### 时间范围
+- 最近三月
+- 最近半年
+- 全部历史
+
+---
+
+### 4.10 成长建议生成(DAN-008)
+
+#### 功能描述
+根据测评结果(按指标)生成针对性的成长建议。
+
+#### 生成规则
+1. 遍历所有指标,筛选出等级为"低"或"中"的指标
+2. 根据指标维度生成对应建议:
+   - ATT(注意力):专注力训练游戏、日常注意力培养建议
+   - MEM(记忆力):记忆方法教学、记忆训练游戏
+   - LOG(逻辑思维):逻辑思维训练、问题解决技巧
+   - EMI(情绪调节):情绪管理方法、情绪调节练习
+   - BEH(行为习惯):行为养成计划、自控力培养
+   - FAM(家庭环境):家庭支持建议、亲子互动改善
+
+#### 建议类型
+- 日常生活建议
+- 游戏训练建议
+- 专业干预建议(如需)
+
+---
+
+### 4.11 任务自动推荐(DAN-015)
+
+#### 功能描述
+测评完成后,根据指标得分自动推荐相关任务模板,家长可手动选择确认。
+
+#### 业务流程
+```
+测评完成 → 系统分析指标得分 → 筛选得分低的指标 
+→ 查找对应任务模板 → 按权重排序 → 展示推荐列表 
+→ 家长选择确认 → 创建任务
+```
+
+#### 推荐算法
+1. **筛选低分指标**:score < 中阈值的指标
+2. **查找关联模板**:从 dan_indicator_template 查询关联的任务模板
+3. **权重排序**:按 weight 降序排列
+4. **去重**:同一模板只推荐一次
+
+#### 展示内容
+- 推荐任务列表:templateName、推荐理由(关联的指标)
+- 家长操作:选择确认 / 忽略 / 自定义选择
+
+---
+
+### 4.12 下次复测提醒(DAN-009)
+
+#### 功能描述
+根据 nextReviewDate 发送复测提醒。
+
+#### 提醒机制
+- 提前7天/3天/1天提醒
+- 提醒方式:系统消息推送
+- 触发:定时任务每日扫描
+
+---
+
+### 4.13 测评报告导出(DAN-010)
+
+#### 功能描述
+将测评结果导出为PDF格式。
+
+#### 导出内容
+- 封面:孩子信息、测评日期、测评包
+- 总体评价:各维度得分汇总
+- 指标雷达图
+- 各指标详细分析(得分+等级)
+- 历史趋势对比
+- 成长建议(按维度)
+- 下次复测计划
+
+---
+
+### 4.14 测评统计报表(DAN-011)
+
+#### 功能描述
+提供测评统计功能。
+
+#### 统计维度
+- 测评总次数
+- 各测评包分布
+- 各指标平均分
+- 各等级分布(高/中/低)
+- 测评完成率
+
+---
+
+### 4.15 收费集成预留(DAN-016)
+
+#### 功能描述
+P2阶段与外部收费系统集成,目前预留接口。
+
+#### 预留内容
+1. 测评包定价字段(dan_package.price)
+2. 支付状态字段(dan_appointment.paymentStatus)
+3. 回调通知接口(/api/dan/payment/callback)
+4. 订单创建接口(预留)
+
+---
+
+### 4.16 成长规划师录入权限(DAN-017)
+
+#### 权限范围
+- 创建测评结果
+- 编辑自己录入的测评结果
+- 查看自己负责家庭的测评记录
+- 管理测评包、指标、模板映射
+
+---
+
+### 4.17 家长查看权限(DAN-018)
+
+#### 权限范围
+- 查看自己孩子的所有测评记录
+- 查看测评详情
+- 查看历史趋势
+- 确认任务推荐
+
+---
+
+### 4.18 测评数据脱敏(DAN-019)
+
+#### 脱敏规则
+- 街道级汇总展示
+- 匿名化处理
+- 仅展示统计趋势
+
+---
+
+## 五、API接口设计
+
+### 5.1 测评包管理
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/dan/packages | 测评包列表 | 公开 |
+| GET | /api/dan/packages/{code} | 测评包详情 | 公开 |
+| POST | /api/dan/packages | 创建测评包 | 管理员 |
+| PUT | /api/dan/packages/{id} | 更新测评包 | 管理员 |
+| DELETE | /api/dan/packages/{id} | 删除测评包 | 管理员 |
+
+### 5.2 指标管理
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/dan/indicators | 指标列表 | 公开 |
+| GET | /api/dan/indicators/{code} | 指标详情 | 公开 |
+| POST | /api/dan/indicators | 创建指标 | 管理员 |
+| PUT | /api/dan/indicators/{id} | 更新指标 | 管理员 |
+| DELETE | /api/dan/indicators/{id} | 删除指标 | 管理员 |
+
+### 5.3 指标-模板映射
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/dan/indicator-template | 映射列表 | 成长规划师 |
+| POST | /api/dan/indicator-template | 创建映射 | 管理员 |
+| PUT | /api/dan/indicator-template/{id} | 更新映射 | 管理员 |
+| DELETE | /api/dan/indicator-template/{id} | 删除映射 | 管理员 |
+
+### 5.4 预约管理
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| POST | /api/dan/appointments | 创建预约 | 家长/成长规划师 |
+| GET | /api/dan/appointments | 预约列表 | 家长/成长规划师 |
+| GET | /api/dan/appointments/{id} | 预约详情 | 家长/成长规划师 |
+| PUT | /api/dan/appointments/{id} | 修改预约 | 家长/成长规划师 |
+| DELETE | /api/dan/appointments/{id} | 取消预约 | 家长/成长规划师 |
+
+### 5.5 测评结果
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| POST | /api/dan/results | 创建测评记录 | 成长规划师 |
+| GET | /api/dan/results/child/{childId} | 测评列表 | 家长/成长规划师 |
+| GET | /api/dan/results/{id} | 测评详情 | 家长/成长规划师 |
+| PUT | /api/dan/results/{id} | 更新测评记录 | 成长规划师 |
+| DELETE | /api/dan/results/{id} | 删除测评记录 | 成长规划师 |
+
+### 5.6 任务推荐
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/dan/results/{id}/recommend-tasks | 获取推荐任务 | 家长 |
+| POST | /api/dan/results/{id}/confirm-tasks | 确认推荐任务 | 家长 |
+
+### 5.7 分析与统计
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/dan/analysis/{id} | 能力分析 | 家长/成长规划师 |
+| GET | /api/dan/trend/{childId} | 历史趋势 | 家长/成长规划师 |
+| GET | /api/dan/statistics/child/{childId} | 测评统计 | 家长/成长规划师 |
+| GET | /api/dan/statistics/family/{familyId} | 家庭统计 | 家长 |
+
+### 5.8 导出
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/dan/export/{id} | 导出PDF报告 | 家长/成长规划师 |
+
+### 5.9 收费集成(P2)
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| POST | /api/dan/payment/create | 创建支付订单 | 家长 |
+| POST | /api/dan/payment/callback | 支付回调 | 外部系统 |
+
+---
+
+## 六、前端页面
+
+| 页面 | 路径 | 功能 |
+|------|------|------|
+| 测评包选择 | `/pages/dan/packages` | 选择测评包 |
+| 预约页面 | `/pages/dan/appointment` | 预约创建与管理 |
+| 测评列表 | `/pages/dan/list` | 测评历史记录 |
+| 测评详情 | `/pages/dan/detail` | 测评结果详情 |
+| 指标雷达图 | `/pages/dan/radar` | 能力维度雷达图 |
+| 趋势对比 | `/pages/dan/trend` | 历史趋势图表 |
+| 任务推荐 | `/pages/dan/recommend` | 任务推荐确认 |
+| 统计报表 | `/pages/dan/statistics` | 测评统计 |
+| 管理后台 | `/pages/admin/dan` | 测评包/指标/映射管理 |
+
+---
+
+## 七、数据库设计
+
+### 7.1 测评包表(dan_package)
+
+```sql
+CREATE TABLE dan_package (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    package_code VARCHAR(10) NOT NULL UNIQUE,
+    package_name VARCHAR(50) NOT NULL,
+    age_range_min INT NOT NULL,
+    age_range_max INT NOT NULL,
+    category VARCHAR(20) NOT NULL,
+    indicators JSON NOT NULL,
+    description TEXT,
+    price DECIMAL(10,2) DEFAULT 0,
+    is_active TINYINT DEFAULT 1,
+    created_at DATETIME,
+    updated_at DATETIME,
+    INDEX idx_code (package_code),
+    INDEX idx_category (category)
+);
+```
+
+### 7.2 指标表(dan_indicator)
+
+```sql
+CREATE TABLE dan_indicator (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    indicator_code VARCHAR(20) NOT NULL UNIQUE,
+    indicator_name VARCHAR(50) NOT NULL,
+    dimension VARCHAR(20) NOT NULL,
+    description TEXT,
+    level_thresholds JSON NOT NULL,
+    sort_order INT DEFAULT 0,
+    is_active TINYINT DEFAULT 1,
+    created_at DATETIME,
+    updated_at DATETIME,
+    INDEX idx_code (indicator_code),
+    INDEX idx_dimension (dimension)
+);
+```
+
+### 7.3 指标-任务模板映射表(dan_indicator_template)
+
+```sql
+CREATE TABLE dan_indicator_template (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    indicator_code VARCHAR(20) NOT NULL,
+    template_id BIGINT NOT NULL,
+    weight INT DEFAULT 5,
+    is_active TINYINT DEFAULT 1,
+    created_at DATETIME,
+    updated_at DATETIME,
+    INDEX idx_indicator (indicator_code),
+    INDEX idx_template (template_id)
+);
+```
+
+### 7.4 测评预约表(dan_appointment)
+
+```sql
+CREATE TABLE dan_appointment (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    child_id BIGINT NOT NULL,
+    teacher_id BIGINT,
+    package_code VARCHAR(10) NOT NULL,
+    appointment_date DATE NOT NULL,
+    appointment_time VARCHAR(10) NOT NULL,
+    notes TEXT,
+    payment_status VARCHAR(20) DEFAULT 'unpaid',
+    status VARCHAR(20) DEFAULT 'pending',
+    created_at DATETIME,
+    updated_at DATETIME,
+    INDEX idx_child (child_id),
+    INDEX idx_teacher (teacher_id),
+    INDEX idx_date (appointment_date)
+);
+```
+
+### 7.5 测评结果表(dan_assessment_result)
+
+```sql
+CREATE TABLE dan_assessment_result (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    child_id BIGINT NOT NULL,
+    teacher_id BIGINT NOT NULL,
+    appointment_id BIGINT,
+    package_code VARCHAR(10) NOT NULL,
+    indicator_scores JSON NOT NULL,
+    assessment_date DATE NOT NULL,
+    duration_minutes INT,
+    game_records JSON,
+    analysis_report TEXT,
+    growth_suggestions TEXT,
+    next_review_date DATE,
+    status VARCHAR(20) DEFAULT 'draft',
+    created_at DATETIME,
+    updated_at DATETIME,
+    INDEX idx_child (child_id),
+    INDEX idx_teacher (teacher_id),
+    INDEX idx_date (assessment_date),
+    INDEX idx_package (package_code)
+);
+```
+
+---
+
+## 八、开发优先级
+
+### P0(紧急)
+
+1. **DAN-012 测评包管理**
+   - 后端 CRUD API
+   - 管理后台页面
+
+2. **DAN-013 指标库管理**
+   - 后端 CRUD API
+   - 管理后台页面
+
+3. **DAN-014 指标-模板映射**
+   - 后端 CRUD API
+   - 管理后台页面
+
+4. **DAN-001 预约管理**
+   - 后端 CRUD API
+   - 前端预约页面
+
+5. **DAN-002 测评结果录入**
+   - 后端结果录入 API
+   - 指标等级自动计算
+
+6. **DAN-003 测评列表查询**
+   - 后端列表 API
+   - 前端列表页面
+
+7. **DAN-004 测评详情**
+   - 后端详情 API
+   - 前端详情页面(按指标展示)
+
+### P1(重要)
+
+8. **DAN-006 指标等级计算**
+   - 自动计算逻辑
+   - 等级展示
+
+9. **DAN-007 历史趋势**
+   - 趋势 API
+   - 趋势图表前端
+
+10. **DAN-008 成长建议**
+    - 建议生成规则引擎
+    - 建议展示
+
+11. **DAN-015 任务自动推荐**
+    - 推荐算法实现
+    - 家长确认流程
+
+12. **DAN-009 复测提醒**
+    - 定时任务
+
+### P2(扩展)
+
+13. **DAN-010 报告导出**
+14. **DAN-011 统计报表**
+15. **DAN-016 收费集成**
+16. **DAN-019 数据脱敏**
+
+---
+
+## 九、现有代码参考
+
+### 9.1 实体类(需更新)
+- `cfc-backend/src/main/java/com/etotem/cfc/entity/DanAssessmentResult.java` - 需增加 packageCode 和 indicatorScores
+- `cfc-backend/src/main/java/com/etotem/cfc/entity/AssessmentAppointment.java` - 需增加 packageCode
+
+### 9.2 需创建
+- `cfc-backend/src/main/java/com/etotem/cfc/entity/DanPackage.java`
+- `cfc-backend/src/main/java/com/etotem/cfc/entity/DanIndicator.java`
+- `cfc-backend/src/main/java/com/etotem/cfc/entity/DanIndicatorTemplate.java`
+- `cfc-backend/src/main/java/com/etotem/cfc/controller/dan/DanPackageController.java`
+- `cfc-backend/src/main/java/com/etotem/cfc/controller/dan/DanIndicatorController.java`
+- `cfc-backend/src/main/java/com/etotem/cfc/controller/dan/DanAssessmentController.java`
+- `cfc-backend/src/main/java/com/etotem/cfc/controller/dan/DanRecommendController.java`
+- `cfc-frontend/pages/dan/` 目录及页面
+
+---
+
+## 十、待完善事项
+
+| 功能 | 优先级 | 说明 |
+|------|--------|------|
+| 测评包CRUD | P0 | 后端API + 管理后台 |
+| 指标库CRUD | P0 | 后端API + 管理后台 |
+| 映射管理 | P0 | 后端API + 管理后台 |
+| 预约CRUD | P0 | 后端API |
+| 结果录入 | P0 | 后端API + 指标等级计算 |
+| 列表查询 | P0 | 后端API + 前端 |
+| 详情展示 | P0 | 前端页面(按指标) |
+| 等级计算 | P1 | 自动计算逻辑 |
+| 趋势分析 | P1 | 后端API + 前端图表 |
+| 成长建议 | P1 | 规则引擎 |
+| 任务推荐 | P1 | 推荐算法 + 家长确认 |
+| 复测提醒 | P1 | 定时任务 |
+| 报告导出 | P2 | PDF生成 |
+| 统计报表 | P2 | 统计API |
+| 收费集成 | P2 | P2阶段讨论 |

+ 327 - 0
docs/backup/root/focus-requirements.md

@@ -0,0 +1,327 @@
+# 专注训练模块需求分析
+
+**版本**: V1.2
+**更新时间**: 2026-04-15
+
+---
+
+## 一、需求清单概览
+
+| 需求ID | 描述 | 优先级 | 状态 |
+|--------|------|--------|------|
+| FOCUS-001 | 舒尔特方格游戏 | P1 | ✅ 已实现 |
+| FOCUS-002 | 1a2b猜数字游戏 | P1 | ✅ 已实现 |
+| FOCUS-003 | 数独游戏 | P1 | ✅ 已实现 |
+| FOCUS-004 | 专注力训练记录 | P1 | ⚠️ 部分实现 |
+| FOCUS-005 | 训练数据分析 | P1 | ❌ 未实现 |
+| FOCUS-006 | 训练成果展示 | P1 | ❌ 未实现 |
+| FOCUS-007 | 训练提醒与激励 | P1 | ❌ 未实现 |
+| FOCUS-008 | 训练积分奖励 | P1 | ⚠️ 部分实现 |
+
+---
+
+## 二、需求详细描述
+
+### 2.1 舒尔特方格游戏(FOCUS-001)
+
+#### FOCUS-001: 舒尔特方格游戏
+- **描述**:经典的专注力训练游戏,玩家按顺序点击1-25的数字正方形
+- **游戏规则**:
+  - 5x5 网格,随机分布 1-25 数字
+  - 按顺序点击,速度越快分数越高
+  - 可选难度:简单(3x3)/中等(4x4)/困难(5x5)
+- **现有字段**(基于 `MiniGame` 实体):
+  - `gameCode`:schulte
+  - `gameName`:舒尔特方格
+  - `defaultDuration`:默认时长
+  - `defaultPoints`:默认积分
+- **状态**:✅ 已实现
+
+---
+
+### 2.2 1a2b猜数字游戏(FOCUS-002)
+
+#### FOCUS-002: 1a2b猜数字游戏
+- **描述**:猜测指定位数的数字,A表示位置和数字都正确,B表示数字正确但位置错误
+- **游戏规则**:
+  - 4位不重复数字
+  - 输入猜测后返回 "xAyB" 格式结果
+  - 可选难度:3位数/4位数/5位数
+- **现有字段**:
+  - `gameCode`:1a2b
+  - `gameName`:猜数字
+  - `defaultDuration`:默认时长
+  - `defaultPoints`:默认积分
+- **状态**:✅ 已实现
+
+---
+
+### 2.3 数独游戏(FOCUS-003)
+
+#### FOCUS-003: 数独游戏
+- **描述**:经典数独填充游戏,每行每列每个3x3宫格填入1-9不重复数字
+- **游戏规则**:
+  - 9x9 宫格,部分数字预先填充
+  - 玩家填充剩余空格
+  - 可选难度:简单/中等/困难
+- **现有字段**:
+  - `gameCode`:sudoku
+  - `gameName`:数独
+  - `defaultDuration`:默认时长
+  - `defaultPoints`:默认积分
+- **状态**:✅ 已实现
+
+---
+
+### 2.4 专注力训练记录(FOCUS-004)
+
+#### FOCUS-004: 专注力训练记录
+- **描述**:记录每次训练的详细数据,包括时长、得分、排名等
+- **记录字段**:
+  - `childId`:训练的孩子
+  - `gameCode`:游戏类型
+  - `score`:得分
+  - `duration`:用时(秒)
+  - `level`:难度等级
+  - `rank`:本次排名
+  - `completedAt`:完成时间
+- **存储方式**:可复用 `MediaRecord` 或新建 `GameRecord` 表
+- **状态**:⚠️ 部分实现(现有后端记录得分和用时)
+
+---
+
+### 2.5 训练数据分析(FOCUS-005)
+
+#### FOCUS-005: 训练数据分析
+- **描述**:对训练记录进行数据分析,生成专注力报告
+- **分析维度**:
+  - 各游戏平均得分
+  - 各游戏最佳成绩
+  - 训练频率统计
+  - 能力趋势分析
+- **展示形式**:数据卡片 + 趋势图表
+
+---
+
+### 2.6 训练成果展示(FOCUS-006)
+
+#### FOCUS-006: 训练成果展示
+- **描述**:在个人主页或专门页面展示训练成果
+- **展示内容**:
+  - 累计训练次数
+  - 获得积分总数
+  - 最佳成绩榜单
+  - 连续训练天数
+- **展示位置**:
+  - 个人主页训练入口
+  - 专门的训练成果页面
+  - 勋章墙(可关联)
+
+---
+
+### 2.7 训练提醒与激励(FOCUS-007)
+
+#### FOCUS-007: 训练提醒与激励
+- **描述**:通过系统消息或激励机制鼓励孩子坚持训练
+- **提醒功能**:
+  - 每日训练提醒
+  - 连续训练激励
+  - 里程碑达成庆祝
+- **激励机制**:
+  - 连续训练徽章
+  - 积分加成
+  - 排行榜激励
+
+---
+
+### 2.8 训练积分奖励(FOCUS-008)
+
+#### FOCUS-008: 训练积分奖励
+- **描述**:完成游戏后获得积分奖励,积分可累积使用
+- **奖励规则**:
+  - 基础积分:游戏默认积分
+  - 表现加成:根据用时/正确率增加积分
+  -连胜加成:连续完成游戏获得额外积分
+- **积分用途**:
+  - 可用于心愿兑换
+  - 可与任务积分合并统计
+- **状态**:⚠️ 部分实现(现有小游戏积分已接入)
+
+---
+
+## 三、现有小游戏数据模型
+
+### 3.1 MiniGame 小游戏定义实体
+
+```java
+// 现有字段
+private Long id;
+private String gameCode;          // 游戏代码: schulte, 1a2b, sudoku
+private String gameName;          // 游戏名称
+private String description;       // 游戏描述
+private String icon;              // 图标emoji
+private Integer defaultDuration; // 默认时长(分钟)
+private Integer defaultPoints;   // 默认奖励积分
+private String gameUrl;           // 游戏H5页面URL
+private Integer sortOrder;       // 排序
+private Integer status;          // 状态: 0禁用 1启用
+private Date createdAt;
+private Date updatedAt;
+```
+
+### 3.2 游戏记录实体(建议新增)
+
+```java
+private Long id;
+private Long childId;           // 孩子ID
+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 String deviceInfo;       // 设备信息
+private Date createdAt;
+```
+
+---
+
+## 四、API接口设计
+
+### 4.1 游戏管理
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/games | 获取游戏列表 | 公开 |
+| GET | /api/games/{code} | 获取游戏详情 | 公开 |
+| POST | /api/games | 创建游戏定义 | 管理员 |
+| PUT | /api/games/{code} | 更新游戏配置 | 管理员 |
+
+### 4.2 游戏记录
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| POST | /api/games/record | 记录游戏成绩 | 孩子 |
+| GET | /api/games/records/{childId} | 游戏记录列表 | 孩子/家长 |
+| GET | /api/games/best/{childId}/{gameCode} | 最佳成绩 | 孩子/家长 |
+| GET | /api/games/statistics/{childId} | 训练统计 | 孩子/家长 |
+
+### 4.3 排行榜
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/games/ranking/{gameCode} | 全服排行榜 | 公开 |
+| GET | /api/games/ranking/family/{familyId} | 家庭排行榜 | 家长 |
+
+---
+
+## 五、前端页面设计
+
+| 页面 | 路径 | 功能 |
+|------|------|------|
+| 游戏列表 | `/pages/games/index` | 展示可玩游戏 |
+| 舒尔特方格 | `/pages/games/schulte` | 舒尔特方格游戏 |
+| 猜数字 | `/pages/games/1a2b` | 1a2b猜数字游戏 |
+| 数独 | `/pages/games/sudoku` | 数独游戏 |
+| 训练记录 | `/pages/games/records` | 历史训练记录 |
+| 训练统计 | `/pages/games/statistics` | 训练数据分析 |
+| 排行榜 | `/pages/games/ranking` | 排行榜展示 |
+
+---
+
+## 六、待完善事项
+
+| 功能 | 优先级 | 说明 |
+|------|--------|------|
+| 游戏记录存储 | P1 | 新增 game_record 表 |
+| 训练数据分析 | P1 | 统计 API |
+| 训练成果展示 | P1 | 前端页面 |
+| 训练提醒 | P2 | 定时任务 |
+| 激励机制 | P2 | 徽章/积分加成 |
+| 排行榜功能 | P1 | 排行榜 API |
+| 数据导出 | P2 | 训练报告导出 |
+
+---
+
+## 七、数据库设计建议
+
+### 7.1 游戏记录表
+
+```sql
+CREATE TABLE game_record (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    child_id BIGINT NOT NULL,
+    game_code VARCHAR(20) NOT NULL,
+    score INT NOT NULL,
+    duration INT NOT NULL COMMENT '用时(秒)',
+    level VARCHAR(10) DEFAULT 'medium',
+    rank INT DEFAULT 0,
+    points_earned INT DEFAULT 0,
+    completed_at DATETIME,
+    device_info VARCHAR(255),
+    created_at DATETIME,
+    INDEX idx_child (child_id),
+    INDEX idx_game (game_code),
+    INDEX idx_completed (completed_at)
+);
+```
+
+### 7.2 排行榜缓存表(可选)
+
+```sql
+CREATE TABLE game_ranking (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
+    game_code VARCHAR(20) NOT NULL,
+    child_id BIGINT NOT NULL,
+    best_score INT DEFAULT 0,
+    best_duration INT DEFAULT 0,
+    total_games INT DEFAULT 0,
+    total_points INT DEFAULT 0,
+    ranking INT DEFAULT 0,
+    updated_at DATETIME,
+    UNIQUE KEY uk_game_child (game_code, child_id)
+);
+```
+
+---
+
+## 八、现有代码参考
+
+### 8.1 实体类位置
+`cfc-backend/src/main/java/com/etotem/cfc/entity/MiniGame.java`
+
+### 8.2 现有三款游戏
+| 游戏 | gameCode | 状态 |
+|------|----------|------|
+| 舒尔特方格 | schulte | ✅ 已实现 |
+| 猜数字 | 1a2b | ✅ 已实现 |
+| 数独 | sudoku | ✅ 已实现 |
+
+### 8.3 前端页面
+- `cfc-frontend/pages/games/` 目录下已有对应页面
+
+### 8.4 待补充
+- 游戏记录存储(需新增表)
+- 排行榜逻辑(需完善)
+- 训练数据分析(需开发)
+
+---
+
+## 九、后续开发建议
+
+### 9.1 第一阶段:完善记录
+1. 新增 game_record 表
+2. 完善游戏记录 API
+3. 训练记录页面
+
+### 9.2 第二阶段:数据分析
+1. 训练统计 API
+2. 最佳成绩展示
+3. 训练趋势图表
+
+### 9.3 第三阶段:激励与社交
+1. 排行榜功能
+2. 训练提醒定时任务
+3. 连续训练激励机制
+4. 与勋章系统关联

+ 224 - 0
docs/backup/root/guide-requirements.md

@@ -0,0 +1,224 @@
+# 成长规划师模块需求规格文档
+
+## 1. 模块概述
+
+成长规划师模块是知心益家系统的核心组成部分,为成长规划师提供家庭服务管理、套餐销售、团队管理等功能。成长规划师可以基于系统提供的服务内容模板,创建自己的服务套餐并销售给家庭用户。
+
+## 2. 核心功能
+
+### 2.1 服务内容管理(系统级)
+
+#### 2.1.1 服务类型
+- 支持服务分类(DAN测评、专属咨询、成长报告、家庭培训等)
+- 每个类型有对应图标和描述
+- 管理员可启用/停用服务类型
+
+#### 2.1.2 服务内容(富文本)
+- 每个服务有详细的内容说明,支持图文混排
+- 包含:标题、内容(富文本HTML)、建议时长、适用年龄、参考价格
+- 支持图片、视频嵌入
+- 管理员可管理所有服务内容
+
+### 2.2 套餐管理
+
+#### 2.2.1 系统套餐模板(管理员)
+- 系统提供标准套餐模板供成长规划师选择
+- 模板包含:名称、有效期、参考价格、最低售价、包含服务项列表
+- 模板状态:启用/停用
+
+#### 2.2.2 成长规划师套餐
+- 成长规划师基于系统模板创建自己的套餐
+- 可自定义:套餐名称、销售价格
+- 可勾选:包含哪些服务内容
+- 套餐状态:草稿/已发布/已暂停
+
+### 2.3 成长规划师工作台
+
+#### 2.3.1 小程序端
+- 成长规划师中心首页:展示个人信息、快捷入口、今日概览
+- 我的家庭:服务家庭列表,可查看详情、发送消息
+- 我的团队:下级成长规划师列表、团队业绩
+- 消息中心:家长咨询、系统通知
+- 套餐管理:创建/编辑/发布套餐
+- 切换家长端:成长规划师可切换到家长身份
+
+#### 2.3.2 Web管理端
+- 成长规划师工作台:数据统计(服务家庭数、销售额、佣金等)
+- 我的家庭:家庭列表、任务管理
+- 我的团队:团队成员、业绩统计
+- 消息中心:聊天界面
+- 订单与佣金:订单列表、佣金明细
+
+## 3. 数据模型
+
+### 3.1 服务类型 (service_type)
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | Long | 主键 |
+| name | String | 类型名称 |
+| icon | String | 图标 |
+| description | String | 描述 |
+| sort_order | Integer | 排序 |
+| status | String | ACTIVE/DISABLED |
+
+### 3.2 服务内容 (service_content)
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | Long | 主键 |
+| type_id | Long | 关联服务类型 |
+| title | String | 内容标题 |
+| content | String | 富文本内容(HTML) |
+| duration | Integer | 建议时长(分钟) |
+| age_range | String | 适用年龄 |
+| price | Decimal | 参考价格 |
+| status | String | DRAFT/ACTIVE |
+| created_at | DateTime | 创建时间 |
+
+### 3.3 套餐模板 (guide_package_template)
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | Long | 主键 |
+| name | String | 模板名称 |
+| validity_months | Integer | 有效期(月) |
+| reference_price | Decimal | 参考价格 |
+| min_price | Decimal | 最低售价 |
+| description | String | 说明 |
+| status | String | ACTIVE/DISABLED |
+
+### 3.4 套餐模板服务项 (package_template_service)
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | Long | 主键 |
+| template_id | Long | 关联模板 |
+| content_id | Long | 关联服务内容 |
+| quantity | Integer | 数量 |
+| unit | String | 单位 |
+
+### 3.5 成长规划师套餐 (guide_package)
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | Long | 主键 |
+| teacher_id | Long | 成长规划师ID |
+| template_id | Long | 关联模板 |
+| name | String | 套餐名称 |
+| price | Decimal | 销售价格 |
+| validity_months | Integer | 有效期(月) |
+| description | String | 套餐说明 |
+| status | String | DRAFT/PUBLISHED/PAUSED |
+| sales_count | Integer | 销量 |
+| created_at | DateTime | 创建时间 |
+
+### 3.6 成长规划师套餐服务项 (guide_package_service)
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | Long | 主键 |
+| package_id | Long | 关联套餐 |
+| content_id | Long | 关联服务内容 |
+| quantity | Integer | 数量 |
+| unit | String | 单位 |
+
+## 4. 用户交互
+
+### 4.1 小程序端页面
+
+| 页面 | 路由 | 功能 |
+|------|------|------|
+| 成长规划师中心 | /pages/teacher/index | 个人信息、快捷入口、数据概览、切换家长端 |
+| 我的家庭 | /pages/teacher/families | 服务家庭列表 |
+| 我的团队 | /pages/teacher/team | 下级成长规划师、团队业绩 |
+| 消息中心 | /pages/teacher/messages | 消息列表、聊天 |
+| 套餐列表 | /pages/guide/packages/index | 我的套餐 |
+| 创建套餐 | /pages/guide/packages/create | 基于模板创建套餐 |
+| 套餐详情 | /pages/guide/packages/detail | 查看/分享套餐 |
+
+### 4.2 Web端页面
+
+| 页面 | 路由 | 功能 |
+|------|------|------|
+| 成长规划师工作台 | /teacher-dashboard | 数据统计、概览 |
+| 我的家庭 | /teacher-families | 家庭列表、管理 |
+| 我的团队 | /teacher-team | 团队成员、业绩 |
+| 消息中心 | /teacher-messages | 消息、聊天 |
+| 我的套餐 | /teacher-packages | 套餐管理 |
+| 订单与佣金 | /teacher-orders | 订单、佣金 |
+| 服务类型管理 | /admin/service-types | 系统服务类型 |
+| 服务内容管理 | /admin/service-contents | 系统服务内容 |
+| 套餐模板管理 | /admin/package-templates | 系统套餐模板 |
+
+## 5. API接口
+
+### 5.1 服务类型
+- `GET /api/admin/service-types` - 获取服务类型列表
+- `POST /api/admin/service-types` - 创建服务类型
+- `PUT /api/admin/service-types/{id}` - 更新服务类型
+- `DELETE /api/admin/service-types/{id}` - 删除服务类型
+
+### 5.2 服务内容
+- `GET /api/admin/service-contents` - 获取服务内容列表
+- `POST /api/admin/service-contents` - 创建服务内容
+- `PUT /api/admin/service-contents/{id}` - 更新服务内容
+- `DELETE /api/admin/service-contents/{id}` - 删除服务内容
+
+### 5.3 套餐模板
+- `GET /api/guide/package-templates` - 获取套餐模板列表
+- `GET /api/guide/package-templates/{id}` - 获取模板详情(含服务项)
+
+### 5.4 成长规划师套餐
+- `GET /api/guide/packages` - 获取我的套餐列表
+- `POST /api/guide/packages` - 创建套餐
+- `PUT /api/guide/packages/{id}` - 更新套餐
+- `PUT /api/guide/packages/{id}/status` - 更新套餐状态
+- `DELETE /api/guide/packages/{id}` - 删除套餐
+
+### 5.5 成长规划师家庭
+- `GET /api/guide/families` - 获取服务家庭列表
+- `GET /api/guide/families/{id}` - 获取家庭详情
+
+### 5.6 成长规划师团队
+- `GET /api/guide/team` - 获取我的团队
+- `GET /api/guide/team/invite-code` - 获取我的邀请码
+
+### 5.7 消息
+- `GET /api/guide/messages` - 获取消息列表
+- `GET /api/guide/messages/{conversationId}` - 获取会话消息
+- `POST /api/guide/messages` - 发送消息
+
+### 5.8 订单
+- `GET /api/guide/orders` - 获取订单列表
+- `GET /api/guide/orders/stats` - 获取订单统计
+
+## 6. 角色权限
+
+| 角色 | 权限 |
+|------|------|
+| 管理员 | 服务类型/内容管理、套餐模板管理、成长规划师审核 |
+| 成长规划师 | 创建套餐、管理家庭、团队管理、消息、查看订单佣金 |
+| 家长 | 购买套餐、咨询成长规划师、查看服务内容 |
+
+## 7. 业务流程
+
+```
+1. 管理员配置系统资源
+   - 创建服务类型
+   - 创建服务内容(富文本)
+   - 创建套餐模板
+
+2. 成长规划师创建套餐
+   - 选择模板
+   - 勾选服务内容
+   - 设置价格(≥最低价)
+   - 发布
+
+3. 家长购买
+   - 查看成长规划师套餐
+   - 购买并支付
+   - 获得服务
+
+4. 成长规划师服务
+   - 核销服务
+   - 记录服务日志
+
+5. 结算佣金
+   - 按订单计算佣金
+   - 团队业绩汇总
+```

+ 188 - 0
docs/backup/root/plans/2026-04-17-minigame-as-task-type-design.md

@@ -0,0 +1,188 @@
+# 在线小游戏作为任务类型的设计方案
+
+## 1. 需求背景
+
+当前项目中:
+- **MiniGame系统**:独立的小游戏模块(舒尔特方格、猜数字1a2b、数独),通过MiniGameController/MiniGameService管理,完成时调用积分计算
+- **Task系统**:独立的任务模块,通过TaskController/TaskService管理,任务完成时计算积分
+- **共同点**:都使用PointsLog记录积分变动,更新孩子的totalPoints
+
+**需求**:将在线小游戏作为任务分类的一种形式("小游戏类"),统一到任务系统中管理
+
+## 2. 选定方案
+
+### 方案B-2:task_type类型区分
+
+| 设计点 | 选择 |
+|--------|------|
+| 字段添加 | 新增minigameCode字段 |
+| category值 | 小游戏类 |
+| 积分计算 | 使用MiniGame规则(现有MiniGameService逻辑)|
+
+## 3. 数据库设计
+
+### 3.1 Tasks表变更
+
+```sql
+-- 添加minigameCode字段
+ALTER TABLE tasks ADD COLUMN minigame_code VARCHAR(50) DEFAULT NULL COMMENT '小游戏代码: schulte/1a2b/sudoku';
+
+-- 添加索引
+CREATE INDEX idx_tasks_minigame ON tasks(minigame_code) WHERE minigame_code IS NOT NULL;
+```
+
+### 3.2 字段说明
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| category | String | '小游戏类' |
+| minigameCode | String | 小游戏代码,category='小游戏类'时必填 |
+| points | Integer | 基准积分,为空时使用MiniGame.defaultPoints |
+| status | String | pending/completed/canceled |
+| completedAt | Date | 完成时间 |
+
+## 4. API设计
+
+### 4.1 创建小游戏任务
+
+```
+POST /api/tasks
+{
+  "title": "完成舒尔特方格",
+  "category": "小游戏类",
+  "minigameCode": "schulte",
+  "childId": 2,
+  "deadline": "2026-04-20T18:00:00",
+  "points": 5,  // 可选,为空时使用MiniGame.defaultPoints
+  "needReview": 0
+}
+```
+
+### 4.2 获取小游戏列表(创建任务时选择)
+
+```
+POST /api/mini-game/list
+```
+
+### 4.3 完成小游戏任务
+
+```
+POST /api/tasks/{id}/complete
+{
+  "childId": 2,
+  "completionTime": 45,  // 完成时间(秒)
+  "score": 80  // 得分,可选
+}
+```
+
+## 5. 业务流程
+
+### 5.1 创建流程
+
+```
+家长选择"小游戏类" ↓
+可选小游戏列表(舒尔特方格/猜数字/数独) ↓
+选择具体小游戏 ↓
+设置任务名称、截止时间 ↓
+保存任务(category='小游戏类',minigameCode='schulte')
+```
+
+### 5.2 完成流程
+
+```
+孩子完成任务 ↓
+校验任务存在且属于该孩子 ↓
+判断category='小游戏类' ↓
+调用MiniGameService.completeGame()计算积分 ↓
+更新任务状态为completed ↓
+记录PointsLog(类型: earn) ↓
+更新孩子总积分
+```
+
+## 6. 核心代码变更
+
+### 6.1 Task实体(Task.java)
+
+```java
+// 新增字段
+private String minigameCode;  // 小游戏代码: schulte/1a2b/sudoku
+```
+
+### 6.2 TaskService变更
+
+```java
+// createTask方法中增加校验
+if ("小游戏类".equals(category) && minigameCode == null) {
+    throw new BusinessException("小游戏类任务必须选择具体游戏");
+}
+
+// completeTask方法中小游戏任务处理
+if ("小游戏类".equals(task.getCategory())) {
+    // 调用MiniGameService计算积分
+    Map<String, Object> result = miniGameService.completeGame(
+        childId, 
+        task.getMinigameCode(), 
+        completionTime, 
+        score
+    );
+    pointsEarned = (Integer) result.get("pointsEarned");
+}
+```
+
+### 6.3 TaskController增加小游戏任务相关接口
+
+```java
+// 获取可选择的小游戏列表(创建任务时使用)
+@PostMapping("/minigame-options")
+public Result<List<MiniGame>> getMinigameOptions()
+```
+
+## 7. 前端变更
+
+### 7.1 创建任务页面
+
+- category选择器增加"小游戏类"选项
+- 选择"小游戏类"后,弹出小游戏选择列表
+- 选择具体游戏后自动填充任务名称
+
+### 7.2 小游戏页面
+
+- 任务列表中的小游戏任务,点击进入小游戏页面
+- 完成小游戏后自动调用任务完成接口
+
+## 8. 测试用例
+
+| 用例ID | 描述 | 预期结果 |
+|--------|------|----------|
+| MINITASK-001 | 家长创建小游戏任务 | 任务创建成功,category='小游戏类' |
+| MINITASK-002 | 孩子完成小游戏任务 | 积分按MiniGame规则计算 |
+| MINITASK-003 | 小游戏任务记录到任务历史 | 历史中可查询 |
+| MINITASK-004 | 积分记录到PointsLog | 积分流水正确 |
+
+## 9. 实施计划
+
+| 序号 | 任务 | 预估工作量 |
+|------|------|----------|
+| 1 | 数据库迁移脚本 | 0.5h |
+| 2 | Task实体添加字段 | 0.5h |
+| 3 | TaskService逻辑变更 | 2h |
+| 4 | TaskController API变更 | 1h |
+| 5 | 前端创建任务页面 | 2h |
+| 6 | 前端任务列表/详情页 | 1h |
+| 7 | 测试验证 | 1h |
+
+**总计**: 约8小时
+
+## 10. 待确认事项
+
+- [x] 方案选择
+- [x] 字段添加方式
+- [x] category值确定
+- [x] 积分计算方式
+- [ ] 启动实施?
+
+---
+
+**设计日期**: 2026-04-17
+**设计人**: Sisyphus
+**状态**: 待用户确认后启动实施

+ 209 - 0
docs/backup/root/report-requirements.md

@@ -0,0 +1,209 @@
+# 报表统计模块需求分析
+
+**版本**: V1.2
+**更新时间**: 2026-04-15
+
+---
+
+## 一、需求清单概览
+
+| 需求ID | 描述 | 优先级 | 状态 |
+|--------|------|--------|------|
+| REPORT-001 | 个人任务完成统计 | P1 | ❌ 未实现 |
+| REPORT-002 | 家庭任务完成统计 | P1 | ❌ 未实现 |
+| REPORT-003 | 积分收支明细 | P1 | ❌ 未实现 |
+| REPORT-004 | 成长趋势图表 | P1 | ❌ 未实现 |
+
+---
+
+## 二、需求详细描述
+
+### 2.1 个人任务完成统计(REPORT-001)
+
+#### REPORT-001: 个人任务完成统计
+- **描述**:统计指定孩子在指定时间范围内的任务完成情况,包括完成任务数、超时数、驳回数、完成率等
+- **筛选条件**:
+  - 时间范围:今日/本周/本月/自定义
+  - 任务分类:学习类/生活类/运动类/其他
+  - 任务状态:已完成/已超时/已驳回
+- **统计维度**:
+  - 任务总数
+  - 完成任务数
+  - 超时任务数
+  - 驳回任务数
+  - 完成率
+  - 平均完成耗时
+- **展示形式**:数字卡片 + 列表 + 筛选条件
+
+---
+
+### 2.2 家庭任务完成统计(REPORT-002)
+
+#### REPORT-002: 家庭任务完成统计
+- **描述**:统计整个家庭在指定时间范围内的任务完成情况,支持按孩子分组
+- **筛选条件**:
+  - 时间范围:今日/本周/本月/自定义
+  - 家庭成员:全部/指定孩子
+  - 任务分类:学习类/生活类/运动类/其他
+- **统计维度**:
+  - 家庭任务总数
+  - 各孩子完成任务数
+  - 各孩子完成率对比
+  - 任务完成趋势
+  - 分类分布
+- **展示形式**:家庭概览卡片 + 孩子对比表格 + 趋势图表
+
+---
+
+### 2.3 积分收支明细(REPORT-003)
+
+#### REPORT-003: 积分收支明细
+- **描述**:记录并展示指定孩子或家庭成员的积分变动明细,包括获得积分和扣除积分
+- **筛选条件**:
+  - 时间范围:今日/本周/本月/自定义
+  - 积分类型:获得/扣除/全部
+  - 来源类型:任务奖励/打卡奖励/兑换扣除/超时扣分/系统赠送
+- **统计维度**:
+  - 当前积分余额
+  - 积分获得总数
+  - 积分扣除总数
+  - 积分净变化
+  - 各来源占比
+- **展示形式**:余额卡片 + 收支明细列表 + 饼图/趋势图
+
+---
+
+### 2.4 成长趋势图表(REPORT-004)
+
+#### REPORT-004: 成长趋势图表
+- **描述**:以图表形式展示孩子在一段时间内的成长趋势,包括任务完成、积分变化、打卡连续性等
+- **图表类型**:
+  - 折线图:任务完成趋势
+  - 柱状图:积分变化
+  - 热力图:打卡连续性
+  - 雷达图:能力维度分布
+- **时间粒度**:日/周/月
+- **对比功能**:
+  - 与自身历史对比
+  - 与家庭成员对比
+  - 与同龄孩子对比(可选)
+- **展示形式**:图表Dashboard + 数据导出
+
+---
+
+## 三、统计维度汇总
+
+### 3.1 任务统计维度
+
+| 维度 | 说明 | 计算方式 |
+|------|------|----------|
+| 任务总数 | 统计周期内创建的任务数 | COUNT(task_id) |
+| 完成任务数 | 状态为已完成的任务数 | COUNT WHERE status='completed' |
+| 超时任务数 | 超过截止时间的任務数 | COUNT WHERE status='overdue' |
+| 驳回任务数 | 审核被驳回的任务数 | COUNT WHERE reviewResult='rejected' |
+| 完成率 | 完成任务数/任务总数 | 完成任务数/任务总数 |
+| 平均完成耗时 | 从创建到完成平均耗时 | AVG(completedAt - createdAt) |
+
+### 3.2 积分统计维度
+
+| 维度 | 说明 | 计算方式 |
+|------|------|----------|
+| 当前积分 | 孩子当前持有的积分余额 | SUM(获得) - SUM(扣除) |
+| 获得积分 | 通过任务/打卡获得的积分 | SUM WHERE type='earned' |
+| 扣除积分 | 通过兑换/超时扣除的积分 | SUM WHERE type='deducted' |
+| 净变化 | 获得积分 - 扣除积分 | 获得积分 - 扣除积分 |
+
+### 3.3 时间粒度说明
+
+| 粒度 | 说明 | 适用场景 |
+|------|------|----------|
+| 今日 | 当天 00:00 ~ 23:59:59 | 实时查看 |
+| 本周 | 周一 ~ 周日 | 周报 |
+| 本月 | 1日 ~ 月末 | 月报 |
+| 自定义 | 用户选择起止日期 | 专题分析 |
+
+---
+
+## 四、API接口设计
+
+### 4.1 个人统计
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/reports/child/{childId}/tasks | 个人任务统计 | 孩子/家长 |
+| GET | /api/reports/child/{childId}/points | 个人积分统计 | 孩子/家长 |
+| GET | /api/reports/child/{childId}/trend | 个人成长趋势 | 孩子/家长 |
+
+### 4.2 家庭统计
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/reports/family/{familyId}/tasks | 家庭任务统计 | 家长 |
+| GET | /api/reports/family/{childId}/points | 家庭积分统计 | 家长 |
+| GET | /api/reports/family/{familyId}/ranking | 家庭排行 | 家长 |
+
+### 4.3 导出功能
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| GET | /api/reports/export/child/{childId} | 导出个人报表 | 孩子/家长 |
+| GET | /api/reports/export/family/{familyId} | 导出家庭报表 | 家长 |
+
+---
+
+## 五、前端页面设计
+
+| 页面 | 路径 | 功能 |
+|------|------|------|
+| 个人统计 | `/pages/report/child` | 个人任务与积分统计 |
+| 家庭统计 | `/pages/report/family` | 家庭整体统计与对比 |
+| 成长趋势 | `/pages/report/trend` | 图表化成长趋势 |
+| 数据导出 | `/pages/report/export` | 报表导出 |
+
+---
+
+## 六、待完善事项
+
+| 功能 | 优先级 | 说明 |
+|------|--------|------|
+| 个人任务统计API | P1 | 后端统计接口 |
+| 家庭任务统计API | P1 | 后端统计接口 |
+| 积分明细API | P1 | 后端明细接口 |
+| 趋势图表前端 | P1 | 图表组件集成 |
+| 数据导出功能 | P2 | PDF/Excel导出 |
+| 同龄对比 | P2 | 需要匿名汇总数据 |
+
+---
+
+## 七、后续开发建议
+
+### 7.1 第一阶段:基础统计
+1. 个人任务统计 API
+2. 个人积分统计 API
+3. 基础统计页面
+
+### 7.2 第二阶段:家庭统计
+1. 家庭任务统计 API
+2. 家庭排行 API
+3. 家庭统计页面
+
+### 7.3 第三阶段:可视化
+1. 成长趋势图表
+2. 打卡热力图
+3. 数据导出功能
+
+---
+
+## 八、技术实现建议
+
+### 8.1 统计缓存
+- 每日凌晨生成前一日统计快照
+- 使用缓存提高查询性能
+
+### 8.2 数据聚合
+- MySQL GROUP BY 实现基础统计
+- 复杂趋势计算可考虑预计算或定时任务
+
+### 8.3 图表方案
+- Web端:ECharts / AntV
+- 小程序端:uni-app 图表组件 / uCharts

+ 366 - 0
docs/backup/root/requirements-analysis.md

@@ -0,0 +1,366 @@
+# 需求分析报告:成长规划师功能
+
+## 一、原始需求(从对话中提取)
+
+### 需求1:首次登录角色选择
+**描述**:用户第一次登录时,要显示一个页面让用户先选择是成长规划师、家长还是孩子,再进入详情页更新信息。
+
+**关键要素**:
+- 首次登录时显示角色选择页面
+- 可选角色:成长规划师、家长、孩子
+- 选择角色后进入信息完善页面
+
+### 需求2:成长规划师信息录入
+**描述**:成长规划师录入身份证、性别、照片和成长规划师证书号。
+
+**关键要素**:
+- 必填字段:身份证号、性别、照片、证书号
+- 这些字段仅成长规划师需要填写
+
+### 需求3:成长规划师查看家庭任务
+**描述**:成长规划师可查看关联家庭的任务执行情况。
+
+**关键要素**:
+- 成长规划师可以查看所关联家庭的任务
+- 需要有"关联家庭"的绑定机制
+
+### 需求4:成长规划师审核任务
+**描述**:成长规划师可审核家长及孩子的任务完成。
+
+**关键要素**:
+- 成长规划师可以审核任务(通过/拒绝)
+- 支持单个任务审核和批量审核
+
+### 需求5:分享码绑定家庭
+**描述**:通过分享码给家长,家长注册或登录确认绑定。
+
+**关键要素**:
+- 成长规划师有分享码(邀请码)
+- 家长使用分享码绑定成长规划师
+- 家长注册或登录时可以使用邀请码
+
+### 需求6:接受家长咨询
+**描述**:接受家长咨询。
+
+**关键要素**:
+- 家长可以联系成长规划师
+- 需要有沟通渠道
+
+### 需求7:调整任务
+**描述**:调整任务(成长规划师可以修改家庭成员的任务)。
+
+**关键要素**:
+- 成长规划师可以修改/删除家长或孩子创建的任务
+- 需要有任务调整的权限
+
+---
+
+## 二、需求与实现对照
+
+### ✅ 需求1:首次登录角色选择
+
+| 需求点 | 实现情况 | 状态 |
+|--------|----------|------|
+| 首次登录显示角色选择 | ✅ 已实现 - `user-edit.vue` 中通过 `needsRoleSelect` 参数控制 | ✅ |
+| 可选角色:成长规划师、家长、孩子 | ✅ 已实现 - 三种角色卡片 | ✅ |
+| 选择后进入详情页 | ✅ 已实现 - `confirmRole()` 方法切换到详情表单 | ✅ |
+
+**实现位置**:
+- `cfc-frontend/pages/user-edit/user-edit.vue`
+- 首次登录判断:`options.needsRoleSelect === 'true'`
+
+---
+
+### ✅ 需求2:成长规划师信息录入
+
+| 需求点 | 实现情况 | 状态 |
+|--------|----------|------|
+| 身份证号(成长规划师必填) | ✅ 已实现 | ✅ |
+| 性别(成长规划师必填) | ✅ 已实现 | ✅ |
+| 成长规划师照片(成长规划师必填) | ✅ 已实现 - `teacherPhoto` | ✅ |
+| 成长规划师证书号(成长规划师必填) | ✅ 已实现 - `teacherNo` | ✅ |
+| 成长规划师证书照片 | ✅ 已实现 - `certificateImage` | ✅ |
+
+**实现位置**:
+- 前端:`user-edit.vue` 第99-130行(成长规划师额外字段)
+- 后端:`User.java` 实体类包含对应字段
+- DTO:`UpdateUserDTO` 应包含这些字段(需验证)
+
+---
+
+### ⚠️ 需求3:成长规划师查看家庭任务
+
+| 需求点 | 实现情况 | 状态 |
+|--------|----------|------|
+| 查看关联家庭列表 | ✅ 已实现 - `GuideFamilyTaskController.getBoundFamilies()` | ✅ |
+| 获取家庭任务概览 | ✅ 已实现 - `getFamilyTaskOverview()` | ✅ |
+| 获取孩子任务列表 | ✅ 已实现 - `getChildTasks()` | ✅ |
+| **关联家庭的绑定机制** | ⚠️ **存在潜在问题** - 见下文"需求偏差分析" | ⚠️ |
+
+---
+
+### ✅ 需求4:成长规划师审核任务
+
+| 需求点 | 实现情况 | 状态 |
+|--------|----------|------|
+| 单任务审核 | ✅ 已实现 - `GuideFamilyTaskController.reviewTask()` | ✅ |
+| 批量审核 | ✅ 已实现 - `batchReviewTasks()` | ✅ |
+| 审核通过/拒绝 | ✅ 已实现 | ✅ |
+
+---
+
+### ✅ 需求5:分享码绑定家庭
+
+| 需求点 | 实现情况 | 状态 |
+|--------|----------|------|
+| 家庭邀请码机制 | ✅ 已实现 - `Family.inviteCode` | ✅ |
+| 家长使用邀请码绑定 | ✅ 已实现 - `UserController.joinFamily()` | ✅ |
+| 成长规划师分享码给家长 | ✅ 已实现 - `GuideController.getFamilyInviteCode()` | ✅ |
+| 绑定后成长规划师能看到家庭 | ✅ 已实现 - `UserService.joinFamily()` 更新 `teacherFamilyIds` | ✅ |
+
+**实现位置**:
+- `GuideController.getFamilyInviteCode()` - 第148-179行
+- `UserService.joinFamily()` - 第751-764行自动关联成长规划师
+
+---
+
+### ✅ 需求6:接受家长咨询
+
+| 需求点 | 实现情况 | 状态 |
+|--------|----------|------|
+| 家长联系成长规划师 | ✅ 已实现 - `TeacherMessageController.sendMessage()` | ✅ |
+| 成长规划师回复咨询 | ✅ 已实现 - `TeacherMessageController.replyMessage()` | ✅ |
+| 成长规划师查看咨询列表 | ✅ 已实现 - `TeacherMessageController.getMessages()` | ✅ |
+| 家长查看咨询记录 | ✅ 已实现 - `TeacherMessageController.getMyMessages()` | ✅ |
+
+**实现位置**:
+- `TeacherMessage.java` - 实体类
+- `TeacherMessageMapper.java` - Mapper
+- `TeacherMessageService.java` - Service
+- `TeacherMessageController.java` - REST API
+
+---
+
+### ✅ 需求7:调整任务
+
+| 需求点 | 实现情况 | 状态 |
+|--------|----------|------|
+| 成长规划师修改任务 | ✅ 已实现 - `GuideFamilyTaskController.updateTask()` | ✅ |
+| 成长规划师删除任务 | ✅ 已实现 - `GuideFamilyTaskController.deleteTask()`(不限创建者) | ✅ |
+| 调整任务(修改/删除)权限 | ✅ 已实现 - role=teacher 可调整家庭内所有任务 | ✅ |
+
+**实现位置**:
+- `GuideFamilyTaskController.updateTask()` - 第271-317行
+- `GuideFamilyTaskController.deleteTask()` - 第319-349行
+
+---
+
+## 三、需求偏差分析
+
+> **更新说明**:以下偏差已全部修复
+
+### ✅ 偏差1:家庭关联机制不完整 - 已修复
+
+**问题描述**:
+- 家庭邀请码机制已实现(`Family.inviteCode`)
+- 家长可以通过邀请码绑定家庭
+- ~~**但**:家长绑定家庭时,未自动将家庭ID添加到成长规划师的 `teacherFamilyIds` 字段~~ ✅ **已修复**
+
+**解决方案**:
+- 在 `UserService.joinFamily()` 中,检查家庭是否有绑定的成长规划师,如有则更新成长规划师的 `teacherFamilyIds`(第751-764行)
+
+---
+
+### ✅ 偏差2:接受家长咨询功能缺失 - 已修复
+
+**问题描述**:
+- 需求提到"接受家长咨询"
+- ~~但当前没有实现任何家长与成长规划师之间的沟通渠道~~ ✅ **已实现**
+
+**已实现功能**:
+- 家长可以发送咨询消息给成长规划师
+- 成长规划师可以查看和回复咨询
+- 数据库表:`teacher_messages`
+
+---
+
+### ✅ 偏差3:成长规划师调整任务功能缺失 - 已修复
+
+**问题描述**:
+- 需求提到"调整任务"
+- ~~当前只有创建者可以删除任务(`TaskService.deleteTask()`)~~
+- ~~**无任务修改 API**~~ ✅ **已实现**
+
+**已实现功能**:
+- 成长规划师可以修改家庭成员创建的任务 - `GuideFamilyTaskController.updateTask()`
+- 成长规划师可以删除家庭内任何任务(不限于创建者)- `GuideFamilyTaskController.deleteTask()`
+
+---
+
+## 四、待确认问题清单(已全部确认)
+
+### ✅ 问题1:成长规划师家庭绑定流程 - 已确认
+- ✅ 成长规划师通过 `GuideController.getFamilyInviteCode()` 获取邀请码
+- ✅ `teacherFamilyIds` 和家庭表数据通过 `UserService.joinFamily()` 自动同步
+
+### ✅ 问题2:成长规划师审核流程 - 已确认
+- ✅ 成长规划师提交信息后可直接使用(无需审核)
+
+### ✅ 问题3:角色字段统一性 - 已确认
+- ✅ role 是当前角色,roles 是所有角色,格式没问题
+- ✅ 登录返回 role 字段
+
+### ✅ 问题4:小程序成长规划师功能 - 已确认
+- ✅ 成长规划师主要通过 Web 端管理家庭任务
+- ✅ `/pages/teacher/index` 页面存在
+
+### ✅ 问题5:权限控制完整性 - 已确认
+- ✅ Web 端路由守卫正确获取 role
+
+---
+
+## 五、待实现功能清单
+
+> **更新说明**:以下功能已全部实现
+
+### ✅ 1. 家庭绑定时自动关联成长规划师 - 已实现
+- ✅ 家长使用邀请码绑定家庭时
+- ✅ 自动将家庭ID添加到成长规划师的 `teacherFamilyIds`
+- ✅ `UserService.joinFamily()` 第751-764行
+
+### ✅ 2. 接受家长咨询功能 - 已实现
+- ✅ 家长可以联系成长规划师 - `TeacherMessageController`
+- ✅ 成长规划师可以查看和回复咨询 - API 完整
+- ✅ 数据库表:`teacher_messages`
+
+### ✅ 3. 成长规划师调整任务功能 - 已实现
+- ✅ 成长规划师可以修改家庭成员创建的任务 - `GuideFamilyTaskController.updateTask()`
+- ✅ 成长规划师可以删除家庭内任何任务 - `GuideFamilyTaskController.deleteTask()`
+
+---
+
+## 六、测试建议
+
+1. 首次登录 → 角色选择 → 信息完善流程
+2. 成长规划师提交信息后状态检查
+3. 家长使用邀请码绑定家庭 → 验证成长规划师 `teacherFamilyIds` 是否更新
+4. 成长规划师查看关联家庭和任务
+5. 成长规划师审核任务(单个和批量)
+6. 成长规划师调整/修改/删除任务
+7. 家长发送咨询 → 成长规划师回复
+8. 权限控制测试(用非 teacher 角色访问)
+
+---
+
+## 七、个人中心(我的)页面功能
+
+### 7.1 菜单项
+
+| 菜单项 | 可见角色 | 说明 |
+|--------|---------|------|
+| 📝 修改个人资料 | 全部 | 跳转 user-edit 页面 |
+| 👶 我的孩子 | 仅家长 | 跳转孩子管理页面 |
+| 📊 积分记录 | 全部 | 跳转积分明细页面 |
+| 🔐 设置/重置密码 | 仅家长和成长规划师 | 孩子不可见 |
+| 🚪 退出登录 | 全部 | 退出登录 |
+
+### 7.2 密码功能
+
+**设置密码**:
+- 家长和成长规划师可设置6位数字密码
+- 孩子模式不显示此菜单
+
+**重置密码**:
+- 需要先验证旧密码
+- 再设置新密码
+
+**切换模式验证**:
+- 孩子切换回家长模式时需要验证密码
+- 成长规划师切换到家长模式时需要验证密码(通过 Web 端)
+
+### 7.3 修改个人资料
+
+- 跳转到 `/pages/user-edit/user-edit` 页面
+- 用户可修改昵称、头像、性别、生日等信息
+- 成长规划师可修改成长规划师证书号、证书照片等信息
+
+---
+
+## 八、任务创建功能
+
+### 8.1 必填项
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| 标题 | String | 任务名称 |
+| 内容 | String | 任务描述 |
+| 类型 | String | 学习类/生活类/运动类/其他 |
+| 完成方式 | List | 打卡/文本/语音/图片/视频,可多选 |
+| 积分 | Integer | 1-10分 |
+| 时长 | Integer | 分钟 |
+| 完成孩子 | List | 多个孩子可多选 |
+| 频率 | String | daily/weekly/monthly |
+| 周期次数 | Integer | 周期内最多完成次数,超过不计积分 |
+| 任务性质 | String | 一次性onetime/循环recurring |
+| 是否需要审核 | Integer | 0否/1是 |
+| 审核方式 | String | creator/parent/teacher/ai |
+
+### 8.2 非必填项
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| 最早开始时间 | DateTime | 不设置表示不限时 |
+| 最晚结束时间 | DateTime | 不设置表示不限时 |
+
+### 8.3 任务创建入口
+
+**小程序端**:
+- 家长首页 → "+ 添加任务"按钮
+- 任务列表页面 → "+ 添加任务"按钮
+
+**Web端**:
+- 任务管理 → 创建任务
+
+### 8.4 任务模板
+
+**模板来源**:
+1. 历史任务 - 用户曾经创建的任务
+2. 公开模板 - 系统预设的任务模板
+
+**模板内容**:
+- 标题、内容、类型
+- 完成方式、积分、时长
+- 默认审核设置
+
+### 8.5 任务表结构
+
+```sql
+tasks 表新增字段:
+- executor_type VARCHAR(20) COMMENT '执行者类型: child/parent'
+- executor_id BIGINT COMMENT '执行者ID'
+- task_type VARCHAR(20) COMMENT '任务性质: onetime/recurring'
+- complete_types JSON COMMENT '完成方式: ["checkin","text","image"...]'
+- review_type VARCHAR(20) COMMENT '审核人类型: creator/parent/teacher/ai'
+- earliest_start DATETIME COMMENT '最早开始时间'
+- latest_end DATETIME COMMENT '最晚结束时间'
+- max_frequency INT COMMENT '周期内最多完成次数'
+```
+
+### 8.6 审核流程
+
+| 审核人类型 | 说明 |
+|------------|------|
+| creator | 任务创建人审核 |
+| parent | 家长审核 |
+| teacher | 成长规划师审核 |
+| ai | AI自动审核 |
+
+### 8.7 实现状态
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 后端DTO | ✅ 完成 | CreateTaskDTO 已添加所有字段 |
+| 后端实体 | ✅ 完成 | Task 实体已添加所有字段 |
+| 后端Service | ✅ 完成 | TaskService.createTask 已更新 |
+| 小程序端 | ✅ 完成 | tasks.vue 已实现完整表单 |
+| Web端 | ⏳ 待开发 | 需要单独实现 |

+ 209 - 0
docs/backup/root/requirements-completion-report.md

@@ -0,0 +1,209 @@
+# 知心益家 (ZXYJ) - 需求完成情况综合报告
+
+**生成时间**: 2026-04-13
+**版本**: V1.2
+**报告范围**: 全部功能模块
+**审计方法**: 代码实证 + 需求文档交叉验证
+
+---
+
+## 📊 总体完成度概览
+
+| 优先级 | 总需求数 | 已实现 | 完成度 |
+|--------|----------|--------|--------|
+| **P0** | 36 | 36 | **100%** ✅ |
+| **P1** | 45 | 19 | 42% |
+| **P2** | 20 | 5 | 25% |
+| **总计** | 101 | 60 | **59%** |
+
+---
+
+## 一、P0 需求完成情况(100% ✅)
+
+### 1.1 任务管理模块
+
+| 需求ID | 描述 | 状态 | 实现位置 |
+|--------|------|------|----------|
+| TASK-001 | 家长创建任务,设置任务名称 | ✅ | `TaskService.createTask()` |
+| TASK-002 | 设置积分值(1-10分,默认2分) | ✅ | `CreateTaskDTO.points` |
+| TASK-003 | 设置截止时间(精确到分钟) | ✅ | 前端多级时间选择器 |
+| TASK-004 | 任务重复设置(每日/每周) | ✅ | `RepeatTaskGenerator` 定时任务 |
+| TASK-005 | 设置任务分类 | ✅ | `Task.category` |
+| TASK-008 | 孩子查看今日任务列表 | ✅ | `TaskService.getTodayTasks()` |
+| TASK-009 | 孩子点击完成按钮提交任务 | ✅ | `TaskService.completeTask()` |
+| TASK-012A~F | 打卡多媒体支持 | ✅ | 照片/视频/录音/文字/倒计时/语音 |
+
+### 1.2 积分系统模块
+
+| 需求ID | 描述 | 状态 | 实现位置 |
+|--------|------|------|----------|
+| POINT-001 | 完成任务获得基础积分 | ✅ | `TaskService.completeTask()` |
+| POINT-002 | 超额积分规则(家长制定) | ✅ | `Task.bonusRule` JSON + `calculatePointsWithBonusRule()` |
+| POINT-006 | 超时10分钟内不算迟到 | ✅ | `LATE_GRACE_MINUTES = 10` |
+| POINT-007 | 每天最多扣5分 | ✅ | `PENALTY_MAX_DAILY = 5` |
+| POINT-008 | 扣分功能按年龄配置 | ✅ | `Child.penaltyEnabled` |
+| POINT-009 | 积分有效期(按任务设置) | ✅ | `PointsExpireTask` 定时任务 |
+
+### 1.3 奖励系统模块
+
+| 需求ID | 描述 | 状态 | 实现位置 |
+|--------|------|------|----------|
+| REWARD-001 | 孩子添加心愿到心愿单 | ✅ | `RewardService.createWishlist()` |
+| REWARD-001A | 家长填写积分后进入奖励库 | ✅ | `RewardService.approveWishlist()` |
+| REWARD-002A | 家庭奖励库(多家长可调整) | ✅ | `RewardService.updateRewardPoints()` |
+| REWARD-002B | 多孩子心愿单隔离 | ✅ | 按 `childId` 过滤 |
+| REWARD-005 | 家长审批奖励兑换 | ✅ | `RewardService.approveReward()` |
+
+### 1.4 模式切换模块
+
+| 需求ID | 描述 | 状态 | 实现位置 |
+|--------|------|------|----------|
+| MODE-001~003 | 家长/孩子模式 + 密码切换 | ✅ | JWT + 拦截器 |
+| MODE-006~009 | 角色权限/孩子管理/停用 | ✅ | `ChildController` |
+
+### 1.5 打卡功能模块
+
+| 需求ID | 描述 | 状态 | 实现位置 |
+|--------|------|------|----------|
+| STREAK-001~003 | 连续打卡显示/自动重置 | ✅ | `StreakResetTask` 定时任务 |
+
+---
+
+## 二、P1 需求完成情况(42%)
+
+### 2.1 已完成模块
+
+| 需求ID | 描述 | 状态 | 实现位置 |
+|--------|------|------|----------|
+| TASK-013 | 任务提醒通知 | ✅ | `TaskReminderService.getTasksNeedReminder()` |
+| TASK-014 | 任务历史记录查询 | ✅ | `TaskReminderService.getTaskHistoryWithFilter()` |
+| TASK-015 | 任务统计分析报表 | ✅ | `TaskReminderService.getTaskStatistics()` |
+
+**新增API端点**:
+- `GET /api/tasks/reminder/{childId}` - 需要提醒的任务
+- `GET /api/tasks/upcoming/{childId}` - 即将到期任务
+- `GET /api/tasks/overdue/{childId}` - 已超时任务
+- `GET /api/tasks/history/filter/{childId}` - 带筛选的历史
+- `GET /api/tasks/statistics/{childId}` - 统计概览
+- `GET /api/tasks/statistics/category/{childId}` - 分类统计
+- `GET /api/tasks/statistics/date/{childId}` - 日期统计
+- `GET /api/tasks/statistics/family/{familyId}` - 家庭统计
+
+### 2.2 待实现模块
+
+| 需求ID | 描述 | 状态 | 优先级 |
+|--------|------|------|--------|
+| TASK-006~007 | 任务模板/审核设置 | ⚠️ 部分 | 高 |
+| BADGE-001~006 | 勋章系统 | ❌ 未实现 | 中 |
+| REPORT-001~004 | 报表统计 | ❌ 未实现 | 中 |
+| FOCUS-001~008 | 专注训练模块 | ⚠️ 部分 | 中 |
+| DAN-001~015 | DAN测评记录模块 | ❌ 未实现 | 高 |
+| THEME-001 | 主题切换 | ⚠️ 部分 | 低 |
+
+---
+
+## 三、成长规划师功能完成情况(已修复)
+
+### 3.1 原有问题状态
+
+| 问题 | 原状态 | 现状态 | 修复位置 |
+|------|--------|--------|----------|
+| 成长规划师信息入库缺口 | 🔴 未持久化 | ✅ 已修复 | `UserService.updateUserInfo()` |
+| 家庭检索逻辑疑点 | 🟡 模糊匹配 | ✅ 已修复 | `GuideFamilyTaskController` |
+| 审核DTO字段不一致 | 🟡 字段歧义 | ✅ 已修复 | `TaskService.reviewTask()` |
+
+### 3.2 成长规划师7项需求状态
+
+| 需求 | 状态 | 实现位置 |
+|------|------|----------|
+| 首次登录角色选择 | ✅ | `user-edit.vue` |
+| 成长规划师信息录入 | ✅ | `User.java` 字段 |
+| 查看家庭任务 | ✅ | `GuideFamilyTaskController` |
+| 审核任务 | ✅ | `reviewTask()` |
+| 分享码绑定家庭 | ✅ | `joinFamily()` |
+| 接受家长咨询 | ✅ | `TeacherMessageController` |
+| 调整任务 | ✅ | `updateTask()/deleteTask()` |
+
+---
+
+## 四、小游戏功能完成情况(已完善)
+
+### 4.1 原有问题状态
+
+| 问题 | 原状态 | 现状态 | 修复位置 |
+|------|--------|--------|----------|
+| 1a2b评分语义不一致 | 🔴 用时/次数歧义 | ✅ 已修复 | 后端改为用时判断 |
+| 数独验证不完整 | 🟡 缺3x3验证 | ✅ 已修复 | `checkSolution()` |
+| API权限校验缺失 | 🔴 安全漏洞 | ✅ 已修复 | `MiniGameController` |
+
+### 4.2 三款游戏状态
+
+| 游戏 | 前端 | 后端 | 积分 | 状态 |
+|------|------|------|------|------|
+| 舒尔特方格 | ✅ | ✅ | ✅ | **完整** |
+| 猜数字 (1a2b) | ✅ | ✅ | ✅ | **完整** |
+| 数独 | ✅ | ✅ | ✅ | **完整** |
+
+---
+
+## 五、数据库迁移记录
+
+| 迁移ID | 描述 | 状态 |
+|--------|------|------|
+| 迁移1-15 | 基础表结构和成长规划师功能 | ✅ |
+| 迁移16 | `tasks.bonus_rule` 超额积分规则 | ✅ |
+| 迁移17 | `tasks.points_expire_days` 积分有效期 | ✅ |
+| 迁移18 | `points_log.expire_at` 积分过期日期 | ✅ |
+| 迁移19 | `points_log.expired` 过期状态标记 | ✅ |
+| 迁移20 | `tasks.template_id` 重复任务模板追踪 | ✅ |
+| 迁移21 | `tasks.is_template` 模板任务标记 | ✅ |
+
+---
+
+## 六、定时任务汇总
+
+| 任务类 | 执行时间 | 职责 |
+|--------|----------|------|
+| `StreakResetTask` | 每日00:05 | 检查打卡连续性,重置中断 |
+| `PointsExpireTask` | 每日01:00 | 检查积分过期,标记状态 |
+| `RepeatTaskGenerator` | 每日05:00 | 生成每日/每周重复任务实例 |
+
+---
+
+## 七、近期提交记录
+
+| Commit | 说明 |
+|--------|------|
+| `e9c4180` | TASK-013~015 任务提醒和统计 |
+| `a4d12ef` | 用户操作日志功能 |
+| `85444f6` | TASK-004 任务重复设置 |
+| `5474459` | V1.2 P0需求实现 |
+| `4dc3a20` | 小游戏积分系统、连续打卡 |
+
+---
+
+## 八、下一步开发建议
+
+### 优先级排序
+
+1. **DAN测评记录模块**(P1最高)
+   - 15个需求,架构已规划
+   - 需要:DAN接口对接 + 等级模板
+
+2. **勋章系统**(P1中)
+   - 6个需求
+   - 需要新增:Badge实体、解锁逻辑
+
+3. **报表统计**(P1中)
+   - 4个需求
+   - 需要新增:统计API、前端图表
+
+4. **数据导出**(P2)
+   - 3个需求
+   - 导出CSV/Excel格式
+
+---
+
+**报告生成者**: Sisyphus AI Agent
+**审计范围**: 代码实证 + 需求文档交叉验证
+**数据来源**: 后端代码、前端代码、数据库 schema、需求文档

+ 748 - 0
docs/backup/root/task-requirements.md

@@ -0,0 +1,748 @@
+# 任务管理模块需求分析
+
+**版本**: V1.2
+**更新时间**: 2026-04-13
+
+---
+
+## 一、需求清单概览
+
+| 需求ID | 描述 | 优先级 | 状态 |
+|--------|------|--------|------|
+| TASK-001 | 家长可创建任务,设置任务名称 | P0 | ✅ 已实现 |
+| TASK-002 | 设置任务积分值(1-10分,默认2分) | P0 | ✅ 已实现 |
+| TASK-003 | 设置任务截止时间(精确到分钟) | P0 | ✅ 已实现 |
+| TASK-004 | 设置任务重复(每日/每周) | P0 | ✅ 已实现 |
+| TASK-005 | 设置任务分类(学习类/生活类/运动类/其他) | P0 | ✅ 已实现 |
+| TASK-006 | 任务模板功能 | P1 | ⚠️ 部分实现 |
+| TASK-007 | 设置审核方式 | P1 | ⚠️ 部分实现 |
+| TASK-008 | 孩子可查看今日任务列表 | P0 | ✅ 已实现 |
+| TASK-009 | 孩子点击"完成"按钮提交任务 | P0 | ✅ 已实现 |
+| TASK-010 | 任务完成方式设置 | P2 | ⚠️ 待完善 |
+| TASK-011 | 任务时长设置 | P2 | ⚠️ 待完善 |
+| TASK-012A | 打卡支持照片上传 | P0 | ✅ 已实现 |
+| TASK-012B | 打卡支持视频上传 | P0 | ✅ 已实现 |
+| TASK-012C | 打卡支持录音上传 | P0 | ✅ 已实现 |
+| TASK-012D | 打卡支持文字描述 | P0 | ✅ 已实现 |
+| TASK-012E | 打卡支持倒计时功能 | P0 | ✅ 已实现 |
+| TASK-012F | 倒计时结束时语音提醒 | P0 | ✅ 已实现 |
+| TASK-013 | 任务提醒通知 | P1 | ✅ 已实现 |
+| TASK-014 | 任务历史记录查询 | P1 | ✅ 已实现 |
+| TASK-015 | 任务统计分析报表 | P1 | ✅ 已实现 |
+| TASK-016 | 批量操作任务 | P2 | ❌ 未实现 |
+
+---
+
+## 二、需求详细描述
+
+### 2.1 任务创建(TASK-001~005)
+
+#### TASK-001: 创建任务,设置任务名称
+- **描述**: 家长可以创建任务,设置任务名称
+- **必填**: 是
+- **字段**: `title` (String, 最大100字符)
+- **验证**: 不能为空
+- **实现位置**: `TaskService.createTask()`
+
+#### TASK-002: 设置任务积分值
+- **描述**: 积分值范围1-10分,默认2分
+- **必填**: 是
+- **字段**: `points` (Integer)
+- **默认值**: 2
+- **验证**: 1-10分
+
+#### TASK-003: 设置任务截止时间
+- **描述**: 精确到分钟,支持多孩子任务和家长任务
+- **必填**: 是
+- **字段**: `deadline` (DateTime)
+- **前端**: 多级日期时间选择器(年/月/日/时/分)
+
+#### TASK-004: 设置任务重复
+- **描述**: 支持每日重复、每周重复
+- **字段**: `repeatType` (String)
+- **可选值**: `none` / `daily` / `weekly`
+- **定时任务**: `RepeatTaskGenerator` 每天05:00执行
+
+#### TASK-005: 设置任务分类
+- **描述**: 学习类/生活类/运动类/小游戏类/其他
+- **字段**: `category` (String)
+- **可选值**: `学习类` / `生活类` / `运动类` / `小游戏类` / `其他`
+- **说明**: 小游戏类是一种任务类型,孩子通过完成在线小游戏获得积分奖励
+- **小游戏列表**:
+  - 舒尔特方格 - 专注力训练
+  - 猜数字 (1a2b) - 逻辑推理训练
+  - 数独 - 策略与数学思维训练
+
+---
+
+### 2.2 任务模板与审核(TASK-006~007)
+
+#### TASK-006: 任务模板功能
+- **描述**: 通过任务模板快速创建
+- **状态**: ⚠️ 部分实现
+- **待完善**: 模板库管理、模板选择UI
+
+#### TASK-007: 设置审核方式
+- **描述**: 设置审核人类型
+- **字段**: `reviewType` (String)
+- **可选值**: 
+  - `creator` - 创建者审核
+  - `parent` - 家长审核
+  - `teacher` - 成长规划师审核
+  - `ai` - AI自动审核
+
+---
+
+### 2.3 任务查看与完成(TASK-008~011)
+
+#### TASK-008: 孩子查看今日任务
+- **描述**: 孩子可查看今日需完成的任务列表
+- **实现**: `GET /api/tasks/today?childId={id}`
+- **返回**: 当日所有 pending / completed 状态的任务
+
+#### TASK-009: 孩子完成任务
+- **描述**: 孩子点击完成按钮提交任务
+- **实现**: `POST /api/tasks/{id}/complete`
+- **参数**: childId, photoUrl(可选)
+
+#### TASK-010: 任务完成方式设置
+- **描述**: 支持多种完成方式
+- **字段**: `completeTypes` (JSON数组)
+- **可选值**: 
+  - `checkin` - 打卡
+  - `text` - 文本
+  - `audio` - 语音
+  - `image` - 图片
+  - `video` - 视频
+
+#### TASK-011: 任务时长设置
+- **字段**: `duration` (Integer, 分钟)
+- **描述**: 任务预计耗时
+
+---
+
+### 2.4 打卡功能(TASK-012A~F)
+
+| 需求ID | 描述 | 实现 |
+|--------|------|------|
+| TASK-012A | 照片上传 | ✅ 文件上传API |
+| TASK-012B | 视频上传 | ✅ 文件上传API |
+| TASK-012C | 录音上传 | ✅ 文件上传API |
+| TASK-012D | 文字描述 | ✅ CompleteTaskDTO.text |
+| TASK-012E | 倒计时功能 | ✅ 前端组件 |
+| TASK-012F | 语音提醒 | ✅ 前端TTS |
+
+---
+
+### 2.5 小游戏任务类型(TASK-017A~C)
+
+> 说明:小游戏是任务分类的一种形式,属于"小游戏类"任务。孩子完成小游戏后获得积分奖励,与普通任务采用相同的积分计算逻辑。
+
+#### TASK-017A: 小游戏任务-舒尔特方格
+- **描述**: 专注力训练游戏,在方格中按顺序点击数字
+- **游戏代码**: `schulte`
+- **游戏参数**: gridSize (5x5, 6x6等)
+- **积分规则**: 根据完成时间计算,参考 `MiniGameService.completeGame()`
+- **状态**: ✅ 已实现
+- **API**:
+  - `POST /api/mini-game/list` - 获取小游戏列表
+  - `POST /api/mini-game/complete` - 完成任务获得积分
+
+#### TASK-017B: 小游戏任务-猜数字(1a2b)
+- **描述**: 逻辑推理游戏,猜测4位数字并获取A、B提示
+- **游戏代码**: `1a2b`
+- **积分规则**: 用时越短分数越高,120秒内完成得满分
+- **状态**: ✅ 已实现
+- **特殊逻辑**: 用时判断(不是次数判断)
+
+#### TASK-017C: 小游戏任务-数独
+- **描述**: 策略与数学思维训练游戏,完成9x9数独
+- **游戏代码**: `sudoku`
+- **难度等级**: easy, medium, hard
+- **积分规则**: 根据完成时间和难度计算
+- **验证逻辑**: 行、列、3x3宫格都必须正确
+
+#### 小游戏任务与普通任务的关系
+
+| 特性 | 普通任务 | 小游戏任务 |
+|------|---------|-----------|
+| 任务分类 | 学习类/生活类/运动类/其他 | 小游戏类 |
+| 完成方式 | 打卡/文本/图片/视频 | 游戏完成回调 |
+| 积分计算 | 基础分+超额分 | 按游戏规则计算 |
+| 审核流程 | 可选需审核 | 直接完成即时获积分 |
+| 历史记录 | 任务历史 | 统一记录在任务历史中 |
+
+---
+
+### 2.6 任务提醒与统计(TASK-013~016)
+
+#### TASK-013: 任务提醒通知
+- **描述**: 在任务截止前发送提醒
+- **API**:
+  - `GET /api/tasks/reminder/{childId}` - 30分钟内到期
+  - `GET /api/tasks/upcoming/{childId}?minutes=60` - 自定义时间
+  - `GET /api/tasks/overdue/{childId}` - 已超时任务
+
+#### TASK-014: 任务历史记录查询
+- **描述**: 查看历史任务并支持筛选
+- **API**: `GET /api/tasks/history/filter/{childId}`
+- **筛选条件**: 状态、时间范围
+
+#### TASK-015: 任务统计分析报表
+- **描述**: 统计任务完成情况
+- **API**:
+  - `GET /api/tasks/statistics/{childId}` - 概览统计
+  - `GET /api/tasks/statistics/category/{childId}` - 分类统计
+  - `GET /api/tasks/statistics/date/{childId}?days=7` - 日期统计
+  - `GET /api/tasks/statistics/family/{familyId}` - 家庭统计
+
+#### TASK-016: 批量操作任务
+- **描述**: 批量删除、批量审核
+- **状态**: ❌ 未实现
+
+---
+
+## 三、任务数据模型
+
+### 3.1 Task 实体字段
+
+```java
+// 基础字段
+private Long id;
+private Long familyId;       // 家庭ID
+private Long creatorId;      // 创建者ID
+private String title;        // 任务名称
+private String description;  // 任务描述
+
+// 执行者信息
+private String executorType; // child/parent
+private Long executorId;     // 执行者ID
+private Long childId;        // 孩子ID(兼容)
+
+// 积分与时间
+private Integer points;      // 积分值
+private Date deadline;      // 截止时间
+
+// 分类与审核
+private String category;     // 分类
+private Integer needReview; // 是否需要审核
+private String reviewType;   // 审核人类型
+private String status;       // 任务状态
+private Date completedAt;    // 完成时间
+
+// 重复设置(TASK-004)
+private String repeatType;  // none/daily/weekly
+private Long templateId;    // 模板ID
+private Integer isTemplate; // 是否模板
+
+// POINT-002:超额积分
+private String bonusRule;   // JSON格式规则
+
+// POINT-009:积分有效期
+private Integer pointsExpireDays; // 有效期天数
+
+// 扩展字段
+private String taskType;    // onetime/recurring
+private String frequency;   // daily/weekly/monthly
+private Integer maxFrequency; // 周期内最多次数
+private String completeTypes; // 完成方式JSON
+private Date earliestStart;  // 最早开始
+private Date latestEnd;      // 最晚结束
+```
+
+### 3.2 状态流转说明
+
+```
+pending → completed (孩子完成)
+pending → completed (审核通过)
+completed → pending (审核拒绝)
+pending → cancelled (创建者删除)
+```
+
+### 3.3 任务属性分组与职责边界
+
+> 说明:以下内容从业务视角定义任务对象的完整属性。前端展示时,应按角色和阶段裁剪字段;后端存储时,宜将“任务定义”和“执行记录”分开管理。
+
+#### A. 基础信息
+
+| 字段 | 含义 | 创建时 | 执行时 | 审核时 | 完成后 |
+|------|------|--------|--------|--------|--------|
+| title | 任务标题 | 必填,可编辑 | 只读 | 只读 | 只读 |
+| description | 任务描述 | 可选,可编辑 | 只读 | 只读 | 只读 |
+| category | 任务分类 | 必填,可编辑 | 只读 | 只读 | 只读 |
+| taskType | 任务类型(一次性/重复) | 必填,可编辑 | 只读 | 只读 | 只读 |
+| templateId | 模板来源 | 选择模板时自动带入 | 只读 | 只读 | 只读 |
+
+#### B. 执行对象
+
+| 字段 | 含义 | 创建时 | 执行时 | 审核时 | 完成后 |
+|------|------|--------|--------|--------|--------|
+| creatorId | 创建人 | 系统生成 | 只读 | 只读 | 只读 |
+| familyId | 所属家庭 | 系统生成 | 只读 | 只读 | 只读 |
+| executorType | 执行者类型 | 必填,可编辑 | 只读 | 只读 | 只读 |
+| executorId / childId | 执行者ID/孩子ID | 必填,可编辑 | 只读 | 只读 | 只读 |
+
+#### C. 规则信息
+
+| 字段 | 含义 | 创建时 | 执行时 | 审核时 | 完成后 |
+|------|------|--------|--------|--------|--------|
+| points | 奖励积分 | 必填,可编辑 | 只读 | 只读 | 只读 |
+| deadline | 截止时间 | 必填,可编辑 | 只读 | 只读 | 只读 |
+| earliestStart | 最早开始时间 | 可选,可编辑 | 只读 | 只读 | 只读 |
+| latestEnd | 最晚结束时间 | 可选,可编辑 | 只读 | 只读 | 只读 |
+| duration | 预计时长 | 可选,可编辑 | 只读 | 只读 | 只读 |
+| completeTypes | 完成方式 | 必填,可编辑 | 只读 | 只读 | 只读 |
+| needReview | 是否需要审核 | 必填,可编辑 | 只读 | 只读 | 只读 |
+| reviewType | 审核方式 | 需要审核时可选 | 只读 | 只读 | 只读 |
+| repeatType | 重复规则 | 选择重复任务时可选 | 只读 | 只读 | 只读 |
+| bonusRule | 超额积分规则 | 可选,可编辑 | 只读 | 只读 | 只读 |
+| pointsExpireDays | 积分有效期 | 可选,可编辑 | 只读 | 只读 | 只读 |
+
+#### D. 执行与提交信息
+
+| 字段 | 含义 | 创建时 | 执行时 | 审核时 | 完成后 |
+|------|------|--------|--------|--------|--------|
+| status | 当前状态 | 系统初始化 | 可随流程变化 | 可随流程变化 | 归档只读 |
+| completedAt | 完成时间 | 为空 | 记录提交或完成时间 | 可查看 | 只读 |
+| completedBy | 实际完成人 | 为空 | 孩子提交时生成 | 可查看 | 只读 |
+| completeContent | 完成说明/文本 | 为空 | 孩子填写 | 可查看 | 只读 |
+| completeMedia | 完成附件(图/音/视频) | 为空 | 孩子上传 | 可查看 | 只读 |
+| overtimeFlag | 超时标记 | 系统计算 | 可刷新 | 可查看 | 只读 |
+
+#### E. 审核信息
+
+| 字段 | 含义 | 创建时 | 执行时 | 审核时 | 完成后 |
+|------|------|--------|--------|--------|--------|
+| reviewerId | 审核人ID | 为空 | 只读 | 家长/成长规划师填写 | 只读 |
+| reviewTime | 审核时间 | 为空 | 只读 | 审核通过时生成 | 只读 |
+| reviewResult | 审核结果 | 为空 | 只读 | 通过/驳回/退回补充 | 只读 |
+| reviewComment | 审核意见 | 为空 | 只读 | 可填写 | 只读 |
+
+#### F. 系统信息
+
+| 字段 | 含义 | 创建时 | 执行时 | 审核时 | 完成后 |
+|------|------|--------|--------|--------|--------|
+| id | 任务ID | 系统生成 | 只读 | 只读 | 只读 |
+| createdAt | 创建时间 | 系统生成 | 只读 | 只读 | 只读 |
+| updatedAt | 更新时间 | 系统生成 | 系统更新 | 系统更新 | 只读 |
+| isTemplate | 是否模板任务 | 可选 | 只读 | 只读 | 只读 |
+| templateId | 模板关联 | 可选 | 只读 | 只读 | 只读 |
+
+### 3.4 阶段展示、角色与字段变更规则
+
+#### 3.4.1 创建阶段
+
+- **可见角色**: 家长、管理员、成长规划师
+- **可编辑角色**: 任务创建人
+- **主要内容**: 标题、描述、分类、执行对象、积分、截止时间、时长、完成方式、是否审核、审核方式、重复规则、提醒规则、模板来源
+- **字段规则**:
+  - 发布前允许修改全部业务字段
+  - 发布后建议锁定积分、截止时间、执行对象、审核方式、重复规则,避免任务含义被改变
+
+#### 3.4.2 执行阶段
+
+- **可见角色**: 孩子、家长、成长规划师(按家庭权限)
+- **可编辑角色**: 孩子仅可填写提交内容;家长不可直接修改孩子的提交结果
+- **主要内容**: 任务标题、任务说明、剩余时间、奖励积分、完成要求、附件上传入口、提醒信息
+- **字段规则**:
+  - 任务定义字段只读
+  - 孩子可更新提交内容、补充说明、附件
+  - 系统记录实际开始时间、提交时间、超时标记
+
+#### 3.4.3 提交阶段
+
+- **可见角色**: 孩子、家长
+- **可编辑角色**: 孩子
+- **主要内容**: 提交说明、图片/视频/录音/文字、计时结果、是否完成
+- **字段规则**:
+  - 允许在审核前补充材料的,提交内容可再次编辑
+  - 审核提交后,提交内容进入只读,避免争议
+
+#### 3.4.4 审核阶段
+
+- **可见角色**: 家长、成长规划师
+- **可编辑角色**: 审核人
+- **主要内容**: 孩子的提交内容、完成时间、是否超时、历史修改记录、审核意见
+- **字段规则**:
+  - 审核人可填写审核结果与意见
+  - 审核通过后,任务结果和积分流水应固定,不再覆盖原记录
+  - 审核驳回时,应保留原提交内容和驳回原因
+
+#### 3.4.5 完成阶段
+
+- **可见角色**: 全部相关角色
+- **可编辑角色**: 原则上无;仅保留申诉或补审入口
+- **主要内容**: 最终状态、实际完成时间、获得积分、审核结果、审核意见、附件证据、历史记录
+- **字段规则**:
+  - 任务主体只读
+  - 若发生积分回滚或补审,必须保留操作流水
+
+### 3.5 推荐的状态流转说明
+
+为便于前端和接口统一理解,建议将业务流程描述为:
+
+```
+草稿 → 待执行 → 执行中 → 待提交 → 待审核 → 已完成
+                         ↘ 已驳回 / 已过期 / 已取消
+```
+
+- **草稿**: 仅创建人可见,未发布
+- **待执行**: 任务已发布,等待孩子开始
+- **执行中**: 孩子已开始执行或已领取任务
+- **待提交**: 已完成动作,等待提交结果
+- **待审核**: 已提交,等待家长/成长规划师确认
+- **已完成**: 审核通过或自动通过
+- **已驳回**: 审核不通过,等待补充或重做
+- **已过期**: 超过截止时间仍未完成
+- **已取消**: 创建人主动撤销
+
+### 3.6 Web端与小程序端字段展示矩阵
+
+> 说明:Web端以管理与配置为主,小程序端以查看与执行为主。下表用于统一页面展示边界,避免前后端对同一字段理解不一致。
+
+#### 3.6.1 任务主对象字段
+
+| 字段 | Web端任务列表 `Tasks.vue` | Web端模板页 `TaskTemplates.vue` | 小程序任务列表 `tasks.vue` | 小程序创建页 `create-task.vue` | 创建后可改 |
+|------|---------------------------|----------------------------------|-----------------------------|----------------------------------|-----------|
+| title | 显示 | 显示 | 显示 | 填写 | 否(发布后锁定) |
+| description | 不显示 | 编辑/显示 | 显示 | 填写 | 仅允许补充说明 |
+| category | 显示 | 显示/筛选 | 显示 | 填写 | 否 |
+| points | 显示 | 显示/编辑 | 显示 | 填写 | 不建议改 |
+| deadline | 显示 | 不直接展示 | 显示 | 填写 | 否 |
+| status | 显示 | 不展示 | 显示(完成/未完成) | 不展示 | 系统变更 |
+| needReview | 显示 | 显示/编辑 | 创建页可设 | 创建页可设 | 否 |
+| childId / childIds | 显示(childId) | 不展示 | 创建页选择孩子 | 创建页选择孩子 | 否 |
+| repeatType | 不展示 | 编辑 | 不展示 | 创建页可设 | 否 |
+| completeTypes | 不展示 | 编辑 | 创建页可设 | 创建页可设 | 否 |
+| duration | 不展示 | 显示/编辑 | 创建页可设 | 创建页可设 | 仅补充说明类变更 |
+| createdAt | 显示 | 显示 | 不展示 | 不展示 | 系统字段 |
+| templateId | 不展示 | 不直接展示 | 模板选择后自动带入 | 模板选择后自动带入 | 系统字段 |
+
+#### 3.6.2 Web端任务管理页显示重点
+
+- **任务列表页**: `id`、`title`、`points`、`category`、`deadline`、`status`、`needReview`、`childId`、`createdAt`
+- **筛选条件**: 任务标题、状态、家庭
+- **统计信息**:总任务数、今日任务数
+- **适用场景**:后台查看、检索、按家庭定位任务
+
+#### 3.6.3 Web端任务模板页显示重点
+
+- **列表字段**:模板名称、分类、积分、难度、推荐年龄、时长、任务性质、是否需要审核、启用状态、创建时间
+- **编辑字段**:标题、描述、分类、积分、难度、推荐年龄、预计时长、完成方式、任务性质、频率、周期次数、是否审核、审核方式、按分类审核
+- **适用场景**:统一模板配置,供任务创建复用
+
+#### 3.6.4 小程序任务列表页显示重点
+
+- **孩子视图**: 任务标题、积分、截止时间、完成按钮、已完成标识
+- **家长视图**: 今日任务列表、添加任务入口、家长任务列表
+- **适用场景**: 任务执行、快速完成、家庭日常管理
+
+#### 3.6.5 小程序创建页显示重点
+
+- **基础字段**: 任务名称、任务描述、选择孩子、积分、分类、截止时间、重复设置、是否需要审核
+- **扩展字段**: 当任务模板可用时,可自动带入标题、描述、分类、积分、完成方式、审核设置等
+- **适用场景**: 快速创建单次或重复任务
+
+#### 3.6.6 字段展示规则建议
+
+- **管理端可见更多配置项**,如模板、难度、审核细则、启用开关
+- **小程序端优先展示执行所需信息**,避免把模板配置、规则细节全部暴露给孩子
+- **创建后高敏感业务字段尽量只读**,包括积分、截止时间、审核方式、重复规则和执行对象
+
+### 3.7 关键字段生命周期矩阵
+
+> 说明:本节描述字段在各阶段的写入主体、锁定时机和只读边界。其粒度高于 3.6,适合用于约束前端表单和后端接口。
+
+| 字段 | 创建阶段 | 执行阶段 | 提交阶段 | 审核阶段 | 完成阶段 |
+|------|----------|----------|----------|----------|----------|
+| title | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| description | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| category | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| points | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| deadline | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| childId / childIds | 创建人选择 | 只读 | 只读 | 只读 | 只读 |
+| repeatType | 创建人选择 | 只读 | 只读 | 只读 | 只读 |
+| completeTypes | 创建人选择 | 只读 | 只读 | 只读 | 只读 |
+| needReview | 创建人选择 | 只读 | 只读 | 只读 | 只读 |
+| reviewType | 创建人选择 | 只读 | 只读 | 只读 | 只读 |
+| duration | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| earliestStart | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| latestEnd | 创建人填写 | 只读 | 只读 | 只读 | 只读 |
+| status | 系统初始化 | 系统更新 | 系统更新 | 系统更新 | 归档只读 |
+| completedAt | 为空 | 执行开始时可为空 | 孩子提交时写入 | 审核时可查看 | 只读 |
+| completedBy | 为空 | 为空 | 孩子提交时写入 | 审核时可查看 | 只读 |
+| completeContent | 为空 | 孩子可填写 | 孩子可补充 | 审核人可查看 | 只读 |
+| completeMedia | 为空 | 孩子可上传 | 孩子可补充 | 审核人可查看 | 只读 |
+| overtimeFlag | 系统计算 | 系统更新 | 系统更新 | 审核时可查看 | 只读 |
+| reviewerId | 为空 | 只读 | 只读 | 审核人写入 | 只读 |
+| reviewTime | 为空 | 只读 | 只读 | 审核通过或驳回时写入 | 只读 |
+| reviewResult | 为空 | 只读 | 只读 | 审核人写入 | 只读 |
+| reviewComment | 为空 | 只读 | 只读 | 审核人写入 | 只读 |
+
+#### 3.7.1 生命周期规则
+
+- **创建阶段**: 任务定义字段应一次性写入,默认仅允许在发布前修改。
+- **执行阶段**: 任务定义应冻结,孩子仅执行任务,不得修改任务规则本身。
+- **提交阶段**: 仅允许写入完成内容、附件和提交时间,不得覆盖任务定义。
+- **审核阶段**: 仅允许写入审核人、审核结果和审核意见,提交内容应保留原始记录。
+- **完成阶段**: 任务主体和审核记录均应只读,仅保留申诉、补审或积分回滚入口。
+
+#### 3.7.2 推荐的写入边界
+
+- **任务定义类字段**:title、description、category、points、deadline、childId / childIds、repeatType、completeTypes、needReview、reviewType、duration、earliestStart、latestEnd。
+- **执行结果类字段**:status、completedAt、completedBy、completeContent、completeMedia、overtimeFlag。
+- **审核结果类字段**:reviewerId、reviewTime、reviewResult、reviewComment。
+- **系统字段**:id、createdAt、updatedAt、templateId、isTemplate。
+
+### 3.8 字段总览汇总表
+
+> 说明:本表适合用于评审、排期和页面对齐。它将“字段、含义、责任归属、端侧展示、可改阶段”合并呈现。
+
+| 字段 | 含义 | 责任归属 | Web端 | 小程序端 | 创建后是否可改 | 归属阶段 |
+|------|------|----------|------|---------|---------------|---------|
+| title | 任务名称 | 家长/创建人 | 列表显示 / 模板编辑 | 列表显示 / 创建页填写 | 否 | 创建 |
+| description | 任务描述 | 家长/创建人,孩子可补充 | 模板编辑 | 任务详情/创建页填写 | 仅补充说明 | 创建 / 提交 |
+| category | 任务分类 | 家长/创建人 | 列表显示 / 模板编辑 | 列表显示 / 创建页填写 | 否 | 创建 |
+| points | 奖励积分 | 家长/创建人 | 列表显示 / 模板编辑 | 列表显示 / 创建页填写 | 不建议改 | 创建 |
+| deadline | 截止时间 | 家长/创建人 | 列表显示 | 创建页填写 | 否 | 创建 |
+| childId / childIds | 执行孩子(单选/多选) | 家长/创建人 | 列表显示 childId | 创建页选择孩子 | 否 | 创建 |
+| repeatType | 重复规则 | 家长/创建人 | 模板编辑 | 创建页可设 | 否 | 创建 |
+| completeTypes | 完成方式 | 家长/创建人 | 模板编辑 | 创建页可设 | 否 | 创建 |
+| needReview | 是否审核 | 家长/创建人 | 列表显示 / 模板编辑 | 创建页可设 | 否 | 创建 |
+| reviewType | 审核方式 | 家长/创建人 | 模板编辑 | 创建页可设 | 否 | 创建 |
+| duration | 预计时长 | 家长/创建人 | 模板显示 / 编辑 | 创建页可设 | 仅补充说明类调整 | 创建 |
+| status | 当前状态 | 系统 | 列表显示 | 任务列表显示 | 系统变更 | 执行 / 审核 |
+| completedAt | 完成时间 | 系统 | 历史/详情 | 完成结果展示 | 否 | 提交 / 审核 |
+| completedBy | 完成人 | 孩子提交 | 历史/详情 | 完成结果展示 | 否 | 提交 |
+| completeContent | 完成说明 | 孩子提交,家长审核 | 详情/审核页 | 提交页填写 | 可在审核前补充 | 提交 |
+| completeMedia | 完成附件 | 孩子提交,家长审核 | 详情/审核页 | 提交页上传 | 可在审核前补充 | 提交 |
+| overtimeFlag | 超时标记 | 系统 | 列表/详情 | 列表/结果提示 | 系统变更 | 执行 / 提交 |
+| reviewerId | 审核人 | 审核人 | 审核页 | 不直接展示 | 否 | 审核 |
+| reviewTime | 审核时间 | 系统记录 | 审核页 | 结果展示 | 否 | 审核 |
+| reviewResult | 审核结果 | 审核人 | 审核页 | 结果展示 | 否 | 审核 |
+| reviewComment | 审核意见 | 审核人 | 审核页 | 结果展示 | 否 | 审核 |
+| templateId | 模板来源 | 系统 | 模板页关联 | 模板自动带入 | 否 | 创建 |
+| isTemplate | 模板标记 | 系统 | 模板页状态 | 不直接展示 | 否 | 创建 |
+| createdAt | 创建时间 | 系统 | 列表显示 | 不展示 | 否 | 系统 |
+| updatedAt | 更新时间 | 系统 | 列表/详情 | 不展示 | 否 | 系统 |
+| id | 任务ID | 系统 | 列表显示 | 不展示 | 否 | 系统 |
+
+#### 3.8.1 责任边界补充说明
+
+- **家长/创建人负责**: 任务定义字段的填写与首次发布,包括标题、描述、分类、积分、截止时间、执行孩子、重复规则、完成方式、审核方式和时长。
+- **孩子负责**: 提交执行结果,包括完成说明、附件和实际完成状态。
+- **审核人负责**: 输出审核结果、审核意见以及是否通过的最终判断。
+- **系统负责**: 状态流转、时间戳、超时标记、模板关联、创建时间和更新时间。
+
+### 3.9 阶段 × 角色 × 动作矩阵
+
+> 说明:本表用于统一“谁在什么阶段做什么”,避免文档仅描述字段而忽略流程责任。
+
+| 阶段 | 家长/创建人 | 孩子 | 审核人 | 系统 |
+|------|------------|------|--------|------|
+| 创建阶段 | 创建任务、选择孩子、设置积分/截止时间/完成方式/审核方式/重复规则、选择模板、发布任务 | 一般不参与;如有任务建议,仅提交申请不直接生效 | 可作为模板审核人或指定审核人,但不直接参与任务创建 | 校验必填项、生成任务ID、写入创建时间、初始化状态 |
+| 执行阶段 | 查看任务进度、必要时调整未发布任务;发布后原则上不改规则 | 查看任务、领取/开始任务、阅读执行要求 | 查看待审核任务预览,不修改任务定义 | 记录任务状态变化、计算超时、发送提醒 |
+| 提交阶段 | 查看孩子提交内容、等待审核 | 填写完成说明、上传图片/视频/录音、提交完成结果、必要时补充材料 | 查看提交内容,准备审核 | 记录提交时间、提交内容、附件信息、提交次数 |
+| 审核阶段 | 根据需要参与审核或查看审核结果 | 根据审核意见补充材料或重新提交 | 审核通过/驳回/退回补充,填写审核意见 | 记录审核结果、审核时间、审核人,触发积分变更 |
+| 完成阶段 | 查看最终结果、积分变更和历史记录 | 查看完成结果、获得积分或驳回原因 | 查看审核归档和历史记录 | 归档任务、保留流水、生成统计数据 |
+
+#### 3.9.1 动作规则说明
+
+- **创建阶段**: 仅家长/创建人可定义任务,孩子不直接参与任务生效。
+- **执行阶段**: 孩子为主要执行者,家长负责监督,系统负责提醒与超时判断。
+- **提交阶段**: 孩子负责提交,家长负责查看,系统负责记录提交证据。
+- **审核阶段**: 审核人负责最终判断,孩子仅在需要时补充材料。
+- **完成阶段**: 任务主体冻结,仅保留查看、统计和补审能力。
+
+### 3.10 接口级字段清单
+
+> 说明:本节按接口维度列出任务创建、任务完成与任务审核所需字段,并补充请求示例与返回语义。该清单用于前后端联调、接口文档和参数校验。
+
+#### 3.10.1 创建任务接口
+
+**接口**:`POST /api/tasks`
+ 
+| 字段 | 是否必填 | 说明 | 责任主体 |
+|------|----------|------|----------|
+| title | 是 | 任务名称 | 家长/创建人 |
+| childId / childIds | 是 | 执行孩子(单选/多选) | 家长/创建人 |
+| points | 是 | 奖励积分 | 家长/创建人 |
+| category | 是 | 任务分类 | 家长/创建人 |
+| deadline | 是 | 截止时间 | 家长/创建人 |
+| description | 否 | 任务描述 | 家长/创建人 |
+| repeatType | 否 | 重复规则 | 家长/创建人 |
+| completeTypes | 否 | 完成方式 | 家长/创建人 |
+| needReview | 否 | 是否需要审核 | 家长/创建人 |
+| reviewType | 否 | 审核方式 | 家长/创建人 |
+| duration | 否 | 预计时长 | 家长/创建人 |
+| earliestStart | 否 | 最早开始时间 | 家长/创建人 |
+| latestEnd | 否 | 最晚结束时间 | 家长/创建人 |
+| templateId | 否 | 模板来源 | 系统/家长 |
+| bonusRule | 否 | 超额积分规则 | 家长/创建人 |
+| pointsExpireDays | 否 | 积分有效期 | 家长/创建人 |
+
+**校验要求**
+- 必填项不得为空。
+- `points` 应符合积分范围约束。
+- `deadline` 应合法且不得早于当前时间。
+- 若选择模板,系统可自动回填模板字段。
+
+#### 3.10.2 完成任务接口
+
+**接口**:`POST /api/tasks/{id}/complete`
+
+| 字段 | 是否必填 | 说明 | 责任主体 |
+|------|----------|------|----------|
+| childId | 是 | 完成任务的孩子 | 孩子 |
+| completeContent / text | 否 | 完成说明 | 孩子 |
+| completeMedia | 否 | 完成附件 | 孩子 |
+| photoUrl | 否 | 图片地址(如适用) | 孩子 |
+| audioUrl | 否 | 语音地址(如适用) | 孩子 |
+| videoUrl | 否 | 视频地址(如适用) | 孩子 |
+| completedAt | 否 | 完成时间 | 系统/孩子 |
+
+**校验要求**
+- `childId` 应与任务执行对象一致。
+- 提交内容应符合任务配置的完成方式。
+- 系统应记录提交时间、提交内容和附件信息,并据规则判断是否进入待审核。
+
+#### 3.10.3 审核任务接口
+
+**接口**:`POST /api/tasks/{id}/review`
+
+| 字段 | 是否必填 | 说明 | 责任主体 |
+|------|----------|------|----------|
+| reviewResult | 是 | 审核结果(通过/驳回/退回补充) | 审核人 |
+| reviewerId | 是 | 审核人 | 审核人 |
+| reviewComment | 否 | 审核意见 | 审核人 |
+| reviewTime | 否 | 审核时间 | 系统/审核人 |
+
+**校验要求**
+- 审核人应具备该任务的审核权限。
+- 任务状态应处于待审核阶段。
+- 系统应在审核完成后更新任务状态,并触发积分发放或回滚逻辑。
+
+#### 3.10.4 请求示例
+
+**创建任务示例**
+
+| 字段 | 示例值 | 说明 |
+|------|--------|------|
+| title | 整理书桌 | 任务名称 |
+| description | 把书桌上的书本、文具和杂物整理干净 | 任务描述 |
+| childId | 10001 | 执行孩子 |
+| points | 5 | 奖励积分 |
+| category | 生活类 | 任务分类 |
+| deadline | 2026-04-20T20:00:00 | 截止时间 |
+| repeatType | none | 重复规则 |
+| completeTypes | ["checkin", "image"] | 完成方式 |
+| needReview | 1 | 需要审核 |
+| reviewType | parent | 审核方式 |
+| duration | 20 | 预计时长 |
+
+**完成任务示例**
+
+| 字段 | 示例值 | 说明 |
+|------|--------|------|
+| childId | 10001 | 完成任务的孩子 |
+| completeContent | 已经整理完毕,桌面已清空 | 完成说明 |
+| completeMedia | ["https://example.com/upload/task/20260414/desk-1.jpg"] | 完成附件 |
+| completedAt | 2026-04-14T19:30:00 | 完成时间 |
+
+**审核任务示例**
+
+| 字段 | 示例值 | 说明 |
+|------|--------|------|
+| reviewerId | 9001 | 审核人 |
+| reviewResult | approved | 审核结果 |
+| reviewComment | 整理得很整齐,符合要求 | 审核意见 |
+| reviewTime | 2026-04-14T19:40:00 | 审核时间 |
+
+#### 3.10.5 返回结果说明
+
+| 场景 | 成功返回 | 失败原因 |
+|------|----------|----------|
+| 创建任务 | 任务ID、创建时间、初始状态 | 必填字段缺失、截止时间非法、积分超出范围、执行对象无效 |
+| 完成任务 | 完成结果、积分变动信息、当前状态 | 任务不存在、任务状态不允许完成、孩子不匹配、提交内容不符合要求 |
+| 审核任务 | 审核结果、审核时间、最终状态、积分处理结果 | 审核权限不足、任务未进入待审核状态、审核结果参数非法 |
+
+#### 3.10.6 状态建议
+
+| 场景 | 建议状态 | 说明 |
+|------|----------|------|
+| 创建任务成功 | 待执行 / 待发布 | 任务已创建,等待孩子执行或等待正式发布 |
+| 完成任务成功且无需审核 | 已完成 | 系统可直接结算积分并结束流程 |
+| 完成任务成功且需要审核 | 待审核 | 任务进入家长/审核人确认阶段 |
+| 审核通过 | 已完成 | 任务正式完成,积分结算生效 |
+| 审核驳回 | 已驳回 | 任务回到补充材料或重做流程 |
+| 审核退回补充 | 待提交 | 孩子补充材料后再次提交 |
+
+---
+
+## 四、API接口汇总
+
+### 4.1 任务管理
+
+| 方法 | 路径 | 功能 | 权限 |
+|------|------|------|------|
+| POST | /api/tasks | 创建任务 | 家长/成长规划师 |
+| GET | /api/tasks/today | 今日任务 | 孩子 |
+| POST | /api/tasks/{id}/complete | 完成任务 | 孩子 |
+| POST | /api/tasks/{id}/review | 审核任务 | 家长/成长规划师 |
+| GET | /api/tasks/history | 历史记录 | 孩子/家长 |
+| GET | /api/tasks/pending-review | 待审核任务 | 家长/成长规划师 |
+| DELETE | /api/tasks/{id} | 删除任务 | 创建者 |
+
+### 4.2 任务提醒统计
+
+| 方法 | 路径 | 功能 |
+|------|------|------|
+| GET | /api/tasks/reminder/{childId} | 需要提醒的任务 |
+| GET | /api/tasks/upcoming/{childId} | 即将到期任务 |
+| GET | /api/tasks/overdue/{childId} | 已超时任务 |
+| GET | /api/tasks/history/filter/{childId} | 带筛选历史 |
+| GET | /api/tasks/statistics/{childId} | 统计概览 |
+| GET | /api/tasks/statistics/category/{childId} | 分类统计 |
+| GET | /api/tasks/statistics/date/{childId} | 日期统计 |
+| GET | /api/tasks/statistics/family/{familyId} | 家庭统计 |
+
+### 4.3 小游戏任务(任务类型为"小游戏类")
+
+| 方法 | 路径 | 功能 |
+|------|------|------|
+| POST | /api/mini-game/list | 获取小游戏列表 |
+| POST | /api/mini-game/{gameCode} | 获取游戏详情 |
+| POST | /api/mini-game/all | 获取所有小游戏(管理端) |
+| PUT | /api/mini-game/{id}/status | 更新游戏状态 |
+| POST | /api/mini-game/complete | 完成任务获得积分 |
+
+---
+
+## 五、前端页面一览
+
+| 页面 | 路径 | 功能 |
+|------|------|------|
+| 创建任务 | `/pages/tasks/create-task` | 任务表单 |
+| 任务列表 | `/pages/tasks/tasks` | 任务查看/管理 |
+| 今日任务 | 首页嵌入 | 孩子查看任务 |
+
+---
+
+## 六、待完善事项
+
+| 功能 | 优先级 | 说明 |
+|------|--------|------|
+| 任务模板管理 | P1 | 模板库CRUD |
+| 批量操作 | P2 | 批量删除/审核 |
+| 任务时长显示 | P2 | 前端展示 |
+| AI审核 | P1 | 调用AI服务自动审核 |
+| 消息推送 | P1 | 微信模板消息提醒 |
+
+---
+
+## 七、数据库变更
+
+| 迁移 | 字段 | 说明 |
+|------|------|------|
+| 迁移20 | template_id | 重复任务模板追踪 |
+| 迁移21 | is_template | 模板任务标记 |

+ 87 - 0
docs/backup/superpowers/plans/2026-05-11-phase3-map-to-dto.md

@@ -0,0 +1,87 @@
+# Phase 3: Map→DTO + Entity DTO 重构
+
+> **Goal:** Convert Map<String, Object> input parameters and Entity @RequestBody parameters to proper DTOs with Bean Validation, eliminating unsafe type casting and enabling automatic validation.
+
+**Architecture:** Create dedicated DTOs for each Map/Entity endpoint, add @Valid to Controller methods, then simplify the Controller logic. Focus on **input Maps** (not response Maps) and **Entity @RequestBody** (overposting risk). Skip pagination-only Maps (low value, high churn).
+
+**Tech Stack:** Spring Boot 2.7.18, javax.validation, MyBatis-Plus, Java 8
+
+---
+
+## Scope Decision
+
+**DO convert:** Map params that carry business input (create/update/action endpoints), Entity @RequestBody (overposting vulnerability)
+
+**SKIP:** Pagination-only Maps (page/size/filter — many identical patterns, low validation value), Response-only Maps (return type, not input), Payment callback Maps (external systems, fragile to change)
+
+## Prioritized Task Groups
+
+### Group A: Core Business Input Maps (highest validation value)
+1. AssessmentOrderController: createOrder, getOrderDetail, payOrder
+2. AssessmentAppointmentController: createAppointment
+3. PointsController: adjustPoints
+4. WishController: setPrice, approveExchange, rejectWish, cancelWish
+5. RewardController: exchangeReward, approveReward, getWishlist, getExchangeHistory
+6. TaskController: completeMinigameTask, getTodayTasks, getTaskHistory
+
+### Group B: User/Role/Family Input Maps
+7. FamilyUserController: joinFamily, createFamily, switchMode, switchRole, switchToChild
+8. FamilyController: updateFamilyName
+9. UserController: updateUser
+10. BindInviteController: validateToken
+11. ParentController: createParentWishlist, exchangeParentWishlist
+
+### Group C: Guide/Teacher Input Maps
+12. GuideFamilyTaskController: createTaskForChild, batchReviewTasks
+13. TeacherMessageController: sendMessage, replyMessage
+14. GuideAssessmentController: enableFamilyAssessment
+15. GuidePackageController: getPackageDetail, updatePackage, updateStatus, deletePackage, getTemplateDetail, incrementSales
+16. GuideManagementController: addGuidePackage, updateGuidePackage
+17. GuideOrderController: confirmOrder
+
+### Group D: Other Input Maps
+18. MiniGameController: completeGame
+19. MediaController: uploadText, attachMedia
+20. TaskTemplatePackageController: publishPackage
+21. MarketController: getPublicPackages
+22. GrowthRecordController: syncExternalResult
+23. PackagePaymentController: getOrderStatus, getWechatPayParams, applyAfterPayment
+
+### Group E: Admin Input Maps + Entity Params
+24. AdminController: createUser, resetUserPassword, adjustPoints, approveReward + Entity params (updateUser User, updateChild Child, createRewardTemplate Reward, updateRewardTemplate Reward, updateFamily Family, createTaskTemplate TaskTemplate, updateTaskTemplate TaskTemplate)
+25. AdminAuthController: sendCode, resetPassword, verifyCode
+26. AdminGuideController: Entity params (createPackage GuidePackage, updatePackage GuidePackage)
+27. ServiceContentController: list, getById, update, delete
+28. AssessmentAdminController: createMaterial, updateMaterial, updatePointsConfig
+29. OperationLogController: list, getLogDetail
+
+### Group F: Pagination-only Maps (SKIP - use shared PageQueryDTO if needed later)
+- AdminController: getUsers, getChildren, getTasks, getRewards, getPointsLogs, getFamilies, getTaskTemplates, getGuideApplications, getTeacherFamilyTasks, getTeacherFamilyRewards
+- PointsController: getBalance, getPointsLogs
+- TaskReminderController: all 4 methods
+- StreetController: search, getStatistics
+- GuideOrderController: getOrders
+- MembershipController: canUseFeature
+- GuideFamilyTaskController: getFamilyTasks (pagination)
+- TeacherMessageController: getMessages
+
+### Group G: Payment/Callback Maps (SKIP - external systems)
+- PaymentController: all 4 methods
+- PackagePaymentController: (already in Group D for non-payment)
+- MembershipController: createOrder, paymentNotify
+- AdminAuthController: login, loginByPassword (response Map, input is AdminLoginDTO already @Valid)
+
+---
+
+## Implementation Approach
+
+For each DTO:
+1. Create DTO class in `com.etotem.cfc.dto` with @Data + @NotNull/@NotBlank/@Size annotations
+2. Add @Valid + new DTO type to Controller method signature
+3. Replace Map field extraction with DTO getter calls
+4. Remove redundant null checks now covered by @Valid
+5. Compile verify after each group
+
+## DTO Naming Convention
+- `{Entity}{Action}DTO` for action DTOs (e.g., `AssessmentCreateOrderDTO`)
+- Simple names for common patterns (e.g., `AdjustPointsDTO`)

+ 354 - 0
docs/backup/superpowers/plans/2026-05-13-priority-groups-sfms-migration-parent-tasks.md

@@ -0,0 +1,354 @@
+# 优先级调整实施计划:SFMS 数据迁移 + 家长任务管理
+
+> **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:** 优先完成 SFMS 历史数据迁移,再完善家长端任务管理功能
+
+**Architecture:** 
+- 第一优先组:后端 DataMigrationService(9步迁移流程)→ 修复 SfmsDataSourceConfig 配置格式不匹配 → 验证迁移端点正常工作
+- 第二优先组:后端 TaskController + 前端 create-task.vue/review.vue/tasks.vue → 补全 TASK-006~016 中缺失的功能
+
+**Tech Stack:** Spring Boot 2.7.18 + MyBatis-Plus + uni-app Vue 2 + MySQL 8.0
+
+---
+
+## 文件结构
+
+### 优先组1: SFMS 数据迁移
+
+| 文件 | 角色 | 状态 |
+|------|------|------|
+| `SfmsDataSourceConfig.java` | 多数据源配置 | 需修复:`sfms.datasource.hikari.*` 前缀与实际 yml 配置不匹配 |
+| `application.yml` | sfms 连接配置 | ✅ 已有 `sfms.datasource.*` 配置(阿里云RDS) |
+| `DataMigrationService.java` | 9步迁移引擎 | ✅ 已实现,需端到端验证 |
+| `DataMigrationController.java` | POST `/api/migration/run` | ✅ 已实现 |
+| `MigrationController.java` | 结构迁移端点 | ✅ 已实现 |
+
+### 优先组2: 家长任务管理
+
+| 文件 | 角色 | 状态 |
+|------|------|------|
+| `TaskController.java` | 任务 CRUD API | ✅ 基本功能就绪 |
+| `TaskService.java` | 任务业务逻辑 | ⚠️ 部分功能待完善 |
+| `api.js` | 前端 API 封装 | ✅ 基本功能就绪 |
+| `create-task.vue` | 创建任务页 | ⚠️ 基本功能就绪 |
+| `review.vue` | 审核任务页 | ⚠️ 基本功能就绪 |
+| `tasks.vue` | 任务列表页 | ⚠️ 基本功能就绪 |
+| `parent-index.vue` | 家长首页(含任务入口) | ✅ 已完善 |
+
+---
+
+## 优先组1:SFMS 数据迁移
+
+### Task 1.1: 修复 SfmsDataSourceConfig 配置前缀不匹配
+
+**问题**: `SfmsDataSourceConfig.java` 使用 `sfms.datasource.hikari.*` 配置前缀,但 `application.yml` 中 sfms 配置没有 hikari 层级。
+
+`SfmsDataSourceConfig.java:25` 当前:
+```java
+@ConfigurationProperties(prefix = "sfms.datasource.hikari")
+public DataSource sfmsDataSource() { ... }
+```
+
+`application.yml` 中实际配置:
+```yaml
+sfms:
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://bianwoyou.mysql.rds.aliyuncs.com:3305/sfms?...
+    username: sfms
+    password: sfms@123
+```
+
+**修复**: 去掉 `.hikari` 前缀,或添加 hikari 层级。推荐改成不带 HikariConfig 的简易配置,因为 sfms 不需要连接池调优。
+
+- [ ] **Step 1: 修改 SfmsDataSourceConfig 去掉 hikari 前缀**
+
+  修改 `SfmsDataSourceConfig.java`:
+  - 将 `@ConfigurationProperties(prefix = "sfms.datasource.hikari")` 改为 `@ConfigurationProperties(prefix = "sfms.datasource")`
+  - 去掉 `HikariConfig` 导入,改用 `DataSourceBuilder.create().build()` 即可
+  
+  修改后代码:
+  ```java
+  @Bean(name = "sfmsDataSource")
+  @ConfigurationProperties(prefix = "sfms.datasource")
+  public DataSource sfmsDataSource() {
+      return DataSourceBuilder.create().build();
+  }
+  ```
+
+  同时需要添加 `import org.springframework.boot.jdbc.DataSourceBuilder;`(已有)。
+
+- [ ] **Step 2: 编译验证**
+
+  ```bash
+  cd cfc-backend && mvn clean compile
+  ```
+  预期: BUILD SUCCESS
+
+- [ ] **Step 3: 启动后端验证 sfms 数据源初始化成功**
+
+  ```bash
+  mvn spring-boot:run
+  ```
+  预期: 控制台无 DataSource 相关报错,Spring 启动成功。
+
+  注意:sfms 的阿里云RDS地址 `bianwoyou.mysql.rds.aliyuncs.com:3305` 可能需要网络可达。如无法连接,迁移端点会返回错误但不应影响主应用启动。
+
+- [ ] **Step 4: 提交**
+
+  ```bash
+  git add cfc-backend/src/main/java/com/etotem/cfc/config/SfmsDataSourceConfig.java
+  git commit -m "fix: 修复SfmsDataSourceConfig配置前缀不匹配,去掉hikari层级"
+  ```
+
+### Task 1.2: 端到端验证数据迁移
+
+- [ ] **Step 1: 查看 DataMigrationService 迁移逻辑完整性**
+
+  阅读 DataMigrationService.java 的9步迁移流程,确认:
+  - 每步的 sfms SQL 查询使用了正确的表名
+  - ID 映射缓存逻辑正确(`sfmsPhoneToFamilyId`, `sfmsClientIdToChildUserId` 等)
+  - 错误处理不会中断全流程
+
+- [ ] **Step 2: 启动后端后调用迁移端点**
+
+  ```bash
+  curl -X POST http://localhost:8080/api/migration/run
+  ```
+  预期返回:
+  ```json
+  {
+    "code": 200,
+    "data": {
+      "success": true/false,
+      "migratedFamilies": N,
+      "migratedParents": N,
+      "migratedChildren": N,
+      "migratedTeachers": N,
+      "migratedOrders": N,
+      "migratedResults": N,
+      "migratedRecords": N,
+      "migratedPlans": N,
+      "errors": []
+    }
+  }
+  ```
+
+- [ ] **Step 3: 检查迁移结果**
+
+  - 查询 `families` 表是否有新数据
+  - 查询 `users` 表是否有角色为 parent/child/teacher 的新记录
+  - 查询 `children` 表是否有对应记录
+  - 查询 `package_orders` 表是否有订单记录
+  - 查询 `dan_assessment_results` 表是否有测评结果
+
+- [ ] **Step 4: 提交**
+
+  ```bash
+  git add -A && git commit -m "feat: 完成SFMS数据迁移端到端验证"
+  ```
+
+### Task 1.3: 迁移错误处理和重试机制
+
+- [ ] **Step 1: 检查 DataMigrationService 的幂等性**
+
+  确认多次调用 `/api/migration/run` 不会产生重复数据:
+  - `migrateFamilies()`: 用 `sfmsPhoneToFamilyId` 缓存去重
+  - `migrateParentUsers()`: 用 `phone|openid` 的 Set 去重
+  - `migrateChildUsersAndChildren()`: 用 `sfmsClientIdToChildUserId` 缓存去重
+  
+  如果幂等性不足(例如二次迁移会重复创建家庭),添加基于手机号的查重:
+  ```java
+  // 在 migrateFamilies 方法开头添加
+  if (familyMapper.selectCount(new LambdaQueryWrapper<Family>()
+      .eq(Family::getName, familyName)) > 0) continue;
+  ```
+
+- [ ] **Step 2: 添加迁移进度日志**
+
+  在每个迁移步骤的关键节点添加日志输出,便于排查问题。
+
+- [ ] **Step 3: 提交**
+
+  ```bash
+  git add -A && git commit -m "feat: 增强SFMS迁移幂等性和日志"
+  ```
+
+---
+
+## 优先组2:家长任务管理
+
+### Task 2.1: 评估当前任务功能完整性
+
+- [ ] **Step 1: 对照 task-requirements.md 清单检查实现状态**
+
+  从 `docs/task-requirements.md` 的需求清单逐一检查:
+
+  | ID | 功能 | 检查点 |
+  |----|------|--------|
+  | TASK-001~005 | 基础创建 | create-task.vue + TaskController 确认 |
+  | TASK-006 | 任务模板 | TaskTemplateController / task-templates 页面 |
+  | TASK-007 | 审核方式 | TaskService.reviewTask / review.vue |
+  | TASK-008~009 | 孩子任务 | child-index / TaskController |
+  | TASK-010 | 完成方式 | TaskController.completeTask 参数检查 |
+  | TASK-011 | 任务时长 | Task entity duration 字段检查 |
+  | TASK-012A~F | 打卡方式 | api.js 媒体上传端点检查 |
+  | TASK-013 | 通知 | TaskReminderController 检查 |
+  | TASK-014 | 历史记录 | TaskController 查询参数检查 |
+  | TASK-015 | 统计报表 | TaskController stats 端点检查 |
+  | TASK-016 | 批量操作 | ❌ 待实现 |
+
+- [ ] **Step 2: 汇总缺失功能和待优化项**
+
+  列出每个缺失项的具体工作量和前后端依赖。
+
+- [ ] **Step 3: 提交评估报告**
+
+  ```bash
+  git add docs/task-requirements.md && git commit -m "docs: 更新任务模块功能评估"
+  ```
+
+### Task 2.2: 实现任务模板功能(TASK-006)
+
+**涉及文件:**
+- 后端: `TaskTemplateController.java`, `TaskTemplateService.java`, `TaskTemplateMapper.java`
+- 前端: `pages/tasks/task-templates.vue`(新增)
+
+**背景**: task-requirements.md 中 TASK-006 标注为"部分实现"。后端已有 `TaskTemplate` 实体和 `AdminController` 中的模板管理 API,但前端缺少家长创建和使用模板的页面。
+
+- [ ] **Step 1: 检查后端 TaskTemplate 实体和 API**
+
+  确认 `TaskTemplate` 实体包含字段:`id, title, description, category, points, difficulty, isActive, teacherId, createdAt, updatedAt`
+
+  确认 API 端点的可用性:
+  - `POST /api/admin/task-templates` — 列表查询
+  - `POST /api/admin/task-templates/create` — 创建
+  - `PUT /api/admin/task-templates/{id}` — 更新
+  - `DELETE /api/admin/task-templates/{id}` — 删除
+
+- [ ] **Step 2: 创建家长端任务模板选择器**
+
+  在 `create-task.vue` 中添加"从模板创建"功能:
+  - 添加模板列表 API 调用
+  - 在任务创建页显示模板选择按钮
+  - 选择模板后自动填充表单字段(title, category, points 等)
+
+- [ ] **Step 3: 在 pages.json 注册模板管理页面**
+
+  添加路由 `/pages/tasks/task-templates`,家长可从首页快捷操作进入。
+
+- [ ] **Step 4: 提交**
+
+  ```bash
+  git add -A && git commit -m "feat: 实现家长端任务模板选择功能"
+  ```
+
+### Task 2.3: 完善审核方式和完成方式设置(TASK-007, TASK-010)
+
+- [ ] **Step 1: 检查 Task entity 的审核相关字段**
+
+  确认 Task 实体已有的审核字段:
+  - `reviewType`: auto(自动通过)/ manual(家长审核)
+  - `status`: pending/completed/reviewed 等
+
+  如果需要字段但不存在,在 `Task.java` 中添加:
+  ```java
+  /** 审核方式: auto/manual */
+  private String reviewType;
+  
+  /** 完成方式: photo/video/text/auto */
+  private String completeType;
+  ```
+
+- [ ] **Step 2: 更新 create-task.vue 添加审核方式和完成方式选择**
+
+  在创建任务表单中添加:
+  - 审核方式选择: 自动通过 / 家长审核
+  - 完成方式选择: 拍照 / 视频 / 文字描述 / 自动完成
+
+- [ ] **Step 3: 更新 TaskService 审核逻辑**
+
+  - `auto` 模式: 提交后自动标记为已完成
+  - `manual` 模式: 提交后进入待审核列表
+
+- [ ] **Step 4: 提交**
+
+  ```bash
+  git add -A && git commit -m "feat: 添加任务审核方式和完成方式设置"
+  ```
+
+### Task 2.4: 批量操作功能(TASK-016)
+
+- [ ] **Step 1: 后端批量操作 API**
+
+  在 `TaskController.java` 中添加批量操作端点:
+  ```java
+  @PostMapping("/batch-complete")
+  public Result<Boolean> batchComplete(@RequestBody List<Long> taskIds) {
+      // 批量完成任务
+  }
+  
+  @PostMapping("/batch-delete")
+  public Result<Boolean> batchDelete(@RequestBody List<Long> taskIds) {
+      // 批量删除任务
+  }
+  ```
+
+- [ ] **Step 2: 前端批量操作 UI**
+
+  在 `tasks.vue` 的列表中添加复选框选择和批量操作按钮:
+  - 全选/取消全选
+  - 批量完成
+  - 批量删除
+  - 批量拒审
+
+- [ ] **Step 3: 提交**
+
+  ```bash
+  git add -A && git commit -m "feat: 实现任务批量操作功能"
+  ```
+
+### Task 2.5: 任务时长设置(TASK-011)
+
+- [ ] **Step 1: 在 Task 实体中添加 duration 字段**
+
+  ```java
+  /** 预计时长(分钟) */
+  private Integer duration;
+  ```
+
+- [ ] **Step 2: 更新 create-task.vue 添加时长输入**
+
+  ```html
+  <view class="form-item">
+    <text class="label">预计时长(分钟)</text>
+    <input class="input" type="number" v-model="form.duration" placeholder="请输入预计完成时长" />
+  </view>
+  ```
+
+- [ ] **Step 3: 提交**
+
+  ```bash
+  git add -A && git commit -m "feat: 添加任务时长设置功能"
+  ```
+
+---
+
+## 自检清单
+
+### Spec 覆盖
+- [ ] SFMS 数据源配置修复 → Task 1.1
+- [ ] 数据迁移端到端验证 → Task 1.2
+- [ ] 迁移幂等性和错误处理 → Task 1.3
+- [ ] 任务模板功能 → Task 2.2
+- [ ] 审核方式设置 → Task 2.3
+- [ ] 完成方式设置 → Task 2.3
+- [ ] 批量操作 → Task 2.4
+- [ ] 任务时长设置 → Task 2.5
+
+### 无占位符检查
+- [ ] 所有代码块包含完整实现代码
+- [ ] 所有文件路径使用绝对/项目相对路径
+- [ ] 所有命令含预期输出
+- [ ] 没有"TBD"、"TODO"或"待完善"等占位词(评估项除外)

+ 109 - 0
docs/backup/superpowers/plans/2026-05-16-parent-redesign.md

@@ -0,0 +1,109 @@
+# 家长首页重构 Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development to implement this plan task-by-task.
+
+**Goal:** Reconstruct parent mini-program homepage with child cards as core navigation, add child detail page.
+
+**Architecture:** Vue 2 + uni-app. Add child card row to parent-index.vue top, move growth archive into new child-detail.vue page. Other pages add childId query param support.
+
+**Tech Stack:** uni-app (Vue 2), WeChat miniprogram
+
+---
+
+### Task 1: Create child-detail.vue (new page)
+
+**Files:**
+- Create: `cfc-frontend/pages/parent/child-detail.vue`
+
+**Spec:**
+- Route `/pages/parent/child-detail?childId=X`
+- Top: child info card (avatar, name, points, DAN level, streak days)
+- Middle: action buttons (创建任务 → navigate with childId, 心愿审核, 成长档案)
+- Bottom: today's tasks list (call getTodayTasks(childId)), pending review items
+- Use `onLoad(options)` to get childId from query params
+- Data: `getChildren()` → find child by id, `getTodayTasks(childId)`, `getPendingReviewTasks()`, wish API
+- Style: match parent-index.vue color scheme (#FFF9F0 background, orange #FF8C42 accents, white cards with shadow)
+
+**Key code structure:**
+```vue
+<template>
+  <view class="child-detail-container">
+    <!-- 孩子信息卡片 -->
+    <view class="info-card">...</view>
+    <!-- 操作区 -->
+    <view class="actions">...</view>
+    <!-- 今日任务 -->
+    <view class="tasks-section">...</view>
+    <!-- 待处理 -->
+    <view class="pending-section">...</view>
+  </view>
+</template>
+```
+
+### Task 2: Restructure parent-index.vue
+
+**Files:**
+- Modify: `cfc-frontend/pages/index/parent-index.vue`
+
+**Changes:**
+1. Replace the existing `child-status-card` with a **child cards row** at the top (after greeting):
+   - One child: single large card ~70% width, centered, shows avatar, name, points, pending count
+   - Multiple children: horizontal scroll `scroll-view`, each card ~160rpx wide
+   - Click card → navigate to child-detail
+2. Keep existing sections below: stat cards (今日概览), 今日重点, 成长里程碑
+3. Enhance 待审核 section to show per-child items
+4. Quick actions: remove 成长档案 (moved to child-detail), keep others
+
+**Layout structure:**
+```
+welcome greeting
+child cards row (scroll-view horizontal, new)
+成长数据 (existing stats-grid)
+今日重点 (existing today-section)
+成长里程碑 (existing milestone-section)
+待审核任务 (existing review-section, kept)
+快捷操作 (existing quick-section, minus 成长档案)
+```
+
+### Task 3: Register child-detail route in pages.json
+
+**Files:**
+- Modify: `cfc-frontend/pages.json`
+
+**Add:**
+```json
+{
+  "path": "pages/parent/child-detail",
+  "style": {
+    "navigationBarTitleText": "孩子详情"
+  }
+}
+```
+
+### Task 4: Support childId param in create-task.vue
+
+**Files:**
+- Modify: `cfc-frontend/pages/tasks/create-task.vue`
+
+**Changes:**
+- In `onLoad(options)`: if `options.childId` exists, pre-select that child in the picker
+- Add `childId` to data, set in onLoad
+- The child picker already has `children` from mounted/getChildren, just set `selectedChildIndex` based on childId
+
+### Task 5: Support childId param in parent/wishes/index.vue
+
+**Files:**
+- Modify: `cfc-frontend/pages/parent/wishes/index.vue`
+
+**Changes:**
+- In `onLoad(options)`: accept `childId`, filter wishes by childId if provided
+- Add `childId` to data, pass to API calls that support it
+
+### Task 6: Support childId param in growth/index.vue
+
+**Files:**
+- Modify: `cfc-frontend/pages/growth/index.vue`
+
+**Changes:**
+- In `onLoad(options)`: accept `childId`, auto-select that child
+- If childId provided, skip the children list selection and directly load that child's records

+ 134 - 0
docs/backup/superpowers/plans/2026-05-19-guide-invite-code-flow.md

@@ -0,0 +1,134 @@
+# Team Invitation Code Flow Implementation Plan
+
+> **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:** Implement two-code system (team + family) for guides and complete mini-program invite flow
+
+**Architecture:** Backend adds `type` field to `GuideInviteCode`, mini-program checks invite code type on registration to route correctly (register → apply → join), Web admin shows both codes in Layout.vue dialog
+
+**Tech Stack:** Spring Boot 2.7.18, uni-app Vue 2, Vue 2 + Element UI
+
+---
+
+### Task 1: Backend — Add type field to GuideInviteCode
+
+**Files:**
+- Modify: `cfc-backend/.../entity/GuideInviteCode.java:24` (add type field)
+- Modify: `cfc-backend/.../service/GuideInviteCodeService.java` (support type in create/generate)
+- Modify: `cfc-backend/.../controller/guide/GuideTeamController.java` (add type to invite-code response)
+
+**Details:**
+- Add `private String type;` to `GuideInviteCode` with values `"team"` / `"family"`
+- Default new codes to `"team"` in `generateInviteCode()`
+- `createInviteCode()` checks existing by guideId + type, not just guideId
+- `GuideTeamController.getMyInviteCode()` accepts optional `type` param (defaults to `"team"`)
+- New endpoint `POST /api/guide/team/invite-code/family` returns family-type code
+
+---
+
+### Task 2: Backend — Invite code validation with type routing
+
+**Files:**
+- Modify: `cfc-backend/.../service/GuideInviteCodeService.java`
+- Modify: `cfc-backend/.../controller/guide/GuideManagementController.java`
+
+**Details:**
+- `validateInviteCode(code, type)` — validates code matches the expected type
+- `POST /api/guide/invite-code/validate` enhanced to return code type + guide info
+- Response includes: `{ valid, type, guideId, guideName, code }`
+
+---
+
+### Task 3: Backend — Team join/leave endpoints
+
+**Files:**
+- New: (add to) `cfc-backend/.../controller/guide/GuideTeamController.java`
+
+**Endpoints:**
+- `POST /api/guide/team/join` — accept `{ inviteCode, userId }`, validates code, checks if user is already a teacher, if in another team → error telling them to leave first
+- `POST /api/guide/team/leave` — removes user from team (clears `teacher_no` or team relation)
+- `POST /api/guide/team/check-status` — returns `{ isTeacher, inTeam, teamId }` for the invite code flow routing
+
+---
+
+### Task 4: Web admin — Show both codes in Layout.vue dialog
+
+**Files:**
+- Modify: `cfc-web/src/api/guide.js` — add `getMyFamilyInviteCode()`
+- Modify: `cfc-web/src/views/Layout.vue` — extend invite code dialog
+
+**Details:**
+- Add "家庭邀请码" section below "团队邀请码" in the existing dialog
+- Family invite code fetched via separate API call
+- Both codes shown with copy button
+- Each section has description text explaining what the code is for
+
+---
+
+### Task 5: Mini-program — Registration with invite code
+
+**Files:**
+- Modify: `cfc-frontend/pages/login/login.vue`
+- Modify: `cfc-frontend/utils/api.js`
+
+**Details:**
+- When app opens with invite code param (from QR code or shared link), store it
+- Registration page: show invite code indicator, collect phone + verification code + nickname only (no role selection)
+- On submit: `POST /api/auth/register-with-invite` with `{ phone, code, inviteCode, nickname }`
+- Backend creates user, checks invite code type, routes accordingly
+
+---
+
+### Task 6: Mini-program — Invite code routing (application flow)
+
+**Files:**
+- New: `cfc-frontend/pages/guide/apply/index.vue` (guide application page)
+- Modify: `cfc-frontend/pages/teacher/index.vue`
+- Modify: `cfc-frontend/App.vue`
+
+**Details:**
+- After registration, if invite code is team-type:
+  - User already has `role=teacher` → redirect to confirm team join
+  - User has `teacherStatus=pending` → show application pending page
+  - User is not a teacher → show guide application page
+- If invite code is family-type: bind to family on registration
+- Store `inviteCodeInfo` in global state (guide name, code type)
+
+---
+
+### Task 7: Mini-program — Team join confirmation page
+
+**Files:**
+- New: `cfc-frontend/pages/guide/team-confirm/index.vue`
+
+**Details:**
+- Shows: inviting guide info (name, avatar), current team info (if any)
+- If already in a team: "您当前在 XX 团队中,请先退出再加入新团队" with "退出团队" button
+- If eligible: "确认加入 XX 的团队" → calls `/api/guide/team/join`
+- Success → navigate to teacher home
+
+---
+
+### Task 8: Database migration
+
+**Files:**
+- Modify: `cfc-backend/.../config/DatabaseInitializer.java`
+
+**SQL:**
+```sql
+ALTER TABLE guide_invite_codes ADD COLUMN type VARCHAR(20) DEFAULT 'team' COMMENT '邀请码类型: team/family';
+ALTER TABLE guide_invite_codes ADD INDEX idx_type (type);
+```
+
+---
+
+### Task 9: Mini-program registration page update
+
+**Files:**
+- Modify: `cfc-frontend/pages/login/login.vue` or registration page
+
+**Details:**
+- Remove role selector when invite code is present
+- Add hidden field carrying invite code through the flow
+- After registration success, call `/api/guide/team/check-status` to determine next step
+- Navigate to appropriate page based on user status + invite code type

+ 824 - 0
docs/backup/superpowers/plans/2026-05-24-parent-homepage-system-points.md

@@ -0,0 +1,824 @@
+# 家长首页数据接入 & 系统积分方案实现计划
+
+> **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:** 在现有积分体系上增加 `category` 分类标识区分系统积分与任务积分;测评完成时自动发放系统积分;家长首页对接真实 API 数据替代模拟数据。
+
+**Tech Stack:** Spring Boot 2.7.18 + MyBatis-Plus + uni-app Vue 2
+
+---
+
+### 数据模型变更
+
+```
+children 表: + system_points INT DEFAULT 0   -- 系统积分余额
+points_log 表: + category VARCHAR(20)         -- 'task' / 'system' 分类标识
+```
+
+### API 变更
+
+```
+新增 POST /api/parent/dashboard          -- 家长首页统计数据
+新增 POST /api/guide/record/create        -- 改造: 录入测评结果后自动发放系统积分
+新增 POST /api/guide/record/complete      -- 字段增: 增加completeRecord方法使之额外发放系统积分
+
+改造 POST /api/user/children/list         -- ChildInfoDTO 增加 systemPoints
+改造 POST /api/user/family-members        -- 修复URL (前端) 或增加后端映射
+改造 POST /api/guide/record/create        -- 录入结果后发放系统积分
+```
+
+---
+
+### Task 1: 数据库 Schema 变更
+
+**Files:**
+- Modify: `cfc-backend/src/main/resources/schema.sql`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/entity/PointsLog.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/entity/Child.java`
+
+- [ ] **Step 1: schema.sql 添加字段**
+
+在 `children` 表添加 `system_points` 字段,在 `points_log` 表添加 `category` 字段:
+
+```sql
+-- schema.sql children 表: 在 total_points 后添加
+system_points INT DEFAULT 0 COMMENT '系统积分(测评建档/平台发放)',
+
+-- schema.sql points_log 表: 在 type 后添加
+category VARCHAR(20) DEFAULT 'task' COMMENT '积分分类: task-任务积分, system-系统积分',
+```
+
+- [ ] **Step 2: DatabaseInitializer 添加迁移**
+
+```java
+// DatabaseInitializer.java runMigrations() 末尾添加
+
+// 迁移20: children表添加system_points字段
+try {
+    jdbcTemplate.execute("ALTER TABLE children ADD COLUMN system_points INT DEFAULT 0 COMMENT '系统积分'");
+    log.info("已添加system_points列到children表");
+} catch (Exception e) {
+    log.warn("添加system_points列可能已存在: {}", e.getMessage());
+}
+
+// 迁移21: points_log表添加category字段
+try {
+    jdbcTemplate.execute("ALTER TABLE points_log ADD COLUMN category VARCHAR(20) DEFAULT 'task' COMMENT '积分分类: task任务积分, system系统积分'");
+    log.info("已添加category列到points_log表");
+} catch (Exception e) {
+    log.warn("添加category列可能已存在: {}", e.getMessage());
+}
+```
+
+- [ ] **Step 3: Child 实体添加 systemPoints**
+
+```java
+// Child.java
+/** 系统积分(测评建档/平台发放) */
+private Integer systemPoints;
+```
+
+- [ ] **Step 4: PointsLog 实体添加 category**
+
+```java
+// PointsLog.java
+/** 积分分类: task-任务积分, system-系统积分 */
+private String category;
+```
+
+- [ ] **Step 5: 编译验证**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+---
+
+### Task 2: PointsService 添加系统积分方法
+
+**Files:**
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/service/PointsService.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/service/api/PointsServiceInterface.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/mapper/PointsLogMapper.java` (一般不需要改)
+
+- [ ] **Step 1: PointsService 添加 awardSystemPoints 方法**
+
+```java
+// PointsService.java
+
+/**
+ * 发放系统积分
+ * @param childId 孩子ID
+ * @param amount 积分数量(正数)
+ * @param reason 发放原因
+ * @return 发放后的系统积分余额
+ */
+@Transactional
+public int awardSystemPoints(Long childId, int amount, String reason) {
+    if (amount <= 0) {
+        throw new IllegalArgumentException("系统积分数量必须为正数");
+    }
+    
+    Child child = childMapper.selectById(childId);
+    if (child == null) {
+        throw new RuntimeException("孩子不存在");
+    }
+    
+    // 更新系统积分
+    int newSystemPoints = (child.getSystemPoints() == null ? 0 : child.getSystemPoints()) + amount;
+    child.setSystemPoints(newSystemPoints);
+    child.setUpdatedAt(new Date());
+    childMapper.updateById(child);
+    
+    // 同时增加总积分
+    int newTotal = (child.getTotalPoints() == null ? 0 : child.getTotalPoints()) + amount;
+    child.setTotalPoints(newTotal);
+    child.setUpdatedAt(new Date());
+    childMapper.updateById(child);
+    
+    // 记录流水
+    PointsLog log = new PointsLog();
+    log.setChildId(childId);
+    log.setAmount(amount);
+    log.setType("earn");
+    log.setCategory("system");
+    log.setDescription(reason);
+    log.setCreatedAt(new Date());
+    pointsLogMapper.insert(log);
+    
+    return newSystemPoints;
+}
+
+/**
+ * 扣除系统积分
+ * @param childId 孩子ID
+ * @param amount 扣除数量(正数)
+ * @param reason 扣除原因
+ * @return 扣除后的系统积分余额,余额不足返回-1
+ */
+@Transactional
+public int deductSystemPoints(Long childId, int amount, String reason) {
+    if (amount <= 0) {
+        throw new IllegalArgumentException("扣除数量必须为正数");
+    }
+    
+    Child child = childMapper.selectById(childId);
+    if (child == null) {
+        throw new RuntimeException("孩子不存在");
+    }
+    
+    int currentSystem = child.getSystemPoints() == null ? 0 : child.getSystemPoints();
+    if (currentSystem < amount) {
+        return -1; // 余额不足
+    }
+    
+    int newSystemPoints = currentSystem - amount;
+    child.setSystemPoints(newSystemPoints);
+    child.setUpdatedAt(new Date());
+    childMapper.updateById(child);
+    
+    // 同时扣除总积分
+    int newTotal = (child.getTotalPoints() == null ? 0 : child.getTotalPoints()) - amount;
+    child.setTotalPoints(newTotal);
+    child.setUpdatedAt(new Date());
+    childMapper.updateById(child);
+    
+    // 记录流水
+    PointsLog log = new PointsLog();
+    log.setChildId(childId);
+    log.setAmount(-amount);
+    log.setType("spend");
+    log.setCategory("system");
+    log.setDescription(reason);
+    log.setCreatedAt(new Date());
+    pointsLogMapper.insert(log);
+    
+    return newSystemPoints;
+}
+
+/**
+ * 获取孩子可用的系统积分余额
+ */
+public int getSystemPointsBalance(Long childId) {
+    Child child = childMapper.selectById(childId);
+    if (child == null) {
+        return 0;
+    }
+    return child.getSystemPoints() == null ? 0 : child.getSystemPoints();
+}
+
+/**
+ * 获取积分流水(支持按分类筛选)
+ */
+public Page<PointsLog> getPointsLogsByCategory(Long childId, String category, Integer page, Integer size) {
+    Page<PointsLog> pageParam = new Page<>(page, size);
+    LambdaQueryWrapper<PointsLog> wrapper = new LambdaQueryWrapper<PointsLog>()
+            .eq(PointsLog::getChildId, childId);
+    if (category != null && !category.isEmpty()) {
+        wrapper.eq(PointsLog::getCategory, category);
+    }
+    wrapper.orderByDesc(PointsLog::getCreatedAt);
+    return pointsLogMapper.selectPage(pageParam, wrapper);
+}
+```
+
+- [ ] **Step 2: PointsServiceInterface 添加接口方法(如果存在)**
+
+```java
+// PointsServiceInterface.java
+int awardSystemPoints(Long childId, int amount, String reason);
+int deductSystemPoints(Long childId, int amount, String reason);
+int getSystemPointsBalance(Long childId);
+Page<PointsLog> getPointsLogsByCategory(Long childId, String category, Integer page, Integer size);
+```
+
+- [ ] **Step 3: 编译验证**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+---
+
+### Task 3: 测评完成自动发放系统积分
+
+**Files:**
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/controller/guide/GuideRecordController.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/service/AssessmentService.java`
+
+- [ ] **Step 1: GuideRecordController.createRecord 中发放系统积分**
+
+```java
+// GuideRecordController.java
+
+@Resource
+private PointsService pointsService;
+
+// 在 createRecord 方法末尾,return 之前增加系统积分发放
+@Operation(summary = "录入测评结果(含孩子快照)")
+@PostMapping("/create")
+public Result<DanAssessmentResult> createRecord(
+        @RequestAttribute("userId") Long userId,
+        @RequestAttribute("role") String role,
+        @RequestBody DanAssessmentResult result) {
+    if (!"teacher".equals(role)) {
+        return Result.error("只有成长规划师可以录入测评结果");
+    }
+    result.setTeacherId(userId);
+    result.setStatus("completed");
+    result.setCreatedAt(new Date());
+    result.setUpdatedAt(new Date());
+    if (result.getAssessmentDate() == null) {
+        result.setAssessmentDate(new Date());
+    }
+    DanAssessmentResult saved = assessmentService.recordResult(result);
+    
+    // 发放系统积分:首次建档奖励(从配置表读取积分值,默认50)
+    if (saved != null && saved.getChildId() != null) {
+        try {
+            AssessmentPointsConfig config = assessmentService.getPointsConfig();
+            int points = (config != null && config.getPointsValue() != null) 
+                ? config.getPointsValue() : 50;
+            pointsService.awardSystemPoints(saved.getChildId(), points, 
+                "完成测评建档奖励");
+        } catch (Exception e) {
+            log.error("发放系统积分失败", e);
+            // 不阻断主流程
+        }
+    }
+    
+    return Result.success(saved);
+}
+```
+
+需要在 GuideRecordController 中添加 Logger:
+
+```java
+private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(GuideRecordController.class);
+```
+
+- [ ] **Step 2: AssessmentService 添加 getPointsConfig 返回类型修复**
+
+`getPointsConfig()` 已经是 public,可以直接从 Controller 调用,不需要修改。
+
+- [ ] **Step 3: 编译验证**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+---
+
+### Task 4: ChildInfoDTO 增加 systemPoints
+
+**Files:**
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/dto/ChildInfoDTO.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/service/UserService.java`
+
+- [ ] **Step 1: ChildInfoDTO 添加 systemPoints**
+
+```java
+// ChildInfoDTO.java
+private Integer systemPoints;
+```
+
+- [ ] **Step 2: toChildInfoDTO 映射 systemPoints**
+
+```java
+// UserService.java toChildInfoDTO 方法中
+dto.setSystemPoints(child.getSystemPoints());
+```
+
+- [ ] **Step 3: 编译验证**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+---
+
+### Task 5: 家长首页统计数据 API
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/parent/ParentDashboardController.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/service/TaskStatsService.java` (如需要)
+
+- [ ] **Step 1: 创建 ParentDashboardController**
+
+```java
+package com.etotem.cfc.controller.parent;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.dto.ChildInfoDTO;
+import com.etotem.cfc.service.PointsService;
+import com.etotem.cfc.service.TaskService;
+import com.etotem.cfc.service.UserService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+@Tag(name = "家长首页", description = "家长首页数据接口")
+@RestController
+@RequestMapping("/api/parent")
+public class ParentDashboardController {
+
+    @Resource
+    private UserService userService;
+
+    @Resource
+    private TaskService taskService;
+
+    @Resource
+    private PointsService pointsService;
+
+    @Operation(summary = "获取家长首页仪表盘数据")
+    @PostMapping("/dashboard")
+    public Result<Map<String, Object>> getDashboard(HttpServletRequest request) {
+        Long userId = (Long) request.getAttribute("userId");
+        
+        // 获取孩子列表(复用现有接口)
+        List<ChildInfoDTO> children = userService.getChildren(userId);
+        
+        List<Map<String, Object>> childStatsList = new ArrayList<>();
+        int totalCompletionRate = 0;
+        int totalHabitCount = 0;
+        int childCount = children.size();
+        
+        for (ChildInfoDTO child : children) {
+            Map<String, Object> stats = new HashMap<>();
+            stats.put("id", child.getId());
+            stats.put("nickname", child.getNickname());
+            stats.put("totalPoints", child.getTotalPoints());
+            stats.put("systemPoints", child.getSystemPoints());
+            stats.put("streakDays", child.getStreakDays());
+            stats.put("danLevel", child.getDanLevel());
+            stats.put("age", child.getAge());
+            
+            // 计算任务完成率(今日/本周)
+            // 这里简化处理:从TaskService获取统计数据
+            Map<String, Object> taskStats = taskService.getChildTaskStats(child.getId());
+            stats.put("completionRate", taskStats.getOrDefault("completionRate", 0));
+            stats.put("pendingReviewCount", taskStats.getOrDefault("pendingReviewCount", 0));
+            
+            // 习惯打卡数量(今日已完成的任务中标记为习惯的数量)
+            stats.put("habitCount", taskStats.getOrDefault("habitCount", 0));
+            
+            totalCompletionRate += (Integer) taskStats.getOrDefault("completionRate", 0);
+            totalHabitCount += (Integer) taskStats.getOrDefault("habitCount", 0);
+            
+            childStatsList.add(stats);
+        }
+        
+        Map<String, Object> result = new HashMap<>();
+        result.put("children", childStatsList);
+        result.put("avgCompletionRate", childCount > 0 ? totalCompletionRate / childCount : 0);
+        result.put("totalHabitCount", totalHabitCount);
+        
+        return Result.success(result);
+    }
+}
+
+import com.etotem.cfc.mapper.TaskMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.Task;
+```
+
+- [ ] **Step 2: TaskService 添加 getChildTaskStats 方法**
+
+```java
+// TaskService.java
+
+@Resource
+private TaskMapper taskMapper;
+
+/**
+ * 获取孩子的任务统计数据
+ */
+public Map<String, Object> getChildTaskStats(Long childId) {
+    Map<String, Object> stats = new HashMap<>();
+    
+    Date now = new Date();
+    
+    // 今日任务统计
+    Calendar cal = Calendar.getInstance();
+    cal.set(Calendar.HOUR_OF_DAY, 0);
+    cal.set(Calendar.MINUTE, 0);
+    cal.set(Calendar.SECOND, 0);
+    cal.set(Calendar.MILLISECOND, 0);
+    Date todayStart = cal.getTime();
+    
+    cal.set(Calendar.HOUR_OF_DAY, 23);
+    cal.set(Calendar.MINUTE, 59);
+    cal.set(Calendar.SECOND, 59);
+    Date todayEnd = cal.getTime();
+    
+    // 获取孩子所有任务
+    List<Task> allTasks = taskMapper.selectList(
+        new LambdaQueryWrapper<Task>()
+            .eq(Task::getChildId, childId)
+            .between(Task::getDeadline, todayStart, todayEnd)
+    );
+    
+    long completed = allTasks.stream()
+        .filter(t -> "completed".equals(t.getStatus()))
+        .count();
+    
+    int completionRate = allTasks.isEmpty() ? 0 : (int) (completed * 100 / allTasks.size());
+    
+    // 待审核任务
+    List<Task> pendingReview = taskMapper.selectList(
+        new LambdaQueryWrapper<Task>()
+            .eq(Task::getChildId, childId)
+            .eq(Task::getNeedReview, 1)
+            .eq(Task::getStatus, "pending")
+    );
+    
+    // 习惯打卡数量(统计今日完成的habit类任务)
+    long habitCount = allTasks.stream()
+        .filter(t -> "completed".equals(t.getStatus()))
+        .filter(t -> "habit".equals(t.getCategory()))
+        .count();
+    
+    stats.put("completionRate", completionRate);
+    stats.put("pendingReviewCount", pendingReview.size());
+    stats.put("habitCount", (int) habitCount);
+    
+    return stats;
+}
+```
+
+需要在 TaskService.java 的 import 区域添加:
+```java
+import java.util.HashMap;
+import java.util.Map;
+```
+
+- [ ] **Step 3: 编译验证**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+---
+
+### Task 6: 修复 getFamilyMembers() URL 并增加系统积分字段
+
+**Files:**
+- Modify: `cfc-frontend/utils/api.js`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/controller/UserController.java`
+
+- [ ] **Step 1: 修复前端 API URL**
+
+```javascript
+// api.js 第141行
+// 改前:
+export const getFamilyMembers = () => {
+    return request('/api/user/family-members', 'POST')
+}
+// 改后:
+export const getFamilyMembers = () => {
+    return request('/api/family/user/family-members', 'POST')
+}
+```
+
+- [ ] **Step 2: 后端 UserController 增加 /family-members 端点作为额外入口(可选,保持兼容)**
+
+如果不想改前端 URL,也可以在 `UserController` 中增加 `/family-members` 端点:
+```java
+// UserController.java
+
+@Resource
+private FamilyMapper familyMapper;
+
+@Resource
+private ChildMapper childMapper;
+
+@PostMapping("/family-members")
+@Operation(summary = "获取家庭成员列表(兼容)")
+public Result<Map<String, Object>> getFamilyMembers(HttpServletRequest request) {
+    Long userId = (Long) request.getAttribute("userId");
+    User user = userMapper.selectById(userId);
+    if (user == null || user.getFamilyId() == null) {
+        return Result.error("用户未加入家庭");
+    }
+    
+    List<User> parents = userMapper.selectList(
+        new LambdaQueryWrapper<User>()
+            .eq(User::getFamilyId, user.getFamilyId())
+            .eq(User::getRole, "parent")
+    );
+    
+    List<Child> children = childMapper.selectList(
+        new LambdaQueryWrapper<Child>()
+            .eq(Child::getFamilyId, user.getFamilyId())
+    );
+    
+    Map<String, Object> result = new HashMap<>();
+    result.put("parents", parents);
+    result.put("children", children);
+    return Result.success(result);
+}
+```
+
+- [ ] **Step 3: 编译验证**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+---
+
+### Task 7: 家长首页对接真实数据
+
+**Files:**
+- Modify: `cfc-frontend/pages/index/parent-index.vue`
+
+- [ ] **Step 1: 添加 dashboard API 调用**
+
+```javascript
+// parent-index.vue script 顶部 import 区域添加
+import { getFamilyMembers, getChildren, getPendingReviewTasks, approveTask, rejectTask, getPendingWishes } from '../../utils/api.js'
+```
+
+- [ ] **Step 2: 新 API 封装**
+
+```javascript
+// api.js 添加
+export const getParentDashboard = () => {
+    return request('/api/parent/dashboard', 'POST')
+}
+```
+
+- [ ] **Step 3: 改造 loadData 方法**
+
+```javascript
+// parent-index.vue loadData 方法改造
+
+async loadData() {
+    try {
+        const userInfo = uni.getStorageSync('userInfo')
+        this.nickname = (userInfo && userInfo.nickname) ? userInfo.nickname : ''
+
+        // 获取仪表盘数据(包含孩子列表 + 统计数据)
+        try {
+            const dashRes = await getParentDashboard()
+            const dashData = dashRes.data || {}
+            const dashChildren = dashData.children || []
+            
+            if (dashChildren.length > 0) {
+                this.children = dashChildren
+                this.selectedChild = dashChildren[0]
+                this.taskCompletionRate = dashData.avgCompletionRate || 85
+                this.habitCount = dashData.totalHabitCount || 0
+            }
+        } catch(e) {
+            console.log('获取仪表盘数据失败,降级到单独接口', e)
+            // 降级:使用原有逻辑
+            try {
+                const membersRes = await getFamilyMembers()
+                // ... 原有 getFamilyMembers 逻辑
+            } catch(e2) {
+                console.log('获取家庭成员失败', e2)
+            }
+            
+            const childrenRes = await getChildren()
+            const rawChildren = childrenRes.data || []
+            this.children = rawChildren
+            if (this.children.length > 0 && !this.selectedChild) {
+                this.selectedChild = this.children[0]
+            }
+        }
+
+        // 获取待审核任务(保持不变)
+        const reviewRes = await getPendingReviewTasks()
+        const allReviewTasks = reviewRes.data || []
+        this.pendingReviewTasks = allReviewTasks.slice(0, 3)
+
+        // 获取待处理心愿(保持不变)
+        try {
+            const wishRes = await getPendingWishes()
+            this.pendingReviewWishes = wishRes.data || []
+        } catch (e) {
+            console.log('获取待处理心愿失败', e)
+            this.pendingReviewWishes = []
+        }
+
+        // 计算待处理数量(保持不变)
+        const reviewMap = {}
+        const wishMap = {}
+        for (const task of allReviewTasks) {
+            const cid = task.childId || task.assigneeId
+            if (cid) {
+                reviewMap[cid] = (reviewMap[cid] || 0) + 1
+            }
+        }
+        for (const wish of (this.pendingReviewWishes || [])) {
+            const cid = wish.childId
+            if (cid) {
+                wishMap[cid] = (wishMap[cid] || 0) + 1
+            }
+        }
+        this.children = this.children.map(c => ({
+            ...c,
+            pendingReviewCount: reviewMap[c.id] || 0,
+            pendingWishCount: wishMap[c.id] || 0
+        }))
+
+        // 移除模拟数据,改用真实数据
+        // this.pendingTasks = [ ... ]  // 删除模拟数据
+        
+        // 如果有待审核任务或心愿,不显示模拟任务
+        if (allReviewTasks.length > 0) {
+            this.pendingTasks = allReviewTasks.slice(0, 3).map(t => ({
+                id: t.id,
+                title: t.title,
+                childName: t.childName
+            }))
+        } else {
+            this.pendingTasks = []
+        }
+        
+        // 不再使用随机值
+        // this.taskCompletionRate = Math.floor(Math.random() * 30) + 70  // 删除这行
+    } catch (e) {
+        console.error('加载数据失败', e)
+    }
+},
+```
+
+- [ ] **Step 4: 子卡展示系统积分(可选增强)**
+
+```html
+<!-- parent-index.vue 子卡中增加系统积分展示 -->
+<text class="child-card-system-points" v-if="child.systemPoints > 0">
+  🏅 系统 {{ child.systemPoints }}
+</text>
+```
+
+在 style 区域添加:
+```css
+.child-card-system-points {
+  font-size: 20rpx;
+  color: #667eea;
+  font-weight: 500;
+  margin-left: 8rpx;
+}
+```
+
+---
+
+### Task 8: PointsController 增加系统积分相关接口
+
+**Files:**
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/controller/family/PointsController.java`
+
+- [ ] **Step 1: 添加系统积分余额接口**
+
+```java
+// PointsController.java
+
+@PostMapping("/system-balance")
+public Result<Map<String, Object>> getSystemBalance(@RequestBody Map<String, Object> params) {
+    Long childId = params.get("childId") != null ? Long.valueOf(params.get("childId").toString()) : null;
+    if (childId == null) {
+        return Result.error("childId不能为空");
+    }
+    int balance = pointsService.getSystemPointsBalance(childId);
+    Map<String, Object> result = new HashMap<>();
+    result.put("systemPoints", balance);
+    return Result.success(result);
+}
+
+@PostMapping("/logs-by-category")
+public Result<Page<PointsLog>> getPointsLogsByCategory(@RequestBody Map<String, Object> params) {
+    Long childId = params.get("childId") != null ? Long.valueOf(params.get("childId").toString()) : null;
+    String category = params.get("category") != null ? params.get("category").toString() : null;
+    Integer page = params.get("page") != null ? Integer.valueOf(params.get("page").toString()) : 1;
+    Integer size = params.get("size") != null ? Integer.valueOf(params.get("size").toString()) : 10;
+    Page<PointsLog> logs = pointsService.getPointsLogsByCategory(childId, category, page, size);
+    return Result.success(logs);
+}
+```
+
+- [ ] **Step 2: 编译验证**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+---
+
+### Task 9: 系统积分前端展示
+
+**Files:**
+- Modify: `cfc-frontend/pages/rewards/rewards.vue`(积分展示区域)
+- Modify: `cfc-frontend/pages/profile/profile.vue`(个人中心展示)
+
+- [ ] **Step 1: 封装前端 API**
+
+```javascript
+// api.js 添加
+export const getSystemBalance = (childId) => {
+    return request('/api/points/system-balance', 'POST', { childId })
+}
+```
+
+- [ ] **Step 2: 积分展示页面调整**
+
+在 rewards.vue 或 profile.vue 的积分区域展示系统积分:
+
+```javascript
+// profile.vue 或 rewards.vue 的 onShow/loadData 中
+// 获取系统积分余额
+try {
+    if (this.children && this.children.length > 0) {
+        const sysRes = await getSystemBalance(this.children[0].id)
+        this.systemPoints = sysRes.data.systemPoints || 0
+    }
+} catch (e) {
+    console.log('获取系统积分失败', e)
+}
+```
+
+---
+
+### Task 10: 编译 & 启动验证
+
+- [ ] **Step 1: 后端编译**
+
+Run: `cd cfc-backend && mvn clean compile`
+Expected: BUILD SUCCESS
+
+- [ ] **Step 2: 检查路由冲突**
+
+```bash
+grep -rn '@GetMapping\|@PostMapping\|@PutMapping\|@DeleteMapping' src/main/java/com/etotem/cfc/controller/ | grep -oP '@\w+Mapping\("\K[^"]*' | sort -u | grep -E 'dashboard|system-balance|logs-by-category|family-members'
+```
+
+Expected: 无冲突路由
+
+- [ ] **Step 3: 启动后端**
+
+Run: `cd cfc-backend && mvn spring-boot:run`
+Expected: Started Application in X seconds
+
+---
+
+## 自检清单
+
+**1. 需求覆盖:**
+- ✅ 家长首页对接真实数据 (Task 5, 7)
+- ✅ 系统积分分类标识 (Task 1)
+- ✅ 测评建档发放系统积分 (Task 3)
+- ✅ 系统积分可用于复测/兑换 (Task 2, 8, 9)
+- ✅ 修复 getFamilyMembers() URL (Task 6)
+
+**2. 占位符检查:**
+- 所有代码段已填充完整实现,无 TBD/TODO 模式
+- 所有步骤包含具体代码或命令
+
+**3. 类型一致性:**
+- `Child.systemPoints` 类型一致 (Integer)
+- `PointsLog.category` 类型一致 (String)
+- `PointsService.awardSystemPoints` 返回 `int`
+- `getChildTaskStats` 返回 `Map<String, Object>`

+ 1018 - 0
docs/backup/superpowers/plans/2026-05-25-invite-card-sharing.md

@@ -0,0 +1,1018 @@
+# 邀请分享卡片 + 自动登录 实现计划
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** 实现三种邀请分享卡片(邀请孩子/邀请家人/邀请规划师),接收方通过微信分享卡片进入小程序,可自动完成注册/登录/绑定。
+
+**架构:** 后端新增 `invite_card` 表 + `InviteCardController`/`InviteCardService`,负责邀请码生成和接收验证;前端在三个入口页面添加分享按钮,登录页处理邀请参数自动登录。
+
+**Tech Stack:** Spring Boot 2.7.18 + MyBatis-Plus, uni-app Vue 2, 微信小程序原生分享
+
+---
+
+## 文件结构
+
+| 文件 | 操作 | 职责 |
+|------|------|------|
+| `cfc-backend/.../entity/InviteCard.java` | 新建 | 邀请码实体 |
+| `cfc-backend/.../mapper/InviteCardMapper.java` | 新建 | MyBatis Mapper |
+| `cfc-backend/.../service/InviteCardService.java` | 新建 | 生成/验证/使用邀请码 |
+| `cfc-backend/.../controller/InviteCardController.java` | 新建 | 3个 REST 端点 |
+| `cfc-backend/.../config/DatabaseInitializer.java` | 修改 | 建 invite_card 表 |
+| `cfc-frontend/utils/api.js` | 修改 | 新增 3 个 API 函数 |
+| `cfc-frontend/pages/profile/children.vue` | 修改 | 每个孩子加「邀请」按钮 + share |
+| `cfc-frontend/pages/profile/profile.vue` | 修改 | 加「邀请家人」按钮 + share |
+| `cfc-frontend/pages/growth/index.vue` | 修改 | 加「邀请规划师」按钮 + share |
+| `cfc-frontend/pages/login/login.vue` | 修改 | 处理 invite_code 自动登录 |
+
+---
+
+### Task 1: 后端 — invitate_card 表 + 实体 + Mapper
+
+**前提:** 了解项目 MyBatis-Plus 实体/Mapper 写法:见 `entity/User.java`、`mapper/UserMapper.java`。
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/InviteCard.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/mapper/InviteCardMapper.java`
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java`(加建表语句)
+- Test: 启动后端验证建表成功
+
+- [ ] **Step 1: 创建 InviteCard 实体**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import java.time.LocalDateTime;
+
+@TableName("invite_card")
+public class InviteCard {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private String type;      // child/family/guide
+    private String code;      // 唯一邀请码
+    private Long refId;       // 关联ID (childId/familyId)
+    private Long creatorId;   // 创建人
+    private LocalDateTime expiresAt;
+    private Integer used;     // 0-未使用 1-已使用
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+
+    // getters/setters
+    public Long getId() { return id; }
+    public void setId(Long id) { this.id = id; }
+    public String getType() { return type; }
+    public void setType(String type) { this.type = type; }
+    public String getCode() { return code; }
+    public void setCode(String code) { this.code = code; }
+    public Long getRefId() { return refId; }
+    public void setRefId(Long refId) { this.refId = refId; }
+    public Long getCreatorId() { return creatorId; }
+    public void setCreatorId(Long creatorId) { this.creatorId = creatorId; }
+    public LocalDateTime getExpiresAt() { return expiresAt; }
+    public void setExpiresAt(LocalDateTime expiresAt) { this.expiresAt = expiresAt; }
+    public Integer getUsed() { return used; }
+    public void setUsed(Integer used) { this.used = used; }
+    public LocalDateTime getCreatedAt() { return createdAt; }
+    public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
+    public LocalDateTime getUpdatedAt() { return updatedAt; }
+    public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
+}
+```
+
+- [ ] **Step 2: 创建 InviteCardMapper**
+
+```java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.InviteCard;
+
+public interface InviteCardMapper extends BaseMapper<InviteCard> {
+}
+```
+
+- [ ] **Step 3: DatabaseInitializer 中添加建表语句**
+
+找到 `DatabaseInitializer.java` 中的 SQL 执行部分,在最后加一条 CREATE TABLE IF NOT EXISTS:
+
+```sql
+CREATE TABLE IF NOT EXISTS invite_card (
+  id BIGINT AUTO_INCREMENT PRIMARY KEY,
+  type VARCHAR(20) NOT NULL COMMENT 'child/family/guide',
+  code VARCHAR(64) NOT NULL UNIQUE COMMENT '邀请码',
+  ref_id BIGINT NOT NULL COMMENT '关联ID(childId/familyId)',
+  creator_id BIGINT NOT NULL COMMENT '创建人',
+  expires_at DATETIME NOT NULL,
+  used TINYINT DEFAULT 0,
+  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  INDEX idx_code (code),
+  INDEX idx_ref_type (ref_id, type)
+) COMMENT='邀请卡片';
+```
+
+- [ ] **Step 4: 编译并启动验证**
+
+```bash
+cd cfc-backend && mvn clean compile spring-boot:run
+```
+
+确认启动日志无报错,表自动创建。
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add cfc-backend/src/main/java/com/etotem/cfc/entity/InviteCard.java
+git add cfc-backend/src/main/java/com/etotem/cfc/mapper/InviteCardMapper.java
+git add cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java
+git commit -m "feat: add invite_card table and entity"
+```
+
+---
+
+### Task 2: 后端 — InviteCardService 生成 + 验证 + 使用
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/service/InviteCardService.java`
+- Test: 编译验证
+
+- [ ] **Step 1: 创建 InviteCardService**
+
+```java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.*;
+import com.etotem.cfc.mapper.*;
+import com.etotem.cfc.service.UserService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.*;
+
+@Service
+public class InviteCardService {
+
+    @Resource
+    private InviteCardMapper inviteCardMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private UserService userService;
+    @Resource
+    private ChildMapper childMapper;
+    @Resource
+    private FamilyMapper familyMapper;
+
+    /**
+     * 生成邀请码
+     * @param type child/family/guide
+     * @param refId 关联ID
+     * @param creatorId 创建人ID
+     */
+    public InviteCard generate(String type, Long refId, Long creatorId) {
+        // 使旧的未使用邀请码失效
+        invalidateOldCodes(type, refId);
+
+        InviteCard card = new InviteCard();
+        card.setType(type);
+        card.setCode(generateCode(type));
+        card.setRefId(refId);
+        card.setCreatorId(creatorId);
+        card.setExpiresAt(LocalDateTime.now().plusHours(24));
+        card.setUsed(0);
+        card.setCreatedAt(LocalDateTime.now());
+        card.setUpdatedAt(LocalDateTime.now());
+        inviteCardMapper.insert(card);
+        return card;
+    }
+
+    private void invalidateOldCodes(String type, Long refId) {
+        List<InviteCard> oldCards = inviteCardMapper.selectList(
+            new LambdaQueryWrapper<InviteCard>()
+                .eq(InviteCard::getType, type)
+                .eq(InviteCard::getRefId, refId)
+                .eq(InviteCard::getUsed, 0)
+        );
+        for (InviteCard card : oldCards) {
+            card.setUsed(1);
+            card.setUpdatedAt(LocalDateTime.now());
+            inviteCardMapper.updateById(card);
+        }
+    }
+
+    private String generateCode(String type) {
+        String prefix;
+        switch (type) {
+            case "child":  prefix = "CHILD_"; break;
+            case "family": prefix = "FAMILY_"; break;
+            case "guide":  prefix = "GUIDE_"; break;
+            default:       prefix = "INV_"; break;
+        }
+        String random = UUID.randomUUID().toString().replace("-", "").substring(0, 8).toUpperCase();
+        return prefix + random;
+    }
+
+    /**
+     * 验证邀请码并返回关联信息
+     */
+    public Result<Map<String, Object>> verify(String code) {
+        InviteCard card = inviteCardMapper.selectOne(
+            new LambdaQueryWrapper<InviteCard>().eq(InviteCard::getCode, code)
+        );
+        if (card == null) {
+            return Result.error("邀请码无效");
+        }
+        if (card.getUsed() == 1) {
+            return Result.error("邀请码已使用");
+        }
+        if (card.getExpiresAt().isBefore(LocalDateTime.now())) {
+            return Result.error("邀请码已过期");
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("type", card.getType());
+        result.put("refId", card.getRefId());
+
+        if ("child".equals(card.getType())) {
+            Child child = childMapper.selectById(card.getRefId());
+            if (child != null) {
+                result.put("nickname", child.getNickname());
+                Family family = familyMapper.selectById(child.getFamilyId());
+                if (family != null) {
+                    result.put("familyName", family.getName());
+                }
+            }
+        } else if ("family".equals(card.getType())) {
+            Family family = familyMapper.selectById(card.getRefId());
+            if (family != null) {
+                result.put("familyName", family.getName());
+            }
+        }
+
+        return Result.success(result);
+    }
+
+    /**
+     * 接受邀请 - 核心逻辑
+     * @param code 邀请码
+     * @param phone 手机号
+     * @return 登录结果(token, userId, role, familyId)
+     */
+    public Result<Map<String, Object>> accept(String code, String phone) {
+        InviteCard card = inviteCardMapper.selectOne(
+            new LambdaQueryWrapper<InviteCard>().eq(InviteCard::getCode, code)
+        );
+        if (card == null) return Result.error("邀请码无效");
+        if (card.getUsed() == 1) return Result.error("邀请码已使用");
+        if (card.getExpiresAt().isBefore(LocalDateTime.now())) return Result.error("邀请码已过期");
+
+        if ("child".equals(card.getType())) {
+            return acceptChild(card, phone);
+        } else if ("family".equals(card.getType())) {
+            return acceptFamily(card, phone);
+        } else if ("guide".equals(card.getType())) {
+            return acceptGuide(card, phone);
+        }
+        return Result.error("未知邀请类型");
+    }
+
+    private Result<Map<String, Object>> acceptChild(InviteCard card, String phone) {
+        Child child = childMapper.selectById(card.getRefId());
+        if (child == null) return Result.error("孩子信息不存在");
+        if (child.getPhone() == null || !child.getPhone().equals(phone)) {
+            return Result.error("手机号不匹配,请联系家长确认");
+        }
+
+        // 检查孩子是否已有账号
+        User existingUser = userMapper.selectOne(
+            new LambdaQueryWrapper<User>().eq(User::getPhone, phone)
+        );
+
+        User user;
+        if (existingUser != null) {
+            user = existingUser;
+        } else {
+            // 自动注册
+            user = new User();
+            user.setPhone(phone);
+            user.setNickname(child.getNickname() != null ? child.getNickname() : "孩子");
+            user.setRole("child");
+            user.setFamilyId(child.getFamilyId());
+            user.setAvatar(child.getAvatar());
+            userMapper.insert(user);
+        }
+
+        // 标记邀请码已使用
+        card.setUsed(1);
+        card.setUpdatedAt(LocalDateTime.now());
+        inviteCardMapper.updateById(card);
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("token", userService.generateToken(user));
+        result.put("userId", user.getId());
+        result.put("role", "child");
+        result.put("familyId", user.getFamilyId());
+        return Result.success(result);
+    }
+
+    private Result<Map<String, Object>> acceptFamily(InviteCard card, String phone) {
+        Family family = familyMapper.selectById(card.getRefId());
+        if (family == null) return Result.error("家庭不存在");
+
+        // 检查手机号是否已注册
+        User existingUser = userMapper.selectOne(
+            new LambdaQueryWrapper<User>().eq(User::getPhone, phone)
+        );
+
+        User user;
+        if (existingUser != null) {
+            user = existingUser;
+            // 更新家庭ID
+            user.setFamilyId(card.getRefId());
+            userMapper.updateById(user);
+        } else {
+            user = new User();
+            user.setPhone(phone);
+            user.setNickname("家人");
+            user.setRole("parent");
+            user.setFamilyId(card.getRefId());
+            userMapper.insert(user);
+        }
+
+        card.setUsed(1);
+        card.setUpdatedAt(LocalDateTime.now());
+        inviteCardMapper.updateById(card);
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("token", userService.generateToken(user));
+        result.put("userId", user.getId());
+        result.put("role", user.getRole());
+        result.put("familyId", user.getFamilyId());
+        return Result.success(result);
+    }
+
+    private Result<Map<String, Object>> acceptGuide(InviteCard card, String phone) {
+        // 规划师邀请只返回家庭信息,让用户自己去规划师注册页走完整流程
+        Family family = familyMapper.selectById(card.getRefId());
+        if (family == null) return Result.error("家庭不存在");
+
+        card.setUsed(1);
+        card.setUpdatedAt(LocalDateTime.now());
+        inviteCardMapper.updateById(card);
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("familyId", card.getRefId());
+        result.put("familyName", family.getName());
+        result.put("type", "guide");
+        return Result.success(result);
+    }
+}
+```
+
+- [ ] **Step 2: 编译验证**
+
+```bash
+cd cfc-backend && mvn clean compile
+```
+
+确认无编译错误。
+
+- [ ] **Step 3: Commit**
+
+```bash
+git add cfc-backend/src/main/java/com/etotem/cfc/service/InviteCardService.java
+git commit -m "feat: add InviteCardService with generate/verify/accept logic"
+```
+
+---
+
+### Task 3: 后端 — InviteCardController 三个端点
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/guide/InviteCardController.java`
+- Test: 启动后端 + curl 测试
+
+- [ ] **Step 1: 创建 InviteCardController**
+
+```java
+package com.etotem.cfc.controller.guide;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.*;
+import com.etotem.cfc.mapper.*;
+import com.etotem.cfc.service.InviteCardService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+@Tag(name = "邀请卡片", description = "家庭成员/规划师邀请分享")
+@RestController
+@RequestMapping("/api/invite-card")
+public class InviteCardController {
+
+    @Resource
+    private InviteCardService inviteCardService;
+    @Resource
+    private ChildMapper childMapper;
+    @Resource
+    private FamilyMapper familyMapper;
+    @Resource
+    private UserMapper userMapper;
+
+    @PostMapping("/generate")
+    @Operation(summary = "生成邀请码")
+    public Result<Map<String, Object>> generate(@RequestBody Map<String, Object> params,
+                                                HttpServletRequest request) {
+        Long userId = (Long) request.getAttribute("userId");
+        String type = (String) params.get("type");
+        Object refIdObj = params.get("refId");
+
+        if (type == null || refIdObj == null) {
+            return Result.error("缺少必要参数: type/refId");
+        }
+        Long refId = Long.valueOf(refIdObj.toString());
+
+        // 验证用户对 refId 的归属权
+        if ("child".equals(type)) {
+            Child child = childMapper.selectById(refId);
+            if (child == null) return Result.error("孩子不存在");
+            User user = userMapper.selectById(userId);
+            if (user == null || !user.getFamilyId().equals(child.getFamilyId())) {
+                return Result.error("无权生成该孩子的邀请");
+            }
+        } else if ("family".equals(type) || "guide".equals(type)) {
+            Family family = familyMapper.selectById(refId);
+            if (family == null) return Result.error("家庭不存在");
+            User user = userMapper.selectById(userId);
+            if (user == null || !user.getFamilyId().equals(family.getId())) {
+                return Result.error("无权生成该家庭的邀请");
+            }
+        }
+
+        InviteCard card = inviteCardService.generate(type, refId, userId);
+        Map<String, Object> result = new HashMap<>();
+        result.put("code", card.getCode());
+        result.put("expiresAt", card.getExpiresAt().toString());
+        return Result.success(result);
+    }
+
+    @PostMapping("/verify")
+    @Operation(summary = "验证邀请码")
+    public Result<Map<String, Object>> verify(@RequestBody Map<String, Object> params) {
+        String code = (String) params.get("code");
+        if (code == null) return Result.error("缺少邀请码");
+        return inviteCardService.verify(code);
+    }
+
+    @PostMapping("/accept")
+    @Operation(summary = "接受邀请(自动注册/登录)")
+    public Result<Map<String, Object>> accept(@RequestBody Map<String, Object> params) {
+        String code = (String) params.get("code");
+        String phone = (String) params.get("phone");
+        if (code == null || phone == null) {
+            return Result.error("缺少必要参数: code/phone");
+        }
+        return inviteCardService.accept(code, phone);
+    }
+}
+```
+
+- [ ] **Step 2: 检查 UserService.generateToken 方法是否存在**
+
+搜索 `userService.generateToken` 或 `UserService` 中是否有生成 token 的方法。如果不存在,需要实现一个简单的 JWT token 生成(复用项目中已有的 JwtUtil):
+
+```java
+// 在 InviteCardService 中注入 JwtUtil
+@Resource
+private com.etotem.cfc.config.JwtUtil jwtUtil;
+
+// 然后 generateToken 方法:
+private String generateToken(User user) {
+    return jwtUtil.generateToken(user.getId(), user.getPhone(), user.getRole());
+}
+```
+
+如果项目中已有 `JwtUtil`,确认其 `generateToken` 的方法签名一致。
+
+- [ ] **Step 3: 启动后端测试**
+
+```bash
+cd cfc-backend && mvn spring-boot:run
+```
+
+在另一个终端测试:
+
+```bash
+# 生成邀请码(需要先获取 token)
+# 测试 child 类型
+curl -X POST http://localhost:8080/api/invite-card/generate \
+  -H "Content-Type: application/json" \
+  -H "Authorization: Bearer $TOKEN" \
+  -d '{"type":"child","refId":1}'
+
+# 验证邀请码
+curl -X POST http://localhost:8080/api/invite-card/verify \
+  -H "Content-Type: application/json" \
+  -d '{"code":"CHILD_XXXXXX"}'
+```
+
+确认返回正常。
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add cfc-backend/src/main/java/com/etotem/cfc/controller/guide/InviteCardController.java
+git commit -m "feat: add InviteCardController with generate/verify/accept endpoints"
+```
+
+---
+
+### Task 4: 前端 — api.js 新增三个 API 函数
+
+**Files:**
+- Modify: `cfc-frontend/utils/api.js`
+
+- [ ] **Step 1: 新增 API 函数**
+
+在 `utils/api.js` 末尾添加:
+
+```javascript
+// 邀请卡片
+export const generateInviteCard = (type, refId) => {
+  return request('/api/invite-card/generate', 'POST', { type, refId })
+}
+
+export const verifyInviteCard = (code) => {
+  return request('/api/invite-card/verify', 'POST', { code })
+}
+
+export const acceptInviteCard = (code, phone) => {
+  return request('/api/invite-card/accept', 'POST', { code, phone })
+}
+```
+
+- [ ] **Step 2: Commit**
+
+```bash
+git add cfc-frontend/utils/api.js
+git commit -m "feat: add invite card API functions"
+```
+
+---
+
+### Task 5: 前端 — 孩子管理页添加「邀请」按钮
+
+**Files:**
+- Modify: `cfc-frontend/pages/profile/children.vue`
+
+- [ ] **Step 1: 在模板每个孩子项加「邀请」按钮**
+
+找到 `<view class="child-actions">`,在编辑后加邀请按钮:
+
+```html
+<view class="child-actions">
+  <text class="btn-invite" @click="inviteChild(child)">邀请</text>
+  <text class="btn-edit" @click="editChild(child)">编辑</text>
+</view>
+```
+
+- [ ] **Step 2: 加分享配置**
+
+在 `data()` 中添加:
+```javascript
+data() {
+  return {
+    children: [],
+    shareData: null  // 用于 onShareAppMessage
+  }
+}
+```
+
+在 `onLoad` 中定义 `onShareAppMessage`:
+```javascript
+onLoad() {
+  // 必须在页面级别定义 onShareAppMessage,不能在 methods 里
+},
+onShareAppMessage() {
+  if (this.shareData) {
+    return {
+      title: this.shareData.title,
+      path: this.shareData.path,
+      imageUrl: '/static/invite-card.png'
+    }
+  }
+  return { title: '浠艾福', path: '/pages/login/login' }
+}
+```
+
+- [ ] **Step 3: 实现 inviteChild 方法**
+
+在 `methods` 中添加:
+
+```javascript
+async inviteChild(child) {
+  try {
+    const { generateInviteCard } = require('../../utils/api.js')
+    const res = await generateInviteCard('child', child.id)
+    const code = res.data.code
+    // 保存分享数据
+    this.shareData = {
+      title: `邀请 ${child.nickname || '孩子'} 加入家庭`,
+      path: `/pages/login/login?invite_code=${code}`
+    }
+    // 触发微信原生分享
+    // 注意:需要 button open-type="share" 才能触发
+    uni.showToast({ title: '点击右上角转发给TA', icon: 'none' })
+  } catch (e) {
+    uni.showToast({ title: e.message || '生成邀请失败', icon: 'none' })
+  }
+}
+```
+
+- [ ] **Step 4: 改「邀请」按钮为 button open-type="share"**
+
+由于微信分享必须通过 `button open-type="share"` 触发(不能通过 @click 手动调),需要改模板:
+
+```html
+<view class="child-actions">
+  <button class="btn-invite-btn" open-type="share" @click="prepareInvite(child)">邀请</button>
+  <text class="btn-edit" @click="editChild(child)">编辑</text>
+</view>
+```
+
+方法分离:
+```javascript
+async prepareInvite(child) {
+  try {
+    const { generateInviteCard } = require('../../utils/api.js')
+    const res = await generateInviteCard('child', child.id)
+    const code = res.data.code
+    this.shareData = {
+      title: `邀请 ${child.nickname || '孩子'} 加入家庭`,
+      path: `/pages/login/login?invite_code=${code}`
+    }
+    this._waitingShare = true
+  } catch (e) {
+    uni.showToast({ title: e.message || '生成邀请失败', icon: 'none' })
+  }
+}
+```
+
+- [ ] **Step 5: 添加邀请按钮样式**
+
+在 `<style>` 末尾添加:
+
+```css
+.btn-invite-btn {
+  background: #3B82F6;
+  color: #fff;
+  font-size: 24rpx;
+  padding: 4rpx 16rpx;
+  border-radius: 8rpx;
+  margin-right: 10rpx;
+  line-height: 1.8;
+}
+```
+
+- [ ] **Step 6: Commit**
+
+```bash
+git add cfc-frontend/pages/profile/children.vue
+git commit -m "feat: add invite button for each child in children management"
+```
+
+---
+
+### Task 6: 前端 — 我的页面加「邀请家人」按钮
+
+**Files:**
+- Modify: `cfc-frontend/pages/profile/profile.vue`
+
+- [ ] **Step 1: 添加 invite 相关数据和 onShareAppMessage**
+
+在 `data()` 中加:
+```javascript
+data() {
+  return {
+    // ... existing data
+    shareData: null
+  }
+}
+```
+
+在页面添加 `onShareAppMessage`(如果已存在则追加逻辑):
+```javascript
+onShareAppMessage() {
+  if (this.shareData) {
+    return {
+      title: this.shareData.title,
+      path: this.shareData.path,
+      imageUrl: '/static/invite-card.png'
+    }
+  }
+}
+```
+
+- [ ] **Step 2: 菜单列表添加「邀请家人」项**
+
+在菜单列表中找到合适位置,比如「积分记录」之后,添加:
+
+```html
+<view class="menu-item" @click="prepareFamilyInvite" v-if="role === 'parent'">
+  <text>👨‍👩‍👧‍👦 邀请家人</text>
+  <text class="arrow">›</text>
+</view>
+```
+
+- [ ] **Step 3: 改用 button open-type="share"**
+
+由于分享需要 button 触发,改为:
+
+```html
+<button class="menu-item-btn" open-type="share" @click="prepareFamilyInvite" v-if="role === 'parent'">
+  <text>👨‍👩‍👧‍👦 邀请家人</text>
+  <text class="arrow">›</text>
+</button>
+```
+
+- [ ] **Step 4: 实现 prepareFamilyInvite**
+
+在 `methods` 中添加:
+
+```javascript
+async prepareFamilyInvite() {
+  try {
+    const userInfo = uni.getStorageSync('userInfo')
+    const familyId = uni.getStorageSync('familyId')
+    if (!familyId) {
+      uni.showToast({ title: '您暂未加入家庭', icon: 'none' })
+      return
+    }
+    const { generateInviteCard } = require('../../utils/api.js')
+    const res = await generateInviteCard('family', familyId)
+    const code = res.data.code
+    this.shareData = {
+      title: `${userInfo.nickname || '家人'} 邀请你加入家庭`,
+      path: `/pages/login/login?invite_code=${code}`
+    }
+    uni.showToast({ title: '点击右上角转发给TA', icon: 'none' })
+  } catch (e) {
+    uni.showToast({ title: e.message || '生成邀请失败', icon: 'none' })
+  }
+}
+```
+
+- [ ] **Step 5: 添加按钮样式**
+
+```css
+.menu-item-btn {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  width: 100%;
+  padding: 28rpx 24rpx;
+  border: none;
+  background: transparent;
+  font-size: 28rpx;
+  color: #333;
+  border-bottom: 1rpx solid #f0f0f0;
+}
+.menu-item-btn::after { border: none; }
+```
+
+- [ ] **Step 6: Commit**
+
+```bash
+git add cfc-frontend/pages/profile/profile.vue
+git commit -m "feat: add invite family button in profile page"
+```
+
+---
+
+### Task 7: 前端 — 成长档案页加「邀请规划师」按钮
+
+**Files:**
+- Modify: `cfc-frontend/pages/growth/index.vue`
+
+- [ ] **Step 1: 添加分享数据和 onShareAppMessage**
+
+在 `data()` 中添加:
+```javascript
+data() {
+  return {
+    // ... existing data
+    shareData: null
+  }
+}
+```
+
+添加 `onShareAppMessage` 生命周期:
+```javascript
+onShareAppMessage() {
+  if (this.shareData) {
+    return {
+      title: this.shareData.title,
+      path: this.shareData.path,
+      imageUrl: '/static/invite-card.png'
+    }
+  }
+}
+```
+
+- [ ] **Step 2: 在页面顶部或底部添加「邀请规划师」按钮**
+
+在 `<view class="footer-btn">` 区域添加(或在 children-list 区域):
+
+```html
+<view class="footer-btn" v-if="!selectedChild">
+  <button class="btn-invite-guide" open-type="share" @click="prepareGuideInvite">
+    邀请成长规划师
+  </button>
+</view>
+```
+
+- [ ] **Step 3: 实现 prepareGuideInvite**
+
+在 `methods` 中添加:
+
+```javascript
+async prepareGuideInvite() {
+  try {
+    const familyId = uni.getStorageSync('familyId')
+    if (!familyId) {
+      uni.showToast({ title: '您暂未加入家庭', icon: 'none' })
+      return
+    }
+    const userInfo = uni.getStorageSync('userInfo')
+    const { generateInviteCard } = require('../../utils/api.js')
+    const res = await generateInviteCard('guide', familyId)
+    const code = res.data.code
+    this.shareData = {
+      title: `${userInfo.nickname || '家长'} 邀请你成为成长规划师`,
+      path: `/pages/login/login?invite_code=${code}`
+    }
+    uni.showToast({ title: '点击右上角转发给TA', icon: 'none' })
+  } catch (e) {
+    uni.showToast({ title: e.message || '生成邀请失败', icon: 'none' })
+  }
+}
+```
+
+- [ ] **Step 4: 添加样式**
+
+```css
+.btn-invite-guide {
+  background: linear-gradient(135deg, #667eea, #764ba2);
+  color: #fff;
+  border-radius: 50rpx;
+  padding: 20rpx 0;
+  font-size: 28rpx;
+  margin-top: 20rpx;
+  width: 100%;
+}
+```
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add cfc-frontend/pages/growth/index.vue
+git commit -m "feat: add invite guide button in growth page"
+```
+
+---
+
+### Task 8: 前端 — 登录页处理邀请码自动登录
+
+**Files:**
+- Modify: `cfc-frontend/pages/login/login.vue`
+
+- [ ] **Step 1: onLoad 增加 invite_code 捕获**
+
+找到 `onLoad` 方法,修改为支持 `invite_code` 参数:
+
+```javascript
+onLoad(options) {
+  // 处理邀请码
+  if (options.invite_code) {
+    uni.setStorageSync('inviteCode', options.invite_code)
+    console.log('检测到邀请码:', options.invite_code)
+  }
+  // 兼容旧版参数名
+  if (options.inviteCode && !options.invite_code) {
+    uni.setStorageSync('inviteCode', options.inviteCode)
+  }
+}
+```
+
+- [ ] **Step 2: 微信登录成功时检测邀请码并进行自动登录**
+
+找到 `handleWechatPhoneLogin` 方法,在 `wechatPhoneLogin` 调用之前,检测是否有 `inviteCode`:
+
+查看 `handleWechatPhoneLogin` 的逻辑。在当前流程中,微信登录拿到手机号后直接调后端 `wechatPhoneLogin`。需要在手机号获取成功后,如果存在邀请码,先调 `acceptInviteCard` 而不是普通登录。
+
+修改 `handleWechatPhoneLogin` 方法:
+
+```javascript
+async handleWechatPhoneLogin(e) {
+  if (e.detail.errMsg === 'getPhoneNumber:ok') {
+    // ... 现有手机号验证逻辑 ...
+
+    this.loading = true
+    try {
+      const inputPhone = this.phone
+
+      // 检查是否有邀请码
+      const inviteCode = uni.getStorageSync('inviteCode')
+      if (inviteCode) {
+        // 走邀请码自动注册/登录流程
+        const { acceptInviteCard } = require('../../utils/api.js')
+        const res = await acceptInviteCard(inviteCode, inputPhone)
+        
+        // 保存登录信息
+        uni.setStorageSync('token', res.data.token)
+        uni.setStorageSync('userId', res.data.userId)
+        uni.setStorageSync('role', res.data.role)
+        uni.setStorageSync('currentRole', res.data.role)
+        if (res.data.familyId) {
+          uni.setStorageSync('familyId', res.data.familyId)
+        }
+
+        // 清除邀请码
+        uni.removeStorageSync('inviteCode')
+
+        uni.showToast({ title: '加入成功', icon: 'success' })
+        setTimeout(() => {
+          this.navigateToHome(res.data.role)
+        }, 1000)
+        return
+      }
+
+      // 没有邀请码,走普通登录逻辑
+      // ... 现有登录逻辑 ...
+```
+
+注意:需要判断微信登录返回时 `phone` 字段的获取方式。当前微信登录的测试环境中,用户输入的 `inputPhone` 直接作为手机号传递。
+
+- [ ] **Step 3: 处理手机号登录(验证码)的邀请码场景**
+
+在 `phoneLogin` 方法中,检测邀请码:
+
+```javascript
+async phoneLogin() {
+  // ... 现有验证逻辑 ...
+
+  this.loading = true
+  try {
+    // 检查是否有邀请码
+    const inviteCode = uni.getStorageSync('inviteCode')
+    if (inviteCode) {
+      const { acceptInviteCard } = require('../../utils/api.js')
+      const res = await acceptInviteCard(inviteCode, this.phone)
+      
+      // 保存登录信息
+      uni.setStorageSync('token', res.data.token)
+      uni.setStorageSync('userId', res.data.userId)
+      uni.setStorageSync('role', res.data.role)
+      uni.setStorageSync('currentRole', res.data.role)
+      if (res.data.familyId) {
+        uni.setStorageSync('familyId', res.data.familyId)
+      }
+      uni.removeStorageSync('inviteCode')
+
+      uni.showToast({ title: '加入成功', icon: 'success' })
+      setTimeout(() => {
+        this.navigateToHome(res.data.role)
+      }, 1000)
+      return
+    }
+
+    // 没有邀请码,走普通登录
+    const res = await phoneLoginApi({...})
+    // ... 现有逻辑 ...
+```
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add cfc-frontend/pages/login/login.vue
+git commit -m "feat: handle invite_code auto-login in login page"
+```
+
+---
+
+## 自检清单
+
+1. **需求覆盖:** 三种邀请卡片(child/family/guide)各自有生成端和接收端逻辑,所有场景覆盖
+2. **占位符检查:** 无 TBD/TODO 遗留,所有步骤含完整代码
+3. **类型一致性:** `InviteCard` 字段名(type/refId/code/used)在所有任务中保持一致
+4. **微信限制:** 分享需 `button open-type="share"` 触发,已在 children.vue 和 profile.vue 中正确处理
+5. **测试环境:** 微信 `getPhoneNumber` 解密在测试环境走 `inputPhone` 明文传递,已在 login.vue 中兼容

+ 2563 - 0
docs/backup/superpowers/plans/2026-06-02-care-family-club-design.md

@@ -0,0 +1,2563 @@
+# 溪福俱乐部 (Care Family Club) 平台升级实现计划
+
+> **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:** 将知心益家 (ZXYJ) 从家庭教育任务管理小程序升级为溪福俱乐部 — 身/心/智/行四维主动健康管理平台,集成Lilishop电商。
+
+**Architecture:** 增量重构(非重建),保留现有ZXYJ代码作为智(Wisdom)域基础,围绕其新增身(Body)/心(Mind)/行(Action)三个域。前端首页改为四象限矩阵入口,后端按域新增controller包和entity。Lilishop作为独立微服务通过REST API集成。
+
+**Tech Stack:**
+- 后端: Java 1.8 + Spring Boot 2.7.18 + MyBatis-Plus
+- 前端小程序: uni-app (Vue 2 Options API)
+- Web管理端: Vue 2 + Element UI
+- 数据库: MySQL 8.0 (cfc主库 + sfms只读源库)
+- 认证: JWT Bearer Token
+- 电商: Lilishop (独立微服务, REST API集成)
+
+---
+
+## 架构决策
+
+| # | 决策点 | 选择 | 理由 |
+|---|--------|------|------|
+| 1 | Entity组织 | **A) flat entity/ + 域前缀命名** (BodyHealthMetric, MindMoodLog) | 现有49个实体全平铺,最小破坏性,MyBatis-Plus不关心包路径 |
+| 2 | Controller包 | **B) 新增域包,旧包保留** (新增controller/body/, controller/mind/, controller/action/) | 不打断现有功能,增量迁移 |
+| 3 | 前端导航 | **4-tab: 首页(四象限) / 智(任务+成长) / 行(活动+商城) / 我的** | 微信tabBar最多5项,4项最简洁;身/心通过首页象限入口进入 |
+| 4 | 数据库策略 | **A) DatabaseInitializer.java** | 遵循"不建索引,不建约束,不建自定义SQL"约束,保持现有模式 |
+| 5 | 积分系统 | **跨域共享PointsService** + PointsLog增加domain字段 | 积分来源扩展到四域,统一管理避免碎片化 |
+| 6 | Lilishop集成 | **C) 混合模式** — 服务账号(商品浏览) + 委托认证(购物车/结算) | 浏览无需用户上下文,交易需用户身份 |
+| 7 | 构建顺序 | **框架→行→身→心→电商** | 行域有部分代码可扩展,身域较简单,心域最复杂,电商独立最后加 |
+
+---
+
+## 四域内容定义
+
+### 身 (Body) — 细胞抗衰
+| 功能 | 说明 | 新entity |
+|------|------|----------|
+| 健康指标记录 | 体重/血压/心率/睡眠 | BodyHealthMetric |
+| 水营养追踪 | 每日饮水/营养素摄入 | BodyNutritionLog |
+| 抗衰评估 | 细胞抗衰测评+报告 | BodyAntiAgingAssessment |
+| 运动追踪 | 运动记录+步数 | BodyExerciseLog |
+
+### 心 (Mind) — 心理情绪
+| 功能 | 说明 | 新entity |
+|------|------|----------|
+| 情绪日志 | 每日心情记录+标签 | MindMoodLog |
+| 心理测评 | 专业心理评估问卷 | MindPsychologicalAssessment |
+| 家庭氛围指数 | 家庭关系评估 | MindFamilyAtmosphereIndex |
+| 冥想/放松 | 引导式冥想计时 | MindMeditationSession |
+
+### 智 (Wisdom) — 教育 (现有)
+| 功能 | 现有entity | 状态 |
+|------|-----------|------|
+| 任务管理 | Task, TaskTemplate, TaskPlanInstance | ✅ 已完成 |
+| 积分系统 | PointsLog, StreakMilestone | ✅ 已完成 |
+| 奖励体系 | Reward, Wish, RewardWishlist | ✅ 已完成 |
+| 成长档案 | GrowthRecord, GrowthPlan | ✅ 已完成 |
+| DAN测评 | DanAssessmentResult, AssessmentOrder | ✅ 已完成 |
+| 小游戏 | MiniGame | ✅ 已完成 |
+| 规划师 | Guide, GuidePackage, GuideFamily | ✅ 已完成 |
+
+### 行 (Action) — 关系践行
+| 功能 | 说明 | 新entity |
+|------|------|----------|
+| 活动/事件 | 线上线下活动组织 | ActionActivity, ActionActivityRegistration |
+| 内容科普 | 文章/视频/知识库 | ActionArticle, ActionArticleCategory |
+| 长者关怀 | 养老计划+关怀记录 | ActionElderCarePlan, ActionElderCareLog |
+| 家庭实践 | 关系践行任务(区别于智域学习任务) | ActionPracticeTask |
+| 社区互动 | 家庭间交流 | ActionCommunityPost, ActionCommunityComment |
+
+---
+
+## 文件结构变更
+
+### 后端新增文件
+
+```
+cfc-backend/src/main/java/com/etotem/cfc/
+├── controller/
+│   ├── body/                          # NEW
+│   │   ├── BodyHealthController.java
+│   │   ├── BodyNutritionController.java
+│   │   ├── BodyAntiAgingController.java
+│   │   └── BodyExerciseController.java
+│   ├── mind/                          # NEW
+│   │   ├── MindMoodController.java
+│   │   ├── MindAssessmentController.java
+│   │   ├── MindFamilyAtmosphereController.java
+│   │   └── MindMeditationController.java
+│   ├── action/                        # NEW
+│   │   ├── ActionController.java
+│   │   ├── ActionArticleController.java
+│   │   ├── ActionElderCareController.java
+│   │   └── ActionCommunityController.java
+│   └── commerce/                      # NEW (Phase 5)
+│       └── CommerceController.java
+├── entity/
+│   ├── BodyHealthMetric.java          # NEW
+│   ├── BodyNutritionLog.java          # NEW
+│   ├── BodyAntiAgingAssessment.java   # NEW
+│   ├── BodyExerciseLog.java           # NEW
+│   ├── MindMoodLog.java               # NEW
+│   ├── MindPsychologicalAssessment.java # NEW
+│   ├── MindFamilyAtmosphereIndex.java # NEW
+│   ├── MindMeditationSession.java     # NEW
+│   ├── ActionActivity.java            # NEW
+│   ├── ActionActivityRegistration.java # NEW
+│   ├── ActionArticle.java             # NEW
+│   ├── ActionArticleCategory.java     # NEW
+│   ├── ActionElderCarePlan.java       # NEW
+│   ├── ActionElderCareLog.java        # NEW
+│   ├── ActionPracticeTask.java        # NEW
+│   ├── ActionCommunityPost.java       # NEW
+│   └── ActionCommunityComment.java    # NEW
+├── service/
+│   ├── BodyHealthService.java         # NEW
+│   ├── BodyNutritionService.java      # NEW
+│   ├── BodyAntiAgingService.java      # NEW
+│   ├── BodyExerciseService.java       # NEW
+│   ├── MindMoodService.java           # NEW
+│   ├── MindAssessmentService.java     # NEW
+│   ├── MindFamilyAtmosphereService.java # NEW
+│   ├── MindMeditationService.java     # NEW
+│   ├── ActionActivityService.java     # NEW
+│   ├── ActionArticleService.java      # NEW
+│   ├── ActionElderCareService.java    # NEW
+│   ├── ActionPracticeService.java     # NEW
+│   ├── ActionCommunityService.java    # NEW
+│   └── LilishopApiClient.java         # NEW (Phase 5)
+└── mapper/
+    ├── BodyHealthMetricMapper.java    # NEW
+    ├── BodyNutritionLogMapper.java     # NEW
+    ├── BodyAntiAgingAssessmentMapper.java # NEW
+    ├── BodyExerciseLogMapper.java      # NEW
+    ├── MindMoodLogMapper.java          # NEW
+    ├── MindPsychologicalAssessmentMapper.java # NEW
+    ├── MindFamilyAtmosphereIndexMapper.java # NEW
+    ├── MindMeditationSessionMapper.java # NEW
+    ├── ActionActivityMapper.java       # NEW
+    ├── ActionActivityRegistrationMapper.java # NEW
+    ├── ActionArticleMapper.java        # NEW
+    ├── ActionArticleCategoryMapper.java # NEW
+    ├── ActionElderCarePlanMapper.java  # NEW
+    ├── ActionElderCareLogMapper.java   # NEW
+    ├── ActionPracticeTaskMapper.java   # NEW
+    ├── ActionCommunityPostMapper.java  # NEW
+    └── ActionCommunityCommentMapper.java # NEW
+```
+
+### 前端新增/修改文件
+
+```
+cfc-frontend/
+├── pages/
+│   ├── index/
+│   │   ├── index.vue                  # MODIFY - 四象限首页
+│   │   ├── parent-index.vue           # MODIFY - 增加四象限入口
+│   │   └── child-index.vue            # MODIFY - 增加四象限入口
+│   ├── body/                          # NEW
+│   │   ├── index.vue                  # 身域首页
+│   │   ├── health-metric.vue          # 健康指标记录
+│   │   ├── nutrition-log.vue          # 水营养追踪
+│   │   ├── anti-aging.vue             # 抗衰评估
+│   │   └── exercise-log.vue           # 运动追踪
+│   ├── mind/                          # NEW
+│   │   ├── index.vue                  # 心域首页
+│   │   ├── mood-log.vue               # 情绪日志
+│   │   ├── assessment.vue             # 心理测评
+│   │   ├── family-atmosphere.vue      # 家庭氛围
+│   │   └── meditation.vue             # 冥想
+│   ├── action/                        # NEW
+│   │   ├── index.vue                  # 行域首页
+│   │   ├── activity-list.vue          # 活动列表
+│   │   ├── activity-detail.vue        # 活动详情
+│   │   ├── article-list.vue           # 文章/科普列表
+│   │   ├── article-detail.vue         # 文章详情
+│   │   ├── elder-care.vue             # 长者关怀
+│   │   └── community.vue              # 社区互动
+│   ├── commerce/                      # NEW (Phase 5)
+│   │   ├── product-list.vue           # 商品列表
+│   │   ├── product-detail.vue         # 商品详情
+│   │   ├── cart.vue                   # 购物车
+│   │   └── order-list.vue             # 订单列表
+│   └── ...                            # 现有页面保留
+├── pages.json                         # MODIFY - 新增页面注册 + tabBar调整
+├── utils/
+│   └── api.js                         # MODIFY - 新增域API封装
+└── store/
+    └── index.js                       # MODIFY - 增加 domain state
+```
+
+---
+
+## Phase 1: 框架搭建(首页 + 核心实体 + 导航重构)
+
+**目标:** 建立四域框架,替换首页为四象限入口,创建所有新entity/mapper/service骨架,调整导航结构。此阶段完成后,用户可以看到四象限首页,点击进入各域,但各域功能为空壳。
+
+---
+
+### Task 1: 创建 Body 域 Entity
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/BodyHealthMetric.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/BodyNutritionLog.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/BodyAntiAgingAssessment.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/BodyExerciseLog.java`
+
+- [ ] **Step 1: 创建 BodyHealthMetric entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("body_health_metrics")
+public class BodyHealthMetric {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long userId;
+    private BigDecimal weight;
+    private Integer bloodPressureSystolic;
+    private Integer bloodPressureDiastolic;
+    private Integer heartRate;
+    private Integer sleepHours;
+    private Integer sleepQuality;
+    private String note;
+    private LocalDateTime recordDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 2: 创建 BodyNutritionLog entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("body_nutrition_logs")
+public class BodyNutritionLog {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long userId;
+    private Integer waterMl;
+    private Integer calorieIntake;
+    private BigDecimal proteinG;
+    private BigDecimal vitaminC;
+    private BigDecimal vitaminD;
+    private String mealType;
+    private String note;
+    private LocalDateTime recordDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 3: 创建 BodyAntiAgingAssessment entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("body_anti_aging_assessments")
+public class BodyAntiAgingAssessment {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long userId;
+    private Long guideId;
+    private String assessmentType;
+    private Integer cellularAge;
+    private Integer biologicalAge;
+    private String resultSummary;
+    private String resultDetail;
+    private String reportUrl;
+    private String status;
+    private LocalDateTime assessmentDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 4: 创建 BodyExerciseLog entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("body_exercise_logs")
+public class BodyExerciseLog {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long userId;
+    private String exerciseType;
+    private Integer durationMinutes;
+    private Integer steps;
+    private Integer caloriesBurned;
+    private Integer intensity;
+    private String note;
+    private LocalDateTime exerciseDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 5: 编译验证**
+
+Run: `cd cfc-backend && mvn compile -q`
+
+Expected: BUILD SUCCESS
+
+---
+
+### Task 2: 创建 Mind 域 Entity
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/MindMoodLog.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/MindPsychologicalAssessment.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/MindFamilyAtmosphereIndex.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/MindMeditationSession.java`
+
+- [ ] **Step 1: 创建 MindMoodLog entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("mind_mood_logs")
+public class MindMoodLog {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long userId;
+    private Integer moodScore;
+    private String moodLabel;
+    private String tags;
+    private String note;
+    private String weather;
+    private LocalDateTime recordDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 2: 创建 MindPsychologicalAssessment entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("mind_psychological_assessments")
+public class MindPsychologicalAssessment {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long userId;
+    private Long guideId;
+    private String assessmentType;
+    private Integer totalScore;
+    private String resultLevel;
+    private String resultSummary;
+    private String resultDetail;
+    private String reportUrl;
+    private String status;
+    private LocalDateTime assessmentDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 3: 创建 MindFamilyAtmosphereIndex entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("mind_family_atmosphere_indices")
+public class MindFamilyAtmosphereIndex {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Integer communicationScore;
+    private Integer emotionalScore;
+    private Integer supportScore;
+    private Integer conflictScore;
+    private Integer overallScore;
+    private String note;
+    private LocalDateTime recordDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 4: 创建 MindMeditationSession entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("mind_meditation_sessions")
+public class MindMeditationSession {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long userId;
+    private String meditationType;
+    private Integer durationMinutes;
+    private Integer completionRate;
+    private String audioUrl;
+    private String note;
+    private LocalDateTime sessionDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 5: 编译验证**
+
+Run: `cd cfc-backend && mvn compile -q`
+
+Expected: BUILD SUCCESS
+
+---
+
+### Task 3: 创建 Action 域 Entity
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionActivity.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionActivityRegistration.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionArticle.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionArticleCategory.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionElderCarePlan.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionElderCareLog.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionPracticeTask.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionCommunityPost.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/entity/ActionCommunityComment.java`
+
+- [ ] **Step 1: 创建 ActionActivity entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_activities")
+public class ActionActivity {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long creatorId;
+    private String title;
+    private String description;
+    private String coverUrl;
+    private String activityType;
+    private String location;
+    private BigDecimal latitude;
+    private BigDecimal longitude;
+    private LocalDateTime startTime;
+    private LocalDateTime endTime;
+    private Integer maxParticipants;
+    private Integer currentParticipants;
+    private BigDecimal fee;
+    private String status;
+    private Integer pointsReward;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 2: 创建 ActionActivityRegistration entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_activity_registrations")
+public class ActionActivityRegistration {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long activityId;
+    private Long userId;
+    private Long familyId;
+    private String status;
+    private String note;
+    private LocalDateTime registeredAt;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 3: 创建 ActionArticle entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_articles")
+public class ActionArticle {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long authorId;
+    private Long categoryId;
+    private String title;
+    private String summary;
+    private String content;
+    private String coverUrl;
+    private String articleType;
+    private Integer viewCount;
+    private Integer likeCount;
+    private String status;
+    private LocalDateTime publishedAt;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 4: 创建 ActionArticleCategory entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_article_categories")
+public class ActionArticleCategory {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private String name;
+    private String icon;
+    private String description;
+    private Integer sortOrder;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 5: 创建 ActionElderCarePlan entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_elder_care_plans")
+public class ActionElderCarePlan {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long creatorId;
+    private String elderName;
+    private Integer elderAge;
+    private String healthCondition;
+    private String careLevel;
+    private String careItems;
+    private String emergencyContact;
+    private String emergencyPhone;
+    private String status;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 6: 创建 ActionElderCareLog entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_elder_care_logs")
+public class ActionElderCareLog {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long planId;
+    private Long familyId;
+    private Long caregiverId;
+    private String careItem;
+    private String careDetail;
+    private String careResult;
+    private LocalDateTime careDate;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 7: 创建 ActionPracticeTask entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_practice_tasks")
+public class ActionPracticeTask {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long familyId;
+    private Long creatorId;
+    private Long assigneeId;
+    private String title;
+    private String description;
+    private String practiceType;
+    private Integer pointsReward;
+    private String status;
+    private LocalDateTime deadline;
+    private LocalDateTime completedAt;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 8: 创建 ActionCommunityPost entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_community_posts")
+public class ActionCommunityPost {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long userId;
+    private Long familyId;
+    private String title;
+    private String content;
+    private String imageUrl;
+    private String postType;
+    private Integer viewCount;
+    private Integer likeCount;
+    private Integer commentCount;
+    private String status;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 9: 创建 ActionCommunityComment entity**
+
+```java
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("action_community_comments")
+public class ActionCommunityComment {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long postId;
+    private Long userId;
+    private Long parentId;
+    private String content;
+    private Integer likeCount;
+    private LocalDateTime createdAt;
+    private LocalDateTime updatedAt;
+}
+```
+
+- [ ] **Step 10: 编译验证**
+
+Run: `cd cfc-backend && mvn compile -q`
+
+Expected: BUILD SUCCESS
+
+---
+
+### Task 4: 创建所有 Mapper
+
+**Files:**
+- Create: 17 mapper files (每个entity对应一个Mapper)
+
+- [ ] **Step 1: 创建 Body 域 Mapper**
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/BodyHealthMetricMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.BodyHealthMetric;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BodyHealthMetricMapper extends BaseMapper<BodyHealthMetric> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/BodyNutritionLogMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.BodyNutritionLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BodyNutritionLogMapper extends BaseMapper<BodyNutritionLog> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/BodyAntiAgingAssessmentMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.BodyAntiAgingAssessment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BodyAntiAgingAssessmentMapper extends BaseMapper<BodyAntiAgingAssessment> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/BodyExerciseLogMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.BodyExerciseLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BodyExerciseLogMapper extends BaseMapper<BodyExerciseLog> {}
+```
+
+- [ ] **Step 2: 创建 Mind 域 Mapper**
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/MindMoodLogMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.MindMoodLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface MindMoodLogMapper extends BaseMapper<MindMoodLog> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/MindPsychologicalAssessmentMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.MindPsychologicalAssessment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface MindPsychologicalAssessmentMapper extends BaseMapper<MindPsychologicalAssessment> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/MindFamilyAtmosphereIndexMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.MindFamilyAtmosphereIndex;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface MindFamilyAtmosphereIndexMapper extends BaseMapper<MindFamilyAtmosphereIndex> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/MindMeditationSessionMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.MindMeditationSession;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface MindMeditationSessionMapper extends BaseMapper<MindMeditationSession> {}
+```
+
+- [ ] **Step 3: 创建 Action 域 Mapper**
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionActivityMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionActivity;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionActivityMapper extends BaseMapper<ActionActivity> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionActivityRegistrationMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionActivityRegistration;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionActivityRegistrationMapper extends BaseMapper<ActionActivityRegistration> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionArticleMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionArticle;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionArticleMapper extends BaseMapper<ActionArticle> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionArticleCategoryMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionArticleCategory;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionArticleCategoryMapper extends BaseMapper<ActionArticleCategory> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionElderCarePlanMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionElderCarePlan;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionElderCarePlanMapper extends BaseMapper<ActionElderCarePlan> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionElderCareLogMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionElderCareLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionElderCareLogMapper extends BaseMapper<ActionElderCareLog> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionPracticeTaskMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionPracticeTask;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionPracticeTaskMapper extends BaseMapper<ActionPracticeTask> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionCommunityPostMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionCommunityPost;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionCommunityPostMapper extends BaseMapper<ActionCommunityPost> {}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/mapper/ActionCommunityCommentMapper.java
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ActionCommunityComment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ActionCommunityCommentMapper extends BaseMapper<ActionCommunityComment> {}
+```
+
+- [ ] **Step 4: 编译验证**
+
+Run: `cd cfc-backend && mvn compile -q`
+
+Expected: BUILD SUCCESS
+
+---
+
+### Task 5: DatabaseInitializer 增加新表
+
+**Files:**
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java`
+
+- [ ] **Step 1: 在 DatabaseInitializer 中添加 17 张新表的 CREATE TABLE 语句**
+
+在 DatabaseInitializer 的 init 方法中(现有建表语句之后),添加以下新表创建逻辑。遵循现有模式:`CREATE TABLE IF NOT EXISTS` + 基本字段 + `created_at/updated_at`。
+
+```java
+// === Body 域表 ===
+createTableIfNotExists("body_health_metrics", "CREATE TABLE IF NOT EXISTS `body_health_metrics` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`weight` DECIMAL(5,1) DEFAULT NULL COMMENT '体重kg'," +
+    "`blood_pressure_systolic` INT DEFAULT NULL COMMENT '收缩压'," +
+    "`blood_pressure_diastolic` INT DEFAULT NULL COMMENT '舒张压'," +
+    "`heart_rate` INT DEFAULT NULL COMMENT '心率'," +
+    "`sleep_hours` INT DEFAULT NULL COMMENT '睡眠时长(小时)'," +
+    "`sleep_quality` INT DEFAULT NULL COMMENT '睡眠质量1-5'," +
+    "`note` VARCHAR(500) DEFAULT NULL," +
+    "`record_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康指标记录'");
+
+createTableIfNotExists("body_nutrition_logs", "CREATE TABLE IF NOT EXISTS `body_nutrition_logs` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`water_ml` INT DEFAULT NULL COMMENT '饮水量ml'," +
+    "`calorie_intake` INT DEFAULT NULL COMMENT '热量摄入kcal'," +
+    "`protein_g` DECIMAL(5,1) DEFAULT NULL COMMENT '蛋白质g'," +
+    "`vitamin_c` DECIMAL(5,1) DEFAULT NULL COMMENT '维生素C mg'," +
+    "`vitamin_d` DECIMAL(5,1) DEFAULT NULL COMMENT '维生素D ug'," +
+    "`meal_type` VARCHAR(20) DEFAULT NULL COMMENT '餐次(breakfast/lunch/dinner/snack)'," +
+    "`note` VARCHAR(500) DEFAULT NULL," +
+    "`record_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='水营养记录'");
+
+createTableIfNotExists("body_anti_aging_assessments", "CREATE TABLE IF NOT EXISTS `body_anti_aging_assessments` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`guide_id` BIGINT DEFAULT NULL COMMENT '规划师ID'," +
+    "`assessment_type` VARCHAR(50) DEFAULT NULL COMMENT '评估类型'," +
+    "`cellular_age` INT DEFAULT NULL COMMENT '细胞年龄'," +
+    "`biological_age` INT DEFAULT NULL COMMENT '生物学年龄'," +
+    "`result_summary` VARCHAR(500) DEFAULT NULL," +
+    "`result_detail` TEXT DEFAULT NULL," +
+    "`report_url` VARCHAR(500) DEFAULT NULL," +
+    "`status` VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/completed'," +
+    "`assessment_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='抗衰评估'");
+
+createTableIfNotExists("body_exercise_logs", "CREATE TABLE IF NOT EXISTS `body_exercise_logs` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`exercise_type` VARCHAR(50) NOT NULL COMMENT '运动类型'," +
+    "`duration_minutes` INT DEFAULT NULL COMMENT '时长(分钟)'," +
+    "`steps` INT DEFAULT NULL COMMENT '步数'," +
+    "`calories_burned` INT DEFAULT NULL COMMENT '消耗卡路里'," +
+    "`intensity` INT DEFAULT NULL COMMENT '强度1-5'," +
+    "`note` VARCHAR(500) DEFAULT NULL," +
+    "`exercise_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运动记录'");
+
+// === Mind 域表 ===
+createTableIfNotExists("mind_mood_logs", "CREATE TABLE IF NOT EXISTS `mind_mood_logs` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`mood_score` INT NOT NULL COMMENT '心情分数1-10'," +
+    "`mood_label` VARCHAR(20) DEFAULT NULL COMMENT '心情标签(happy/sad/anxious/calm/angry)'," +
+    "`tags` VARCHAR(200) DEFAULT NULL COMMENT '自定义标签,分隔'," +
+    "`note` VARCHAR(500) DEFAULT NULL," +
+    "`weather` VARCHAR(20) DEFAULT NULL COMMENT '天气'," +
+    "`record_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='情绪日志'");
+
+createTableIfNotExists("mind_psychological_assessments", "CREATE TABLE IF NOT EXISTS `mind_psychological_assessments` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`guide_id` BIGINT DEFAULT NULL COMMENT '规划师ID'," +
+    "`assessment_type` VARCHAR(50) NOT NULL COMMENT '评估类型(SCL90/SDS/SAS等)'," +
+    "`total_score` INT DEFAULT NULL," +
+    "`result_level` VARCHAR(20) DEFAULT NULL COMMENT 'normal/mild/moderate/severe'," +
+    "`result_summary` VARCHAR(500) DEFAULT NULL," +
+    "`result_detail` TEXT DEFAULT NULL," +
+    "`report_url` VARCHAR(500) DEFAULT NULL," +
+    "`status` VARCHAR(20) DEFAULT 'pending'," +
+    "`assessment_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心理测评'");
+
+createTableIfNotExists("mind_family_atmosphere_indices", "CREATE TABLE IF NOT EXISTS `mind_family_atmosphere_indices` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`communication_score` INT DEFAULT NULL COMMENT '沟通评分1-100'," +
+    "`emotional_score` INT DEFAULT NULL COMMENT '情感评分1-100'," +
+    "`support_score` INT DEFAULT NULL COMMENT '支持评分1-100'," +
+    "`conflict_score` INT DEFAULT NULL COMMENT '冲突评分1-100(越高越好=冲突处理越好)'," +
+    "`overall_score` INT DEFAULT NULL COMMENT '综合评分1-100'," +
+    "`note` VARCHAR(500) DEFAULT NULL," +
+    "`record_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭氛围指数'");
+
+createTableIfNotExists("mind_meditation_sessions", "CREATE TABLE IF NOT EXISTS `mind_meditation_sessions` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`meditation_type` VARCHAR(30) DEFAULT NULL COMMENT '冥想类型(breathing/body-scan/guided)'," +
+    "`duration_minutes` INT NOT NULL COMMENT '时长(分钟)'," +
+    "`completion_rate` INT DEFAULT NULL COMMENT '完成率0-100'," +
+    "`audio_url` VARCHAR(500) DEFAULT NULL COMMENT '引导音频URL'," +
+    "`note` VARCHAR(500) DEFAULT NULL," +
+    "`session_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='冥想记录'");
+
+// === Action 域表 ===
+createTableIfNotExists("action_activities", "CREATE TABLE IF NOT EXISTS `action_activities` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`creator_id` BIGINT NOT NULL COMMENT '创建人ID'," +
+    "`title` VARCHAR(200) NOT NULL," +
+    "`description` TEXT DEFAULT NULL," +
+    "`cover_url` VARCHAR(500) DEFAULT NULL COMMENT '封面图'," +
+    "`activity_type` VARCHAR(30) DEFAULT NULL COMMENT 'online/offline/hybrid'," +
+    "`location` VARCHAR(200) DEFAULT NULL COMMENT '地点'," +
+    "`latitude` DECIMAL(10,7) DEFAULT NULL," +
+    "`longitude` DECIMAL(10,7) DEFAULT NULL," +
+    "`start_time` DATETIME NOT NULL," +
+    "`end_time` DATETIME NOT NULL," +
+    "`max_participants` INT DEFAULT NULL COMMENT '最大参与人数'," +
+    "`current_participants` INT DEFAULT 0," +
+    "`fee` DECIMAL(10,2) DEFAULT 0 COMMENT '费用'," +
+    "`status` VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/published/cancelled/ended'," +
+    "`points_reward` INT DEFAULT 0 COMMENT '参与奖励积分'," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动'");
+
+createTableIfNotExists("action_activity_registrations", "CREATE TABLE IF NOT EXISTS `action_activity_registrations` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`activity_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`family_id` BIGINT NOT NULL," +
+    "`status` VARCHAR(20) DEFAULT 'registered' COMMENT 'registered/cancelled/attended'," +
+    "`note` VARCHAR(500) DEFAULT NULL," +
+    "`registered_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动报名'");
+
+createTableIfNotExists("action_articles", "CREATE TABLE IF NOT EXISTS `action_articles` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`author_id` BIGINT NOT NULL," +
+    "`category_id` BIGINT DEFAULT NULL," +
+    "`title` VARCHAR(200) NOT NULL," +
+    "`summary` VARCHAR(500) DEFAULT NULL," +
+    "`content` LONGTEXT DEFAULT NULL," +
+    "`cover_url` VARCHAR(500) DEFAULT NULL," +
+    "`article_type` VARCHAR(30) DEFAULT 'article' COMMENT 'article/video/infographic'," +
+    "`view_count` INT DEFAULT 0," +
+    "`like_count` INT DEFAULT 0," +
+    "`status` VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/published/archived'," +
+    "`published_at` DATETIME DEFAULT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章/科普'");
+
+createTableIfNotExists("action_article_categories", "CREATE TABLE IF NOT EXISTS `action_article_categories` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`name` VARCHAR(50) NOT NULL," +
+    "`icon` VARCHAR(50) DEFAULT NULL," +
+    "`description` VARCHAR(200) DEFAULT NULL," +
+    "`sort_order` INT DEFAULT 0," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章分类'");
+
+createTableIfNotExists("action_elder_care_plans", "CREATE TABLE IF NOT EXISTS `action_elder_care_plans` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`creator_id` BIGINT NOT NULL," +
+    "`elder_name` VARCHAR(50) NOT NULL COMMENT '长者姓名'," +
+    "`elder_age` INT DEFAULT NULL," +
+    "`health_condition` VARCHAR(500) DEFAULT NULL COMMENT '健康状况'," +
+    "`care_level` VARCHAR(20) DEFAULT NULL COMMENT 'care-level-1/2/3'," +
+    "`care_items` TEXT DEFAULT NULL COMMENT '关怀项目JSON'," +
+    "`emergency_contact` VARCHAR(50) DEFAULT NULL COMMENT '紧急联系人'," +
+    "`emergency_phone` VARCHAR(20) DEFAULT NULL COMMENT '紧急联系电话'," +
+    "`status` VARCHAR(20) DEFAULT 'active' COMMENT 'active/completed/archived'," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='长者关怀计划'");
+
+createTableIfNotExists("action_elder_care_logs", "CREATE TABLE IF NOT EXISTS `action_elder_care_logs` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`plan_id` BIGINT NOT NULL," +
+    "`family_id` BIGINT NOT NULL," +
+    "`caregiver_id` BIGINT NOT NULL COMMENT '照护人ID'," +
+    "`care_item` VARCHAR(100) NOT NULL COMMENT '关怀项目'," +
+    "`care_detail` TEXT DEFAULT NULL COMMENT '照护详情'," +
+    "`care_result` VARCHAR(200) DEFAULT NULL COMMENT '照护结果'," +
+    "`care_date` DATETIME NOT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='长者关怀日志'");
+
+createTableIfNotExists("action_practice_tasks", "CREATE TABLE IF NOT EXISTS `action_practice_tasks` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`family_id` BIGINT NOT NULL," +
+    "`creator_id` BIGINT NOT NULL," +
+    "`assignee_id` BIGINT DEFAULT NULL COMMENT '执行人ID'," +
+    "`title` VARCHAR(200) NOT NULL," +
+    "`description` VARCHAR(500) DEFAULT NULL," +
+    "`practice_type` VARCHAR(30) DEFAULT NULL COMMENT 'relationship/parenting/elder-care/community'," +
+    "`points_reward` INT DEFAULT 0 COMMENT '完成积分奖励'," +
+    "`status` VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/completed/cancelled'," +
+    "`deadline` DATETIME DEFAULT NULL," +
+    "`completed_at` DATETIME DEFAULT NULL," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='践行任务'");
+
+createTableIfNotExists("action_community_posts", "CREATE TABLE IF NOT EXISTS `action_community_posts` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`user_id` BIGINT NOT NULL," +
+    "`family_id` BIGINT DEFAULT NULL," +
+    "`title` VARCHAR(200) NOT NULL," +
+    "`content` TEXT NOT NULL," +
+    "`image_url` VARCHAR(500) DEFAULT NULL COMMENT '图片URL,分隔多张'," +
+    "`post_type` VARCHAR(30) DEFAULT 'sharing' COMMENT 'sharing/question/experience'," +
+    "`view_count` INT DEFAULT 0," +
+    "`like_count` INT DEFAULT 0," +
+    "`comment_count` INT DEFAULT 0," +
+    "`status` VARCHAR(20) DEFAULT 'published' COMMENT 'published/hidden/deleted'," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='社区帖子'");
+
+createTableIfNotExists("action_community_comments", "CREATE TABLE IF NOT EXISTS `action_community_comments` (" +
+    "`id` BIGINT PRIMARY KEY AUTO_INCREMENT," +
+    "`post_id` BIGINT NOT NULL," +
+    "`user_id` BIGINT NOT NULL," +
+    "`parent_id` BIGINT DEFAULT NULL COMMENT '父评论ID(回复)'," +
+    "`content` VARCHAR(500) NOT NULL," +
+    "`like_count` INT DEFAULT 0," +
+    "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP," +
+    "`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='社区评论'");
+```
+
+- [ ] **Step 2: PointsLog 表增加 domain 字段**
+
+在 DatabaseInitializer 的现有 points_log 表创建之后,添加 ALTER 语句:
+
+```java
+// PointsLog 扩展:增加 domain 字段支持四域积分来源
+try {
+    jdbcTemplate.execute("ALTER TABLE points_log ADD COLUMN `domain` VARCHAR(20) DEFAULT 'wisdom' COMMENT '积分来源域(body/mind/wisdom/action)'");
+} catch (Exception e) {
+    // 字段已存在,忽略
+    log.info("points_log.domain already exists");
+}
+```
+
+- [ ] **Step 3: 启动验证**
+
+Run: `cd cfc-backend && mvn spring-boot:run` (确认启动不报错,新表自动创建)
+
+Expected: Application starts successfully, logs show new tables created
+
+---
+
+### Task 6: 创建 Service 骨架
+
+**Files:**
+- Create: 13 service files (每个域核心service)
+
+- [ ] **Step 1: 创建 Body 域 Service**
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/BodyHealthService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.BodyHealthMetric;
+import com.etotem.cfc.mapper.BodyHealthMetricMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class BodyHealthService {
+
+    @Resource
+    private BodyHealthMetricMapper bodyHealthMetricMapper;
+
+    public BodyHealthMetric createRecord(BodyHealthMetric record) {
+        bodyHealthMetricMapper.insert(record);
+        return record;
+    }
+
+    public List<BodyHealthMetric> getRecords(Long userId, Integer limit) {
+        return bodyHealthMetricMapper.selectList(
+            new LambdaQueryWrapper<BodyHealthMetric>()
+                .eq(BodyHealthMetric::getUserId, userId)
+                .orderByDesc(BodyHealthMetric::getRecordDate)
+                .last("LIMIT " + limit)
+        );
+    }
+
+    public BodyHealthMetric getLatestRecord(Long userId) {
+        return bodyHealthMetricMapper.selectOne(
+            new LambdaQueryWrapper<BodyHealthMetric>()
+                .eq(BodyHealthMetric::getUserId, userId)
+                .orderByDesc(BodyHealthMetric::getRecordDate)
+                .last("LIMIT 1")
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/BodyNutritionService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.BodyNutritionLog;
+import com.etotem.cfc.mapper.BodyNutritionLogMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class BodyNutritionService {
+
+    @Resource
+    private BodyNutritionLogMapper bodyNutritionLogMapper;
+
+    public BodyNutritionLog createLog(BodyNutritionLog log) {
+        bodyNutritionLogMapper.insert(log);
+        return log;
+    }
+
+    public List<BodyNutritionLog> getLogs(Long userId, Integer limit) {
+        return bodyNutritionLogMapper.selectList(
+            new LambdaQueryWrapper<BodyNutritionLog>()
+                .eq(BodyNutritionLog::getUserId, userId)
+                .orderByDesc(BodyNutritionLog::getRecordDate)
+                .last("LIMIT " + limit)
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/BodyAntiAgingService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.BodyAntiAgingAssessment;
+import com.etotem.cfc.mapper.BodyAntiAgingAssessmentMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class BodyAntiAgingService {
+
+    @Resource
+    private BodyAntiAgingAssessmentMapper bodyAntiAgingAssessmentMapper;
+
+    public BodyAntiAgingAssessment createAssessment(BodyAntiAgingAssessment assessment) {
+        bodyAntiAgingAssessmentMapper.insert(assessment);
+        return assessment;
+    }
+
+    public List<BodyAntiAgingAssessment> getAssessments(Long userId) {
+        return bodyAntiAgingAssessmentMapper.selectList(
+            new LambdaQueryWrapper<BodyAntiAgingAssessment>()
+                .eq(BodyAntiAgingAssessment::getUserId, userId)
+                .orderByDesc(BodyAntiAgingAssessment::getAssessmentDate)
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/BodyExerciseService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.BodyExerciseLog;
+import com.etotem.cfc.mapper.BodyExerciseLogMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class BodyExerciseService {
+
+    @Resource
+    private BodyExerciseLogMapper bodyExerciseLogMapper;
+
+    public BodyExerciseLog createLog(BodyExerciseLog log) {
+        bodyExerciseLogMapper.insert(log);
+        return log;
+    }
+
+    public List<BodyExerciseLog> getLogs(Long userId, Integer limit) {
+        return bodyExerciseLogMapper.selectList(
+            new LambdaQueryWrapper<BodyExerciseLog>()
+                .eq(BodyExerciseLog::getUserId, userId)
+                .orderByDesc(BodyExerciseLog::getExerciseDate)
+                .last("LIMIT " + limit)
+        );
+    }
+}
+```
+
+- [ ] **Step 2: 创建 Mind 域 Service**
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/MindMoodService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.MindMoodLog;
+import com.etotem.cfc.mapper.MindMoodLogMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class MindMoodService {
+
+    @Resource
+    private MindMoodLogMapper mindMoodLogMapper;
+
+    public MindMoodLog createLog(MindMoodLog log) {
+        mindMoodLogMapper.insert(log);
+        return log;
+    }
+
+    public List<MindMoodLog> getLogs(Long userId, Integer limit) {
+        return mindMoodLogMapper.selectList(
+            new LambdaQueryWrapper<MindMoodLog>()
+                .eq(MindMoodLog::getUserId, userId)
+                .orderByDesc(MindMoodLog::getRecordDate)
+                .last("LIMIT " + limit)
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/MindAssessmentService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.MindPsychologicalAssessment;
+import com.etotem.cfc.mapper.MindPsychologicalAssessmentMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class MindAssessmentService {
+
+    @Resource
+    private MindPsychologicalAssessmentMapper mindPsychologicalAssessmentMapper;
+
+    public MindPsychologicalAssessment createAssessment(MindPsychologicalAssessment assessment) {
+        mindPsychologicalAssessmentMapper.insert(assessment);
+        return assessment;
+    }
+
+    public List<MindPsychologicalAssessment> getAssessments(Long userId) {
+        return mindPsychologicalAssessmentMapper.selectList(
+            new LambdaQueryWrapper<MindPsychologicalAssessment>()
+                .eq(MindPsychologicalAssessment::getUserId, userId)
+                .orderByDesc(MindPsychologicalAssessment::getAssessmentDate)
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/MindFamilyAtmosphereService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.MindFamilyAtmosphereIndex;
+import com.etotem.cfc.mapper.MindFamilyAtmosphereIndexMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class MindFamilyAtmosphereService {
+
+    @Resource
+    private MindFamilyAtmosphereIndexMapper mindFamilyAtmosphereIndexMapper;
+
+    public MindFamilyAtmosphereIndex createIndex(MindFamilyAtmosphereIndex index) {
+        mindFamilyAtmosphereIndexMapper.insert(index);
+        return index;
+    }
+
+    public List<MindFamilyAtmosphereIndex> getIndices(Long familyId) {
+        return mindFamilyAtmosphereIndexMapper.selectList(
+            new LambdaQueryWrapper<MindFamilyAtmosphereIndex>()
+                .eq(MindFamilyAtmosphereIndex::getFamilyId, familyId)
+                .orderByDesc(MindFamilyAtmosphereIndex::getRecordDate)
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/MindMeditationService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.MindMeditationSession;
+import com.etotem.cfc.mapper.MindMeditationSessionMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class MindMeditationService {
+
+    @Resource
+    private MindMeditationSessionMapper mindMeditationSessionMapper;
+
+    public MindMeditationSession createSession(MindMeditationSession session) {
+        mindMeditationSessionMapper.insert(session);
+        return session;
+    }
+
+    public List<MindMeditationSession> getSessions(Long userId, Integer limit) {
+        return mindMeditationSessionMapper.selectList(
+            new LambdaQueryWrapper<MindMeditationSession>()
+                .eq(MindMeditationSession::getUserId, userId)
+                .orderByDesc(MindMeditationSession::getSessionDate)
+                .last("LIMIT " + limit)
+        );
+    }
+}
+```
+
+- [ ] **Step 3: 创建 Action 域 Service**
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/ActionActivityService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.ActionActivity;
+import com.etotem.cfc.entity.ActionActivityRegistration;
+import com.etotem.cfc.mapper.ActionActivityMapper;
+import com.etotem.cfc.mapper.ActionActivityRegistrationMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class ActionActivityService {
+
+    @Resource
+    private ActionActivityMapper actionActivityMapper;
+
+    @Resource
+    private ActionActivityRegistrationMapper actionActivityRegistrationMapper;
+
+    public ActionActivity createActivity(ActionActivity activity) {
+        actionActivityMapper.insert(activity);
+        return activity;
+    }
+
+    public List<ActionActivity> getPublishedActivities(Integer limit) {
+        return actionActivityMapper.selectList(
+            new LambdaQueryWrapper<ActionActivity>()
+                .eq(ActionActivity::getStatus, "published")
+                .orderByDesc(ActionActivity::getStartTime)
+                .last("LIMIT " + limit)
+        );
+    }
+
+    public ActionActivity getById(Long id) {
+        return actionActivityMapper.selectById(id);
+    }
+
+    @Transactional
+    public ActionActivityRegistration register(Long activityId, Long userId, Long familyId) {
+        ActionActivityRegistration registration = new ActionActivityRegistration();
+        registration.setActivityId(activityId);
+        registration.setUserId(userId);
+        registration.setFamilyId(familyId);
+        registration.setStatus("registered");
+        actionActivityRegistrationMapper.insert(registration);
+        // Increment current_participants
+        ActionActivity activity = actionActivityMapper.selectById(activityId);
+        if (activity != null) {
+            activity.setCurrentParticipants(activity.getCurrentParticipants() + 1);
+            actionActivityMapper.updateById(activity);
+        }
+        return registration;
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/ActionArticleService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.ActionArticle;
+import com.etotem.cfc.mapper.ActionArticleMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class ActionArticleService {
+
+    @Resource
+    private ActionArticleMapper actionArticleMapper;
+
+    public ActionArticle createArticle(ActionArticle article) {
+        actionArticleMapper.insert(article);
+        return article;
+    }
+
+    public List<ActionArticle> getPublishedArticles(Long categoryId, Integer limit) {
+        LambdaQueryWrapper<ActionArticle> wrapper = new LambdaQueryWrapper<ActionArticle>()
+            .eq(ActionArticle::getStatus, "published")
+            .orderByDesc(ActionArticle::getPublishedAt)
+            .last("LIMIT " + limit);
+        if (categoryId != null) {
+            wrapper.eq(ActionArticle::getCategoryId, categoryId);
+        }
+        return actionArticleMapper.selectList(wrapper);
+    }
+
+    public ActionArticle getById(Long id) {
+        return actionArticleMapper.selectById(id);
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/ActionElderCareService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.ActionElderCarePlan;
+import com.etotem.cfc.entity.ActionElderCareLog;
+import com.etotem.cfc.mapper.ActionElderCarePlanMapper;
+import com.etotem.cfc.mapper.ActionElderCareLogMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class ActionElderCareService {
+
+    @Resource
+    private ActionElderCarePlanMapper actionElderCarePlanMapper;
+
+    @Resource
+    private ActionElderCareLogMapper actionElderCareLogMapper;
+
+    public ActionElderCarePlan createPlan(ActionElderCarePlan plan) {
+        actionElderCarePlanMapper.insert(plan);
+        return plan;
+    }
+
+    public List<ActionElderCarePlan> getPlans(Long familyId) {
+        return actionElderCarePlanMapper.selectList(
+            new LambdaQueryWrapper<ActionElderCarePlan>()
+                .eq(ActionElderCarePlan::getFamilyId, familyId)
+                .orderByDesc(ActionElderCarePlan::getCreatedAt)
+        );
+    }
+
+    public ActionElderCareLog createCareLog(ActionElderCareLog log) {
+        actionElderCareLogMapper.insert(log);
+        return log;
+    }
+
+    public List<ActionElderCareLog> getCareLogs(Long planId) {
+        return actionElderCareLogMapper.selectList(
+            new LambdaQueryWrapper<ActionElderCareLog>()
+                .eq(ActionElderCareLog::getPlanId, planId)
+                .orderByDesc(ActionElderCareLog::getCareDate)
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/ActionPracticeService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.ActionPracticeTask;
+import com.etotem.cfc.mapper.ActionPracticeTaskMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class ActionPracticeService {
+
+    @Resource
+    private ActionPracticeTaskMapper actionPracticeTaskMapper;
+
+    public ActionPracticeTask createTask(ActionPracticeTask task) {
+        actionPracticeTaskMapper.insert(task);
+        return task;
+    }
+
+    public List<ActionPracticeTask> getTasks(Long familyId) {
+        return actionPracticeTaskMapper.selectList(
+            new LambdaQueryWrapper<ActionPracticeTask>()
+                .eq(ActionPracticeTask::getFamilyId, familyId)
+                .orderByDesc(ActionPracticeTask::getCreatedAt)
+        );
+    }
+}
+```
+
+```java
+// cfc-backend/src/main/java/com/etotem/cfc/service/ActionCommunityService.java
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.ActionCommunityPost;
+import com.etotem.cfc.entity.ActionCommunityComment;
+import com.etotem.cfc.mapper.ActionCommunityPostMapper;
+import com.etotem.cfc.mapper.ActionCommunityCommentMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class ActionCommunityService {
+
+    @Resource
+    private ActionCommunityPostMapper actionCommunityPostMapper;
+
+    @Resource
+    private ActionCommunityCommentMapper actionCommunityCommentMapper;
+
+    public ActionCommunityPost createPost(ActionCommunityPost post) {
+        actionCommunityPostMapper.insert(post);
+        return post;
+    }
+
+    public List<ActionCommunityPost> getPosts(Integer limit) {
+        return actionCommunityPostMapper.selectList(
+            new LambdaQueryWrapper<ActionCommunityPost>()
+                .eq(ActionCommunityPost::getStatus, "published")
+                .orderByDesc(ActionCommunityPost::getCreatedAt)
+                .last("LIMIT " + limit)
+        );
+    }
+
+    public ActionCommunityComment createComment(ActionCommunityComment comment) {
+        actionCommunityCommentMapper.insert(comment);
+        // Increment post comment count
+        ActionCommunityPost post = actionCommunityPostMapper.selectById(comment.getPostId());
+        if (post != null) {
+            post.setCommentCount(post.getCommentCount() + 1);
+            actionCommunityPostMapper.updateById(post);
+        }
+        return comment;
+    }
+
+    public List<ActionCommunityComment> getComments(Long postId) {
+        return actionCommunityCommentMapper.selectList(
+            new LambdaQueryWrapper<ActionCommunityComment>()
+                .eq(ActionCommunityComment::getPostId, postId)
+                .orderByAsc(ActionCommunityComment::getCreatedAt)
+        );
+    }
+}
+```
+
+- [ ] **Step 4: 编译验证**
+
+Run: `cd cfc-backend && mvn compile -q`
+
+Expected: BUILD SUCCESS
+
+---
+
+### Task 7: 创建后端 Controller 骨架
+
+**Files:**
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/body/BodyHealthController.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/mind/MindMoodController.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/action/ActionController.java`
+- Create: `cfc-backend/src/main/java/com/etotem/cfc/controller/action/ActionArticleController.java`
+
+- [ ] **Step 1: 创建 BodyHealthController**
+
+```java
+package com.etotem.cfc.controller.body;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.BodyHealthMetric;
+import com.etotem.cfc.service.BodyHealthService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/body/health")
+public class BodyHealthController {
+
+    @Resource
+    private BodyHealthService bodyHealthService;
+
+    @PostMapping("/create")
+    public Result<BodyHealthMetric> createRecord(@RequestBody BodyHealthMetric record) {
+        return Result.success(bodyHealthService.createRecord(record));
+    }
+
+    @PostMapping("/list")
+    public Result<List<BodyHealthMetric>> getRecords(@RequestBody Map<String, Object> params) {
+        Long userId = Long.valueOf(params.get("userId").toString());
+        Integer limit = params.containsKey("limit") ? Integer.valueOf(params.get("limit").toString()) : 30;
+        return Result.success(bodyHealthService.getRecords(userId, limit));
+    }
+
+    @PostMapping("/latest")
+    public Result<BodyHealthMetric> getLatestRecord(@RequestBody Map<String, Object> params) {
+        Long userId = Long.valueOf(params.get("userId").toString());
+        return Result.success(bodyHealthService.getLatestRecord(userId));
+    }
+}
+```
+
+- [ ] **Step 2: 创建 MindMoodController**
+
+```java
+package com.etotem.cfc.controller.mind;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.MindMoodLog;
+import com.etotem.cfc.service.MindMoodService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/mind/mood")
+public class MindMoodController {
+
+    @Resource
+    private MindMoodService mindMoodService;
+
+    @PostMapping("/create")
+    public Result<MindMoodLog> createLog(@RequestBody MindMoodLog log) {
+        return Result.success(mindMoodService.createLog(log));
+    }
+
+    @PostMapping("/list")
+    public Result<List<MindMoodLog>> getLogs(@RequestBody Map<String, Object> params) {
+        Long userId = Long.valueOf(params.get("userId").toString());
+        Integer limit = params.containsKey("limit") ? Integer.valueOf(params.get("limit").toString()) : 30;
+        return Result.success(mindMoodService.getLogs(userId, limit));
+    }
+}
+```
+
+- [ ] **Step 3: 创建 ActionController (活动+社区)**
+
+```java
+package com.etotem.cfc.controller.action;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.ActionActivity;
+import com.etotem.cfc.entity.ActionActivityRegistration;
+import com.etotem.cfc.service.ActionActivityService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/action/activity")
+public class ActionController {
+
+    @Resource
+    private ActionActivityService actionActivityService;
+
+    @PostMapping("/create")
+    public Result<ActionActivity> createActivity(@RequestBody ActionActivity activity) {
+        return Result.success(actionActivityService.createActivity(activity));
+    }
+
+    @PostMapping("/list")
+    public Result<List<ActionActivity>> getActivities(@RequestBody Map<String, Object> params) {
+        Integer limit = params.containsKey("limit") ? Integer.valueOf(params.get("limit").toString()) : 20;
+        return Result.success(actionActivityService.getPublishedActivities(limit));
+    }
+
+    @PostMapping("/detail")
+    public Result<ActionActivity> getDetail(@RequestBody Map<String, Object> params) {
+        Long id = Long.valueOf(params.get("id").toString());
+        return Result.success(actionActivityService.getById(id));
+    }
+
+    @PostMapping("/register")
+    public Result<ActionActivityRegistration> register(@RequestBody Map<String, Object> params) {
+        Long activityId = Long.valueOf(params.get("activityId").toString());
+        Long userId = Long.valueOf(params.get("userId").toString());
+        Long familyId = Long.valueOf(params.get("familyId").toString());
+        return Result.success(actionActivityService.register(activityId, userId, familyId));
+    }
+}
+```
+
+- [ ] **Step 4: 创建 ActionArticleController**
+
+```java
+package com.etotem.cfc.controller.action;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.ActionArticle;
+import com.etotem.cfc.service.ActionArticleService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/action/article")
+public class ActionArticleController {
+
+    @Resource
+    private ActionArticleService actionArticleService;
+
+    @PostMapping("/create")
+    public Result<ActionArticle> createArticle(@RequestBody ActionArticle article) {
+        return Result.success(actionArticleService.createArticle(article));
+    }
+
+    @PostMapping("/list")
+    public Result<List<ActionArticle>> getArticles(@RequestBody Map<String, Object> params) {
+        Long categoryId = params.containsKey("categoryId") ? Long.valueOf(params.get("categoryId").toString()) : null;
+        Integer limit = params.containsKey("limit") ? Integer.valueOf(params.get("limit").toString()) : 20;
+        return Result.success(actionArticleService.getPublishedArticles(categoryId, limit));
+    }
+
+    @PostMapping("/detail")
+    public Result<ActionArticle> getDetail(@RequestBody Map<String, Object> params) {
+        Long id = Long.valueOf(params.get("id").toString());
+        return Result.success(actionArticleService.getById(id));
+    }
+}
+```
+
+- [ ] **Step 5: 编译验证**
+
+Run: `cd cfc-backend && mvn compile -q`
+
+Expected: BUILD SUCCESS
+
+---
+
+### Task 8: PointsLog Entity 增加 domain 字段
+
+**Files:**
+- Modify: `cfc-backend/src/main/java/com/etotem/cfc/entity/PointsLog.java`
+
+- [ ] **Step 1: 在 PointsLog.java 中增加 domain 字段**
+
+在现有 PointsLog 实体中添加:
+
+```java
+private String domain; // 积分来源域: body/mind/wisdom/action,默认 "wisdom"
+```
+
+- [ ] **Step 2: 编译验证**
+
+Run: `cd cfc-backend && mvn compile -q`
+
+Expected: BUILD SUCCESS
+
+---
+
+### Task 9: 前端首页四象限重构
+
+**Files:**
+- Modify: `cfc-frontend/pages/index/index.vue`
+- Modify: `cfc-frontend/pages/index/parent-index.vue`
+- Modify: `cfc-frontend/pages/index/child-index.vue`
+- Modify: `cfc-frontend/pages.json`
+- Modify: `cfc-frontend/utils/api.js`
+- Modify: `cfc-frontend/store/index.js`
+
+- [ ] **Step 1: 修改 pages.json — 注册新页面路径 + 调整tabBar**
+
+在 `pages` 数组中新增(在现有页面之后):
+
+```json
+{
+  "path": "pages/body/index",
+  "style": { "navigationBarTitleText": "身·细胞抗衰" }
+},
+{
+  "path": "pages/body/health-metric",
+  "style": { "navigationBarTitleText": "健康指标" }
+},
+{
+  "path": "pages/body/nutrition-log",
+  "style": { "navigationBarTitleText": "水营养追踪" }
+},
+{
+  "path": "pages/body/anti-aging",
+  "style": { "navigationBarTitleText": "抗衰评估" }
+},
+{
+  "path": "pages/body/exercise-log",
+  "style": { "navigationBarTitleText": "运动记录" }
+},
+{
+  "path": "pages/mind/index",
+  "style": { "navigationBarTitleText": "心·心理情绪" }
+},
+{
+  "path": "pages/mind/mood-log",
+  "style": { "navigationBarTitleText": "情绪日志" }
+},
+{
+  "path": "pages/mind/assessment",
+  "style": { "navigationBarTitleText": "心理测评" }
+},
+{
+  "path": "pages/mind/family-atmosphere",
+  "style": { "navigationBarTitleText": "家庭氛围" }
+},
+{
+  "path": "pages/mind/meditation",
+  "style": { "navigationBarTitleText": "冥想放松" }
+},
+{
+  "path": "pages/action/index",
+  "style": { "navigationBarTitleText": "行·关系践行" }
+},
+{
+  "path": "pages/action/activity-list",
+  "style": { "navigationBarTitleText": "活动列表" }
+},
+{
+  "path": "pages/action/activity-detail",
+  "style": { "navigationBarTitleText": "活动详情" }
+},
+{
+  "path": "pages/action/article-list",
+  "style": { "navigationBarTitleText": "文章科普" }
+},
+{
+  "path": "pages/action/article-detail",
+  "style": { "navigationBarTitleText": "文章详情" }
+},
+{
+  "path": "pages/action/elder-care",
+  "style": { "navigationBarTitleText": "长者关怀" }
+},
+{
+  "path": "pages/action/community",
+  "style": { "navigationBarTitleText": "社区互动" }
+}
+```
+
+修改 tabBar(保留4-tab,调整"任务"和"心愿单"为域入口):
+
+```json
+"tabBar": {
+  "color": "#999999",
+  "selectedColor": "#4A90D9",
+  "backgroundColor": "#ffffff",
+  "borderStyle": "black",
+  "list": [
+    {
+      "pagePath": "pages/index/index",
+      "text": "首页",
+      "iconPath": "static/tab-home.png",
+      "selectedIconPath": "static/tab-home-active.png"
+    },
+    {
+      "pagePath": "pages/tasks/tasks",
+      "text": "智·成长",
+      "iconPath": "static/tab-wisdom.png",
+      "selectedIconPath": "static/tab-wisdom-active.png"
+    },
+    {
+      "pagePath": "pages/rewards/rewards",
+      "text": "行·实践",
+      "iconPath": "static/tab-action.png",
+      "selectedIconPath": "static/tab-action-active.png"
+    },
+    {
+      "pagePath": "pages/profile/profile",
+      "text": "我的",
+      "iconPath": "static/tab-me.png",
+      "selectedIconPath": "static/tab-me-active.png"
+    }
+  ]
+}
+```
+
+- [ ] **Step 2: 修改 index.vue — 增加四象限入口组件**
+
+在 `parent-index.vue` 和 `child-index.vue` 的模板中,在现有内容上方添加四象限矩阵区域:
+
+```vue
+<!-- 四象限入口 -->
+<view class="domain-matrix">
+  <view class="domain-title">溪福俱乐部 · 身心智行</view>
+  <view class="domain-grid">
+    <view class="domain-item domain-body" @click="navigateToDomain('body')">
+      <view class="domain-icon">🧬</view>
+      <view class="domain-name">身 · 细胞抗衰</view>
+      <view class="domain-desc">健康指标·运动·抗衰</view>
+    </view>
+    <view class="domain-item domain-mind" @click="navigateToDomain('mind')">
+      <view class="domain-icon">🧠</view>
+      <view class="domain-name">心 · 心理情绪</view>
+      <view class="domain-desc">情绪·测评·冥想</view>
+    </view>
+    <view class="domain-item domain-wisdom" @click="navigateToDomain('wisdom')">
+      <view class="domain-icon">📚</view>
+      <view class="domain-name">智 · 教育成长</view>
+      <view class="domain-desc">任务·积分·测评</view>
+    </view>
+    <view class="domain-item domain-action" @click="navigateToDomain('action')">
+      <view class="domain-icon">🤝</view>
+      <view class="domain-name">行 · 关系践行</view>
+      <view class="domain-desc">活动·科普·关怀</view>
+    </view>
+  </view>
+</view>
+```
+
+在 `parent-index.vue` 和 `child-index.vue` 的 methods 中添加:
+
+```javascript
+navigateToDomain(domain) {
+  const routes = {
+    body: '/pages/body/index',
+    mind: '/pages/mind/index',
+    wisdom: '/pages/tasks/tasks',
+    action: '/pages/action/index'
+  };
+  const url = routes[domain];
+  if (domain === 'wisdom') {
+    uni.switchTab({ url });
+  } else {
+    uni.navigateTo({ url });
+  }
+}
+```
+
+在 style 中添加:
+
+```scss
+.domain-matrix {
+  padding: 20rpx 30rpx;
+  background: linear-gradient(135deg, #f5f7fa 0%, #e8ecf1 100%);
+  border-radius: 20rpx;
+  margin: 20rpx;
+}
+.domain-title {
+  font-size: 32rpx;
+  font-weight: bold;
+  color: #333;
+  text-align: center;
+  margin-bottom: 20rpx;
+}
+.domain-grid {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+.domain-item {
+  width: 48%;
+  padding: 30rpx 20rpx;
+  border-radius: 16rpx;
+  margin-bottom: 16rpx;
+  text-align: center;
+  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
+}
+.domain-body {
+  background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
+}
+.domain-mind {
+  background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%);
+}
+.domain-wisdom {
+  background: linear-gradient(135deg, #fccb90 0%, #d57eeb 100%);
+}
+.domain-action {
+  background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
+}
+.domain-icon {
+  font-size: 60rpx;
+  margin-bottom: 10rpx;
+}
+.domain-name {
+  font-size: 28rpx;
+  font-weight: bold;
+  color: #fff;
+  margin-bottom: 6rpx;
+}
+.domain-desc {
+  font-size: 22rpx;
+  color: rgba(255, 255, 255, 0.85);
+}
+```
+
+- [ ] **Step 3: 创建各域首页占位页面**
+
+创建以下空壳页面(每个域首页只含标题和功能列表入口):
+
+`pages/body/index.vue`:
+```vue
+<template>
+  <view class="domain-page">
+    <view class="domain-header domain-header-body">
+      <view class="domain-header-icon">🧬</view>
+      <view class="domain-header-title">身 · 细胞抗衰</view>
+    </view>
+    <view class="feature-list">
+      <view class="feature-item" @click="navigateTo('/pages/body/health-metric')">
+        <text class="feature-name">健康指标记录</text>
+        <text class="feature-arrow">›</text>
+      </view>
+      <view class="feature-item" @click="navigateTo('/pages/body/nutrition-log')">
+        <text class="feature-name">水营养追踪</text>
+        <text class="feature-arrow">›</text>
+      </view>
+      <view class="feature-item" @click="navigateTo('/pages/body/anti-aging')">
+        <text class="feature-name">抗衰评估</text>
+        <text class="feature-arrow">›</text>
+      </view>
+      <view class="feature-item" @click="navigateTo('/pages/body/exercise-log')">
+        <text class="feature-name">运动记录</text>
+        <text class="feature-arrow">›</text>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  methods: {
+    navigateTo(url) {
+      uni.navigateTo({ url });
+    }
+  }
+}
+</script>
+
+<style scoped>
+.domain-page { padding: 0; }
+.domain-header { padding: 40rpx; text-align: center; color: #fff; }
+.domain-header-body { background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); }
+.domain-header-icon { font-size: 80rpx; }
+.domain-header-title { font-size: 36rpx; font-weight: bold; margin-top: 10rpx; }
+.feature-list { padding: 20rpx 30rpx; }
+.feature-item { display: flex; justify-content: space-between; align-items: center; padding: 30rpx; background: #fff; border-radius: 12rpx; margin-bottom: 16rpx; box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.04); }
+.feature-name { font-size: 30rpx; color: #333; }
+.feature-arrow { font-size: 36rpx; color: #ccc; }
+</style>
+```
+
+`pages/mind/index.vue`: 同上结构,domain-header-mind 样式为 `background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%)`,功能列表为情绪日志/心理测评/家庭氛围/冥想放松。
+
+`pages/action/index.vue`: 同上结构,domain-header-action 样式为 `background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)`,功能列表为活动列表/文章科普/长者关怀/社区互动。
+
+- [ ] **Step 4: 创建各域子页面占位文件**
+
+为每个域的功能页面创建最小占位 vue 文件(仅含标题文本),确保 pages.json 注册的路径都有对应文件。
+
+每个占位页面结构统一:
+```vue
+<template>
+  <view class="page-container">
+    <view class="placeholder">
+      <text class="placeholder-text">【功能名称】 — 即将上线</text>
+    </view>
+  </view>
+</template>
+<script>
+export default {}
+</script>
+<style scoped>
+.page-container { display: flex; justify-content: center; align-items: center; height: 100vh; background: #f5f7fa; }
+.placeholder { text-align: center; }
+.placeholder-text { font-size: 28rpx; color: #999; }
+</style>
+```
+
+需要创建的占位文件:
+- `pages/body/health-metric.vue` → "健康指标记录"
+- `pages/body/nutrition-log.vue` → "水营养追踪"
+- `pages/body/anti-aging.vue` → "抗衰评估"
+- `pages/body/exercise-log.vue` → "运动记录"
+- `pages/mind/mood-log.vue` → "情绪日志"
+- `pages/mind/assessment.vue` → "心理测评"
+- `pages/mind/family-atmosphere.vue` → "家庭氛围"
+- `pages/mind/meditation.vue` → "冥想放松"
+- `pages/action/activity-list.vue` → "活动列表"
+- `pages/action/activity-detail.vue` → "活动详情"
+- `pages/action/article-list.vue` → "文章科普"
+- `pages/action/article-detail.vue` → "文章详情"
+- `pages/action/elder-care.vue` → "长者关怀"
+- `pages/action/community.vue` → "社区互动"
+
+- [ ] **Step 5: 修改 api.js — 增加域 API 封装**
+
+在 `cfc-frontend/utils/api.js` 末尾添加:
+
+```javascript
+// === Body 域 API ===
+export const createBodyHealthMetric = (data) => request('/body/health/create', data);
+export const getBodyHealthMetrics = (data) => request('/body/health/list', data);
+export const getLatestBodyHealthMetric = (data) => request('/body/health/latest', data);
+export const createBodyNutritionLog = (data) => request('/body/nutrition/create', data);
+export const getBodyNutritionLogs = (data) => request('/body/nutrition/list', data);
+export const createBodyAntiAgingAssessment = (data) => request('/body/anti-aging/create', data);
+export const getBodyAntiAgingAssessments = (data) => request('/body/anti-aging/list', data);
+export const createBodyExerciseLog = (data) => request('/body/exercise/create', data);
+export const getBodyExerciseLogs = (data) => request('/body/exercise/list', data);
+
+// === Mind 域 API ===
+export const createMindMoodLog = (data) => request('/mind/mood/create', data);
+export const getMindMoodLogs = (data) => request('/mind/mood/list', data);
+export const createMindAssessment = (data) => request('/mind/assessment/create', data);
+export const getMindAssessments = (data) => request('/mind/assessment/list', data);
+export const createMindFamilyAtmosphere = (data) => request('/mind/atmosphere/create', data);
+export const getMindFamilyAtmosphere = (data) => request('/mind/atmosphere/list', data);
+export const createMindMeditation = (data) => request('/mind/meditation/create', data);
+export const getMindMeditations = (data) => request('/mind/meditation/list', data);
+
+// === Action 域 API ===
+export const createActionActivity = (data) => request('/action/activity/create', data);
+export const getActionActivities = (data) => request('/action/activity/list', data);
+export const getActionActivityDetail = (data) => request('/action/activity/detail', data);
+export const registerActionActivity = (data) => request('/action/activity/register', data);
+export const createActionArticle = (data) => request('/action/article/create', data);
+export const getActionArticles = (data) => request('/action/article/list', data);
+export const getActionArticleDetail = (data) => request('/action/article/detail', data);
+export const createActionElderCarePlan = (data) => request('/action/elder-care/create', data);
+export const getActionElderCarePlans = (data) => request('/action/elder-care/list', data);
+export const createActionPracticeTask = (data) => request('/action/practice/create', data);
+export const getActionPracticeTasks = (data) => request('/action/practice/list', data);
+export const createActionCommunityPost = (data) => request('/action/community/create-post', data);
+export const getActionCommunityPosts = (data) => request('/action/community/posts', data);
+export const createActionCommunityComment = (data) => request('/action/community/create-comment', data);
+export const getActionCommunityComments = (data) => request('/action/community/comments', data);
+```
+
+- [ ] **Step 6: 修改 store/index.js — 增加 domain 状态**
+
+在 Vuex state 中添加:
+
+```javascript
+currentDomain: null, // 'body' | 'mind' | 'wisdom' | 'action' — 当前活跃域
+```
+
+在 mutations 中添加:
+
+```javascript
+setCurrentDomain(state, domain) {
+  state.currentDomain = domain;
+}
+```
+
+- [ ] **Step 7: 提交 Phase 1 框架代码**
+
+```bash
+git add -A
+git commit -m "feat: 溪福俱乐部四域框架搭建 - 17个新entity/mapper/service - 四象限首页 - 域导航骨架"
+```
+
+---
+
+## Phase 2: 行 (Action) 域功能实现
+
+**目标:** 完善行域所有功能页面(活动、文章、长者关怀、社区、践行任务),建立域内完整业务闭环。
+
+> **注:** Phase 2-4 每个域的具体功能实现计划将在 Phase 1 完成后细化。每个域需要:
+> 1. 完善后端 Controller + Service 业务逻辑(CRUD + 业务规则)
+> 2. 实现前端功能页面(替换占位页面)
+> 3. 接入积分系统(域内行为可获积分)
+> 4. 管理端页面(cfc-web 内容管理)
+
+### 行域功能清单
+
+| 功能 | 后端Controller | 前端页面 | 优先级 |
+|------|---------------|----------|--------|
+| 活动发布/列表/报名/详情 | ActionController | activity-list, activity-detail | P0 |
+| 文章发布/列表/详情 | ActionArticleController | article-list, article-detail | P0 |
+| 长者关怀计划/日志 | ActionElderCareController(新增) | elder-care | P1 |
+| 社区帖子/评论 | ActionCommunityController(新增) | community | P1 |
+| 践行任务CRUD | ActionPracticeController(新增) | - (首页卡片) | P1 |
+
+---
+
+## Phase 3: 身 (Body) 域功能实现
+
+**目标:** 完善身域所有功能页面(健康指标、水营养、抗衰评估、运动记录),建立健康管理闭环。
+
+### 身域功能清单
+
+| 功能 | 后端Controller | 前端页面 | 优先级 |
+|------|---------------|----------|--------|
+| 健康指标CRUD + 趋势图 | BodyHealthController | health-metric | P0 |
+| 水营养追踪 + 统计 | BodyNutritionController(新增) | nutrition-log | P0 |
+| 抗衰评估 + 报告 | BodyAntiAgingController(新增) | anti-aging | P1 |
+| 运动记录 + 步数 | BodyExerciseController(新增) | exercise-log | P1 |
+
+---
+
+## Phase 4: 心 (Mind) 域功能实现
+
+**目标:** 完善心域所有功能页面(情绪日志、心理测评、家庭氛围、冥想),建立心理健康管理闭环。
+
+### 心域功能清单
+
+| 功能 | 后端Controller | 前端页面 | 优先级 |
+|------|---------------|----------|--------|
+| 情绪日志CRUD + 趋势 | MindMoodController | mood-log | P0 |
+| 心理测评问卷+报告 | MindAssessmentController(新增) | assessment | P0 |
+| 家庭氛围评估 | MindFamilyAtmosphereController(新增) | family-atmosphere | P1 |
+| 冥想计时+引导音频 | MindMeditationController(新增) | meditation | P1 |
+
+---
+
+## Phase 5: Lilishop 电商集成
+
+**目标:** 通过 REST API 集成 Lilishop 电商功能,实现商品浏览、购物车、下单结算。
+
+### 电商集成清单
+
+| 功能 | 后端实现 | 前端页面 | 优先级 |
+|------|----------|----------|--------|
+| LilishopApiClient | LilishopApiClient.java (RestTemplate) | - | P0 |
+| 商品浏览/搜索 | CommerceController → Lilishop buyer-api | product-list, product-detail | P0 |
+| 购物车 | CommerceController → Lilishop buyer-api | cart | P0 |
+| 下单/支付 | CommerceController → Lilishop buyer-api | checkout | P1 |
+| 订单管理 | CommerceController → Lilishop buyer-api | order-list | P1 |
+| 商品管理(管理端) | CommerceAdminController → Lilishop seller-api | cfc-web 商品管理页 | P2 |
+
+### Lilishop 配置
+
+在 `application.yml` 中添加:
+
+```yaml
+lilishop:
+  buyer-api: http://localhost:8888
+  seller-api: http://localhost:8889
+  manager-api: http://localhost:8887
+  service-account:
+    username: cfc_service
+    password: ${LILISHOP_SERVICE_PASSWORD}
+  token-cache-minutes: 50
+```
+
+---
+
+## Phase 6: 管理端 (cfc-web) 扩展
+
+**目标:** 在 Web 管理端新增四域内容管理页面。
+
+### 管理端新增页面
+
+| 路由 | 页面 | 功能 |
+|------|------|------|
+| /body/health | BodyHealth.vue | 健康指标数据管理 |
+| /body/anti-aging | BodyAntiAging.vue | 抗衰评估管理 |
+| /mind/assessment | MindAssessment.vue | 心理测评管理 |
+| /mind/atmosphere | MindAtmosphere.vue | 家庭氛围数据 |
+| /action/activity | ActionActivity.vue | 活动发布管理 |
+| /action/article | ActionArticle.vue | 文章内容管理 |
+| /action/community | ActionCommunity.vue | 社区内容审核 |
+| /commerce/products | CommerceProducts.vue | 商品管理(Lilishop) |
+| /commerce/orders | CommerceOrders.vue | 订单管理(Lilishop) |
+
+---
+
+## 自检清单
+
+### 1. Spec 覆盖度
+- [x] 身域: 健康指标、水营养、抗衰评估、运动 → Task 1, 6, 7, Phase 3
+- [x] 心域: 情绪日志、心理测评、家庭氛围、冥想 → Task 2, 6, 7, Phase 4
+- [x] 智域: 现有功能保留 → Task 9 (首页入口), 不改动现有代码
+- [x] 行域: 活动、文章、长者关怀、社区、践行 → Task 3, 6, 7, Phase 2
+- [x] 首页四象限 → Task 9
+- [x] Lilishop集成 → Phase 5
+- [x] 管理端 → Phase 6
+- [x] 跨域积分 → Task 5 (PointsLog.domain), Task 8
+
+### 2. 占位符扫描
+- [x] 无 TBD/TODO/待定 — Phase 2-5 的具体实现将在各Phase开始时细化
+- [x] 所有 Phase 1 步骤包含完整代码
+
+### 3. 类型一致性
+- [x] Entity字段名 ↔ Mapper ↔ Service ↔ Controller 参数名一致
+- [x] 前端 api.js 路径 ↔ 后端 @RequestMapping 路径一致
+- [x] pages.json 路径 ↔ 实际文件路径一致

Някои файлове не бяха показани, защото твърде много файлове са промени