|
@@ -0,0 +1,315 @@
|
|
|
|
|
+# 健康数据中心 — 看见 · 主动健康闭环
|
|
|
|
|
+
|
|
|
|
|
+**版本:** v1.0
|
|
|
|
|
+**日期:** 2026-08-08
|
|
|
|
|
+**状态:** 设计稿
|
|
|
|
|
+
|
|
|
|
|
+## 1. 概述
|
|
|
|
|
+
|
|
|
|
|
+将身维度首页(body/index.vue)改造为"健康数据中心",聚焦主动健康闭环中"看见"环节——用户上传报告、完成测评、查看数据、生成方案,形成"采集→看见→行动"的递进闭环。
|
|
|
|
|
+
|
|
|
|
|
+## 2. 页面布局
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+┌──────────────────────────────────────┐
|
|
|
|
|
+│ [🟠 健康] [认知] [心理] [社会性] │ ← Tab栏,切换仅刷新数据图区
|
|
|
|
|
+│ ┌──────────────────────────────┐ │
|
|
|
|
|
+│ │ 📊 维度数据图 │ │ ← 按Tab展示不同可视化
|
|
|
|
|
+│ └──────────────────────────────┘ │
|
|
|
|
|
+├──────────────────────────────────────┤
|
|
|
|
|
+│ 🏠 家庭成员选择条 │ ← 不随Tab切换
|
|
|
|
|
+├──────────────────────────────────────┤
|
|
|
|
|
+│ 🔍 看见 · 健康数据中心 │
|
|
|
|
|
+│ ┌── 数据采集 ──────────────────┐ │
|
|
|
|
|
+│ │ 📋 上传健康报告 │ │
|
|
|
|
|
+│ │ 📝 在线测评(认知/心理/关系) │ │
|
|
|
|
|
+│ └──────────────────────────────┘ │
|
|
|
|
|
+│ ↓ │
|
|
|
|
|
+│ ┌── 数据查看 ──────────────────┐ │
|
|
|
|
|
+│ │ 最近报告/测评结果 · 查看全部 │ │
|
|
|
|
|
+│ └──────────────────────────────┘ │
|
|
|
|
|
+│ ↓ │
|
|
|
|
|
+│ ┌── 方案汇总 ──────────────────┐ │
|
|
|
|
|
+│ │ 选维度+成员+目标→LangGraph生成 │ │
|
|
|
|
|
+│ └──────────────────────────────┘ │
|
|
|
|
|
+├──────────────────────────────────────┤
|
|
|
|
|
+│ 活动 / 商品 / 文章(弱化展示) │
|
|
|
|
|
+└──────────────────────────────────────┘
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 3. 顶部 Tab 栏
|
|
|
|
|
+
|
|
|
|
|
+### 3.1 Tab 定义
|
|
|
|
|
+
|
|
|
|
|
+| Tab | 维度 | 图标色 | 数据图类型 | 数据来源 |
|
|
|
|
|
+|-----|------|--------|-----------|---------|
|
|
|
|
|
+| 健康 | 身 | `#FF8C42` | 七维雷达图(保留现有) | `getDimensionOverview('body')` |
|
|
|
|
|
+| 认知 | 智 | `#6366F1` | 五维蛛网图(新建) | 认知测评结果 |
|
|
|
|
|
+| 心理 | 心 | `#FF6B9D` | 心理状态图(新建) | 心理测评结果 |
|
|
|
|
|
+| 社会性 | 行 | `#10B981` | 关系质量图(新建) | 关系问卷结果 |
|
|
|
|
|
+
|
|
|
|
|
+### 3.2 交互行为
|
|
|
|
|
+
|
|
|
|
|
+- 默认选中"健康"Tab
|
|
|
|
|
+- 点击 Tab 切换时,仅重新渲染数据图区域,页面其他部分不变
|
|
|
|
|
+- 当前选中 Tab 配有对应维度色 + 下划线/高亮
|
|
|
|
|
+- 数据图下方显示"无数据"提示(如"上传报告后显示个人数据")
|
|
|
|
|
+
|
|
|
|
|
+### 3.3 数据图实现
|
|
|
|
|
+
|
|
|
|
|
+- **健康:** 保留现有 RadarChart 组件,七维标签
|
|
|
|
|
+- **认知:** 复用 RadarChart 组件,标签改为:记忆力/注意力/逻辑推理/空间想象/语言表达,配色 `#6366F1`
|
|
|
|
|
+- **心理:** 复用 RadarChart 组件,标签改为:情绪稳定性/抗压能力/自我认知/社交意愿/幸福感,配色 `#FF6B9D`
|
|
|
|
|
+- **社会性:** 复用 RadarChart 组件,标签改为:亲子关系/夫妻关系/亲友关系/同事关系/社区参与,配色 `#10B981`
|
|
|
|
|
+
|
|
|
|
|
+无数据时各图显示默认均值(灰色半透明),与现有健康雷达图行为一致。
|
|
|
|
|
+
|
|
|
|
|
+## 4. 家庭成员选择条
|
|
|
|
|
+
|
|
|
|
|
+保持现有 FamilyMemberStrip 组件,位置在数据图下方,不随 Tab 切换。
|
|
|
|
|
+
|
|
|
|
|
+## 5. 看见 · 健康数据中心
|
|
|
|
|
+
|
|
|
|
|
+### 5.1 数据采集区
|
|
|
|
|
+
|
|
|
|
|
+两个卡片上下排列:
|
|
|
|
|
+
|
|
|
|
|
+**卡片 1:上传健康报告**
|
|
|
|
|
+- 图标 + 标题:"上传健康报告"
|
|
|
|
|
+- 描述:"体检/肠道/舌诊报告 · AI智能解读"
|
|
|
|
|
+- 点击跳转 `/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`
|
|
|
|
|
+- 已完成的测评显示分数(如"85分")替代[开始]按钮
|
|
|
|
|
+
|
|
|
|
|
+### 5.2 数据查看区
|
|
|
|
|
+
|
|
|
|
|
+- 展示最近一份报告/测评结果的摘要卡片(类型图标 + 名称 + 日期 + 分数)
|
|
|
|
|
+- 右侧箭头 → 跳转对应的详情页
|
|
|
|
|
+- 底部"[查看全部 X 份报告]" → 跳转 `/pages/health/report-list?memberId=xxx`
|
|
|
|
|
+
|
|
|
|
|
+无数据时显示空状态:"暂无报告和测评结果,上传报告或完成测评开启健康之旅"
|
|
|
|
|
+
|
|
|
|
|
+### 5.3 方案汇总区
|
|
|
|
|
+
|
|
|
|
|
+- 展示上次方案摘要(如果有)或空状态
|
|
|
|
|
+- 标题 + [生成新方案] 按钮
|
|
|
|
|
+- 点击 → 跳转到方案汇总页(详见第7节)
|
|
|
|
|
+
|
|
|
|
|
+## 6. 在线测评题库(dimension-questionnaire.vue 扩展)
|
|
|
|
|
+
|
|
|
|
|
+### 6.1 新增维度
|
|
|
|
|
+
|
|
|
|
|
+在现有 `dimensions` 数组新增:
|
|
|
|
|
+
|
|
|
|
|
+```javascript
|
|
|
|
|
+{ code: 'cognitive', label: '认知能力', icon: '🧠' },
|
|
|
|
|
+{ code: 'mental', label: '心理健康', icon: '💖' },
|
|
|
|
|
+{ code: 'relationship', label: '关系质量', icon: '🤝' }
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 6.2 认知能力题库(示例 8 题)
|
|
|
|
|
+
|
|
|
|
|
+| # | 题目 | 选项 |
|
|
|
|
|
+|---|------|------|
|
|
|
|
|
+| 1 | 你能同时记住几件事而不遗漏? | 1-2件/3-4件/5-6件/7件以上 |
|
|
|
|
|
+| 2 | 解决复杂问题时你通常? | 凭直觉/逐步分析/找人帮忙/回避 |
|
|
|
|
|
+| 3 | 学习新技能的速度? | 很快/一般/较慢/很困难 |
|
|
|
|
|
+| 4 | 你能清晰地表达自己的想法吗? | 非常清晰/基本可以/有时困难/很难 |
|
|
|
|
|
+| 5 | 做决定时你会考虑多种可能性? | 总是/经常/有时/很少 |
|
|
|
|
|
+| 6 | 空间方向感如何? | 很好/一般/较差/完全没有 |
|
|
|
|
|
+| 7 | 你能快速发现事物之间的关联? | 总是/经常/偶尔/很少 |
|
|
|
|
|
+| 8 | 注意力集中的持续时间? | 1小时+/30分钟/10分钟/几分钟 |
|
|
|
|
|
+
|
|
|
|
|
+### 6.3 心理健康题库(示例 8 题)
|
|
|
|
|
+
|
|
|
|
|
+| # | 题目 | 选项 |
|
|
|
|
|
+|---|------|------|
|
|
|
|
|
+| 1 | 最近一个月你感到心情愉快的频率? | 经常/有时/偶尔/几乎没有 |
|
|
|
|
|
+| 2 | 面对压力时你通常? | 轻松应对/基本能处理/有些吃力/很难应对 |
|
|
|
|
|
+| 3 | 你觉得自己了解自己的情绪吗? | 非常了解/基本了解/不太了解/完全不了解 |
|
|
|
|
|
+| 4 | 与人相处时你感到? | 自在舒适/基本自在/有些不自在/很拘谨 |
|
|
|
|
|
+| 5 | 你对目前的生活满意度? | 很满意/比较满意/一般/不满意 |
|
|
|
|
|
+| 6 | 遇到挫折后你多久能恢复? | 很快/一两天/一周以上/很久 |
|
|
|
|
|
+| 7 | 你觉得自己有价值感吗? | 很有价值/有时有/很少/没有 |
|
|
|
|
|
+| 8 | 你是否有固定的放松方式? | 有且坚持/有时有/想过没做/没有 |
|
|
|
|
|
+
|
|
|
|
|
+### 6.4 关系质量题库(示例 8 题)
|
|
|
|
|
+
|
|
|
|
|
+| # | 题目 | 选项 |
|
|
|
|
|
+|---|------|------|
|
|
|
|
|
+| 1 | 你与家人的沟通频率? | 每天/每周几次/每周一次/很少 |
|
|
|
|
|
+| 2 | 遇到困难时你能找到人倾诉? | 总是可以/经常/偶尔/很难 |
|
|
|
|
|
+| 3 | 你觉得自己被家人理解? | 非常理解/基本理解/不太理解/完全不理解 |
|
|
|
|
|
+| 4 | 你与伴侣的关系满意度? | 很满意/比较满意/一般/不满意 |
|
|
|
|
|
+| 5 | 你与孩子的关系如何? | 亲密/良好/一般/疏远 |
|
|
|
|
|
+| 6 | 你在社交中感到? | 轻松愉快/基本舒适/有些紧张/很焦虑 |
|
|
|
|
|
+| 7 | 你愿意主动联系朋友吗? | 经常/有时/被动/几乎不 |
|
|
|
|
|
+| 8 | 你觉得家庭氛围如何? | 温馨和谐/基本融洽/有些紧张/压抑 |
|
|
|
|
|
+
|
|
|
|
|
+### 6.5 跳转逻辑
|
|
|
|
|
+
|
|
|
|
|
+从数据中心跳转时,URL 带 `dim` 参数,页面直接跳过 Step 1(选维度),进入 Step 2(答题)。
|
|
|
|
|
+
|
|
|
|
|
+```javascript
|
|
|
|
|
+onLoad(options) {
|
|
|
|
|
+ if (options.dim) {
|
|
|
|
|
+ this.selectedDimension = options.dim
|
|
|
|
|
+ this.step = 2 // 直接进入答题
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+提交接口复用现有 `submitDimensionQuestionnaire`(后端需扩展支持新增维度)。
|
|
|
|
|
+
|
|
|
|
|
+## 7. 方案汇总页(新建)
|
|
|
|
|
+
|
|
|
|
|
+### 7.1 页面结构
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+┌──────────────────────────────┐
|
|
|
|
|
+│ ← 方案汇总 │
|
|
|
|
|
+├──────────────────────────────┤
|
|
|
|
|
+│ [历史方案] Tab 切换 │
|
|
|
|
|
+│ │
|
|
|
|
|
+│ ┌── 生成新方案 ──────────┐ │
|
|
|
|
|
+│ │ 选择维度: [健康][认知].. │ │
|
|
|
|
|
+│ │ 选择成员: [成员列表] │ │
|
|
|
|
|
+│ │ 目标设定: [输入框] │ │
|
|
|
|
|
+│ │ 例:"改善孩子睡眠质量" │ │
|
|
|
|
|
+│ │ [生成方案] │ │
|
|
|
|
|
+│ └────────────────────────┘ │
|
|
|
|
|
+│ │
|
|
|
|
|
+│ ┌── 方案结果 ────────────┐ │
|
|
|
|
|
+│ │ (LangGraph 返回内容) │ │
|
|
|
|
|
+│ │ 富文本展示 │ │
|
|
|
|
|
+│ │ [保存方案] [重新生成] │ │
|
|
|
|
|
+│ └────────────────────────┘ │
|
|
|
|
|
+│ │
|
|
|
|
|
+│ ┌── 历史方案列表 ────────┐ │
|
|
|
|
|
+│ │ 方案1 · 2026-08-07 │ │
|
|
|
|
|
+│ │ 方案2 · 2026-08-01 │ │
|
|
|
|
|
+│ └────────────────────────┘ │
|
|
|
|
|
+└──────────────────────────────┘
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 7.2 功能流程
|
|
|
|
|
+
|
|
|
|
|
+1. 用户进入页面 → 展示"生成新方案"表单 + 历史方案列表
|
|
|
|
|
+2. 选择维度(多选:健康/认知/心理/社会性)
|
|
|
|
|
+3. 选择成员(从家庭列表选取,可多选)
|
|
|
|
|
+4. 输入目标(自由文本,如"改善孩子睡眠质量""提升夫妻关系亲密度")
|
|
|
|
|
+5. 点击[生成方案] → 调用 LangGraph `analysis/run` 接口
|
|
|
|
|
+ - 请求体包含:维度、成员、目标、该成员最近的报告/测评数据
|
|
|
|
|
+6. LangGraph 返回方案 → 格式化展示(富文本:标题 + 现状分析 + 具体建议 + 预期效果)
|
|
|
|
|
+7. 用户可[保存方案](写入 `health_plans` 表)或[重新生成]
|
|
|
|
|
+8. 历史方案列表按时间倒序排列,点击查看详情
|
|
|
|
|
+
|
|
|
|
|
+### 7.3 数据模型
|
|
|
|
|
+
|
|
|
|
|
+**health_plans 表:**
|
|
|
|
|
+```sql
|
|
|
|
|
+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='健康方案汇总记录';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 7.4 历史方案
|
|
|
|
|
+
|
|
|
|
|
+- 列表项:生成日期 + 维度标签 + 目标摘要 + 成员名称
|
|
|
|
|
+- 点击展开/跳转详情
|
|
|
|
|
+- 空状态:"暂无历史方案,生成第一个方案"
|
|
|
|
|
+
|
|
|
|
|
+## 8. 后端改动
|
|
|
|
|
+
|
|
|
|
|
+### 8.1 新增表
|
|
|
|
|
+
|
|
|
|
|
+`health_plans` 表(见 7.3)
|
|
|
|
|
+
|
|
|
|
|
+### 8.2 迁移
|
|
|
|
|
+
|
|
|
|
|
+DatabaseInitializer.runMigrations() 新增迁移194:
|
|
|
|
|
+
|
|
|
|
|
+```java
|
|
|
|
|
+// 迁移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());
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 8.3 新增接口
|
|
|
|
|
+
|
|
|
|
|
+| 方法 | 路径 | 说明 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| POST | `/api/health/plan/save` | 保存方案 plan_content |
|
|
|
|
|
+| POST | `/api/health/plan/list` | 查询历史方案列表 |
|
|
|
|
|
+| POST | `/api/health/plan/detail` | 查询方案详情 |
|
|
|
|
|
+| POST | `/api/health/plan/generate` | 调用LangGraph生成方案 |
|
|
|
|
|
+
|
|
|
|
|
+### 8.4 扩展 dimension-questionnaire 接口
|
|
|
|
|
+
|
|
|
|
|
+确保 `submitDimensionQuestionnaire` 后端支持 `cognitive`/`mental`/`relationship` 维度(现有可能只处理了身维度,需确认和扩展)。
|
|
|
|
|
+
|
|
|
|
|
+## 9. 前端改动清单
|
|
|
|
|
+
|
|
|
|
|
+| 文件 | 改动内容 |
|
|
|
|
|
+|------|---------|
|
|
|
|
|
+| `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 页面 |
|
|
|
|
|
+
|
|
|
|
|
+## 10. 页面注册
|
|
|
|
|
+
|
|
|
|
|
+在 `pages.json` 的 `pages/health` 分包中新增:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "path": "health-plan-summary",
|
|
|
|
|
+ "style": {
|
|
|
|
|
+ "navigationBarTitleText": "方案汇总"
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 11. 移除项
|
|
|
|
|
+
|
|
|
|
|
+- 移除 body/index.vue 中现有的 `funcList` 功能入口网格(运动/饮食/作息/冥想/舌诊/健康维度)
|
|
|
|
|
+- 移除 `DimensionTasks` 组件及引用
|
|
|
|
|
+- 移除现有的"精准营养"区块(上传报告卡片保留并升级)
|
|
|
|
|
+
|
|
|
|
|
+## 12. 保留项
|
|
|
|
|
+
|
|
|
|
|
+- 七维雷达图(作为"健康"Tab 的数据图)
|
|
|
|
|
+- FamilyMemberStrip 家庭成员选择条
|
|
|
|
|
+- 活动/商品/文章推荐(视觉弱化,收窄宽度)
|
|
|
|
|
+- AIFloatingAvatar
|