import client from './client' export interface TenantItem { id: string username: string nickname: string email: string phone?: string type: 'MAIN' | 'SUB' status: 'ACTIVE' | 'DISABLED' | 'PENDING_EMAIL' parentId?: string createdAt: string } export interface TenantDetail extends TenantItem { appCount: number subAccountCount: number activeServiceCount: number apps: AppItem[] } export interface TenantPage { content: TenantItem[] total: number totalPages: number } export interface Statistics { totalTenants: number todayNew: number activeApps: number onlineUsers: number } export interface ServiceRequest { id: string appId: string platform: string serviceType: string status: 'PENDING' | 'APPROVED' | 'REJECTED' applyReason?: string reviewNote?: string createdAt: string reviewedAt?: string } export interface ServiceRequestPage { content: ServiceRequest[] total: number totalPages: number } export interface AppItem { id: string appKey: string appSecret: string name: string packageName: string tenantId: string createdAt: string } export interface FeatureServiceItem { id: string appId: string platform: string serviceType: string enabled: boolean config?: string | null createdAt: string } export interface AppDetail { app: AppItem tenant: TenantItem | null services: FeatureServiceItem[] serviceCount: number enabledServiceCount: number } export interface AppPage { content: AppItem[] total: number totalPages: number } export interface OpsLogItem { id: string tenantId: string moduleType: string resourceType: string resourceId: string action: string operator: string detailJson: string createdAt: string } export interface OpsLogPage { content: OpsLogItem[] total: number totalPages: number } export interface RiskRuleForm { ipRateLimit: number loginFailThreshold: number loginLockMinutes: number abnormalDetection: boolean } export interface SensitiveWord { id: string word: string level: '高' | '中' | '低' category: string enabled: boolean updatedAt: string } export interface SensitiveWordPage { content: SensitiveWord[] total: number totalPages: number } export const opsApi = { listTenants: (keyword = '', page = 0, size = 20) => client.get<{ data: TenantPage }>('/ops/tenants', { params: { keyword, page, size } }), toggleStatus: (id: string) => client.post(`/ops/tenants/${id}/toggle-status`), getTenant: (id: string) => client.get<{ data: TenantDetail }>(`/ops/tenants/${id}`), listTenantApps: (id: string) => client.get<{ data: AppItem[] }>(`/ops/tenants/${id}/apps`), statistics: () => client.get<{ data: Statistics }>('/ops/statistics'), listServiceRequests: (status = '', page = 0, size = 20) => client.get<{ data: ServiceRequestPage }>('/ops/service-requests', { params: { status, page, size } }), approveRequest: (requestId: string, reviewNote = '') => client.post<{ data: ServiceRequest }>(`/ops/service-requests/${requestId}/approve`, { reviewNote }), rejectRequest: (requestId: string, reviewNote = '') => client.post<{ data: ServiceRequest }>(`/ops/service-requests/${requestId}/reject`, { reviewNote }), listApps: (keyword = '', page = 0, size = 20) => client.get<{ data: AppPage }>('/ops/apps', { params: { keyword, page, size } }), getApp: (id: string) => client.get<{ data: AppDetail }>(`/ops/apps/${id}`), listAppServices: (id: string) => client.get<{ data: FeatureServiceItem[] }>(`/ops/apps/${id}/services`), listOperationLogs: (page = 0, size = 20) => client.get<{ data: OpsLogPage }>('/ops/operation-logs', { params: { page, size } }), // 风控相关 API(mock 实现,TODO:接入后端) getRiskRules: () => client.get<{ data: RiskRuleForm }>('/ops/risk/rules'), saveRiskRules: (rules: RiskRuleForm) => client.post('/ops/risk/rules', rules), listSensitiveWords: (page = 0, size = 20) => client.get<{ data: SensitiveWordPage }>('/ops/risk/sensitive-words', { params: { page, size } }), createSensitiveWord: (word: Omit) => client.post<{ data: SensitiveWord }>('/ops/risk/sensitive-words', word), updateSensitiveWord: (id: string, word: Partial) => client.put<{ data: SensitiveWord }>(`/ops/risk/sensitive-words/${id}`, word), toggleSensitiveWord: (id: string, enabled: boolean) => client.patch(`/ops/risk/sensitive-words/${id}/toggle`, { enabled }), deleteSensitiveWord: (id: string) => client.delete(`/ops/risk/sensitive-words/${id}`), }