chore: init saasshop repo + sql migrations runner + gitee go

This commit is contained in:
萝卜
2026-03-10 11:31:02 +00:00
commit 50f15cdea8
210 changed files with 29534 additions and 0 deletions

230
docs/SITE_ADMIN_PLAN.md Normal file
View File

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