一、立项背景
餐饮业正加速从线下向线上迁移。传统电话预约、纸质菜单、人工记单的方式效率低下,顾客等位时间长、点餐体验差,餐厅人力成本高、翻台率也上不去。
运营中逐渐暴露出几个痛点:包间预约全靠前台手工记录,漏单重单时有发生;高峰期顾客反复催促服务员,体验大打折扣;老客想远程下单只能打电话,菜品说不清楚。于是决定做一款微信小程序,把预约、点餐、门店展示整合到一起,一站式解决这些问题。
二、项目目标
统一线上入口,把包间预约、远程点餐、扫码点餐整合进一个小程序,降低顾客使用门槛。预约和下单自助完成,服务员只负责确认和执行,单桌服务效率预计提升四成。通过每日推荐和特价菜品持续触达老客,促进复购。覆盖从浏览菜品到下单、等餐、回访的完整闭环。
三、功能模块
首页:顶部轮播展示活动与特惠。每日推荐网格展示四到六道主厨精选菜品,标注特价。四个快捷入口分别通向扫码点餐、远程点餐、包间预约、店面介绍。下方横向滚动展示今日特价。
在线点餐:经典双栏布局,左侧六个菜品分类,右侧对应菜品列表。每道菜显示名称、标签、现价、原价和月销量。可点击进入详情页,也可一键加入购物车。底部悬浮栏实时显示已选数量和合计金额。
菜品详情:大图展示,配合名称、评分、月售数据和价格对比。数量选择器支持加减操作。提供加入购物车和立即购买两个入口。
购物车与下单:支持修改数量、删除单项、一键清空。可切换堂食或外带,设置用餐人数和备注信息。确认后生成订单并跳转到订单列表页。
扫码点餐:调用微信原生扫一扫能力,扫描桌面二维码识别桌号,自动进入该桌点餐界面。顶部常驻桌号标签和重新扫码按钮,下单时自动关联桌号,无需手动输入。
包间预约:日期可选择今起三十天内任意日期,时段分为午餐和晚餐两档。三种包间可选:雅竹轩小包适合二到四人,兰亭阁中包适合六到八人,聚贤厅大包可容纳十到十六人。选包间后展开表单,填写姓名和手机号,可附加备注。提交前校验必填项和手机号格式。下方展示预约记录,支持一键取消。
店面介绍:展示门面、品牌故事、环境照片、服务设施和联系方式。支持一键拨号和一键复制地址。
订单管理:进行中和已完成两个切换。进行中订单呈现完整状态流,待确认状态可取消。历史订单支持再来一单,一键把之前的菜品重新加入购物车。
四、业务流程
堂食扫码:顾客到店→扫桌面二维码→识别桌号→浏览菜单→加入购物车→下单→厨房接单→上菜
远程外卖:打开小程序→点餐→分类浏览→加购→选择外带→下单→到店自取
包间预约:打开小程序→预约→选择日期→选择时段→选择包间→填写信息→确认预约→按时到店
五、导航结构
底部四个Tab:首页承载每日推荐和四个快捷入口,点餐是完整的分类菜单,预约包含包间预约和预约记录管理,我的展示订单列表和状态跟踪。
项目采用微信原生三层架构,无第三方依赖。App 层管理全局购物车和订单状态,所有页面通过 getApp() 共享同一实例,配合 Storage 做持久化。页面层含八个 Page 实例,四个 Tab 页可平级切换,其余通过 navigateTo 压栈跳转。工具层抽离模拟数据和公共函数,页面按需引用。
数据前置计算。WXML 不支持 filter、map 等数组方法和深层嵌套三元表达式。所有派生数据(分类菜品数、展示图标、订单状态文字和颜色)在 JS 层 onLoad 阶段算好写入 data,模板只做简单绑定和单层判断。
购物车全局化。购物车挂在 app.globalData.cart 上,任何页面修改后同步写 Storage,onShow 时重新读取。无论从首页推荐、点餐页浏览还是扫码桌台加入,菜品都进同一个购物车。
订单状态流。订单创建后沿待确认→已确认→烹饪中→上菜中→已完成流转,状态与其文字颜色集中映射在 util.js 的 STATUS_MAP 中,列表加载时统一注入,模板不写判断逻辑。
首页:swiper 实现轮播,curren t 索引驱动自定义指示器。每日推荐用 flex-wrap 网格,今日特价用 scroll-view 横向滚动。扫码入口调 wx.scanCode,失败兜底进演示模式。
在线点餐:左侧分类栏与右侧列表联动。点击分类更新 activeCategory 同时设 scrollToCategory 锚点触发滚动。加号按钮用 catchtap 阻止冒泡直接调 addToCart 并弹 toast。底部购物车栏 fixed 定位,有商品才显示。
扫码点餐:与在线点餐共用 UI。onLoad 从参数或扫码结果取桌号写入全局购物车,下单时自动关联。顶部多一条桌号标签栏,支持重新扫码。
菜品详情:通过 dishId 参数从数据集查找菜品,底部两个操作按钮——加购停留当前页、立即购买跳转购物车。
购物车:数量加减直接操作全局 updateCartItem,减到零自动删除。堂食外带切换和人数调整实时写 app 并持久化。提交时生成订单号,订单推入数组,清空购物车后跳转列表。
包间预约:日期用 picker 限制 30 天内,时段和包间点击选中。选包间后展开表单并滚动到表单区。提交逐项校验后写入本地 reservations 键。记录可取消。
订单管理:onShow 读取全局 orders,按状态拆分为进行中和已完成,注入展示字段。待确认订单可取消,已完成订单可再来一单——先清空再逐项加回购物车。
订单管理:onShow 读取全局 orders,按状态拆为进行中和已完成两组,注入展示字段。待确认订单可取消,已完成订单可再来一单——先清空购物车再逐项加回。