点餐功能是 Food-Yun 家庭菜谱管理小程序的核心特色功能,基于好友关系实现社交化点餐体验。用户可以从好友的公开菜谱中选择菜品,按餐次(早/中/晚餐)进行点餐,支持多人协作和订单管理。
- 好友菜谱选择:只能从已添加好友的公开菜谱中选择
- 作者信息展示:显示菜谱作者头像和昵称,增强社交属性
- 互动体验:通过点餐与好友产生美食互动
- 三餐分类:按早餐、午餐、晚餐分类展示菜谱
- 时间匹配:根据当前时间智能推荐合适餐次
- 场景化体验:符合日常用餐习惯和场景
- 一键操作:点击即可添加/移除菜品
- 实时反馈:购物车数量实时更新
- 批量管理:支持多菜品选择和批量操作
┌─────────────────────────┐
│ ← 点餐 🛒(2) │ ← 头部导航
├─────────────────────────┤
│ 🌅早餐 🌞午餐 🌙晚餐 │ ← 餐次选择
├─────────────────────────┤
│ 🔍搜索 🔧筛选 │ ← 筛选栏
├─────────────────────────┤
│ 📱 好友菜谱列表 │ ← 主要内容区
│ ┌─────────────────────┐ │
│ │ 🍖 红烧肉 👤小王 │ │ ← 菜谱卡片
│ │ 香甜软糯,入口即化 │ │
│ │ ⏰45分钟 ⭐4.8 [+添加]│ │
│ └─────────────────────┘ │
│ ┌─────────────────────┐ │
│ │ 🍅 番茄鸡蛋 👤小李 │ │
│ │ 经典家常菜,营养丰富│ │
│ │ ⏰15分钟 ⭐4.6 [✓已添加]│ │
│ └─────────────────────┘ │
│ ... │
├─────────────────────────┤
│ 🛒 提交订单 (2道菜) │ ← 底部按钮
└─────────────────────────┘
- 手机端:单列布局,卡片式展示
- 平板端:双列布局,优化空间利用
- 横屏模式:保持单列,调整卡片宽度
// 订单主表 (orders)
{
_id: ObjectId,
userId: ObjectId, // 点餐用户ID
mealType: String, // 餐次类型: 'breakfast' | 'lunch' | 'dinner'
orderDate: Date, // 点餐日期
recipes: [{ // 选中的菜谱列表
recipeId: ObjectId, // 菜谱ID
recipeName: String, // 菜谱名称
authorId: ObjectId, // 作者ID
authorName: String, // 作者昵称
authorAvatar: String, // 作者头像
image: String, // 菜谱图片
preparationTime: String, // 制作时间
difficulty: String, // 难度等级
servingSize: String // 适合人数
}],
status: String, // 订单状态: 'pending' | 'cooking' | 'completed'
notes: String, // 备注信息
totalRecipes: Number, // 总菜谱数量
estimatedTime: Number, // 预计制作时间(分钟)
createdAt: Date,
updatedAt: Date
}// 本地购物车状态
{
currentMealType: 'breakfast' | 'lunch' | 'dinner',
selectedRecipes: [{
recipeId: String,
recipeName: String,
authorId: String,
authorName: String,
authorAvatar: String,
image: String,
preparationTime: String,
difficulty: String,
servingSize: String,
addedAt: Date
}],
totalCount: Number,
lastUpdated: Date
}// 筛选条件
{
searchKeyword: String, // 搜索关键词
ingredientCategory: String, // 食材分类
preparationTime: String, // 制作时间范围
difficulty: String, // 难度等级
sortBy: String // 排序方式: 'time' | 'difficulty' | 'rating'
}功能描述:
- 提供早餐、午餐、晚餐三个选项
- 当前选中餐次高亮显示
- 切换餐次时重新加载对应菜谱
实现细节:
// 餐次选择逻辑
onMealTypeChange(mealType) {
this.setData({
currentMealType: mealType,
selectedRecipes: [], // 清空当前选择
totalCount: 0
})
this.loadFriendRecipes(mealType)
}UI设计:
- 三个等宽按钮,当前选中使用主题色
- 图标 + 文字的组合设计
- 平滑的切换动画效果
功能描述:
- 展示好友的公开菜谱
- 卡片式布局,包含完整信息
- 支持添加/移除到购物车
菜谱卡片信息:
- 菜谱图片(80x80px,圆角设计)
- 菜谱名称(加粗显示)
- 作者信息(头像 + 昵称)
- 菜谱描述(1-2行,超出省略)
- 制作信息(时间 + 难度 + 评分)
- 操作按钮(添加/已添加状态)
交互设计:
- 点击卡片查看菜谱详情
- 点击添加按钮切换状态
- 长按显示更多操作选项
功能描述:
- 右上角购物车图标显示数量
- 点击查看已选菜品详情
- 支持删除已选菜品
购物车弹窗设计:
┌─────────────────────────┐
│ 已选菜品 (2) ✕ │
├─────────────────────────┤
│ 🍖 红烧肉 👤小王 │
│ ⏰45分钟 ⭐4.8 [删除] │
├─────────────────────────┤
│ 🍅 番茄鸡蛋 👤小李 │
│ ⏰15分钟 ⭐4.6 [删除] │
├─────────────────────────┤
│ 预计制作时间: 60分钟 │
│ [清空购物车] [确认订单] │
└─────────────────────────┘
功能描述:
- 按关键词搜索菜谱名称
- 按食材分类筛选
- 按制作时间筛选
- 按难度等级筛选
筛选选项:
- 食材分类:肉类、水产、蛋类、蔬菜、汤类、主食
- 制作时间:10分钟内、30分钟内、1小时内、2小时以上
- 难度等级:简单、中等、困难
- 排序方式:按时间、按难度、按评分
功能描述:
- 确认订单详情
- 添加备注信息
- 提交到云数据库
订单确认页面:
┌─────────────────────────┐
│ 订单确认 │
├─────────────────────────┤
│ 餐次:🌅 早餐 │
│ 日期:2024-01-15 │
├─────────────────────────┤
│ 选中菜品: │
│ • 红烧肉 (小王) 45分钟 │
│ • 番茄鸡蛋 (小李) 15分钟│
├─────────────────────────┤
│ 备注: │
│ [输入框] │
├─────────────────────────┤
│ 预计制作时间:60分钟 │
│ [取消] [确认提交] │
└─────────────────────────┘
- 框架:微信小程序原生开发
- UI库:Vant Weapp 组件库
- 状态管理:页面级状态管理
- 数据存储:本地存储 + 云数据库
- 云函数:Node.js 运行时
- 云数据库:MongoDB 文档数据库
- 云存储:图片存储和CDN加速
获取好友菜谱列表:
// 云函数: getFriendRecipes
{
action: 'getFriendRecipes',
mealType: 'breakfast' | 'lunch' | 'dinner',
filters: {
searchKeyword: String,
ingredientCategory: String,
preparationTime: String,
difficulty: String,
sortBy: String
},
page: Number,
pageSize: Number
}创建订单:
// 云函数: createOrder
{
action: 'createOrder',
orderData: {
mealType: String,
recipes: Array,
notes: String
}
}获取订单列表:
// 云函数: getOrders
{
action: 'getOrders',
status: String, // 可选筛选
page: Number,
pageSize: Number
}图片优化:
- 使用云存储CDN加速
- 图片懒加载
- 压缩图片尺寸
数据优化:
- 分页加载菜谱列表
- 缓存好友菜谱数据
- 防抖搜索输入
交互优化:
- 添加/移除菜品的即时反馈
- 平滑的动画过渡
- 加载状态提示
进入点餐页 → 选择餐次 → 浏览菜谱 → 添加菜品 → 查看购物车 → 确认订单 → 提交成功
- 加载状态:显示骨架屏或加载动画
- 空状态:无菜谱时显示引导文案
- 错误状态:网络错误时显示重试按钮
- 成功状态:操作成功时显示确认提示
- 网络错误:显示重试按钮
- 权限错误:提示重新登录
- 数据错误:显示友好错误信息
- 操作错误:提供撤销操作
- 页面布局和样式
- 餐次选择功能
- 菜谱列表展示
- 基础交互逻辑
- 购物车功能
- 筛选搜索功能
- 订单提交功能
- 云函数开发
- 性能优化
- 用户体验优化
- 错误处理完善
- 测试和调试
- 用户可以正常选择餐次和浏览菜谱
- 购物车功能正常工作
- 订单可以成功提交到数据库
- 页面加载速度 < 2秒
- 用户操作响应时间 < 500ms
- 错误率 < 1%
- 智能推荐:基于用户喜好推荐菜谱
- 营养分析:计算订单的营养成分
- 分享功能:分享订单给好友
- 历史记录:查看历史点餐记录
- 评价系统:对菜谱和订单进行评价