日期: 2026-08-30
状态: 待审查
优先级: P1
范围: 纯前端(cfc-frontend/pages/diet/preferences.vue),零后端改动
现有饮食偏好调研页(pages/diet/preferences.vue)存在 4 个问题:
#F5F7FA)与饮食首页「暖灶·家的味道」的暖橙主题(#FF8C42 + emoji + 渐变)严重不一致。DietPreferences 实体和 diet_preferences 表已存在 must_eat(必吃)、cooking_methods(烹饪方式)字段(schema.sql 第 4451、4456 行),但页面完全未采集。onLoad 预填已有数据,但整体交互偏"一次性填写",无步骤化确认感。目标: 将单页长表单改造为 3 步引导式问卷,对齐暖橙主题,补全 mustEat/cookingMethods 采集。
采用方案 A(分步引导式问卷):
.vue 文件维护 currentStep 1/2/3),不做多路由mustEat / cookingMethods 两个缺失字段采集不做方案 B(仅视觉升级,引导性弱、交互未简化)或方案 C(单页智能预设,视觉升级不彻底)。
单页面内分步,维护 currentStep(1/2/3),用 v-if/swiper 切换三屏内容。
[进度条: ① 忌口与过敏 ●───○───○]
[步骤内容区域]
[底部: 上一步 | 下一步 / 完成]
| 步骤 | 标题(emoji) | 必填 |
|---|---|---|
| 1 | 🚫 忌口与过敏 | ✅ |
| 2 | 😋 口味与偏好 | — |
| 3 | 🎯 健康目标 | — |
数据流:
onLoad:调 getDietPreferences(POST /api/diet/preferences/current-member)预填已有数据(编辑模式)saveDietPreferences(POST /api/diet/preferences/save)一次性提交全量字段uni.navigateBack()(保持现有导航栈)规格自检修正(2026-08-30):现有页面"系统推荐目标"区块为死代码——后端
current-member接口的DietPreferencesDTO/convertToDTO()均不返回systemGoals字段,diet 后端亦无goalSource=system_recommend生成逻辑,前端res.systemGoals || []恒为空数组。故 Step 3 不保留该区块,避免维护永不可见的 UI。
沿用 pages/diet/index.vue 的「暖灶」主题:
| Token | 值 | 用途 |
|---|---|---|
| 背景 | linear-gradient(180deg, #FFF7ED, #FFF3E6) |
页面暖底 |
| 主色 | #FF8C42 |
强调、进度条、激活 chip |
| 卡片 | 白底圆角 24rpx + 暖橙阴影 | 表单容器 |
| 进度条 | 分段圆点 + 橙色填充 + 完成打勾 | 顶部 |
#F5F5F5),选中暖橙底白字小程序约束(强制遵守):
?.,用 &&:key 用方法调用(如 getChipKey(name)),不用带运算符表达式new Date(string),用 utils/format.js 的 parseDate()pages.json 配置(navigationBarTitleText),不写自定义 nav-title零后端改动:
DietPreferencesDTO(allergies/absoluteAvoid/religiousDiet/spiceLevel/flavorPref/cuisinePref/cookingMethods/healthGoals/mustEat/goalConfirmed)cookingMethods、mustEat 实体字段已存在(entity/DietPreferences.java),diet_preferences 表列已存在(must_eat、cooking_methods JSON),无需数据库迁移current-member 接口回填docs/superpowers/api/API_REFERENCE.md(无新增接口)| 文件 | 操作 |
|---|---|
cfc-frontend/pages/diet/preferences.vue |
重写(分步引导 + 暖橙主题 + 补字段) |
cfc-frontend/utils/api.js |
不变(getDietPreferences/saveDietPreferences 已存在) |
saveDietPreferences,成功 toast 后 navigateBackcookingMethods、mustEat(空数组也可)#FF8C42 主色、卡片圆角阴影)?.、无 CSS Grid、:key 用方法、日期用 parseDate()、无自定义 nav-titlenode --check 语法校验通过(script 块提取后)