# 多角色餐饮点餐系统架构设计 v3 ## 一、手机端用户入口架构 (C 端) 系统根据用户进入的方式,将 App 划分为三种上下文模式 (Context Mode)。不同模式决定了用户的功能权限、UI 展示以及路由行为。 ```mermaid graph TD Entry{用户入口} Entry -->|打开APP/首页| Mode1[平台模式 Platform Mode] Entry -->|扫描店铺码/点击分享链接| Mode2[店铺模式 Shop Mode] Entry -->|扫描桌位码| Mode3[桌位模式 Table Mode] subgraph Mode1 [平台模式 (流量分发)] Home[首页 Index] -->|推荐| ShopList[商家列表] Home -->|推荐| DishList[菜品列表] ShopList -->|选择店铺| ShopMenu[店铺菜单] DishList -->|点击菜品| ShopMenu end subgraph Mode2 [店铺模式 (外卖/预约)] ShopQR[店铺码] -->|解析| ShopMenu Note2[仅限: 外卖 / 自提 / 预约] end subgraph Mode3 [桌位模式 (堂食点餐)] TableQR[桌位码] -->|解析| TableMenu[堂食菜单] Note3[仅限: 扫码下单 / 加菜] end ShopMenu -.->|扫桌码升级| TableMenu ``` ### 1.1 三种模式详解 #### 1. **平台模式 (Platform Mode)** - **场景**: 用户直接打开 APP,或访问域名根路径。 - **定位**: 流量分发、营销推广。 - **功能**: - 展示推荐商家、热门店铺。 - 展示推荐菜品(点击直接跳转对应店铺外卖页)。 - 全局搜索(搜店铺、搜菜品)。 - **状态**: `shopId` 为空,`tableCode` 为空。 - **路由**: `/index` #### 2. **店铺模式 (Shop Mode)** - **场景**: 扫描店铺推广码、点击店铺分享链接、从平台首页点击店铺进入。 - **定位**: 单店的外卖与预约服务。 - **限制**: - **锁定**: 用户被锁定在该店铺内,无法"切换桌号"(因为没桌号)。 - **排他**: 除非用户手动返回平台首页或扫描其他店铺码,否则一直在该店铺上下文中。 - **功能限制**: **不可堂食下单**(没有桌号信息)。只能选择 "外卖配送"、"到店自提" 或 "预约订座"。 - **状态**: `shopId` 有值,`tableCode` 为空。 - **路由**: `/menu?shopId={id}` #### 3. **桌位模式 (Table Mode)** - **场景**: 扫描餐桌二维码。 - **定位**: 店内堂食下单。 - **限制**: - **强锁定**: 绑定 `shopId` 和 `tableCode`。 - **禁止切换**: 无法切换店铺,无法切换桌号(除非扫描新二维码覆盖当前会话)。 - **功能**: 开启 "堂食下单" 功能。 - **状态**: `shopId` 有值,`tableCode` 有值。 - **路由**: `/menu?shopId={id}&tableCode={code}` --- ## 二、核心业务流程设计 ### 2.1 状态管理 (Store) 在 `user.ts` 或 `app.ts` 中维护全局上下文: ```typescript interface AppContext { mode: "platform" | "shop" | "table"; shopId?: string; // 当前锁定店铺 tableCode?: string; // 当前锁定桌位 shopInfo?: Shop; // 店铺详情缓存 } ``` ### 2.2 路由规则与守卫 | 路由 | 描述 | 守卫逻辑 | | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | `/index` | 平台首页 | 清除 currentShop/tableCode,进入 Platform Mode | | `/scan` | 扫码解析 | 解析参数 -> 判断模式 -> 写入 Store -> 跳转 | | `/menu` | 菜单页 | 必须有 `shopId` (Query 或 Store)。
无 `shopId` -> 重定向回 `/index`。
有 `tableCode` -> 显示堂食 UI。
无 `tableCode` -> 显示外卖/预约 UI。 | ### 2.3 扫码解析逻辑 (`/scan`) 1. **获取参数**: `shopId` (必填), `tableCode` (可选)。 2. **逻辑判断**: - **有 `tableCode`**: - 模式 = **Table Mode** - 调用 `initGuestSession(shopId, tableCode)` - 跳转 `/menu` (携带桌位信息) - **无 `tableCode`**: - 模式 = **Shop Mode** - 设置 `currentShopId = shopId` - 跳转 `/menu` (仅店铺信息) --- --- ## 四、UI/UX 差异化设计详解 ### 4.1 平台模式 (Platform Mode) - "发现与导流" **核心目标**: 帮助用户快速找到感兴趣的餐厅或美食。 **页面布局**: - **顶部栏**: - 📍 **位置定位**: 显示当前送餐地址/位置。 - 🔍 **全局搜索框**: 搜索店铺名、菜品名。 - **内容区**: - **Banner 轮播**: 平台级活动、节日促销。 - **金刚区 (Icons)**: 菜系分类 (日料、中餐、西餐...)、功能入口 (我的收藏、领券中心)。 - **推荐模块**: - "猜你喜欢" (基于历史) - "附近热推" (基于 LBS) - **店铺列表**: 垂直滚动流,展示店铺卡片 (Logo、评分、配送时间、起送价)。 - **底部导航**: `[首页] [订单] [我的]` ### 4.2 店铺模式 (Shop Mode) - "外卖与品牌" **核心目标**: 展示店铺品牌形象,提供便捷的外卖/自提服务。 **页面布局**: - **店铺头部 (Header)**: - **品牌重展示**: 大幅店招背景图、Logo、店铺名称。 - **服务信息**: 评分 ⭐4.8、配送时间 30min、公告跑马灯。 - **服务切换**: [外卖配送] / [到店自提] / [预约订座] Tab 切换。 - **菜单区**: - **公告栏**: 优惠券领取、满减活动提示。 - **布局**: 左侧分类栏 + 右侧商品流 (标准外卖布局)。 - **底部结算栏**: - 显示:购物车预览、预估配送费、起送价进度条。 - 按钮:`去结算` (跳转确认订单页)。 ### 4.3 桌位模式 (Table Mode) - "高效点餐" **核心目标**: 快速下单,减少服务员介入,明确就餐状态。 **页面布局**: - **顶部栏**: - **桌台信息**: 醒目展示 `[ A1 桌 ]`,旁边可有 `多人点餐` 状态提示。 - **人数设置**: 快捷调整就餐人数。 - **菜单区**: - **极简头部**: 压缩店铺信息,最大化菜单展示区域。 - **特色功能**: `呼叫服务员` (加水/催单) 悬浮球。 - **商品展示**: 突出 "推荐/热销",支持大图模式。 - **底部操作栏**: - 显示:当前已选金额、数量。 - 按钮:`选好了` -> `确认下单` (直接落单到厨房,区别于外卖的"去结算")。 - **特殊状态**: - 下单后:底部变为 "加菜模式",显示 "已下单金额" 和 "待下单金额"。 --- ## 五、多 Agent 并行开发计划 为提高开发效率,任务可拆分为三个独立的开发轨道 (Tracks),可由多个 Agent 并行执行: ### Track A: 平台前端开发 (Agent A) - **目标**: 完成 `/index` 平台首页及公共组件。 - **任务**: 1. 封装通用 UI 组件: `SearchBar`, `ShopCard`, `DishCard`. 2. 实现 `src/views/index/index.vue`: - 集成 Banner 轮播。 - 实现分类金刚区。 - 实现推荐店铺流 (Mock Data)。 ### Track B: 店铺与外卖流程 (Agent B) - **目标**: 完善 `/menu` 的外卖模式 (Shop Mode)。 - **任务**: 1. 封装 `` 组件: 展示店招、评分、配送信息。 2. 封装 `` 组件: 购物车预览、起送价逻辑、去结算。 3. 改造 `menu.vue`: 适配 `shopId`,集成 B 端组件。 ### Track C: 堂食点餐流程 (Agent C) - **目标**: 完善 `/menu` 的堂食模式 (Table Mode)。 - **任务**: 1. 封装 `` 组件: 桌号显示、人数切换、呼叫服务。 2. 封装 `` 组件: 堂食下单逻辑 (直接提交订单)。 3. 改造 `cart.ts`: 区分堂食购物车(需提交)与外卖购物车(本地存储)。 ### 集成阶段 (Integrator Agent) - **目标**: 路由整合与联调。 - **任务**: 1. 确认 `app.ts` 状态管理无误。 2. 验证 `scan/index.vue` 到各模式的跳转。 3. 全局样式统一与代码审查。 Admin[系统管理员 admin] end subgraph Company[公司层] Owner[老板 owner] end subgraph Shop[店铺层] Manager[店长 manager] Staff[员工 staff] end subgraph Customer[顾客层] Customer1[顾客 customer] Guest[访客 guest] end Admin -->|管理| Owner Owner -->|拥有多家| Shop Manager -->|管理| Staff Shop -->|服务| Customer1 Shop -->|服务| Guest ``` ### 4.1 角色权限矩阵 ``` 功能模块 admin owner manager staff customer ────────────────────────────────────────────────────────────────── [平台管理] 查看所有公司 ✓ ✗ ✗ ✗ ✗ 创建/编辑公司 ✓ ✗ ✗ ✗ ✗ [公司/多店铺管理] 查看公司下所有店铺 ✓ ✓ ✗ ✗ ✗ 多店铺汇总报表 ✓ ✓ ✗ ✗ ✗ [单店铺管理] 店铺仪表盘 ✓ ✓ ✓ ✗ ✗ 菜单管理 ✓ ✓ ✓ ✗ ✗ 员工管理 ✓ ✓ ✓ ✗ ✗ [日常运营] 桌位管理 ✓ ✓ ✓ ✓ ✗ 订单处理 ✓ ✓ ✓ ✓ ✗ 收银结账 ✓ ✓ ✓ ✓ ✗ ``` ```