# 饮食偏好调研页面重新设计 实现计划
> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
**目标:** 将 `cfc-frontend/pages/diet/preferences.vue` 从 3 张灰色长表单卡改造为 3 步引导式问卷(Step1 忌口必填 / Step2 口味偏好 / Step3 健康目标),对齐「暖灶」暖橙主题,补全 `mustEat`/`cookingMethods` 采集。
**架构:** 单 `.vue` 文件内维护 `currentStep`(1/2/3)+ 顶部进度条 + 底部"上一步/下一步/完成";数据用扁平数组字段存储(`allergies`/`absoluteAvoid`/`flavorPref`/`cuisinePref`/`cookingMethods`/`healthGoals`/`mustEat`),chip 选中态用 `arr.indexOf(name) >= 0` 内联表达式;`onLoad` 预填、`saveDietPreferences` 一次性提交。
**技术栈:** uni-app Vue 2 Options API(微信小程序),flexbox(禁 Grid),无 `?.`,`:key`/`:class` 禁方法调用式绑定。
**规格文档:** `docs/superpowers/specs/2026-08-30-diet-preferences-redesign-design.md`
---
## 文件结构
| 文件 | 职责 | 变更 |
|------|------|------|
| `cfc-frontend/pages/diet/preferences.vue` | 3 步引导问卷(模板 + 逻辑 + 样式) | 重写 |
| `cfc-frontend/pages.json` | 页面注册与标题 | 不变(已注册,标题"饮食偏好调研") |
| `cfc-frontend/utils/api.js` | `getDietPreferences`/`saveDietPreferences` | 不变(已存在) |
| `cfc-backend/**` | 数据存储 | 不变(`must_eat`/`cooking_methods` 列已存在) |
---
## 任务 1:重写 preferences.vue — 模板结构(数据层 + 进度条 + Step1)
**文件:**
- 修改:`cfc-frontend/pages/diet/preferences.vue`(整体重写,保留现有 `savePreferences` 校验语义)
- [ ] **步骤 1:重写 `
```
**验证:** `node --check` 对提取出的 script 块做语法校验。
预期:无语法错误。
- [ ] **步骤 2:编写 `` — 进度条 + Step1 忌口与过敏**
在 `` 根节点 `` 内,进度条 + 内容区 + 底栏三部分(Step2/3 内容在任务 2 追加):
```html
忌口·过敏
口味·偏好
健康目标
🚫
哪些食物绝对不能碰?
为了家人的安全,过敏原和忌口请务必填写
过敏原 *
{{ item }}
添加
+ 自定义添加
绝对忌口 *
{{ item }}
添加
+ 自定义添加
宗教饮食
{{ opt.label }}
```
**验证:** 检查无 `?.` 可选链、无 CSS Grid、`:class`/`:key` 均为简单表达式(`indexOf >= 0`、`'a' + i`),符合小程序限制。
- [ ] **步骤 3:Commit**
```bash
git add cfc-frontend/pages/diet/preferences.vue
git commit -m "feat(diet): 饮食偏好调研 重构为3步引导问卷 - 数据层+进度条+Step1忌口过敏"
```
---
## 任务 2:追加 Step2 口味偏好 + Step3 健康目标
**文件:**
- 修改:`cfc-frontend/pages/diet/preferences.vue`(在 `` 与 `` 之间插入)
- [ ] **步骤 1:插入 Step2 模板**
在 Step1 的 `` 之后追加:
```html
😋
口味和做法,说说看?
选得越细,推荐食谱越合家人口味
辣度偏好
不辣
特辣
口味偏好
{{ item }}
添加
+ 自定义添加
菜系偏好
{{ item }}
添加
+ 自定义添加
烹饪方式
{{ item }}
添加
+ 自定义添加
```
**验证:** 4 卡片完整闭合(辣度/口味/菜系/烹饪方式),`spiceLevel`/`flavorPref`/`cuisinePref`/`cookingMethods` 均正确绑定。
- [ ] **步骤 2:插入 Step3 模板**
```html
🎯
想优先改善哪方面?
没想好可以跳过,之后随时能改
必吃食物
{{ item }}
添加
+ 自定义添加
健康目标
{{ item }}
添加
+ 自定义添加
```
- [ ] **步骤 3:语法校验 + Commit**
```bash
node --check 提取的script块 # 预期无错误
git add cfc-frontend/pages/diet/preferences.vue
git commit -m "feat(diet): 饮食偏好调研 Step2口味偏好+Step3健康目标chip交互"
```
---
## 任务 3:样式(暖灶主题)+ 验收
**文件:**
- 修改:`cfc-frontend/pages/diet/preferences.vue`(`
```
**验证:** 无 CSS Grid、无中文类名、无 `?.`。
- [ ] **步骤 2:验收检查**
对照规格验收清单逐条核验:
- [ ] Step1 必填校验(`allergies.length === 0 && absoluteAvoid.length ===0` 时 goNext 弹 toast)
- [ ] Step2 四项 chip 均可选
- [ ] Step3 必吃/目标 chip 可选,无"系统推荐目标"区块
- [ ] 预填回填(`loadPreferences` 各数组赋值)
- [ ] 提交含 `cookingMethods`/`mustEat`(空数组也可)
- [ ] 暖橙主题(背景渐变/`#FF8C42`/圆角阴影)
- [ ] 无 `?.`、无 Grid、`:key`简单表达式、无自定义 nav-title
- [ ] **步骤 3:Commit**
```bash
git add cfc-frontend/pages/diet/preferences.vue
git commit -m "style(diet): 饮食偏好调研 暖灶暖橙主题样式"
```
---
## 自检记录
**1. 规格覆盖度:** 规格 4 节全覆盖——步骤流(任务1 进度条+底栏/任务2 内容)、交互(chip+自定义)、视觉(任务3)、后端兼容(零改动,全部字段映射见任务1 save 提交体)。
**2. 占位符扫描:** 无"待定/TODO"。任务2 步骤1 已含 Step2 四卡片完整代码(辣度/口味/菜系/烹饪方式),无"类似任务"式简写。
**3. 类型一致性:** 字段名 `allergies/absoluteAvoid/religiousDiet/spiceLevel/flavorPref/cuisinePref/cookingMethods/healthGoals/mustEat` 与 DTO 一致;方法 `toggleChip/openCustom/addCustom/goNext/goPrev/savePreferences` 前后引用一致;预设常量名 `presetAllergies...presetGoals` 与 computed 一致。
**已知修正(对比规格):** Step3 无"系统推荐目标"区块(规格自检已确认后端无 `systemGoals` 数据源)。
---
**验证方式:** 修改后需在 HBuilderX 重新打包(agent 不执行 build 命令);`node --check` 校验 script 块语法。