feat(types): 添加express.d.ts类型引用 style: 格式化express.d.ts中的接口定义 refactor: 移除未使用的AntFC类型导入 chore: 删除自动生成的.umi-production文件 feat: 添加店铺管理相关表和初始化脚本 docs: 更新安全规则和交互指南文档 refactor: 统一使用FC类型替代React.FC perf: 优化图表组件导入方式 style: 添加.prettierrc配置文件 refactor: 调整组件导入顺序和结构 feat: 添加平台库存管理路由 fix: 修复订单同步时的库存检查逻辑 docs: 更新RBAC设计和租户管理文档 refactor: 优化部门控制器代码
29 KiB
29 KiB
后台管理方案
创建日期: 2026-03-20
状态: 设计中
优先级: 最高
1. 后台管理架构
1.1 管理层级
┌─────────────────────────────────────────────────────────────────────────────┐
│ 后台管理架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 超级管理员层 (Super Admin) │ │
│ │ - 平台全局配置 │ │
│ │ - 租户管理 │ │
│ │ - 系统监控 │ │
│ │ - 资源调配 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 租户管理层 (Tenant Admin) │ │
│ │ - 租户级配置 │ │
│ │ - 用户管理 │ │
│ │ - 权限分配 │ │
│ │ - 配额管理 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 商户管理层 (Merchant Admin) │ │
│ │ - 商户配置 │ │
│ │ - 店铺管理 │ │
│ │ - 业务操作 │ │
│ │ - 数据查看 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 操作员层 (Operator) │ │
│ │ - 日常操作 │ │
│ │ - 数据录入 │ │
│ │ - 任务执行 │ │
│ │ - 报表查看 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
1.2 功能模块
后台管理系统
├── 用户与权限管理
│ ├── 用户管理
│ ├── 角色管理
│ ├── 权限管理
│ └── 登录日志
├── 租户管理
│ ├── 租户列表
│ ├── 租户配置
│ ├── 配额管理
│ └── 租户隔离
├── 商户管理
│ ├── 商户入驻
│ ├── 商户审核
│ ├── 商户店铺
│ └── 商户结算
├── 审批中心
│ ├── 待审批列表
│ ├── 审批历史
│ ├── 审批配置
│ └── 审批流程
├── 监控中心
│ ├── 系统监控
│ ├── 业务监控
│ ├── Agent监控
│ └── 告警管理
├── 审计中心
│ ├── 操作日志
│ ├── 系统日志
│ ├── 审计追溯
│ └── 合规报告
├── 配置中心
│ ├── 系统配置
│ ├── 业务配置
│ ├── 平台配置
│ └── Agent配置
└── 报表中心
├── 业务报表
├── 财务报表
├── 运营报表
└── 自定义报表
2. 用户与权限管理
2.1 用户管理
export interface User {
id: string;
tenantId: string;
username: string;
email: string;
phone?: string;
passwordHash: string;
status: 'ACTIVE' | 'INACTIVE' | 'LOCKED' | 'PENDING';
roles: string[];
permissions: string[];
parentId?: string;
lastLoginAt?: number;
createdAt: number;
updatedAt: number;
}
export interface UserQueryParams {
tenantId: string;
keyword?: string;
status?: string;
role?: string;
page: number;
pageSize: number;
}
2.2 角色管理
export const ROLES = {
// 超级管理员
SUPER_ADMIN: {
name: '超级管理员',
permissions: ['*'],
description: '平台最高权限,可管理所有租户和系统配置',
},
// 租户管理员
TENANT_ADMIN: {
name: '租户管理员',
permissions: [
'tenant:*',
'user:*',
'role:*',
'shop:*',
'product:*',
'order:*',
'finance:read',
'report:*',
],
description: '租户级管理员,可管理租户内所有资源',
},
// 运营主管
MANAGER: {
name: '运营主管',
permissions: [
'shop:*',
'product:*',
'order:*',
'marketing:*',
'inventory:*',
'report:read',
],
description: '运营主管,可管理店铺和业务操作',
},
// 运营专员
OPERATOR: {
name: '运营专员',
permissions: [
'product:read',
'product:write',
'order:read',
'order:write',
'inventory:read',
],
description: '运营专员,可执行日常业务操作',
},
// 财务主管
FINANCE: {
name: '财务主管',
permissions: [
'finance:*',
'order:read',
'report:*',
'settlement:*',
],
description: '财务主管,可管理财务和结算',
},
// 采购专家
SOURCING: {
name: '采购专家',
permissions: [
'product:read',
'product:write',
'inventory:*',
'supplier:*',
],
description: '采购专家,可管理采购和库存',
},
// 物流专家
LOGISTICS: {
name: '物流专家',
permissions: [
'order:read',
'order:write',
'logistics:*',
'inventory:read',
],
description: '物流专家,可管理物流和发货',
},
// 数据分析师
ANALYST: {
name: '数据分析师',
permissions: [
'*:read',
'report:*',
],
description: '数据分析师,只读权限,可查看所有报表',
},
// 商户管理员
MERCHANT_ADMIN: {
name: '商户管理员',
permissions: [
'merchant:*',
'shop:*',
'product:*',
'order:*',
],
description: '商户管理员,可管理自己的商户和店铺',
},
};
2.3 权限管理
export interface Permission {
id: string;
name: string;
resource: string;
action: 'CREATE' | 'READ' | 'UPDATE' | 'DELETE' | '*' | 'APPROVE';
description: string;
}
export const PERMISSIONS = {
// 用户权限
'user:create': { resource: 'user', action: 'CREATE', description: '创建用户' },
'user:read': { resource: 'user', action: 'READ', description: '查看用户' },
'user:update': { resource: 'user', action: 'UPDATE', description: '更新用户' },
'user:delete': { resource: 'user', action: 'DELETE', description: '删除用户' },
// 商品权限
'product:create': { resource: 'product', action: 'CREATE', description: '创建商品' },
'product:read': { resource: 'product', action: 'READ', description: '查看商品' },
'product:update': { resource: 'product', action: 'UPDATE', description: '更新商品' },
'product:delete': { resource: 'product', action: 'DELETE', description: '删除商品' },
'product:approve': { resource: 'product', action: 'APPROVE', description: '审批商品' },
// 订单权限
'order:create': { resource: 'order', action: 'CREATE', description: '创建订单' },
'order:read': { resource: 'order', action: 'READ', description: '查看订单' },
'order:update': { resource: 'order', action: 'UPDATE', description: '更新订单' },
'order:delete': { resource: 'order', action: 'DELETE', description: '删除订单' },
'order:approve': { resource: 'order', action: 'APPROVE', description: '审批订单' },
// 财务权限
'finance:read': { resource: 'finance', action: 'READ', description: '查看财务' },
'finance:update': { resource: 'finance', action: 'UPDATE', description: '更新财务' },
'finance:approve': { resource: 'finance', action: 'APPROVE', description: '审批财务' },
// ... 更多权限定义
};
2.4 RBAC引擎
export class RBACEngine {
/**
* 检查用户权限
*/
async checkPermission(
userId: string,
resource: string,
action: string
): Promise<boolean> {
// 1. 获取用户角色
const user = await this.getUser(userId);
// 2. 获取角色权限
const permissions = await this.getRolePermissions(user.roles);
// 3. 检查权限
return this.hasPermission(permissions, resource, action);
}
/**
* 检查权限匹配
*/
private hasPermission(
permissions: string[],
resource: string,
action: string
): boolean {
// 检查通配符权限
if (permissions.includes('*')) return true;
// 检查资源通配符
if (permissions.includes(`${resource}:*`)) return true;
// 检查具体权限
if (permissions.includes(`${resource}:${action}`)) return true;
// 检查动作通配符
if (permissions.includes(`*:${action}`)) return true;
return false;
}
}
3. 租户管理
3.1 租户生命周期管理
- 租户创建:支持用户升级时创建正式租户,支持SAAS、ENTERPRISE、TRIAL类型
- 租户信息管理:租户名称、logo、联系方式等信息的设置
- 租户状态管理:激活、暂停、删除等状态控制
- 租户数据备份:定期备份租户数据
3.2 订阅与计费
- 套餐管理:不同租户套餐的配置和管理,包含免费版、基础版、专业版、企业版
- 计费系统集成:对接支付网关,实现自动计费
- 账单管理:租户账单查看和管理
- 订阅状态提醒:到期提醒、自动续费等
3.3 多租户隔离
- 数据库隔离:确保不同租户数据严格隔离,所有业务表包含tenant_id字段
- 缓存隔离:Redis缓存的租户隔离,使用generateTenantKey方法
- 日志隔离:租户操作日志的独立存储
- API隔离:API调用的租户身份验证
3.4 租户模型
export interface Tenant {
id: string;
name: string;
code: string;
status: 'ACTIVE' | 'INACTIVE' | 'SUSPENDED' | 'TRIAL';
plan: 'FREE' | 'BASIC' | 'PRO' | 'ENTERPRISE';
parentId?: string;
// 配额
quota: {
maxUsers: number;
maxShops: number;
maxProducts: number;
maxOrders: number;
storageGB: number;
apiCallsPerDay: number;
};
// 使用量
usage: {
users: number;
shops: number;
products: number;
orders: number;
storageGB: number;
apiCallsToday: number;
};
// 配置
config: {
features: string[];
integrations: string[];
customDomain?: string;
};
createdAt: number;
updatedAt: number;
expiresAt?: number;
}
3.5 租户隔离实现
export class DataIsolationService {
/**
* 构建隔离查询
*/
buildIsolationQuery(
userId: string,
baseQuery: any
): any {
// 1. 获取用户层级
const hierarchy = this.getUserHierarchy(userId);
// 2. 构建过滤条件
const filter = {
tenant_id: hierarchy.tenantId,
};
// 3. 如果不是管理员,添加店铺过滤
if (!hierarchy.isAdmin) {
filter.shop_id = { $in: hierarchy.shopIds };
}
// 4. 应用过滤
return baseQuery.where(filter);
}
/**
* 验证数据访问权限
*/
async validateAccess(
userId: string,
resourceType: string,
resourceId: string
): Promise<boolean> {
// 1. 获取资源所属租户
const resource = await this.getResource(resourceType, resourceId);
// 2. 获取用户层级
const hierarchy = this.getUserHierarchy(userId);
// 3. 验证租户匹配
if (resource.tenant_id !== hierarchy.tenantId) {
return false;
}
// 4. 验证店铺权限
if (!hierarchy.isAdmin && !hierarchy.shopIds.includes(resource.shop_id)) {
return false;
}
return true;
}
}
3.6 配额管理
export class QuotaGovernanceService {
/**
* 检查配额
*/
async checkQuota(
tenantId: string,
resourceType: string,
amount: number = 1
): Promise<{ allowed: boolean; reason?: string }> {
// 1. 获取租户配额
const tenant = await this.getTenant(tenantId);
// 2. 获取当前使用量
const usage = await this.getUsage(tenantId, resourceType);
// 3. 检查是否超限
const quota = tenant.quota[resourceType];
if (usage + amount > quota) {
return {
allowed: false,
reason: `Quota exceeded: ${resourceType} (${usage}/${quota})`,
};
}
return { allowed: true };
}
/**
* 消耗配额
*/
async consumeQuota(
tenantId: string,
resourceType: string,
amount: number = 1
): Promise<void> {
// 1. 检查配额
const check = await this.checkQuota(tenantId, resourceType, amount);
if (!check.allowed) {
throw new Error(check.reason);
}
// 2. 更新使用量
await this.incrementUsage(tenantId, resourceType, amount);
}
}
4. 审批中心
4.1 审批流程
export interface ApprovalFlow {
id: string;
name: string;
type: 'PRICE_CHANGE' | 'REFUND' | 'ORDER' | 'CONTRACT' | 'CUSTOM';
steps: ApprovalStep[];
autoApprove?: {
conditions: ApprovalCondition[];
};
}
export interface ApprovalStep {
order: number;
approverType: 'ROLE' | 'USER' | 'MANAGER';
approverId: string;
timeout: number;
autoAction?: 'APPROVE' | 'REJECT';
}
export interface ApprovalRequest {
id: string;
flowId: string;
type: string;
requesterId: string;
tenantId: string;
data: any;
status: 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED';
currentStep: number;
history: ApprovalHistory[];
createdAt: number;
updatedAt: number;
}
4.2 审批服务
export class ApprovalService {
/**
* 创建审批请求
*/
async createRequest(params: {
type: string;
requesterId: string;
tenantId: string;
data: any;
}): Promise<ApprovalRequest> {
// 1. 获取审批流程
const flow = await this.getApprovalFlow(params.type);
// 2. 检查是否可以自动审批
if (flow.autoApprove) {
const autoApproved = this.checkAutoApprove(flow, params.data);
if (autoApproved) {
return this.autoApprove(params);
}
}
// 3. 创建审批请求
const request = await this.createApprovalRequest({
flowId: flow.id,
...params,
});
// 4. 通知审批人
await this.notifyApprovers(request);
return request;
}
/**
* 处理审批
*/
async processApproval(params: {
requestId: string;
approverId: string;
action: 'APPROVE' | 'REJECT';
comment?: string;
}): Promise<ApprovalRequest> {
// 1. 验证审批人
await this.validateApprover(params.requestId, params.approverId);
// 2. 记录审批历史
await this.recordApproval(params);
// 3. 更新状态
const request = await this.updateRequest(params);
// 4. 如果通过,执行下一步
if (params.action === 'APPROVE' && request.currentStep < request.flow.steps.length) {
await this.notifyNextApprover(request);
}
// 5. 如果全部通过,执行业务逻辑
if (params.action === 'APPROVE' && request.currentStep >= request.flow.steps.length) {
await this.executeApprovedAction(request);
}
return request;
}
}
5. 监控中心
5.1 系统监控
export interface SystemMetrics {
// 服务状态
services: {
name: string;
status: 'UP' | 'DOWN' | 'DEGRADED';
latency: number;
lastCheck: number;
}[];
// 资源使用
resources: {
cpu: number;
memory: number;
disk: number;
network: { in: number; out: number };
};
// 数据库
database: {
connections: number;
queries: number;
slowQueries: number;
latency: number;
};
// 缓存
cache: {
hitRate: number;
memory: number;
keys: number;
};
// 队列
queue: {
pending: number;
processing: number;
failed: number;
};
}
5.2 业务监控
export interface BusinessMetrics {
// 订单指标
orders: {
total: number;
pending: number;
completed: number;
cancelled: number;
averageValue: number;
};
// 商品指标
products: {
total: number;
active: number;
lowStock: number;
outOfStock: number;
};
// 财务指标
finance: {
revenue: number;
profit: number;
refundRate: number;
averageMargin: number;
};
// 客户指标
customers: {
total: number;
active: number;
new: number;
retentionRate: number;
};
}
5.3 Agent监控
export interface AgentMetrics {
// Agent状态
agents: {
id: string;
type: string;
status: 'ONLINE' | 'OFFLINE' | 'BUSY';
lastHeartbeat: number;
tasksCompleted: number;
tasksFailed: number;
}[];
// 任务统计
tasks: {
pending: number;
running: number;
completed: number;
failed: number;
averageDuration: number;
};
// 平台统计
platforms: {
name: string;
tasksCompleted: number;
successRate: number;
averageLatency: number;
}[];
}
5.4 告警管理
export interface AlertRule {
id: string;
name: string;
metric: string;
condition: {
operator: '>' | '<' | '==' | '!=' | '>=' | '<=';
threshold: number;
duration: number;
};
severity: 'INFO' | 'WARNING' | 'ERROR' | 'CRITICAL';
channels: ('EMAIL' | 'SMS' | 'WEBHOOK' | 'DASHBOARD')[];
enabled: boolean;
}
export class AlertService {
/**
* 检查告警
*/
async checkAlerts(): Promise<void> {
const rules = await this.getActiveAlertRules();
for (const rule of rules) {
const metric = await this.getMetric(rule.metric);
if (this.shouldAlert(rule, metric)) {
await this.triggerAlert(rule, metric);
}
}
}
/**
* 触发告警
*/
private async triggerAlert(rule: AlertRule, metric: number): Promise<void> {
// 1. 创建告警记录
const alert = await this.createAlert(rule, metric);
// 2. 发送通知
for (const channel of rule.channels) {
await this.sendNotification(channel, alert);
}
// 3. 尝试自动恢复
if (rule.autoRecover) {
await this.attemptRecovery(rule);
}
}
}
6. 审计中心
6.1 操作日志
export interface OperationLog {
id: string;
tenantId: string;
userId: string;
username: string;
// 操作信息
action: string;
resource: string;
resourceId: string;
// 变更详情
before?: any;
after?: any;
changes?: string[];
// 上下文
ip: string;
userAgent: string;
traceId: string;
timestamp: number;
}
export class AuditService {
/**
* 记录操作日志
*/
async log(params: {
userId: string;
action: string;
resource: string;
resourceId: string;
before?: any;
after?: any;
ip: string;
userAgent: string;
traceId: string;
}): Promise<void> {
const log: OperationLog = {
id: generateId(),
tenantId: params.userId.split('-')[0],
...params,
timestamp: Date.now(),
};
await this.saveLog(log);
}
/**
* 查询操作日志
*/
async query(params: {
tenantId: string;
userId?: string;
action?: string;
resource?: string;
startTime?: number;
endTime?: number;
page: number;
pageSize: number;
}): Promise<{ logs: OperationLog[]; total: number }> {
// 构建查询
let query = db('cf_operation_logs').where('tenant_id', params.tenantId);
if (params.userId) query = query.where('user_id', params.userId);
if (params.action) query = query.where('action', params.action);
if (params.resource) query = query.where('resource', params.resource);
if (params.startTime) query = query.where('timestamp', '>=', params.startTime);
if (params.endTime) query = query.where('timestamp', '<=', params.endTime);
// 分页
const total = await query.clone().count();
const logs = await query
.orderBy('timestamp', 'desc')
.offset((params.page - 1) * params.pageSize)
.limit(params.pageSize);
return { logs, total };
}
}
6.2 审计追溯
export class AuditTraceService {
/**
* 追溯操作链路
*/
async trace(traceId: string): Promise<OperationLog[]> {
return db('cf_operation_logs')
.where('trace_id', traceId)
.orderBy('timestamp', 'asc');
}
/**
* 追溯资源变更历史
*/
async traceResource(resource: string, resourceId: string): Promise<OperationLog[]> {
return db('cf_operation_logs')
.where({ resource, resource_id: resourceId })
.orderBy('timestamp', 'desc');
}
/**
* 追溯用户操作历史
*/
async traceUser(userId: string, limit: number = 100): Promise<OperationLog[]> {
return db('cf_operation_logs')
.where('user_id', userId)
.orderBy('timestamp', 'desc')
.limit(limit);
}
}
7. 配置中心
7.1 系统配置
export interface SystemConfig {
// 基础配置
siteName: string;
siteUrl: string;
adminEmail: string;
// 安全配置
passwordPolicy: {
minLength: number;
requireUppercase: boolean;
requireLowercase: boolean;
requireNumber: boolean;
requireSpecialChar: boolean;
};
sessionTimeout: number;
maxLoginAttempts: number;
// 功能开关
features: {
autoPricing: boolean;
autoListing: boolean;
aiAssistant: boolean;
multiTenant: boolean;
};
// 通知配置
notifications: {
email: { enabled: boolean; provider: string };
sms: { enabled: boolean; provider: string };
webhook: { enabled: boolean };
};
}
7.2 业务配置
export interface BusinessConfig {
// 利润红线
profitThresholds: {
b2b: number; // B2B最低利润率 (默认15%)
b2c: number; // B2C最低利润率 (默认20%)
};
// 审批配置
approval: {
priceChangeThreshold: number; // 价格变动审批阈值
refundThreshold: number; // 退款审批阈值
orderThreshold: number; // 订单审批阈值
};
// 库存配置
inventory: {
safetyStockDays: number; // 安全库存天数
reorderLeadTime: number; // 补货提前期
maxStockDays: number; // 最大库存天数
};
// 物流配置
logistics: {
defaultCarrier: string;
insuranceThreshold: number; // 保价阈值
signatureRequired: boolean; // 是否需要签收
};
}
7.3 Agent配置
export interface AgentConfig {
// 全局配置
global: {
hubUrl: string;
heartbeatInterval: number;
taskPollInterval: number;
maxConcurrentTasks: number;
};
// 平台配置
platforms: {
[platform: string]: {
enabled: boolean;
rateLimit: number;
timeout: number;
retryAttempts: number;
};
};
// 反检测配置
antiDetection: {
fingerprintRotation: boolean;
proxyRotation: boolean;
behaviorSimulation: boolean;
};
}
8. 报表中心
8.1 业务报表
export interface BusinessReport {
type: 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'CUSTOM';
metrics: {
orders: OrderMetrics;
products: ProductMetrics;
finance: FinanceMetrics;
customers: CustomerMetrics;
};
trends: {
period: string;
value: number;
change: number;
}[];
comparisons: {
dimension: string;
current: number;
previous: number;
change: number;
}[];
}
8.2 财务报表
export interface FinanceReport {
type: 'REVENUE' | 'PROFIT' | 'SETTLEMENT' | 'TAX';
period: { start: number; end: number };
summary: {
total: number;
breakdown: Record<string, number>;
};
details: {
date: number;
amount: number;
category: string;
description: string;
}[];
charts: {
type: 'LINE' | 'BAR' | 'PIE';
data: any[];
}[];
}
8.3 运营报表
export interface OperationReport {
type: 'SHOP' | 'PRODUCT' | 'MARKETING' | 'LOGISTICS';
kpis: {
name: string;
value: number;
target: number;
trend: 'UP' | 'DOWN' | 'STABLE';
}[];
rankings: {
rank: number;
name: string;
value: number;
}[];
alerts: {
type: string;
message: string;
severity: 'INFO' | 'WARNING' | 'ERROR';
}[];
}
9. 前端页面设计
9.1 后台管理页面
| 页面 | 路由 | 功能 |
|---|---|---|
| 用户管理 | /admin/users | 用户CRUD、角色分配 |
| 角色管理 | /admin/roles | 角色定义、权限配置 |
| 租户管理 | /admin/tenants | 租户CRUD、配额管理 |
| 商户管理 | /admin/merchants | 商户审核、管理 |
| 审批中心 | /admin/approvals | 审批处理、历史查询 |
| 监控中心 | /admin/monitoring | 系统监控、告警管理 |
| 审计中心 | /admin/audit | 日志查询、追溯 |
| 配置中心 | /admin/settings | 系统配置、业务配置 |
| 报表中心 | /admin/reports | 报表查看、导出 |
9.2 权限控制
// 路由权限配置
export const adminRoutes = [
{
path: '/admin/users',
component: UserManagement,
permission: 'user:read',
},
{
path: '/admin/roles',
component: RoleManagement,
permission: 'role:read',
},
{
path: '/admin/tenants',
component: TenantManagement,
permission: 'tenant:read',
},
// ...
];
// 权限检查中间件
export function checkPermission(permission: string) {
return (req, res, next) => {
if (!req.user.permissions.includes(permission)) {
return res.status(403).json({ error: 'Permission denied' });
}
next();
};
}
10. 实现优先级
P0 - 核心功能 (立即完成)
-
用户权限管理
- 用户CRUD
- 角色管理
- RBAC引擎
-
租户管理
- 租户CRUD
- 数据隔离
- 配额管理
P1 - 重要功能 (近期完成)
-
审批中心
- 审批流程
- 审批处理
-
监控中心
- 系统监控
- 告警管理
P2 - 增强功能 (后续完成)
-
审计中心
- 操作日志
- 审计追溯
-
报表中心
- 业务报表
- 财务报表
11. 相关文档
最后更新: 2026-03-20