# 五维首页与能量转化算法设计:相生相克一体融合 **日期:** 2026-07-12 **状态:** 设计稿 v1 **关联文档:** [五克完整设计](./2026-07-12-wuxing-ke-full-design.md), [旧富维度计划](../plans/2026-07-12-wealth-dimension-redesign.md) --- ## 一、核心理念:「克」是信号,不是惩罚 ### 理念梳理 "克"在系统中的含义不是惩罚或封路,而是**校准和提醒**: | 旧理解 | 新理解 | |:-------|:-------| | 克=制约/惩罚/扣分 | 克=平衡信号/引导/提醒 | | 触发即扣分 | 先提醒,持续偏差才微调 | | 单向负面 | 双向检查——克方太强或被克方太弱都要点 | | 惩罚性文案 | 建设性文案,给出行动方向 | ### 克的核心表达 ``` 克 = 系统在看,在提醒的方向,不是系统在罚,在禁止的方向 ``` | 克关系 | 核心提醒 | |:-------|:---------| | 行克身 | 行动要在身体允许范围内——"运动社交很好,但身体在报警了" | | 身克富 | 健康是创富的底盘——"身体是赚钱的本钱,先照看好再去追" | | 富克心 | 德要配位,财富跟心理承受力要匹配——"财富涨了,心也得跟上" | | 心克智 | 情绪稳,智力才能发挥——"心平才能静智" | | 智克行 | 聪明不等于会相处——"人际不是逻辑题" | ### 生与克的关系 五维本质是一套**制动与驱动系统**: ``` 生 = 油门(驱动、滋养、赋能) 克 = 刹车(校准、平衡、警报) 两者缺一不可: · 只生不克 → 维度膨胀,系统崩盘 · 只克不生 → 维度萎缩,没有成长动力 · 有生有克 → 动态平衡,持续发展 ``` --- ## 二、能量转化算法:生克一体 ### 2.1 算法流程 ``` 第1轮:原始分计算(独立算每个维度,互不依赖) ↓ 第2轮:克校准(检测5个克关系,只触发最痛一层) ↓ 第3轮:生增益(检测5个生关系,上游好则下游小幅提升) ↓ 最终分 = (原始分 × 克调整系数) + 生增益 ``` **关键原则:单轮通过,不迭代。** 因为迭代意味着行→身→富→心→智→行 循环推导,第2轮行的变化触发第3轮,没有收敛终点。 ### 2.2 克调整系数(校准信号) | 克方向 | 触发条件 | 系数 | 信号强度 | |:-------|:---------|:----|:---------| | 行克身 | 行>75 且 身<40 | 0.5~0.9 | 🔴透支——调整行动量 | | | 行>60 且 身<30 | 0.3~0.7 | 🔴严重透支 | | | 行>80 且 身<50 | 0.7~0.95 | 🟡轻度预警 | | 身克富 | 身<40 且 富>60 | 0.5~0.9 | 🔴健康拖累财富 | | | 身<30 且 富>40 | 0.3~0.7 | 🔴严重 | | 智克行 | 智<30 且 行>50 | 0.6~0.95 | 🟡盲目行动 | | | 智<20 且 行>60 | 0.4~0.8 | 🔴缺乏方向 | | 富克心 | 富>70 且 情绪<40 | 0.4~0.8 | 🔴财富伤情 | | | 富>60 且 包容<40 | 不扣分只提示 | 🟡评判倾向 | | 心克智 | 心>70 且 智<40 | 0.5~0.9 | 🔴过度保护 | | | 心<30 且 智>70 | 不扣分只提示 | 🟡理性冷漠 | **系数公式:** ```java // penalty从0(完全封锁)到1(完全正常) // 被克方越低 → penalty越低(问题越严重) double penalty = 0.5 + 0.5 × (被克方分 / 100.0); // 极端情况 // 被克方0分 → penalty = 0.5(最多打对折) // 被克方100分 → penalty = 1.0(不打折) ``` ### 2.3 生增益系数(滋养赋能) | 生方向 | 触发条件 | 增益值 | 哲学含义 | |:-------|:---------|:-------|:---------| | 身生智 | 身>60 且 智<80 | +2~8 | 精神好,思维清晰 | | 智生富 | 智>60 且 富<80 | +2~8 | 智慧创造财富 | | 富生行 | 富>60 且 行<80 | +2~8 | 有资源就更愿意社交 | | 行生心 | 行>60 且 心<80 | +2~8 | 人际关系滋养情绪 | | 心生身 | 心>60 且 身<80 | +2~8 | 心情好身体就好 | **增益公式:** ```java // 上游越好 → 增益越大 double boost = (上游分 - 50) / 100.0 × 10; // 上游60分 → +1分 // 上游80分 → +3分 // 上游100分 → +5分 // 但被克方不能超过80(给成长留空间) boost = Math.min(boost, 80 - 被克方); ``` ### 2.4 完整伪代码 ```java public MemberEnergyDTO calculateFamilyMemberEnergy(User parent / FamilyMember child) { // === 第1轮:独立算分 === int bodyRaw = calcBody(member); int mindRaw = calcMind(member); int wisdomRaw = calcWisdom(member); int actionRaw = calcAction(member); int wealthRaw = calcWealth(member); // === 第2轮:克校准 === WuxingRestraintResult restraint = new WuxingRestraintResult(); // 顺序:行→身→富→心→智→行(克环) int actionAfterKe = actionRaw; int bodyAfterKe = applyActionBodyRestraint(actionRaw, bodyRaw, restraint); int wealthAfterKe = applyBodyWealthRestraint(bodyAfterKe, wealthRaw, restraint); int heartTotal = computeHeartTotal(mindRaw, ...); // 心的子维度加权 int mindAfterKe = applyWealthHeartRestraint(wealthAfterKe, heartTotal, restraint); int wisdomAfterKe = applyMindWisdomRestraint(mindAfterKe, wisdomRaw, restraint); actionAfterKe = applyWisdomActionRestraint(wisdomAfterKe, actionRaw, restraint); // === 第3轮:生增益 === int bodyFinal = applyMindBodyBoost(mindAfterKe, bodyAfterKe); // 心生身 int mindFinal = applyActionMindBoost(actionAfterKe, mindAfterKe); // 行生心 int wisdomFinal = applyBodyWisdomBoost(bodyFinal, wisdomAfterKe); // 身生智 int actionFinal = applyWealthActionBoost(wealthAfterKe, actionAfterKe); // 富生行 int wealthFinal = applyWisdomWealthBoost(wisdomFinal, wealthAfterKe); // 智生富 // === 最终 === dto.setBodyScore(clamp(bodyFinal, 0, 100)); dto.setMindScore(clamp(mindFinal, 0, 100)); dto.setWisdomScore(clamp(wisdomFinal, 0, 100)); dto.setActionScore(clamp(actionFinal, 0, 100)); dto.setWealthScore(clamp(wealthFinal, 0, 100)); dto.setOverallScore((bodyFinal + mindFinal + wisdomFinal + actionFinal + wealthFinal) / 5); // 携带克关系状态,供前端展示 dto.mergeRestraintStatus(restraint); return dto; } ``` --- ## 三、首页设计(家长端登录后) ### 3.1 整体结构 从当前的"仪表盘+操作清单"改为**"五维能量为先,数据为辅,操作为后"**: ``` ┌─────────────────────────────────┐ │ [Banner: 家庭名称 + 综合能量值] │ ← 顶部状态 ├─────────────────────────────────┤ │ [五维行星盘 — 五行能量全景] │ ← 核心视觉 │ · 五颗星 = 五个维度 │ │ · 星环半径=维度分值 │ │ · 连线=生克关系(实线=相生,虚线=克)│ │ · 点击维度 → 进入维度详情页 │ ├─────────────────────────────────┤ │ [克关系状态条 — 最多显示1条] │ ← 核心提醒 │ 只显示最需要关注的克关系 │ │ "行动力很强,身体在报警" │ ├─────────────────────────────────┤ │ [相生指引 + 推荐动作] │ ← 行动引导 │ 基于克关系的行动建议 │ │ "建议增加休息类任务" → 一键添加 │ ├─────────────────────────────────┤ │ [成员列表 — 家庭能量排行] │ ← 社交对比 │ 每个成员的五维小图 │ │ 家长/孩子分开显示 │ ├─────────────────────────────────┤ │ [快捷数据] │ ← 次要信息 │ 任务完成率 + 积分 + 待办 │ ├─────────────────────────────────┤ │ [内容推荐] │ ← 发现内容 │ 活动/商品/文章 │ │ (与当前克关系推荐关联) │ └─────────────────────────────────┘ ``` ### 3.2 五维行星盘(核心视觉) 保留现有的 WuxingSandbox 整体框架,但新增: **克关系视觉化:** ``` 身高分——→富(虚线+⚠️ 当身克富激活时) 身低分——→富(实线 正常相生) 激活的克关系在行星盘上用红色虚线 + 闪烁小箭头表示 未激活的克关系用灰色半透明虚线 相生用金色实线 + 流向箭头 ``` **相生流向动画增强:** ``` 在原有粒子流基础上,增加第二层粒子流: · 金色粒子 = 相生(沿身→智→富→行→心→身顺时针) · 红色粒子 = 相克(沿行→身→富→心→智→行逆时针) 两种粒子流密度反映当前生/克强度 所有维度分值均衡时 → 金色粒子占主导 某个克关系激活时 → 对应臂的红色粒子增多 ``` **中心太极调整:** ``` 阳面(白)=家庭综合能量值 阴面(黑)=最低维度分值("短板"提醒) 点击 → 切换家庭/成员视图(保持现有功能) ``` ### 3.3 克关系状态条(核心提醒) 出现在行星盘下方,**每次只显示1条最关键的提醒**: ``` 优先级排序(从高到低): 1. 透支型克(行克身、身克富、富克心)→ 红色 + 行动建议 2. 预警型克(智克行、心克智)→ 橙色 + 意识引导 3. 平衡态 → 绿色 + 肯定 4. 无触发 → 不显示 ``` **状态条模板:** ```html {{ keIcon }} {{ keTitle }} {{ keMessage }} {{ keActionText }} ``` **各状态的图标和色彩:** | 类型 | status | 图标 | 背景色 | 例子 | |:----|:-------|:-----|:-------|:-----| | 透支 | overdraw | ⚠️ | 红橙渐变 | 行克身·透支 | | 预警 | cautious | 💡 | 暖黄渐变 | 富克心·预判 | | 平衡 | balanced | 🌟 | 绿渐变 | 行身平衡 | | 沉默 | normal | — | 不显示 | — | ### 3.4 相生指引 + 推荐动作 根据克关系状态,生成对应的行动建议: | 克状态 | 推荐动作 | 一键链接 | |:-------|:---------|:---------| | 行克身·透支 | "建议增加休息类任务" | 跳转到创建休息任务 | | 身克富·稀释 | "先做一次健康测评" | 跳转到健康测评 | | 身克富·透支 | "建议减少加班任务" | 跳转任务调整 | | 智克行·盲目 | "先做一次认知测评再行动" | 跳转到DAN测评 | | 智克行·孤独 | "建议参加一次亲子活动" | 跳转活动列表 | | 富克心·判断 | "试试情绪打卡,记录感受" | 跳转情绪打卡 | | 心克智·保护 | "给孩子一个独立任务" | 跳转创建独立任务 | | 平衡态 | "保持现状,坚持打卡" | 跳转打卡 | ### 3.5 成员列表(家庭能量排行) ``` ┌─ 家庭成员 ──────────────────────┐ │ 👨 爸爸 80 79 65 72 88 │ │ 👩 妈妈 82 85 70 68 90 │ │ 👦 小明 75 70 88 85 ... │ │ 👧 小红 65 60 70 75 ... │ │ 📊 家庭平均 78 75 72 75 ... │ └─────────────────────────────────┘ ``` 每个行显示成员名称 + 五维简短数字。点击进入该成员的五维详情。 ### 3.6 与现有关联 **现有组件保持:** - PageBanner(顶部Banner) - WuxingSandbox(五维行星盘,增强克/生视觉) - AIFloatingAvatar(AI助手) - DimensionActivities(活动推荐,相关推荐过滤) - DimensionProducts(商品推荐) **需要新增的组件:** - `KeStatusBar` — 克关系状态条组件 - `KeActionCard` — 相生指引+推荐动作卡片 **需要修改的组件:** - `WuxingSandbox` — 增加克关系粒子流、状态传递 - `parent-index.vue` — 整体重新编排,以五维为核心 --- ## 四、首页设计(孩子端登录后) ### 4.1 孩子端原则 - **更简单、更视觉化** — 孩子不懂文字太多 - **即时反馈** — 像玩游戏一样看到能量变化 - **克关系不直接暴露** — 转化为"怪兽"或"挑战"提示 ### 4.2 孩子端首页结构 ``` ┌─────────────────────────────────┐ │ [我的能量星球] │ ← 简化版五维星盘 │ 五个小星球+轨道,分值=星球大小 │ │ 转动动画 │ ├─────────────────────────────────┤ │ [今日能量] │ ← 大数字 │ 🌟 综合能量 78% │ ├─────────────────────────────────┤ │ [需要关注!] — 最多1条 │ ← 克提醒(儿童版) │ "你的行动力太强了,身体需要休息!" │ │ [添加休息任务] │ ├─────────────────────────────────┤ │ [成长数据] │ │ 连续打卡 15天 🔥 │ │ 积分 2350 ⭐ │ ├─────────────────────────────────┤ │ [我的任务] │ ← 待办事项 │ □ 晨跑30分钟 │ │ □ 阅读20分钟 │ ├─────────────────────────────────┤ │ [本周排行] │ │ 家人们的能量排名 │ └─────────────────────────────────┘ ``` 孩子端的"克"提醒翻译: | 克状态 | 孩子端文案 | |:-------|:-----------| | 行克身 | "你的运动超能力需要充电啦!" | | 身克富 | "身体健康才能赚更多星星✨" | | 富克心 | 不直接展示(家长端显示) | | 心克智 | "心情好,学习才会好!" | | 智克行 | 不直接展示(家长端显示) | --- ## 五、能量转化算法细节 ### 5.1 克的系数表(完整) ``` 行克身: 行 > 75, 身 < 40: penalty = 0.5 + 0.5 × (身/100), 起点0.5, 身100=1.0 行 > 60, 身 < 30: penalty = 0.3 + 0.7 × (身/100), 起点0.3, 身100=1.0 身克富: 身 < 40, 富 > 60: penalty = 0.5 + 0.5 × (身/100), 起点0.5, 身100=1.0 身 < 50, 富 > 身+20: 不扣分,只提醒 智克行: 智 < 30, 行 > 50: penalty = 0.6 + 0.4 × (智/100), 起点0.6, 智100=1.0 智 > 80, 行 < 40: 不扣分,只提醒 富克心: 富 > 70, 情绪 < 40: penalty = 0.4 + 0.6 × (情绪/100), 起点0.4, 情绪100=1.0 富 > 60, 包容 < 40: 不扣分,只提醒 富 > 60, 传承 < 20: 不扣分,只提醒 心克智: 心 > 70, 智 < 40: penalty = 0.5 + 0.5 × (智/100), 起点0.5, 智100=1.0 智 > 70, 心 < 40: 不扣分,只提醒 ``` ### 5.2 生的增益表(完整) ``` 心生身(心→身): 心 > 60 且 身 < 80: boost = (心 - 50) / 100 × 10, 上限 = 80 - 身 身生智(身→智): 身 > 60 且 智 < 80: boost = (身 - 50) / 100 × 10, 上限 = 80 - 智 智生富(智→富): 智 > 60 且 富 < 80: boost = (智 - 50) / 100 × 10, 上限 = 80 - 富 富生行(富→行): 富 > 60 且 行 < 80: boost = (富 - 50) / 100 × 10, 上限 = 80 - 行 行生心(行→心): 行 > 60 且 心 < 80: boost = (行 - 50) / 100 × 10, 上限 = 80 - 心 ``` ### 5.3 单轮通过的理由 为什么只做一轮不做迭代? ``` 第2轮输出 = 克效(原始) + 生效(克效) 第3轮输出 = 克效(第2轮) + 生效(第2轮) ... 假设第2轮行的分因智克行被调低 第3轮行生心 → 心因行被调低调 第4轮心克智 → 智又因心调低 ... 每次迭代都在放大"生"和"克"的波动 多轮后可能导致所有维度收敛到50分(趋同) 或发散到极端(0分/100分) 单轮通过: · 克只看原始分(最真实的状态反映) · 生只看克调整后分(一次校准) · 避免收敛/发散问题 · 结果稳定可预期 ``` --- ## 六、生克合并后的前端展示逻辑 ### 6.1 每个维度页面的关系图 以"身"页面为例: ``` ┌─ 身 · 维度详情 ──────────────────┐ │ │ │ 身 78分 │ │ 较上周 +3% │ │ │ │ ——— 相生关系 ——— │ │ ❤️ 心 → 🌏 身 (+2分) [心生身] │ │ │ │ ——— 相克关系 ——— │ │ 🌿 行 ⊖ 🌏 身 (行克身·预警) │ │ 🌏 身 ⊖ 💧 富 (身克富·正常) │ │ │ │ ——— 子维度权重 ——— │ │ · 体质状况 40% → 68分 │ │ · 运动任务 30% → 82分 │ │ · 先天体质 30% → 84分 │ └───────────────────────────────────┘ ``` ### 6.2 前端数据模型 ```javascript // 从后端返回的 MemberEnergyDTO 扩展 { memberId: 1, memberType: 'parent', name: '爸爸', bodyScore: 78, mindScore: 75, wisdomScore: 65, actionScore: 45, wealthScore: 82, overallScore: 69, // 克关系状态(后端计算好) restraintStatuses: [ { keType: 'action_body', // 克类型 status: 'overdraw', // overdraw|penalty|cautious|balanced|normal title: '行克身·透支', // 标题 message: '行动力很强,但身体在报警。适度暂停,是另一种前进', action: '/pages/tasks/create-task?category=休息', actionText: '添加休息任务' } ], // 生增益明细 boostDetails: [ { from: 'mind', to: 'body', boost: 2, type: 'sheng' } ], // 心的子维度 heartEmotionStable: 65, heartUnderstanding: 70, heartLegacy: 0 } ``` --- ## 七、修改计划 ### 7.1 后端 | # | 文件 | 操作 | 内容 | |:-:|:-----|:-----|:-----| | 1 | `MemberEnergyDTO.java` | 修改 | 新增克状态字段、生增益字段、心子维度 | | 2 | `EnergyService.java` | 修改 | 克环校准(5方法) + 生环增益(5方法) + 统一入口 | | 3 | `EnergyController.java` | 检查 | 返回新DTO字段是否需要调整Controller | ### 7.2 前端 | # | 文件 | 操作 | 内容 | |:-:|:-----|:-----|:-----| | 1 | `components/KeStatusBar.vue` | 新建 | 克关系状态条组件 | | 2 | `components/KeActionCard.vue` | 新建 | 相生指引+推荐动作卡片 | | 3 | `components/wuxing-sandbox-helpers/render.js` | 修改 | 增加克粒子流、相生金色粒子 | | 4 | `components/wuxing-sandbox.vue` | 修改 | 传递克状态、增加克视觉、生+克粒子层 | | 5 | `pages/index/parent-index.vue` | 重构 | 以五维为核心重新编排 | | 6 | `pages/index/child-index.vue` | 重构 | 孩子端简化版 | ### 7.3 不做的事 - 不新建数据库表(克状态和生增益在内存计算) - 不改schema.sql和DatabaseInitializer - 不改Mapper - 不改前端pages.json和路由 - 不删现有功能(只重新编排和增加) --- ## 八、实施顺序 ``` Phase 1(文档+后端算法): 1. 完善DTO扩展 2. 实现克环5方法 + 生环5方法 3. 实现统一入口(第1轮+第2轮+第3轮) 4. 编译验证 Phase 2(前端组件): 5. KeStatusBar 组件开发 6. KeActionCard 组件开发 7. WuxingSandbox 克/生视觉增强 Phase 3(页面重构): 8. parent-index.vue 重构 9. child-index.vue 简化 ```