# 成长页面重构 — 干预中心 **版本:** v1.0 **日期:** 2026-08-08 **状态:** 设计稿 ## 1. 概述 将成长TabBar页(growth-main/index.vue)重构为"干预中心",聚焦主动健康闭环中的"干预"环节。核心问题:"我们做了什么,效果如何?"通过每日记录、持续追踪、里程碑、定期调研,追踪干预的执行与成效。 ## 2. 页面布局 ``` ┌──────────────────────────────────┐ │ 📊 今日干预进度卡 │ │ (打卡/饮食/运动/心情/调研进度) │ │ 有未完成项自动提醒 │ ├──────────────────────────────────┤ │ 📈 持续追踪 Tab │ │ [饮食] [运动] [睡眠] [心情] [调研]│ │ 各维度历史记录摘要 │ ├──────────────────────────────────┤ │ 🏆 里程碑 │ │ 连续打卡/挑战完成/档案完整度 │ ├──────────────────────────────────┤ │ 📋 定期调研 │ │ 周期问卷 + 历史记录 + 趋势 │ ├──────────────────────────────────┤ │ 活动/商品推荐 (弱化) │ └──────────────────────────────────┘ ``` ## 3. 移除项 - 现有 8 个功能入口网格(打卡/任务/挑战/饮食/运动/作息/档案/冥想)——功能融入各区块 - 现有"今日执行概览"卡片——升级为今日干预进度卡 - 现有"成长档案"孩子选择区块——成员选择条已在上方,成长档案融入其他区块 ## 4. 今日干预进度卡 ### 4.1 结构 ``` ┌── 今日干预进度 ─────────────────────┐ │ 2026-08-08 星期五 │ │ ✅ 今日打卡 ✔ 已完成 │ │ ☐ 饮食记录 [补录] ← 未完成 │ │ ☐ 运动记录 [补录] │ │ ✅ 心情记录 ✔ 已完成 │ │ ⚠ 本周调研 [开始] ← 待完成 │ │ ────────────────────── │ │ 今日完成 2/5 · 连续打卡 7 天 🔥 │ └──────────────────────────────────────┘ ``` ### 4.2 行为 - **自动提醒:** `onShow` 时检查今日未完成项,有未完成在顶部显示提醒条("今日还有 X 项未记录") - **补录:** 点击[补录]跳转对应记录页,传日期参数标识补录 - **调研提醒:** 根据调研周期判断是否到期,到期显示[开始] - **连续打卡:** 调用 `healthCheckinList` - **心情记录:** 调用 emotion-checkin 接口 - 底部:今日完成数/总数 + 连续打卡天数 ### 4.3 数据来源 | 项 | 接口 | |----|------| | 今日打卡 | `healthCheckinList({ memberId, date })` | | 饮食记录 | `getDietDailyRecords({ memberId, date })` | | 运动记录 | exercise 相关接口 | | 心情记录 | emotion-checkin 接口 | | 调研状态 | 新增 `survey/status` 接口 | ## 5. 持续追踪 Tab ### 5.1 结构 ``` ┌── 持续追踪 ──────────────────────────┐ │ [饮食] [运动] [睡眠] [心情] [调研] │ │ ┌─ 饮食记录 (举例) ────────────┐ │ │ │ 08/08 早餐: 全麦面包+牛奶 │ │ │ │ 08/08 午餐: 鸡胸肉沙拉 │ │ │ │ 08/07 晚餐: 清蒸鱼+蔬菜 │ │ │ │ [查看全部 →] │ │ │ └─────────────────────────────┘ │ │ 无数据时: "还没有记录,开始记录吧" │ └───────────────────────────────────────┘ ``` ### 5.2 各 Tab | Tab | 数据来源接口 | 点击跳转 | |-----|------------|---------| | 饮食 | `getDietDailyRecords` | 饮食记录页 | | 运动 | exercise 接口 | 运动记录页 | | 睡眠 | sleep 接口 | 作息记录页 | | 心情 | emotion-checkin 接口 | 心情记录页 | | 调研 | 新增 `survey/list` 接口 | 调研问卷页 | 每个 Tab 展示最近 3-5 条记录摘要,点击"查看全部"或记录项跳转对应详情页。 ## 6. 里程碑 ### 6.1 结构 ``` ┌── 里程碑 ────────────────────────────┐ │ 🔥 连续打卡 7 天 ✓ │ │ 🎯 完成 "21天挑战" ✓ │ │ 📈 健康档案完整度 60% │ │ [查看全部成就 →] │ └──────────────────────────────────────┘ ``` ### 6.2 数据来源 - 连续打卡天数:`healthCheckinList` 派生 - 挑战完成数:挑战接口派生 - 档案完整度:报告/档案数据派生 ## 7. 定期调研(新功能) ### 7.1 概念 周期性问卷,记录行为变化,追踪干预成效。有定时任务属性,到期自动提醒,可补录。 ### 7.2 前端展示 ``` ┌── 定期调研 ─────────────────────────┐ │ ⚠ 本周还未完成调研 │ │ "过去一周,你吃了几次不该吃的食物?" │ │ 选项: 0次 / 1-2次 / 3-5次 / 6次以上 │ │ [开始填写] │ │ ───────────────────── │ │ 历史调研记录: │ │ · 上周: 油炸食品 3次 │ │ · 上上周: 含糖饮料 5次 │ └──────────────────────────────────────┘ ``` ### 7.3 调研模板配置(管理端) 管理端新增调研模板管理页面(如 `SurveyTemplates.vue`),支持: - 创建/编辑/删除调研模板 - 每个模板:标题、一组问题(题目+选项)、周期(周/两周/月)、适用维度 - 启用/停用 ### 7.4 LangGraph 自动生成 - 管理端可点"AI生成调研"按钮,调用 LangGraph 根据指定维度/主题自动生成题目 - 生成结果可编辑后保存为调研模板 ### 7.5 数据模型 **survey_templates 表(调研模板):** ```sql CREATE TABLE IF NOT EXISTS survey_templates ( id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100) NOT NULL COMMENT '调研标题', dimension VARCHAR(20) COMMENT '适用维度', questions_json TEXT COMMENT '题目JSON(含选项)', cycle_type VARCHAR(20) DEFAULT 'weekly' COMMENT '周期: weekly/biweekly/monthly', ai_generated TINYINT(1) DEFAULT 0 COMMENT '是否AI生成', enabled TINYINT(1) DEFAULT 1 COMMENT '是否启用', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定期调研模板'; ``` **survey_records 表(调研记录,成员历次答案):** ```sql CREATE TABLE IF NOT EXISTS survey_records ( id BIGINT AUTO_INCREMENT PRIMARY KEY, family_id BIGINT NOT NULL COMMENT '家庭ID', member_id BIGINT NOT NULL COMMENT '成员ID', template_id BIGINT NOT NULL COMMENT '调研模板ID', answers_json TEXT COMMENT '答案JSON', submitted_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间', period_start DATE COMMENT '周期开始', period_end DATE COMMENT '周期结束', INDEX idx_member (member_id), INDEX idx_template (template_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定期调研记录'; ``` ### 7.6 接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/admin/survey/template/save` | 保存调研模板(管理端) | | POST | `/api/admin/survey/template/list` | 查询调研模板(管理端) | | POST | `/api/admin/survey/template/delete` | 删除调研模板(管理端) | | POST | `/api/admin/survey/template/ai-generate` | LangGraph生成调研题目 | | POST | `/api/survey/status` | 查询当前成员的待办调研 | | POST | `/api/survey/template/active` | 查询启用的调研模板(小程序) | | POST | `/api/survey/submit` | 提交调研答案 | | POST | `/api/survey/history` | 查询成员调研历史 | ## 8. 后端改动 ### 8.1 新增表 - `survey_templates`(调研模板) - `survey_records`(调研记录) ### 8.2 迁移 DatabaseInitializer.runMigrations() 新增迁移195、196(创建上述两表)。 ### 8.3 新增 Controller / Service - `SurveyController`(小程序端:status/active/submit/history) - `AdminSurveyController`(管理端:template CRUD + ai-generate) - `SurveyService` ### 8.4 LangGraph 对接 `ai-generate` 接口调用 LangGraph `analysis/run`,传入主题/维度,返回结构化题目 JSON。 ## 9. 前端改动清单 | 文件 | 改动内容 | |------|---------| | `pages/growth-main/index.vue` | 重构:今日干预进度卡 + 持续追踪Tab + 里程碑 + 定期调研 | | 新建 `pages/health/survey-questionnaire.vue` | 调研问卷页(答题+提交) | | 新建 `pages/health/survey-history.vue` | 调研历史页 | | `utils/api.js` | 新增调研相关接口 | | `pages.json` | 注册 survey-questionnaire / survey-history 页面 | | `cfc-web` 新建 `SurveyTemplates.vue` | 管理端调研模板管理 | ## 10. 页面注册 在 `pages.json` 的 `pages/health` 分包新增: ```json { "path": "survey-questionnaire", "style": { "navigationBarTitleText": "定期调研" } }, { "path": "survey-history", "style": { "navigationBarTitleText": "调研记录" } } ``` ## 11. 保留项 - PageBanner(文案改为"干预 · 记录 · 成长") - FamilyMemberStrip 家庭成员选择条 - DimensionActivities 活动推荐(弱化) - 成长档案相关数据(融入里程碑/持续追踪)