# 站点后台最小落地方案（第一阶段）

## 目标
在当前已存在 **总台管理（/admin）** 与 **商家后台（/merchant-admin）** 的基础上，新增一层 **站点后台（/site-admin）**，让业务结构从“总台 + 商家”演进到更清晰的四级结构：

- 总台管理
- 站点后台
- 商家后台
- 买家侧前台 / 多端

第一阶段目标不是一次性做完整第三套后台，而是先把 **信息架构、路由骨架、权限边界、最小可见页面** 搭起来，避免后续继续把“站点”只当成总台里的一个列表概念。

---

## 当前判断

### 1. 现有 `Merchant` 可作为第一阶段“站点承接层”
当前系统中的 `Merchant` 已经关联：
- 管理员
- 用户
- 商品
- 订单
- 商品分类
- 导入历史

因此第一阶段无需立刻新增 `sites` 表或把所有 `merchant_id` 重构为 `site_id`。

### 2. 第一阶段采用“显示层先站点化，底层暂借 Merchant 承接”
建议策略：
- **对外显示 / 页面文案 / 信息架构**：使用“站点”口径
- **底层代码 / 数据库 / 外键字段**：暂时保留 `Merchant / merchant_id / merchants`

这样可以在不打散现有稳定基线的前提下，先把“站点后台”独立成一层真实后台。

---

## 推荐落地方式

### 新增独立后台前缀
建议新增：
- 登录页：`/site-admin/login`
- 后台首页：`/site-admin`

而不是继续把站点能力塞在 `/admin/merchants` 页面里硬扩。

### 原因
如果继续只放在 `/admin/merchants`：
- 它更像总台中的一个管理页面
- 难以形成独立后台边界
- 后续站点仪表盘、站点商品、站点订单、站点商家治理容易继续堆在总台下，结构会越来越混

新增 `/site-admin` 的收益：
- 总台 / 站点 / 商家 三层后台职责更清晰
- 权限边界更容易测试
- 路由与布局更稳定，后续扩页面更自然
- 可先做骨架，后续逐页填能力

---

## 第一阶段职责边界

### 总台管理（/admin）
面向平台运营方，负责：
- 平台级配置
- 多站点治理
- 全站点级巡检与统计
- 站点开通 / 状态维护
- 渠道与系统能力

### 站点后台（/site-admin）
面向站点运营方，负责：
- 当前站点仪表盘
- 当前站点范围的商品巡检
- 当前站点范围的订单监控
- 当前站点范围的商家管理
- 站点级运营入口与治理入口

### 商家后台（/merchant-admin）
面向商家经营方，负责：
- 当前商家商品经营
- 当前商家订单处理
- 当前商家用户查看
- 当前商家导入导出与日常运营

---

## 第一阶段建议页面

### 必做骨架页
1. `/site-admin/login` - 站点后台登录页
2. `/site-admin` - 站点仪表盘
3. `/site-admin/merchants` - 站点商家管理（占位 / 首版列表）
4. `/site-admin/products` - 站点商品巡检（占位 / 首版列表）
5. `/site-admin/orders` - 站点订单监控（占位 / 首版列表）

### 可后置
- `/site-admin/users`
- `/site-admin/product-categories`
- `/site-admin/settings/*`
- `/site-admin/products/import-histories`

第一阶段重点是把后台层级立起来，不要求所有运营能力一次补齐。

---

## 第一阶段技术实现建议

### 1. 路由
建议新增路由分组：
- `Route::prefix('site-admin')`
- 登录 / 退出登录
- `Route::middleware('site.admin.auth')`

### 2. 控制器命名空间
建议新增：
- `App\Http\Controllers\SiteAdmin\AuthController`
- `App\Http\Controllers\SiteAdmin\DashboardController`
- `App\Http\Controllers\SiteAdmin\MerchantController`
- `App\Http\Controllers\SiteAdmin\ProductController`
- `App\Http\Controllers\SiteAdmin\OrderController`

第一阶段可复用总台控制器中的部分查询逻辑，但不要直接共用视图布局。

### 3. 视图目录
建议新增：
- `resources/views/site_admin/layouts/app.blade.php`
- `resources/views/site_admin/auth/login.blade.php`
- `resources/views/site_admin/dashboard.blade.php`
- `resources/views/site_admin/merchants/index.blade.php`
- `resources/views/site_admin/products/index.blade.php`
- `resources/views/site_admin/orders/index.blade.php`

### 4. 中间件与上下文
建议新增：
- `App\Http\Middleware\SiteAdminAuth`
- `App\Http\Controllers\Concerns\ResolvesSiteContext`

第一阶段建议：
- session 中新增 `admin_scope = site`
- session 中预留 `admin_site_id`
- 在底层尚未拆 `sites` 表之前，可暂时把 `admin_site_id` 映射到当前 `merchant_id` 或映射到“当前选中站点”上下文

---

## 第一阶段数据策略

### 结论
**不立刻改表，不立刻拆实体。**

当前继续沿用：
- `merchants`
- `merchant_id`
- `Merchant` 模型

同时在设计上约定：
- 第一阶段 `Merchant` = 站点承接层
- 第二阶段如需独立“站点 -> 商家”两层实体关系，再单开数据结构重构方案

这样做的优点：
- 不打断现有商品 / 订单 / 分类 / 导入历史闭环
- 不破坏当前测试基线
- 可以先把三层后台信息架构跑起来

---

## 第一阶段账号与权限建议

### 建议新增角色语义
- 总台管理员：平台级
- 站点管理员：站点级
- 商家管理员：商家级

### 第一阶段最小实现建议
现阶段先不做完整 RBAC，先做边界：
- 总台管理员不能登录站点后台（除非显式赋权）
- 商家管理员不能登录站点后台
- 站点管理员不能进入总台管理
- 站点管理员进入站点后台后，所有查询都受当前站点作用域限制

---

## 第一阶段测试建议

新增 Feature 测试：
1. `SiteAdminAccessTest.php`
   - 站点后台登录页可访问
   - 站点管理员可登录 `/site-admin`
2. `SiteAdminProtectedPagesTest.php`
   - 未登录访问 `/site-admin/*` 跳转 `/site-admin/login`
   - 错作用域账号访问返回 403
3. `SiteAdminBusinessPagesTest.php`
   - 仪表盘 / 站点商家 / 站点商品 / 站点订单页可访问
   - 页面关键标题与入口存在

---

## 推荐实施顺序

### 第 1 步
先搭骨架：
- route
- controller
- middleware
- layout
- login
- dashboard

### 第 2 步
补最小站点业务页：
- merchants
- products
- orders

### 第 3 步
补访问测试与权限边界测试

### 第 4 步
再决定是否把总台 `/admin/merchants` 页面逐步改造成“站点入口页 / 站点开通页”

---

## 当前推荐结论

**站点后台应正式提上，且推荐以 `/site-admin` 作为独立后台层新增；第一阶段先复用 `Merchant` 作为站点承接层，不急着动数据库实体拆分。**

这条路线最符合当前项目节奏：
- 先打底
- 先把层级立住
- 先保证稳定
- 再逐步把站点能力做实
