基于 Uniapp 的微信小程序点餐系统
创建于 2026 年 3 月 9 日
项目介绍
微信小程序点餐是餐饮行业最常见的数字化场景之一,但一个能真正跑通「顾客点餐 — 门店接单 — 后台管理」全流程的项目,往往比表面看起来复杂得多:需要处理多门店数据隔离、购物车与订单的状态机、优惠券的发放与核销、库存的增减与回滚,还要为运营人员提供一套可配置的权限后台。本项目正是围绕这些真实业务问题完成的三端交付工程。
项目包含三个独立端:backend 为 Spring Boot 后端服务,frontend/pc 为 Vue 3 管理端,frontend/uniapp 为 Uniapp 小程序端。当前版本定位为「答辩可演示最终版」,核心业务闭环——注册登录、点餐、下单、支付、反馈与评价、后台管理——已全部跑通,并内置三店(臻宴会馆·国金店、沐禾轻食·大学城店、炙味烧鸟·万达店)多角色的初始化演示数据,开箱即可演示。
项目架构
后端采用 Spring Boot 2.7.18(Java 8)搭建,ORM 选用 MyBatis-Plus 3.5.7,并约定了一套清晰的分层规范:简单 CRUD 直接走 MyBatis-Plus 内置方法,复杂关联查询与统计走 XML mapper(src/main/resources/mapper 下共 17 个 mapper XML)。接口按调用方划分命名空间——小程序端 /api/app/**、管理端 /api/admin/**、公共健康检查 /api/public/health,并配有统一响应体 ApiResponse、全局异常处理器与参数校验。
管理端使用 Vue 3 + Vite 5 + Element Plus + Pinia + Vue Router 构建,包含登录、首页概览、门店/分类/菜品/餐桌/订单/顾客/员工/优惠券/留言反馈/预订管理、权限配置与操作日志共十余个页面;小程序端基于 Uniapp(编译目标 mp-weixin)实现,包含首页(会话配置)、菜单、购物车、订单中心、我的、席位预订、反馈与登录等 13 个页面,底部为首页/点餐/购物车/我的四栏 tabBar。
数据库为 MySQL 的 wechat_ordering 库,共 21 张表,按业务域划分为四组:组织与权限(restaurant_store、sys_user、sys_role、sys_menu 及关系表)、菜品与交易(dish、dish_category、cart_item、orders、order_item、payment_record)、营销与运营(coupon_template、user_coupon、dining_table、table_reservation、dish_review、feedback)、审计与库存(operation_log、inventory_log)。表结构普遍带有状态码枚举、快照字段与复合唯一键,为业务流转和并发兜底做了铺垫。
核心功能
-
多门店会话体系:小程序首页承担「会话配置」职责,支持切换门店、选择堂食/外带模式与桌号,会话状态持久化到本地存储;购物车按「用户 + 门店 + 餐桌 + 菜品 + 状态」建立唯一约束,并设计了
table_id_norm生成列把空餐桌归一为 0,保证同一用户在不同门店、不同桌位的购物车互不串扰。 -
点餐下单与模拟支付:菜单按分类加载菜品并展示库存与月销量,购物车支持增减数量与选中结算;下单区分堂食/外带与就餐人数,订单主表维护完整状态机(待支付 → 已支付 → 制作中 → 已完成,以及已取消、已退款),支付环节提供
mockPay模拟支付接口(预留微信支付通道与回调字段),支付成功后联动扣减库存并写入支付记录。 -
优惠券营销系统:券模板支持满减/折扣两种类型、主动领取/系统发放等领取方式、全门店/指定门店两种适用范围与发行总量/每人限领控制;用户领券后生成独立券码并进入状态机(未使用/锁定/已使用/过期/作废)。下单时通过「最优券」接口按金额匹配最划算的券,订单与券记录均保存门槛、减免、折扣率快照,保证历史单据可追溯。
-
RBAC 权限与操作日志:管理端内置系统管理员、门店管理员、店员、顾客四种角色,支持角色-菜单(按钮级权限标识)与用户-角色两级授权,管理端页面按权限路由渲染。同时基于 Spring AOP 对
controller.admin包做环绕切面,自动把每个管理操作的模块、URI、请求体、响应码、IP 与 UA 落库到operation_log,查询日志接口自身被排除,避免审计噪声。 -
库存与预订运营:菜品库存支持手工调整、下单扣减、取消返还与盘点修正四类流水,每次变更都记录前后库存与关联订单;餐桌管理维护桌号、容量与空闲/使用中/停用状态,顾客可在小程序端按门店选桌提交席位预订,预订状态在待确认/已确认/已到店/已取消/已过期之间流转,并由管理端统一处理。
功能截图
暂无运行截图。
快速上手
先初始化数据库:依次执行 database/sql/schema.sql 与 database/sql/data.sql(演示账号:管理员 admin/123456、店员 staff/123456、顾客 user01/123456,密码在库中以 SHA-256 存储)。随后启动后端 cd backend && mvn spring-boot:run(默认 8080 端口,健康检查 GET /api/public/health),再启动管理端 cd frontend/pc && npm install && npm run dev(默认 5173 端口)。
小程序端使用 HBuilderX 打开 frontend/uniapp,可运行到微信开发者工具或 H5 浏览器调试;若手动导入微信开发者工具,小程序根目录应指向 unpackage/dist/dev/mp-weixin 构建产物,而非直接导入 .vue 源码目录。
总结
这个项目最大的价值在于「业务完整性」:它不是单一接口的 Demo,而是把点餐领域里最容易出问题的环节——多门店隔离、购物车唯一性、订单状态流转、优惠券快照、库存流水、操作审计——都用工程化手段落到了数据库设计与代码实现里,前后端各司其职,且带有可直接演示的初始化数据,作为全栈综合实践或毕业设计素材都相当扎实。
作为「答辩可演示最终版」,项目也坦诚地标注了上生产前应补齐的项:完整 JWT 鉴权与权限拦截(当前管理端权限以页面与标识为主)、菜品图片文件上传的正式接入、自动化测试与 CI/CD,以及监控告警与日志平台。这些恰恰也是后续演进最自然的切入点。