版本: v1.0 日期: 2026-08-08 状态: 设计稿
将身维度首页(body/index.vue)改造为"健康数据中心",聚焦主动健康闭环中"看见"环节——用户上传报告、完成测评、查看数据、生成方案,形成"采集→看见→行动"的递进闭环。
┌──────────────────────────────────────┐
│ [🟠 健康] [认知] [心理] [社会性] │ ← Tab栏,切换仅刷新数据图区
│ ┌──────────────────────────────┐ │
│ │ 📊 维度数据图 │ │ ← 按Tab展示不同可视化
│ └──────────────────────────────┘ │
├──────────────────────────────────────┤
│ 🏠 家庭成员选择条 │ ← 不随Tab切换
├──────────────────────────────────────┤
│ 🔍 看见 · 健康数据中心 │
│ ┌── 数据采集 ──────────────────┐ │
│ │ 📋 上传健康报告 │ │
│ │ 📝 在线测评(认知/心理/关系) │ │
│ └──────────────────────────────┘ │
│ ↓ │
│ ┌── 数据查看 ──────────────────┐ │
│ │ 最近报告/测评结果 · 查看全部 │ │
│ └──────────────────────────────┘ │
│ ↓ │
│ ┌── 方案汇总 ──────────────────┐ │
│ │ 选维度+成员+目标→LangGraph生成 │ │
│ └──────────────────────────────┘ │
├──────────────────────────────────────┤
│ 活动 / 商品 / 文章(弱化展示) │
└──────────────────────────────────────┘
| Tab | 维度 | 图标色 | 数据图类型 | 数据来源 |
|---|---|---|---|---|
| 健康 | 身 | #FF8C42 |
七维雷达图(保留现有) | getDimensionOverview('body') |
| 认知 | 智 | #6366F1 |
五维蛛网图(新建) | 认知测评结果 |
| 心理 | 心 | #FF6B9D |
心理状态图(新建) | 心理测评结果 |
| 社会性 | 行 | #10B981 |
关系质量图(新建) | 关系问卷结果 |
#6366F1#FF6B9D#10B981无数据时各图显示默认均值(灰色半透明),与现有健康雷达图行为一致。
保持现有 FamilyMemberStrip 组件,位置在数据图下方,不随 Tab 切换。
两个卡片上下排列:
卡片 1:上传健康报告
/pages/health/report-upload卡片 2:在线测评
/pages/body-detail/dimension-questionnaire?dim=cognitive&memberId=xxx/pages/body-detail/dimension-questionnaire?dim=mental&memberId=xxx/pages/body-detail/dimension-questionnaire?dim=relationship&memberId=xxx/pages/health/report-list?memberId=xxx无数据时显示空状态:"暂无报告和测评结果,上传报告或完成测评开启健康之旅"
在现有 dimensions 数组新增:
{ code: 'cognitive', label: '认知能力', icon: '🧠' },
{ code: 'mental', label: '心理健康', icon: '💖' },
{ code: 'relationship', label: '关系质量', icon: '🤝' }
| # | 题目 | 选项 |
|---|---|---|
| 1 | 你能同时记住几件事而不遗漏? | 1-2件/3-4件/5-6件/7件以上 |
| 2 | 解决复杂问题时你通常? | 凭直觉/逐步分析/找人帮忙/回避 |
| 3 | 学习新技能的速度? | 很快/一般/较慢/很困难 |
| 4 | 你能清晰地表达自己的想法吗? | 非常清晰/基本可以/有时困难/很难 |
| 5 | 做决定时你会考虑多种可能性? | 总是/经常/有时/很少 |
| 6 | 空间方向感如何? | 很好/一般/较差/完全没有 |
| 7 | 你能快速发现事物之间的关联? | 总是/经常/偶尔/很少 |
| 8 | 注意力集中的持续时间? | 1小时+/30分钟/10分钟/几分钟 |
| # | 题目 | 选项 |
|---|---|---|
| 1 | 最近一个月你感到心情愉快的频率? | 经常/有时/偶尔/几乎没有 |
| 2 | 面对压力时你通常? | 轻松应对/基本能处理/有些吃力/很难应对 |
| 3 | 你觉得自己了解自己的情绪吗? | 非常了解/基本了解/不太了解/完全不了解 |
| 4 | 与人相处时你感到? | 自在舒适/基本自在/有些不自在/很拘谨 |
| 5 | 你对目前的生活满意度? | 很满意/比较满意/一般/不满意 |
| 6 | 遇到挫折后你多久能恢复? | 很快/一两天/一周以上/很久 |
| 7 | 你觉得自己有价值感吗? | 很有价值/有时有/很少/没有 |
| 8 | 你是否有固定的放松方式? | 有且坚持/有时有/想过没做/没有 |
| # | 题目 | 选项 |
|---|---|---|
| 1 | 你与家人的沟通频率? | 每天/每周几次/每周一次/很少 |
| 2 | 遇到困难时你能找到人倾诉? | 总是可以/经常/偶尔/很难 |
| 3 | 你觉得自己被家人理解? | 非常理解/基本理解/不太理解/完全不理解 |
| 4 | 你与伴侣的关系满意度? | 很满意/比较满意/一般/不满意 |
| 5 | 你与孩子的关系如何? | 亲密/良好/一般/疏远 |
| 6 | 你在社交中感到? | 轻松愉快/基本舒适/有些紧张/很焦虑 |
| 7 | 你愿意主动联系朋友吗? | 经常/有时/被动/几乎不 |
| 8 | 你觉得家庭氛围如何? | 温馨和谐/基本融洽/有些紧张/压抑 |
从数据中心跳转时,URL 带 dim 参数,页面直接跳过 Step 1(选维度),进入 Step 2(答题)。
onLoad(options) {
if (options.dim) {
this.selectedDimension = options.dim
this.step = 2 // 直接进入答题
}
}
提交接口复用现有 submitDimensionQuestionnaire(后端需扩展支持新增维度)。
┌──────────────────────────────┐
│ ← 方案汇总 │
├──────────────────────────────┤
│ [历史方案] Tab 切换 │
│ │
│ ┌── 生成新方案 ──────────┐ │
│ │ 选择维度: [健康][认知].. │ │
│ │ 选择成员: [成员列表] │ │
│ │ 目标设定: [输入框] │ │
│ │ 例:"改善孩子睡眠质量" │ │
│ │ [生成方案] │ │
│ └────────────────────────┘ │
│ │
│ ┌── 方案结果 ────────────┐ │
│ │ (LangGraph 返回内容) │ │
│ │ 富文本展示 │ │
│ │ [保存方案] [重新生成] │ │
│ └────────────────────────┘ │
│ │
│ ┌── 历史方案列表 ────────┐ │
│ │ 方案1 · 2026-08-07 │ │
│ │ 方案2 · 2026-08-01 │ │
│ └────────────────────────┘ │
└──────────────────────────────┘
analysis/run 接口
health_plans 表)或[重新生成]health_plans 表:
CREATE TABLE IF NOT EXISTS health_plans (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
family_id BIGINT NOT NULL COMMENT '家庭ID',
member_ids VARCHAR(200) NOT NULL COMMENT '目标成员ID列表(逗号分隔)',
dimensions VARCHAR(100) NOT NULL COMMENT '维度列表(逗号分隔)',
goal TEXT NOT NULL COMMENT '用户输入的目标',
plan_content TEXT COMMENT 'LangGraph生成的方案内容(JSON/HTML)',
member_name VARCHAR(50) COMMENT '成员名称摘要',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_family (family_id),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康方案汇总记录';
health_plans 表(见 7.3)
DatabaseInitializer.runMigrations() 新增迁移194:
// 迁移194: 创建 health_plans 表(健康方案汇总记录)
try {
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS health_plans (" +
"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
"family_id BIGINT NOT NULL, " +
"member_ids VARCHAR(200) NOT NULL, " +
"dimensions VARCHAR(100) NOT NULL, " +
"goal TEXT NOT NULL, " +
"plan_content TEXT, " +
"member_name VARCHAR(50), " +
"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
"INDEX idx_family (family_id), " +
"INDEX idx_created (created_at)" +
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康方案汇总记录'");
log.info("已创建health_plans表");
} catch (Exception e) {
log.warn("创建health_plans表失败(可能已存在): {}", e.getMessage());
}
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/health/plan/save |
保存方案 plan_content |
| POST | /api/health/plan/list |
查询历史方案列表 |
| POST | /api/health/plan/detail |
查询方案详情 |
| POST | /api/health/plan/generate |
调用LangGraph生成方案 |
确保 submitDimensionQuestionnaire 后端支持 cognitive/mental/relationship 维度(现有可能只处理了身维度,需确认和扩展)。
| 文件 | 改动内容 |
|---|---|
pages/body/index.vue |
新增Tab栏、数据图切换、替换功能入口网格为数据中心区块 |
pages/body-detail/dimension-questionnaire.vue |
新增认知/心理/关系题库 + dim 参数锁定维度 |
新建 pages/health/health-plan-summary.vue |
方案汇总页(含历史记录) |
utils/api.js |
新增方案汇总接口 |
pages.json |
注册 health-plan-summary 页面 |
在 pages.json 的 pages/health 分包中新增:
{
"path": "health-plan-summary",
"style": {
"navigationBarTitleText": "方案汇总"
}
}
funcList 功能入口网格(运动/饮食/作息/冥想/舌诊/健康维度)DimensionTasks 组件及引用