返回作品

基于 Uniapp 的微信小程序点餐系统

创建于 2026 年 3 月 9 日

标签
  • Spring Boot
  • MyBatis-Plus
  • MySQL
  • Uniapp
  • Vue 3
  • Element Plus

项目介绍

微信小程序点餐是餐饮行业最常见的数字化场景之一,但一个能真正跑通「顾客点餐 — 门店接单 — 后台管理」全流程的项目,往往比表面看起来复杂得多:需要处理多门店数据隔离、购物车与订单的状态机、优惠券的发放与核销、库存的增减与回滚,还要为运营人员提供一套可配置的权限后台。本项目正是围绕这些真实业务问题完成的三端交付工程。

项目包含三个独立端: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_storesys_usersys_rolesys_menu 及关系表)、菜品与交易(dishdish_categorycart_itemordersorder_itempayment_record)、营销与运营(coupon_templateuser_coupondining_tabletable_reservationdish_reviewfeedback)、审计与库存(operation_loginventory_log)。表结构普遍带有状态码枚举、快照字段与复合唯一键,为业务流转和并发兜底做了铺垫。

核心功能

  • 多门店会话体系:小程序首页承担「会话配置」职责,支持切换门店、选择堂食/外带模式与桌号,会话状态持久化到本地存储;购物车按「用户 + 门店 + 餐桌 + 菜品 + 状态」建立唯一约束,并设计了 table_id_norm 生成列把空餐桌归一为 0,保证同一用户在不同门店、不同桌位的购物车互不串扰。

  • 点餐下单与模拟支付:菜单按分类加载菜品并展示库存与月销量,购物车支持增减数量与选中结算;下单区分堂食/外带与就餐人数,订单主表维护完整状态机(待支付 → 已支付 → 制作中 → 已完成,以及已取消、已退款),支付环节提供 mockPay 模拟支付接口(预留微信支付通道与回调字段),支付成功后联动扣减库存并写入支付记录。

  • 优惠券营销系统:券模板支持满减/折扣两种类型、主动领取/系统发放等领取方式、全门店/指定门店两种适用范围与发行总量/每人限领控制;用户领券后生成独立券码并进入状态机(未使用/锁定/已使用/过期/作废)。下单时通过「最优券」接口按金额匹配最划算的券,订单与券记录均保存门槛、减免、折扣率快照,保证历史单据可追溯。

  • RBAC 权限与操作日志:管理端内置系统管理员、门店管理员、店员、顾客四种角色,支持角色-菜单(按钮级权限标识)与用户-角色两级授权,管理端页面按权限路由渲染。同时基于 Spring AOP 对 controller.admin 包做环绕切面,自动把每个管理操作的模块、URI、请求体、响应码、IP 与 UA 落库到 operation_log,查询日志接口自身被排除,避免审计噪声。

  • 库存与预订运营:菜品库存支持手工调整、下单扣减、取消返还与盘点修正四类流水,每次变更都记录前后库存与关联订单;餐桌管理维护桌号、容量与空闲/使用中/停用状态,顾客可在小程序端按门店选桌提交席位预订,预订状态在待确认/已确认/已到店/已取消/已过期之间流转,并由管理端统一处理。

功能截图

暂无运行截图。

快速上手

先初始化数据库:依次执行 database/sql/schema.sqldatabase/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,以及监控告警与日志平台。这些恰恰也是后续演进最自然的切入点。