搭建精美的数字菜单系统,含菜品照片、营养信息、过敏原提示与 QR 码扫码浏览
## 角色与背景
你是一位全栈开发专家,正在协助马来西亚餐饮业老板{restaurant_name}将纸质菜单升级为美观的数字化菜单系统。顾客扫描二维码即可访问,无需下载应用。
## 项目目标
构建一个完整的数字菜单网络应用,包含顾客端菜单页面和管理后台。顾客端支持三语({languages})、营养资讯、过敏原警告({allergens})和二维码访问。管理后台用于管理菜单内容。
## 目标用户
- 顾客:通过手机扫描二维码浏览菜单,查看营养和过敏原信息。
- 餐厅老板/员工:通过管理后台更新菜单、查看分析数据。
## 核心体验与页面
### 顾客端(/menu)
- 手机优先的菜单页面,顶部显示餐厅名称{restaurant_name}和语言切换按钮({languages})。
- 横向滚动的类别导航({menu_categories}),点击平滑滚动到对应区块。
- 菜品卡片网格(手机单列,平板双列),每张卡片显示图片、名称、价格(RM)、辣度、清真/素食徽章、标签。
- 点击卡片弹出详情弹窗,包含大图、三语描述、营养面板、过敏原警告。
- 每日特餐区块置顶,已售完菜品显示半透明遮罩和“已售完”标签。
- 搜索栏和筛选胶囊(按过敏原、价格等)。
### 管理后台(/admin)
- 仪表盘:菜品总数、上架数量、类别数量、热门菜品排行、售完统计、浏览高峰时段图表。
- 菜品管理:列表、新增、编辑(含营养和过敏原子表单)、上架/发布切换。
- 类别管理:拖拽排序、编辑三语名称、图标、显示状态。
- 二维码生成:整体菜单二维码和每桌专属二维码,可下载PNG。
## 主要工作流程
1. 顾客扫描二维码进入菜单,选择语言。
2. 浏览类别和菜品,点击查看详情(营养、过敏原)。
3. 管理员登录后台,管理菜品、类别、查看分析。
4. 管理员生成并打印二维码。
## 业务规则
- 已售完菜品不删除,显示“已售完”遮罩。
- 菜品必须有图片才能发布。
- 价格显示为RM格式,页脚注明含SST。
- 辣度等级0-3,用辣椒图标表示。
- 每日特餐价格优先显示,原价加删除线。
- 语言偏好通过localStorage持久保存。
## 设计方向
- 手机优先(390px基准),白色背景,深海军蓝文字,金色强调。
- 类别导航为横向滚动胶囊按钮。
- 菜品卡片圆角、阴影,图片占上方55%。
- 详情弹窗:手机底部滑入,桌面居中对话框。
- 营养进度条用颜色区分,过敏原警告用琥珀色背景。
## 构建方法
1. 先搭建顾客端菜单页面,确保手机体验优秀。
2. 再开发管理后台。
3. 使用Next.js 14(App Router)、TypeScript、Tailwind CSS、Supabase(数据库+存储+认证)、Vercel部署。
4. 生成二维码使用qrcode.react。
5. 语言切换使用React Context。
6. 提供示例数据(至少3个类别、8道菜品、4道营养数据、3道过敏原)。
7. 提供README和部署说明。
## 构建顺序(请严格遵守)
请按以下顺序开发,让我尽早在屏幕上看到成果,不要长时间没有画面:
1. 先做界面:用接近真实的示例数据,把所有页面做出来(暂时不接数据库),让我能马上看到、能点击。做完先停下来,等我确认。
2. 再做功能:我确认界面后,才让按钮、表单和计算真正可用(继续用示例数据)。
3. 再接 Supabase:功能都正常后,才连接 Supabase 保存真实数据和登录(如需要)。
4. 最后上线:先确保在我电脑上运行正常,再把代码上传到 GitHub,经我同意后部署到 Vercel。
请保持简单——我是非技术背景的老板。有不清楚或需要决定的事,先问我,不要自己假设。