|
|
@@ -78,6 +78,7 @@
|
|
|
- `events`:
|
|
|
- `update-form` / `update-diet` — 值变更回传父页(父页维护两份快照,同 health-plan-summary 现有 `memberFormMap`/`memberDietMap` 模式)
|
|
|
- `submit` — 完成提交(父页负责组装 payload 调接口)
|
|
|
+- **内部状态**:`currentStep`(当前第几步)由组件内部 `data` 维护(`v-if="currentStep === N"` 切换各模块 step,与 preferences.vue 一致);`modules.length` 即总步数;组件 `onLoad`/`created` 不做数据加载(父页负责),仅在 props 变更时 sync 快照到内部工作副本。
|
|
|
|
|
|
## 四、8 模块字段映射
|
|
|
|
|
|
@@ -115,19 +116,39 @@
|
|
|
- 身高 30–250、体重 3–300、血压正则 `^\d{2,3}\/\d{2,3}$`、血糖 1–30(沿用现有前端校验)。
|
|
|
- 启用模块含 `diet` 时:**无必填**(原 preferences.vue"过敏/忌口至少一项"校验随过敏原移出而取消;绝对忌口 absoluteAvoid 仍留在 diet 模块,但不强制)。
|
|
|
- 启用模块含 `allergy` 时:**无必填**(过敏原/症状均可空)。
|
|
|
+- 空模块允许提交:各模块均无必填字段,允许"调研了但没填"的情况(用户主动跳过某模块);后端"至少一项"校验兜底——只有 health_status 侧**全部模块**(basic/status/disease/med/bowel/sleep)都未填且 diet_preferences 侧也空时才被后端拒绝。
|
|
|
|
|
|
### 5.4 失败处理
|
|
|
|
|
|
- 加载失败:toast 提示,页面可重试(保留现有 `loading` 语义)。
|
|
|
- 保存失败:toast 展示后端错误,停留在当前 step,不返回。
|
|
|
|
|
|
+### 5.5 组件 Props / Events 契约
|
|
|
+
|
|
|
+**Props:**
|
|
|
+- `modules: Array<String>` — 启用模块 key 列表(顺序决定步骤顺序),如 `['basic', 'diet', 'allergy']`
|
|
|
+- `form: Object` — health_status 快照 `{heightCm, weightKg, bloodPressure, bloodGlucose, lipidCholesterol, diseaseHistory, medications, lifestyle, notes}`
|
|
|
+- `diet: Object` — diet_preferences 快照(13 key 全量)
|
|
|
+- `profile: Object` — 成员画像 `{gender, age}`,驱动条件渲染字段
|
|
|
+- `submitting: Boolean` — 外部控制提交中状态
|
|
|
+
|
|
|
+**Events:**
|
|
|
+- `update-form` — 值变更回传 `{key, value}`,父页合并到 `form` 快照
|
|
|
+- `update-diet` — 值变更回传 `{key, value}`,父页合并到 `diet` 快照
|
|
|
+- `submit` — 完成提交,携带 `{form, diet, lifestyleDiff: Object}`(仅含本次修改的 lifestyle key,父页负责 merge 现有 lifestyle JSON)
|
|
|
+
|
|
|
+> 条件渲染字段(menstrualCycle/specialPeriod/growthDevelopment/pickyEating/osteoporosisRisk/fallRisk/screenTime/teenMood)是 lifestyle JSON 的子 key,UI 上展示在"当前状态"步骤内,但数据落库与 currentStatus 同处 `lifestyle` JSON,与模块划分无关。
|
|
|
+
|
|
|
## 六、视觉
|
|
|
|
|
|
- 沿用「暖灶」暖橙主题(与 `preferences.vue` 一致):
|
|
|
- 背景 `linear-gradient(180deg, #FFF7ED, #FFF3E6)`
|
|
|
- 主色 `#FF8C42`,chip 选中实心橙、未选米白
|
|
|
- - 顶部进度条(模块数分阶)+ 底部"上一步/下一步/完成"固定栏
|
|
|
+ - 顶部进度条(分阶公式:`Math.round((currentStep / modules.length) * 100)`,如 3 模块时 33%/66%/100%)
|
|
|
+ - 底部固定栏:前 N-1 步显示"上一步 / 下一步",最后一步显示"上一步 / 完成"
|
|
|
+ - 底部固定栏:前 N-1 步显示"上一步 / 下一步",最后一步显示"上一步 / 完成"
|
|
|
- 圆角卡片 + 暖橙阴影
|
|
|
+ - 复用 preferences.vue 已有的 chip/chip-active/custom-row/custom-add 等样式类(**不重复定义**),新增缺失的 card/step-head/slider-row 等骨架类
|
|
|
|
|
|
## 七、影响范围
|
|
|
|
|
|
@@ -139,7 +160,7 @@
|
|
|
| `cfc-frontend/pages/index-home/index.vue` | **修改** | `goSelfTest` 无待填调研分支改跳新页 |
|
|
|
| `cfc-frontend/pages/health-main/index.vue` | **修改** | `goSelfTest` 改跳新页 |
|
|
|
| `cfc-frontend/pages/health/health-plan-summary.vue` | **修改** | Step2 用 ComprehensiveSurvey 替换 HealthQuestionnaireWizard(多成员 tab 保留) |
|
|
|
-| `cfc-frontend/pages/health/components/HealthQuestionnaireWizard.vue` + 5 子 step | **标记** | 文件头加 `DEPRECATED` 注释,保留不删 |
|
|
|
+| `cfc-frontend/pages/health/components/HealthQuestionnaireWizard.vue` + 5 子 step | **标记** | 文件头加 `<!-- DEPRECATED: 已由 ComprehensiveSurvey.vue 替代,待确认无引用后清理 -->` 注释,保留文件不删(符合项目"废弃标记不直接删除"惯例) |
|
|
|
| `docs/superpowers/plans/…` | **新增** | 后续实现计划 |
|
|
|
|
|
|
**明确不改**:后端任何文件、`utils/api.js`(接口已封装)、`health_status`/`diet_preferences` 表结构(新字段全走 lifestyle JSON 自由 key)。
|
|
|
@@ -175,7 +196,7 @@
|
|
|
## 十、非目标(本次不做)
|
|
|
|
|
|
- **不做**方案制定页整体流程改造(选成员/生成方案/逐板块确认逻辑保持现状,仅替换 Step2 调研组件)。
|
|
|
-- **不做**旧 `HealthQuestionnaireWizard` 删除——仅标记 DEPRECATED,待方案制定页替换上线后确认无引用再清理。
|
|
|
+- **不做**旧 `HealthQuestionnaireWizard` 删除——仅标记 DEPRECATED(文件头加明确注释 + 在 PROJECT-OVERVIEW.md 登记清理 plan),待上线后确认无引用再清理。**本实施计划不删除旧文件**,避免引入并发风险。
|
|
|
- **不做**后台模板配置化(`survey_templates`)——8 模块字段本设计固化,模块组合由调用方 URL 传参控制。
|
|
|
- **不做** `exercise_record` 打卡表与新运动字段的联动——新运动字段为调研快照性质,打卡体系独立运行。
|
|
|
- **不做** report-survey 的过敏源/睡眠等数据同步修复(`ReportSurveyService.saveDietPreferencesFromSurvey` 不同步 allergies 的既有缺口,不在本次范围)。
|