随着餐饮行业数字化转型加速,微信点餐小程序已成为商家提升效率、降低人力成本的核心工具。本文将通过一套完整的源码解析,带你从0到1实现一个支持扫码点餐+外卖配送+后台管理的餐饮小程序,涵盖关键功能实现、数据库设计及核心代码片段,适合开发者与创业者参考。
一、项目架构设计
1.1 技术栈选择
- 源码及演示:s.ymzan.top
- 前端:微信小程序原生框架(WXML/WXSS/JavaScript)
- 后端:Node.js + Express(或云开发避免服务器搭建)
- 数据库:MySQL(传统方案)或云数据库(如腾讯云TDSQL)
- 部署:微信云托管/自有服务器 + Nginx
1.2 功能模块划分
模块 | 功能描述 |
---|---|
扫码点餐 | 餐桌二维码绑定订单,顾客自助下单 |
外卖系统 | 用户地址管理、配送费计算、订单状态追踪 |
后台管理 | 菜品管理、订单处理、数据统计、营业额分析 |
支付集成 | 微信支付、余额支付、订单退款 |
1.3 前后端交互流程优化
- RESTful API规范:统一使用
POST/GET/PUT/DELETE
方法对应增删改查操作,例如:GET /api/dishes
:获取菜品列表POST /api/orders
:创建订单PUT /api/orders/{id}/status
:更新订单状态
- 请求/响应格式标准化:
// 成功响应 {"code": 200,"message": "success","data": { ... } }// 错误响应 {"code": 400,"message": "参数错误","error": "Invalid tableId" }
1.4 云开发替代方案
若不想搭建服务器,可使用微信云开发简化流程:
- 优势:免服务器运维、自动扩展、集成微信登录/支付。
- 示例代码(云函数生成二维码):
// 云函数入口文件 const cloud = require('wx-server-sdk'); cloud.init(); const QRCode = require('qrcode');exports.main = async (event, context) => {const { tableId } = event;const qrUrl = `https://your-domain.com/pages/order?tableId=${tableId}`;const qrImage = await QRCode.toDataURL(qrUrl);return { qrImage }; };
核心功能实现与代码解析
1.1 扫码点餐:餐桌二维码生成与订单绑定
实现逻辑
- 后端生成唯一
tableId
,关联到数据库中的餐桌信息。 - 使用
QRCode.js
生成带参数的二维码(如/pages/order?tableId=101
)。 - 用户扫码后,小程序携带
tableId
跳转至点餐页,并初始化订单。
关键代码(后端生成二维码)
// Node.js 示例:生成餐桌二维码URL
const express = require('express');
const router = express.Router();
const QRCode = require('qrcode');router.get('/generate-qr/:tableId', async (req, res) => {const { tableId } = req.params;const qrUrl = `https://your-domain.com/pages/order?tableId=${tableId}`;try {const qrImage = await QRCode.toDataURL(qrUrl);res.json({ success: true, qrImage }); // 返回Base64图片数据} catch (err) {res.status(500).json({ error: '生成二维码失败' });}
});
前端扫码跳转(WXML示例)
<!-- pages/scan/scan.wxml -->
<button bindtap="scanCode">扫码点餐</button>
// pages/scan/scan.js
Page({scanCode() {wx.scanCode({success(res) {const tableId = res.query.tableId; // 从二维码参数中提取tableIdwx.navigateTo({url: `/pages/order?tableId=${tableId}`,});},});},
});
1.2 外卖系统:配送费计算与订单状态管理
实现逻辑
- 配送费规则:按距离分段计费(如3km内5元,每增加1km加2元)。
- 订单状态机:
待支付 → 已支付(商家接单)→ 配送中 → 已完成
。
关键代码(配送费计算)
// 后端API:计算配送费
router.post('/calculate-delivery-fee', (req, res) => {const { distance } = req.body; // 距离(单位:km)let fee = 5; // 基础费用if (distance > 3) {fee += Math.ceil(distance - 3) * 2; // 向上取整}res.json({ success: true, fee });
});
订单状态更新(前端示例)
// 商家接单后更新状态
wx.request({url: 'https://your-domain.com/api/orders/update-status',method: 'POST',data: { orderId: '123', status: 'DELIVERING' },success(res) {wx.showToast({ title: '已接单,配送中' });},
});
1.3 后台管理:菜品与订单数据可视化
实现逻辑
- 菜品管理:CRUD操作,支持上下架、库存预警。
- 数据统计:使用ECharts展示日销售额、热门菜品等图表。
关键代码(菜品列表查询)
// 后端API:获取菜品列表
router.get('/admin/dishes', async (req, res) => {const dishes = await db.query('SELECT * FROM dishes WHERE is_active = 1');res.json({ success: true, data: dishes });
});
前端数据可视化(ECharts集成)
<!-- pages/admin/stats.wxml -->
<view class="chart-container"><ec-canvas id="salesChart" canvas-id="salesChart" ec="{{ ec }}"></ec-canvas>
</view>
// pages/admin/stats.js
import * as echarts from '../../ec-canvas/echarts';Page({data: { ec: { lazyLoad: true } },onReady() {this.initChart();},initChart() {const chart = echarts.init(this.selectComponent('#salesChart').canvas);chart.setOption({xAxis: { type: 'category', data: ['周一', '周二', '周三'] },yAxis: { type: 'value' },series: [{ data: [120, 200, 150], type: 'line' }],});},
});
数据库设计(关键表结构)
1.1 餐桌表(tables)
字段名 | 类型 | 说明 |
---|---|---|
id | INT | 餐桌ID(主键) |
name | VARCHAR | 餐桌名称(如A01) |
status | TINYINT | 0空闲 1占用 |
1.2 订单表(orders)
字段名 | 类型 | 说明 |
---|---|---|
id | VARCHAR | 订单号(UUID) |
table_id | INT | 关联餐桌ID(外卖订单为NULL) |
total_price | DECIMAL | 订单总金额 |
status | ENUM | 待支付/配送中/已完成 |
部署与优化建议
- 性能优化:
- 使用Redis缓存热门菜品数据。
- 对二维码生成等耗时操作启用异步队列(如RabbitMQ)。
- 安全加固:
- 后端接口添加JWT鉴权。
- 敏感数据(如支付信息)加密传输。
结语
本文通过源码解析与关键代码示例,展示了餐饮微信点餐小程序的核心实现路径。在从0到1的构建过程中,我们不仅攻克了微信生态下的接口适配、多端数据同步、高并发订单处理等核心技术难点,更重要的是,通过源码解析将抽象的技术框架与餐饮行业的实际需求深度绑定——比如扫码点餐模块如何通过精简操作提升翻台率,外卖系统如何通过路径规划优化配送效率,后台管理如何通过数据可视化辅助商家决策,这些细节恰是技术赋能餐饮数字化转型的关键落点。希望这份源码解析能成为开发者入门餐饮小程序开发的“桥梁”——无论是刚接触微信生态开发的新手,还是寻求餐饮数字化转型的从业者,都能从中获取实用的技术参考与实践思路。技术的价值在于不断迭代,期待这套源码能成为更多创新方案的起点,为餐饮行业的数字化升级注入更多活力。