# 站点后台最小落地方案(第一阶段) ## 目标 在当前已存在 **总台管理(/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` 作为站点承接层,不急着动数据库实体拆分。** 这条路线最符合当前项目节奏: - 先打底 - 先把层级立住 - 先保证稳定 - 再逐步把站点能力做实