From 46b74344c7efbb4da041ca56172c5731b866bba3 Mon Sep 17 00:00:00 2001 From: mac Date: Mon, 8 Jun 2026 18:31:22 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20REVIEW.md=20v2.3=20=E6=9B=B4=E6=96=B0R4?= =?UTF-8?q?+R5=E5=AE=8C=E6=95=B4=E4=BF=AE=E5=A4=8D=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- REVIEW.md | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 REVIEW.md diff --git a/REVIEW.md b/REVIEW.md new file mode 100644 index 0000000..de3f157 --- /dev/null +++ b/REVIEW.md @@ -0,0 +1,229 @@ +# 纯瘾大 · 酒吧点单小程序 — 提审文档 v2.3 + +> **日期**: 2026-06-08 | **版本**: v2.3 (R5修复版) +> **用途**: 测试组验收 / 运维组部署审核 +> **项目位置**: `/Users/mac/work/mnmp/code/` + +--- + +## 一、项目概述 + +| 项 | 内容 | +|----|------| +| 项目名称 | 纯瘾大 · 酒吧点单小程序 | +| 品牌标识 | 🍸 纯瘾大 | +| 业务场景 | 酒吧顾客扫码点单 + 调酒师接单管理 + 双向聊天 | +| 角色 | 顾客端(小程序) / 员工端(后台) | + +--- + +## 二、技术栈 + +| 层 | 技术 | 版本 | +|----|------|------| +| 前端框架 | uni-app (Vue 3) | HBuilderX / CLI | +| 编译目标 | 微信小程序 (mp-weixin) | - | +| 后端框架 | ThinkPHP | 8.1 | +| PHP | PHP | 8.2 | +| 数据库 | MariaDB | 10.4.12 @ 47.94.89.42:3306 | +| 数据库名 | drink | 账号 drink_app | +| 实时通信 | HTTP 轮询 (5s/10s/15s) | - | +| UI 设计 | 深色酒吧主题 | 黑底金橙配色 | + +--- + +## 三、工程结构 + +``` +code/ +├── server/ # ThinkPHP 8 后端 +│ ├── app/ +│ │ ├── controller/ # Card / Menu / Order / Message / Staff +│ │ ├── model/ # Product / Order / OrderItem / Message / Staff +│ │ ├── service/ # CardService / OrderService +│ │ └── middleware/ # StaffAuth (HMAC-SHA256 Token) +│ ├── config/ # database / app / middleware +│ ├── route/app.php # 16条API路由 +│ └── .env # APP_DEBUG=false (生产就绪) +├── miniapp/ # uni-app 前端 (19 Vue + 7 JS) +│ ├── pages/ # 9页面 +│ ├── components/ # 7组件 (CartBar/CartPopup已删除) +│ ├── stores/ # card / cart / staff (Pinia) +│ └── utils/ # request / constants / poller +└── REVIEW.md # 本文档 +``` + +--- + +## 四、页面清单 (9页) + +| # | 页面 | 路由 | 关键交互 | +|---|------|------|---------| +| 1 | 落地页+号码牌 | `pages/index/index` | 按钮触发弹窗,1997→员工登录,底部「🔐 员工入口」 | +| 2 | 点单主页 | `pages/menu/menu` | Banner+分类Tab+单列商品+出餐铃+购物车弹层(点击遮罩关闭) | +| 3 | 确认下单 | `pages/confirm/confirm` | 清单+预设标签+备注+摇铃下单 | +| 4 | 我的订单 | `pages/orders/orders` | 催单(传cardNo)+聊天入口(未读红点徽章)+15s轮询 | +| 5 | 顾客聊天 | `pages/chat/chat` | 气泡+5s轮询+未读计数(viewer=customer) | +| 6 | 员工登录 | `pages/staff/login` | type=password,无硬编码凭证,reLaunch进看板 | +| 7 | 订单看板 | `pages/staff/board` | 3Tab(含计数徽章)+拒单+详情+聊天+10s轮询 | +| 8 | 订单详情 | `pages/staff/detail` | 路由传参id,订单信息+完整配方 | +| 9 | 员工聊天 | `pages/staff/chat` | 气泡+5s轮询+未读计数(viewer=staff) | + +--- + +## 五、数据库 (5表) + +| 表 | 说明 | 连接 | +|----|------|------| +| products | 20款酒水,6分类,含完整配方 | 47.94.89.42:3306 | +| staff | bartender1 / admin (bcrypt) | drink库 | +| orders | 订单 (0新/1进行/2完成/3取消) | drink_app | +| order_items | 订单明细快照 | Drink@Bar2026! | +| messages | 聊天消息 | - | + +--- + +## 六、API 接口 (16个) + +### 6.1 顾客端 (10个) + +| # | 方法 | 路径 | 说明 | +|---|------|------|------| +| 1 | POST | `api/card/generate` | 生成[A-Z]NNN号码牌 | +| 2 | GET | `api/card/check` | 校验号码牌格式 | +| 3 | GET | `api/menu/categories` | 6分类列表 | +| 4 | GET | `api/menu/products` | 按分类获取商品(无recipe) | +| 5 | GET | `api/menu/product` | 商品详情 | +| 6 | POST | `api/order/submit` | 下单(qty1-99+事务) | +| 7 | GET | `api/order/list` | 我的订单 | +| 8 | POST | `api/order/remind` | 催单(归属+30s冷却+5次上限) | +| 9 | GET | `api/message/list` | 聊天记录(since增量) | +| 10 | POST | `api/message/send` | 发消息(枚举+500字+Vue模板转义) | + +### 6.2 员工端 (6个,需Token) + +| # | 方法 | 路径 | 说明 | +|---|------|------|------| +| 11 | POST | `api/staff/login` | 登录(HMAC-SHA256 Token/24h) | +| 12 | GET | `api/staff/orders` | 看板列表(?include_cancel=1含取消) | +| 13 | GET | `api/staff/order` | 详情(含完整recipe) | +| 14 | POST | `api/staff/order/confirm` | 接单(status:0→1) | +| 15 | POST | `api/staff/order/done` | 结单(status:1→2+号码释放) | +| 16 | POST | `api/staff/order/cancel` | 拒单(status:0→3) | + +--- + +## 七、完整修复记录 + +### R1→R2 (后端安全) + +| Bug | 说明 | 状态 | +|-----|------|------| +| BUG-01 | 催单增加cardNo归属+30s冷却+5次上限 | ✅ | +| BUG-02 | confirm/done/cancel状态机前置校验 | ✅ | +| BUG-03 | 消息发送长度/枚举/XSS三重校验 | ✅ | +| BUG-04 | 下单qty正整数1-99校验 | ✅ | + +### R2→R3 (前端+配置) + +| Bug | 说明 | 状态 | +|-----|------|------| +| BUG-05 | APP_DEBUG=false | ✅ | +| R3-01 | CartPopup去除所有¥价格 | ✅ | +| R3-02 | 员工详情页id路由传参 | ✅ | +| R3-03 | 员工登录页去硬编码凭证 | ✅ | +| R3-04 | 聊天气泡方向viewer=staff修正 | ✅ | +| R3-06 | CardModal死代码删除 | ✅ | +| R3-07 | request.js移除X-Card-No | ✅ | + +### R4 (死代码清理) + +| 改动 | 说明 | 状态 | +|------|------|------| +| CartBar.vue | 未使用组件删除 | ✅ | +| CartPopup.vue | 未使用组件删除 | ✅ | +| cart.js | 移除totalAmount(price冗余逻辑) | ✅ | + +### R5 (功能/UI深度修复) + +| Bug | 说明 | 状态 | +|-----|------|------| +| R5-01 | navigationStyle:custom 关闭系统导航栏 | ✅ | +| R5-02 | uni.scss 全局 box-sizing:border-box | ✅ | +| R5-03 | Message.php 移除htmlspecialchars(防双重转义) | ✅ | +| R5-04 | index.vue clearTimeout防双重跳转 | ✅ | +| R5-05 | board.vue 增加拒单按钮+API | ✅ | +| R5-06 | 时间格式改为Y-m-d H:i:s | ✅ | +| R5-07 | 聊天轮询未读计数+徽章显示 | ✅ | +| R5-08 | ProductCard改为单列横向布局 | ✅ | +| R5-09 | 号码牌弹窗padding+white-space优化 | ✅ | +| R5-10 | 消息列表返回原始文本 | ✅ | + +### R5 事后修复 + +| 问题 | 说明 | 状态 | +|------|------|------| +| WXSS * 通配符报错 | 改用具体元素列表 | ✅ | +| 页头顶天 | page级padding-top:44px适配状态栏 | ✅ | +| 登录input类型 | password→type="password" | ✅ | +| 拒单显示 | Staff.php include_cancel逻辑 | ✅ | +| 已完成计数 | 3个Tab均显示计数徽章 | ✅ | +| 员工看板健壮性 | Promise.all并行+空值兜底 | ✅ | + +--- + +## 八、部署指南 + +### 后端 +```bash +cd code/server +# .env: DB_HOST=47.94.89.42 DB_NAME=drink APP_DEBUG=false +php think run -p 8080 +``` + +### 前端 +```bash +cd code/miniapp +npm install +npm run build:mp-weixin +# 微信开发者工具打开 dist/build/mp-weixin +``` + +### 关键配置 + +| 配置 | 文件 | 值 | +|------|------|-----| +| API Base | `miniapp/utils/constants.js` | `http://127.0.0.1:8080` | +| Token密钥 | `server/config/app.php` | `app_secret` | +| 轮询间隔 | `miniapp/utils/poller.js` | 聊天5s / 看板10s / 订单15s | +| 导航栏 | `pages.json` | `navigationStyle:custom` + page padding | + +--- + +## 九、验收检查清单 + +- [x] 16个API全部通过 +- [x] 员工Token拦截 (401) +- [x] 顾客product不含recipe,staff/order含recipe +- [x] 催单归属+冷却+上限 +- [x] 状态机非法转换拒绝 +- [x] 消息存储原始文本,Vue模板转义防XSS +- [x] 全局无¥价格符号 +- [x] APP_DEBUG=false +- [x] 员工登录无硬编码凭证 +- [x] 详情页路由传参 +- [x] 聊天气泡方向(viewer)正确 +- [x] 拒单后订单显示在已完成Tab(含状态标签) +- [x] 3个Tab均含计数徽章 +- [x] 商品卡片单列横向布局 +- [x] 购物车点击遮罩关闭 +- [x] 出餐铃动画完整 +- [x] 时间格式Y-m-d H:i:s +- [x] 聊天未读徽章显示 +- [x] 页面顶部状态栏适配 +- [ ] uni-app微信小程序编译 +- [ ] 真机兼容性测试 + +--- + +*文档版本 v2.3 | 2026-06-08 | R5修复版*