Platform Administration · Multi-Tenant · Feature Flags · Monitoring | 更新时间: 2026-02-08
platform/tenants/page.tsx (租户列表, 800行),
platform/tenants/[id]/page.tsx (租户详情),
platform/tenants/[id]/backups/page.tsx (备份管理),
platform/analytics/page.tsx (平台分析),
platform/feature-flags/page.tsx (功能开关),
monitoring/dashboard/page.tsx (系统监控),
admin/terminals/page.tsx (终端设备管理),
admin/checkin/page.tsx (签到主页 → 重定向),
admin/checkin/config/page.tsx (签到配置),
admin/checkin/queue/page.tsx (签到队列),
admin/checkin/stats/page.tsx (签到统计),
admin/dashboard/page.tsx (管理后台仪表板),
invoices/[id]/page.tsx (发票详情)
useTenants.ts (租户 CRUD + impersonation),
useFeatureFlags.ts (功能开关 CRUD)
api/platform/tenants.js (10 endpoints, 723行),
api/platform/backups.js (6 endpoints),
api/platform/analytics.js (4 endpoints),
api/platform/feature-flags.js (5 endpoints, 318行),
api/platform/index.js (入口 + settings),
api/tenant-activate.js (公共激活),
api/checkin-config.js,
monitoring/index.js (MetricsCollector + HealthMonitor + AlertManager),
services/tenant/tenant-service.js,
services/tenant/backup-service.js,
services/audit/tenant-audit.js
flowchart TD
PA["platform_superadmin"] --> PM["Platform Management"]
PM --> TM["Tenant CRUD"]
PM --> FF["Feature Flags"]
PM --> AN["Platform Analytics"]
PM --> MO["System Monitoring"]
TM --> T1["Create Tenant → Schema"]
TM --> T2["Suspend / Restore"]
TM --> T3["Schedule Deletion (30d)"]
TM --> T4["Switch Context (Impersonate)"]
TM --> T5["Backup / Restore"]
FF --> FF1["Global Enable/Disable"]
FF --> FF2["Target Tenants (array)"]
FF --> FF3["Rollout % (0-100)"]
MO --> MO1["CPU / Memory / Uptime"]
MO --> MO2["HTTP Performance"]
MO --> MO3["DB Performance"]
MO --> MO4["Circuit Breakers"]
MO --> MO5["Alerts (SES)"]
style PA fill:#9c27b0,stroke:#7b1fa2,color:#fff
style PM fill:#2196F3,stroke:#1565C0,color:#fff
stateDiagram-v2
[*] --> pending : POST /tenants (创建)
pending --> active : POST /activate (Token 激活, 7天有效)
active --> suspended : POST /suspend (带原因)
suspended --> active : POST /restore
active --> pending_deletion : POST /schedule-deletion (30天宽限)
suspended --> pending_deletion : POST /schedule-deletion
pending_deletion --> active : POST /restore (撤销删除)
pending_deletion --> deleted : DELETE /delete (确认码 DELETE-shortId)
deleted --> [*]
| 属性 | trial | standard | professional | enterprise |
|---|---|---|---|---|
| 存储配额 | 5 GB | 10 GB | 50 GB | 100 GB |
| 门店数限制 | 1 | 3 | 10 | 无限 |
| 备份策略 | 手动 | 手动+定时 | 手动+定时 | 手动+定时+预删除 |
authenticateToken())
requirePlatformAdmin())
platform_superadmin 角色可访问。
GET /api/platform/health 为公共健康检查端点。
| CUJ | 优先级 | 描述 | 触发点 | 业务价值 | E2E 状态 |
|---|---|---|---|---|---|
| N1 | P0 | 租户管理全生命周期 | Platform → Tenants | SaaS 核心 — 租户入驻/退出 | 部分覆盖 |
| N2 | P1 | 租户上下文切换 | 租户列表 → Switch | 运维支持 — 代客排查问题 | 缺失 |
| N3 | P1 | 租户备份与恢复 | 租户详情 → Backups | 数据安全 — 灾难恢复 | 缺失 |
| N4 | P1 | 功能开关管理 | Platform → Feature Flags | 灰度发布 — 渐进式推出新功能 | 缺失 |
| N5 | P2 | 平台分析仪表板 | Platform → Analytics | 全局洞察 — 租户/存储/健康概览 | 缺失 |
| N6 | P1 | 系统监控与告警 | Monitoring → Dashboard | 可靠性 — 实时系统健康状态 | 缺失 |
| N7 | P1 | 签到系统配置与管理 | Admin → Checkin | Kiosk/终端运营配置 | 缺失 |
P0 SaaS 核心 — 租户全生命周期管理
platform/tenants/page.tsx (800行),
platform/tenants/[id]/page.tsx,
api/platform/tenants.js (10 endpoints),
api/tenant-activate.js,
services/tenant/tenant-service.js
/platform/tenants 点击"新建租户"POST /api/platform/tenants 创建tenant_{short_id}GET /api/tenants/activate?token=xxxPOST /api/tenants/activatePOST /api/platform/tenants/:id/suspendPOST /restore 撤销DELETE-{shortId}P1 运维支持 — 以租户身份登录排查问题
POST /api/platform/tenants/:id/switch,
useTenants.switchToTenant(),
services/audit/tenant-audit.js
POST /api/platform/tenants/:id/switch 生成临时 JWT (1 小时有效)P1 数据安全 — 手动/定时备份,灾难恢复
platform/tenants/[id]/backups/page.tsx,
api/platform/backups.js (6 endpoints),
services/tenant/backup-service.js
| 类型 | 触发方式 | 说明 |
|---|---|---|
manual | 管理员手动 | 随时可创建,带描述 |
scheduled | 定时任务 | 按策略自动执行 |
pre_deletion | 计划删除时 | 删除前自动备份 |
POST /api/platform/tenants/:id/backupsPOST /api/platform/tenants/:id/backups/:backupId/restoreP1 灰度发布 — 渐进式推出新功能给特定租户
platform/feature-flags/page.tsx,
api/platform/feature-flags.js (5 endpoints),
useFeatureFlags.ts
| 字段 | 类型 | 说明 |
|---|---|---|
| flag_key | varchar(100) | 代码引用标识 (unique) |
| name | string | 显示名称 |
| enabled | boolean | 全局开关 |
| target_tenants | text[] | 指定租户 short_id 列表 |
| rollout_percent | 0-100 | 百分比灰度 |
/platform/feature-flagsGET /api/platform/feature-flags/check/loyalty_v2?tenantId=spa001P2 全局洞察 — 租户状态、存储、健康概览
platform/analytics/page.tsx,
GET /api/platform/analytics/* (4 endpoints)
/platform/analyticsP1 可靠性 — 实时系统指标、组件健康、告警管理
monitoring/dashboard/page.tsx,
monitoring/index.js,
GET /api/monitoring/* (metrics/health/performance/alerts/components)
| 组件 | 指标 |
|---|---|
| MetricsCollector | CPU、内存、运行时间 (60s 采集间隔) |
| HealthMonitor | 数据库连接、API 状态 (30s 检查间隔) |
| PerformanceTracker | HTTP 请求数/平均时长/慢请求/状态码分布 |
| PerformanceTracker | DB 查询数/平均时长/慢查询 (>100ms) |
| AlertManager | 告警列表 + SES 邮件渠道 |
| CircuitBreakerRegistry | /api/monitoring/components — 所有熔断器状态 |
/monitoring/dashboardP1 Kiosk 运营 — 签到配置、队列管理、终端管理
admin/checkin/config/page.tsx,
admin/checkin/queue/page.tsx,
admin/checkin/stats/page.tsx,
admin/terminals/page.tsx,
api/checkin-config.js
| 分组 | 配置 | 说明 |
|---|---|---|
| 欢迎消息 | welcome_message_en / _zh | 双语欢迎语 |
| 功能开关 | walk_in_enabled | 允许 Walk-in |
| qr_enabled | QR 扫码签到 | |
| phone_enabled | 手机号签到 | |
| auto_assign_enabled | 自动分配技师 | |
| sound_enabled | 签到提示音 | |
| 促销 | promotional_messages | 签到屏幕显示的促销信息 |
/admin/checkin/config/admin/checkin/queue/admin/terminals| 关联模块 | 关联点 | 说明 |
|---|---|---|
| CUJ-A (Auth) | platform_superadmin 角色 | 仅此角色可访问 /platform/* 端点 |
| CUJ-L (Stores) | 门店配额限制 | checkEntityLimit 根据租户套餐限制门店/员工/服务数量 |
| CUJ-G (Booking) | 签到系统 + 终端 | admin/checkin 配置影响 Kiosk/Terminal 签到行为 |
| CUJ-J (Settings) | 平台级设置 | /api/platform/settings 管理全局配置 |
| # | 规则 | 实现位置 |
|---|---|---|
| 1 | Schema 隔离: 每个租户独立 PostgreSQL Schema (tenant_{short_id}),数据完全隔离 |
tenant-service.createTenant() |
| 2 | 激活 Token: 7 天有效,验证限流 10 次/小时,激活限流 5 次/小时 | api/tenant-activate.js |
| 3 | 删除确认码: 格式 DELETE-{shortId},防止误操作 |
DELETE /api/platform/tenants/:id/delete |
| 4 | Impersonation 审计: 每次上下文切换记录审计日志 (SWITCH_TENANT 事件),临时 JWT 1 小时有效 | tenant-audit.js |
| 5 | 功能开关优先级: enabled=false → 全部关闭;target_tenants 非空 → 仅指定租户;否则按 rollout_percent 灰度 | feature-flags.js |
| 6 | 监控配置: 指标采集 60s,健康检查 30s,最大指标 1000 条,最大告警 500 条,冷却期 300s | monitoring/index.js |
| 7 | 平台数据在 public schema: tenants、feature_flags、platform_settings 等表存储在 public schema,非租户 schema | platformDb 数据访问层 |