fix: restore complete frontend api client (adminAPI) from 1346fbb + keep 4 post-1346fbb methods (toggleAd/getAdminApps/updateApp/assignCoupon) to fix restored admin pages build
This commit is contained in:
1 parent
e8e5ffa1a9
commit
36e369044a
1 file changed
+536
-36
+536
-36
@@ -10,7 +10,7 @@ function getToken(): string | null {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 通用请求方法
|
// 通用请求方法
|
||||||
async function request<T>(
|
export async function request<T>(
|
||||||
endpoint: string,
|
endpoint: string,
|
||||||
options: RequestInit = {}
|
options: RequestInit = {}
|
||||||
): Promise<{ code: number; data: T; message: string }> {
|
): Promise<{ code: number; data: T; message: string }> {
|
||||||
@@ -105,12 +105,12 @@ export const chatAPI = {
|
|||||||
del<any>(`/chat/conversations/${id}`),
|
del<any>(`/chat/conversations/${id}`),
|
||||||
getMessages: (convId: string) =>
|
getMessages: (convId: string) =>
|
||||||
get<any[]>(`/chat/conversations/${convId}/messages`),
|
get<any[]>(`/chat/conversations/${convId}/messages`),
|
||||||
sendMessage: (convId: string, data: { content: string; model_id?: string; agent_ids?: string[]; skill_ids?: string[]; knowledge_ids?: string[]; use_tools?: boolean }) =>
|
sendMessage: (convId: string, data: { content: string; model_id?: string; agent_ids?: string[]; skill_ids?: string[]; knowledge_base_ids?: string[]; use_tools?: boolean }) =>
|
||||||
post<any>(`/chat/conversations/${convId}/messages`, data),
|
post<any>(`/chat/conversations/${convId}/messages`, data),
|
||||||
clearContext: (convId: string) =>
|
clearContext: (convId: string) =>
|
||||||
post<any>(`/chat/conversations/${convId}/clear`),
|
post<any>(`/chat/conversations/${convId}/clear`),
|
||||||
convertToKnowledgeGraph: (convId: string) =>
|
convertToKnowledgeGraph: (convId: string) =>
|
||||||
post<any>(`/chat/conversations/${convId}/to-knowledge-graph`),
|
post<any>(`/chat/conversations/${convId}/to-knowledge-graph/`),
|
||||||
getModels: () => get<any[]>('/chat/models'),
|
getModels: () => get<any[]>('/chat/models'),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ export const knowledgeAPI = {
|
|||||||
deleteBase: (id: string) => del<any>(`/knowledge/bases/${id}`),
|
deleteBase: (id: string) => del<any>(`/knowledge/bases/${id}`),
|
||||||
getDocuments: (baseId: string) => get<any>(`/knowledge/bases/${baseId}/documents`),
|
getDocuments: (baseId: string) => get<any>(`/knowledge/bases/${baseId}/documents`),
|
||||||
getDocument: (baseId: string, docId: string) => get<any>(`/knowledge/bases/${baseId}/documents/${docId}`),
|
getDocument: (baseId: string, docId: string) => get<any>(`/knowledge/bases/${baseId}/documents/${docId}`),
|
||||||
uploadDocument: (baseId: string, data: any) => post<any>(`/knowledge/bases/${baseId}/documents`, data),
|
uploadDocument: (baseId: string, data: any) => post<any>(`/knowledge/bases/${baseId}/documents/`, data),
|
||||||
deleteDocument: (baseId: string, docId: string) => del<any>(`/knowledge/bases/${baseId}/documents/${docId}`),
|
deleteDocument: (baseId: string, docId: string) => del<any>(`/knowledge/bases/${baseId}/documents/${docId}`),
|
||||||
getDirectories: () => get<any[]>('/knowledge/directories'),
|
getDirectories: () => get<any[]>('/knowledge/directories'),
|
||||||
createDirectory: (data: any) => post<any>('/knowledge/directories', data),
|
createDirectory: (data: any) => post<any>('/knowledge/directories', data),
|
||||||
@@ -277,6 +277,7 @@ export const adminAPI = {
|
|||||||
getStats: () => get<any>('/admin/dashboard/stats'),
|
getStats: () => get<any>('/admin/dashboard/stats'),
|
||||||
getRecentLogs: () => get<any[]>('/admin/dashboard/recent-logs'),
|
getRecentLogs: () => get<any[]>('/admin/dashboard/recent-logs'),
|
||||||
getRecentAudit: () => get<any[]>('/admin/dashboard/recent-audit'),
|
getRecentAudit: () => get<any[]>('/admin/dashboard/recent-audit'),
|
||||||
|
getDailyStats: (days?: number) => get<{ days: number; data: Array<{ date: string; tokens: number }> }>(`/admin/dashboard/daily-stats${days ? `?days=${days}` : ''}`),
|
||||||
// 用户管理
|
// 用户管理
|
||||||
getUsers: (params?: any) => {
|
getUsers: (params?: any) => {
|
||||||
const sp = new URLSearchParams();
|
const sp = new URLSearchParams();
|
||||||
@@ -308,11 +309,17 @@ export const adminAPI = {
|
|||||||
setDefaultModel: (id: string) => put<any>(`/admin/models/${id}/set-default`),
|
setDefaultModel: (id: string) => put<any>(`/admin/models/${id}/set-default`),
|
||||||
// Phase 2: Enhanced model management
|
// Phase 2: Enhanced model management
|
||||||
testModelConnection: (id: string) => post<any>(`/admin/models/${id}/test-connection`),
|
testModelConnection: (id: string) => post<any>(`/admin/models/${id}/test-connection`),
|
||||||
|
testAllModels: () => post<any>('/admin/models/test-all'),
|
||||||
fetchProviderModels: (id: string) => post<any>(`/admin/models/providers/${id}/fetch-models`),
|
fetchProviderModels: (id: string) => post<any>(`/admin/models/providers/${id}/fetch-models`),
|
||||||
createAdminModel: (data: any) => post<any>('/admin/models/', data),
|
createAdminModel: (data: any) => post<any>('/admin/models/', data),
|
||||||
updateAdminModel: (id: string, data: any) => put<any>(`/admin/models/${id}`, data),
|
updateAdminModel: (id: string, data: any) => put<any>(`/admin/models/${id}`, data),
|
||||||
deleteAdminModel: (id: string) => del<any>(`/admin/models/${id}`),
|
deleteAdminModel: (id: string) => del<any>(`/admin/models/${id}`),
|
||||||
getModelStats: () => get<any>('/admin/models/stats'),
|
getModelStats: () => get<any>('/admin/models/stats'),
|
||||||
|
// 能力类型 & 按能力默认模型
|
||||||
|
getCapabilities: () => get<any[]>('/admin/models/capabilities'),
|
||||||
|
getCapabilityDefaults: () => get<any>('/admin/models/capability-defaults'),
|
||||||
|
setCapabilityDefault: (capability: string, modelId: string | null) =>
|
||||||
|
put<any>('/admin/models/capability-defaults', { capability, model_id: modelId }),
|
||||||
// 网站设置
|
// 网站设置
|
||||||
getSiteSettings: () => get<any>('/admin/settings/site'),
|
getSiteSettings: () => get<any>('/admin/settings/site'),
|
||||||
updateSiteSettings: (data: any) => put<any>('/admin/settings/site', data),
|
updateSiteSettings: (data: any) => put<any>('/admin/settings/site', data),
|
||||||
@@ -358,41 +365,25 @@ export const adminAPI = {
|
|||||||
updateCustomRequest: (id: string, data: any) => put<any>(`/admin/services/custom-requests/${id}`, data),
|
updateCustomRequest: (id: string, data: any) => put<any>(`/admin/services/custom-requests/${id}`, data),
|
||||||
getAvailableAgents: () => get<any[]>('/admin/services/agents'),
|
getAvailableAgents: () => get<any[]>('/admin/services/agents'),
|
||||||
assignAgentToService: (id: string, agentId: string) => put<any>(`/admin/services/${id}/agent?agent_id=${agentId}`),
|
assignAgentToService: (id: string, agentId: string) => put<any>(`/admin/services/${id}/agent?agent_id=${agentId}`),
|
||||||
// 会员管理
|
// 会员管理(增强版)
|
||||||
getPlans: () => get<any[]>('/admin/membership/plans'),
|
getPlans: () => get<any[]>('/admin/membership/plans'),
|
||||||
addPlan: (data: any) => post<any>('/admin/membership/plans', data),
|
addPlan: (params: string) => post<any>(`/admin/membership/plans${params}`),
|
||||||
updatePlan: (id: string, data: any) => put<any>(`/admin/membership/plans/${id}`, data),
|
updatePlan: (id: string, params: string) => put<any>(`/admin/membership/plans/${id}${params}`),
|
||||||
deletePlan: (id: string) => del<any>(`/admin/membership/plans/${id}`),
|
deletePlan: (id: string) => del<any>(`/admin/membership/plans/${id}`),
|
||||||
getSubscriptions: () => get<any[]>('/admin/membership/subscriptions'),
|
getSubscriptions: (page?: number) => get<any>(`/admin/membership/subscriptions${page ? `?page=${page}` : ''}`),
|
||||||
getAutomationRules: () => get<any>('/admin/membership/automation-rules'),
|
getAutomationRules: () => get<any>('/admin/membership/automation-rules'),
|
||||||
// 广告管理
|
getBenefitsComparison: () => get<any>('/admin/membership/benefits-comparison'),
|
||||||
getAds: () => get<any[]>('/admin/ads/'),
|
getMembershipConfigs: () => get<any[]>('/admin/membership/global-configs'),
|
||||||
addAd: (data: any) => post<any>('/admin/ads/', data),
|
updateMembershipConfig: (key: string, params: string) => put<any>(`/admin/membership/global-configs/${key}${params}`),
|
||||||
updateAd: (id: string, data: any) => put<any>(`/admin/ads/${id}`, data),
|
getUserMemberships: (page?: number, planId?: string, status?: string) => {
|
||||||
deleteAd: (id: string) => del<any>(`/admin/ads/${id}`),
|
const p = new URLSearchParams();
|
||||||
toggleAd: (id: string) => put<any>(`/admin/ads/${id}/toggle`),
|
if (page) p.append('page', String(page));
|
||||||
// 应用市场审核
|
if (planId) p.append('plan_id', planId);
|
||||||
getPendingApps: () => get<any[]>('/admin/market/apps/pending'),
|
if (status) p.append('status', status);
|
||||||
approveApp: (id: string) => put<any>(`/admin/market/apps/${id}/approve`),
|
const qs = p.toString();
|
||||||
rejectApp: (id: string) => put<any>(`/admin/market/apps/${id}/reject`),
|
return get<any>(`/admin/membership/user-memberships${qs ? `?${qs}` : ''}`);
|
||||||
getAdminApps: () => get<any[]>('/admin/market/apps'),
|
|
||||||
updateApp: (id: string, data: any) => put<any>(`/admin/market/apps/${id}`, data),
|
|
||||||
getCoupons: () => get<any[]>('/admin/market/coupons'),
|
|
||||||
addCoupon: (data: any) => post<any>('/admin/market/coupons', data),
|
|
||||||
updateCoupon: (id: string, data: any) => put<any>(`/admin/market/coupons/${id}`, data),
|
|
||||||
deleteCoupon: (id: string) => del<any>(`/admin/market/coupons/${id}`),
|
|
||||||
assignCoupon: (id: string, userId: string) => post<any>(`/admin/market/coupons/${id}/assign`, { user_id: userId }),
|
|
||||||
// 日志与风控
|
|
||||||
getOperationLogs: (params?: any) => {
|
|
||||||
const sp = new URLSearchParams();
|
|
||||||
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
|
||||||
return get<any[]>(`/admin/logs/operations${sp.toString() ? `?${sp.toString()}` : ''}`);
|
|
||||||
},
|
|
||||||
getTokenLogs: (params?: any) => {
|
|
||||||
const sp = new URLSearchParams();
|
|
||||||
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
|
||||||
return get<any[]>(`/admin/logs/token-logs${sp.toString() ? `?${sp.toString()}` : ''}`);
|
|
||||||
},
|
},
|
||||||
|
assignPlan: (userId: string, planId: string, days: number) => put<any>(`/admin/membership/users/${userId}/assign-plan?plan_id=${planId}&duration_days=${days}`),
|
||||||
getPaymentLogs: (params?: any) => {
|
getPaymentLogs: (params?: any) => {
|
||||||
const sp = new URLSearchParams();
|
const sp = new URLSearchParams();
|
||||||
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
@@ -439,8 +430,305 @@ export const adminAPI = {
|
|||||||
addRiskRule: (data: any) => post<any>('/admin/logs/risk-rules', data),
|
addRiskRule: (data: any) => post<any>('/admin/logs/risk-rules', data),
|
||||||
updateRiskRule: (id: string, data: any) => put<any>(`/admin/logs/risk-rules/${id}`, data),
|
updateRiskRule: (id: string, data: any) => put<any>(`/admin/logs/risk-rules/${id}`, data),
|
||||||
deleteRiskRule: (id: string) => del<any>(`/admin/logs/risk-rules/${id}`),
|
deleteRiskRule: (id: string) => del<any>(`/admin/logs/risk-rules/${id}`),
|
||||||
};
|
// 技能管理 (Phase 2.2)
|
||||||
|
getAdminSkills: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v !== undefined && v !== null && v !== '') sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/skills/${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
getAdminSkill: (id: string) => get<any>(`/admin/skills/${id}`),
|
||||||
|
createAdminSkill: (data: any) => post<any>('/admin/skills/', data),
|
||||||
|
updateAdminSkill: (id: string, data: any) => put<any>(`/admin/skills/${id}`, data),
|
||||||
|
deleteAdminSkill: (id: string) => del<any>(`/admin/skills/${id}`),
|
||||||
|
changeAdminSkillState: (id: string, data: any) => put<any>(`/admin/skills/${id}/state`, data),
|
||||||
|
getAdminSkillVersions: (id: string) => get<any>(`/admin/skills/${id}/versions`),
|
||||||
|
rollbackAdminSkill: (id: string, data: any) => post<any>(`/admin/skills/${id}/rollback`, data),
|
||||||
|
publishAdminSkill: (id: string, data: any) => post<any>(`/admin/skills/${id}/publish`, data),
|
||||||
|
unpublishAdminSkill: (id: string) => post<any>(`/admin/skills/${id}/unpublish`),
|
||||||
|
getAdminSkillsStats: () => get<any>('/admin/skills/stats/overview'),
|
||||||
|
// 智能体管理 (Phase 2.3)
|
||||||
|
getAdminAgents: (params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/agents/${query}`);
|
||||||
|
},
|
||||||
|
getAdminAgent: (id: string) => get<any>(`/admin/agents/${id}`),
|
||||||
|
createAdminAgent: (data: any) => post<any>('/admin/agents/', data),
|
||||||
|
updateAdminAgent: (id: string, data: any) => put<any>(`/admin/agents/${id}`, data),
|
||||||
|
deleteAdminAgent: (id: string) => del<any>(`/admin/agents/${id}`),
|
||||||
|
toggleAdminAgent: (id: string, isActive: boolean) => put<any>(`/admin/agents/${id}/toggle`, { is_active: isActive }),
|
||||||
|
getAdminAgentsStats: () => get<any>('/admin/agents/stats/overview'),
|
||||||
|
getAdminAgentReviews: (id: string) => get<any>(`/admin/agents/${id}/reviews`),
|
||||||
|
getAdminAvailableSkills: (params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/agents/available/skills${query}`);
|
||||||
|
},
|
||||||
|
getAdminAvailableModels: (params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/agents/available/models${query}`);
|
||||||
|
},
|
||||||
|
// 知识库管理 (Phase 2.4)
|
||||||
|
getAdminKnowledgeStats: () => get<any>('/admin/knowledge/stats/overview'),
|
||||||
|
getAdminKnowledge: (params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/knowledge/${query}`);
|
||||||
|
},
|
||||||
|
getAdminKnowledgeDetail: (id: string) => get<any>(`/admin/knowledge/${id}`),
|
||||||
|
createAdminKnowledge: (data: any) => post<any>('/admin/knowledge/', data),
|
||||||
|
updateAdminKnowledge: (id: string, data: any) => put<any>(`/admin/knowledge/${id}`, data),
|
||||||
|
deleteAdminKnowledge: (id: string) => del<any>(`/admin/knowledge/${id}`),
|
||||||
|
toggleAdminKnowledge: (id: string, isActive: boolean) => put<any>(`/admin/knowledge/${id}/toggle`, { is_active: isActive }),
|
||||||
|
getAdminKnowledgeDocs: (kbId: string, params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/knowledge/${kbId}/documents${query}`);
|
||||||
|
},
|
||||||
|
deleteAdminKnowledgeDoc: (kbId: string, docId: string) => del<any>(`/admin/knowledge/${kbId}/documents/${docId}`),
|
||||||
|
getAdminKnowledgeExtServices: () => get<any>('/admin/knowledge/external/services'),
|
||||||
|
createAdminKnowledgeExtService: (data: any) => post<any>('/admin/knowledge/external/services', data),
|
||||||
|
updateAdminKnowledgeExtService: (id: string, data: any) => put<any>(`/admin/knowledge/external/services/${id}`, data),
|
||||||
|
deleteAdminKnowledgeExtService: (id: string) => del<any>(`/admin/knowledge/external/services/${id}`),
|
||||||
|
checkAdminKnowledgeExtStatus: (id: string) => get<any>(`/admin/knowledge/external/services/${id}/status`),
|
||||||
|
syncAdminKnowledge: (kbId: string, data: any) => post<any>(`/admin/knowledge/external/sync/${kbId}`, data),
|
||||||
|
batchDeleteAdminKnowledge: (ids: string[]) => post<any>('/admin/knowledge/batch/delete', ids),
|
||||||
|
// OSS存储配置 (Phase 3.1)
|
||||||
|
getAssetStats: () => get<any>('/admin/assets/stats'),
|
||||||
|
getAdminAssets: (query: string) => get<any>(`/admin/assets/?${query}`),
|
||||||
|
deleteAdminAsset: (id: string) => del<any>(`/admin/assets/${id}`),
|
||||||
|
getAssetActivity: () => get<any>('/admin/assets/activity'),
|
||||||
|
getAdminStorageStats: () => get<any>('/admin/storage/stats/overview'),
|
||||||
|
getAdminStorageConfigs: (params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/storage/${query}`);
|
||||||
|
},
|
||||||
|
getAdminStorageConfig: (id: string) => get<any>(`/admin/storage/${id}`),
|
||||||
|
createAdminStorageConfig: (data: any) => post<any>('/admin/storage/', data),
|
||||||
|
updateAdminStorageConfig: (id: string, data: any) => put<any>(`/admin/storage/${id}`, data),
|
||||||
|
deleteAdminStorageConfig: (id: string) => del<any>(`/admin/storage/${id}`),
|
||||||
|
toggleAdminStorageConfig: (id: string) => put<any>(`/admin/storage/${id}/toggle`),
|
||||||
|
setDefaultAdminStorageConfig: (id: string) => put<any>(`/admin/storage/${id}/set-default`),
|
||||||
|
testAdminStorageConfig: (data: any) => post<any>('/admin/storage/test', data),
|
||||||
|
getAdminStorageUsage: (id: string) => get<any>(`/admin/storage/${id}/usage`),
|
||||||
|
// Storage Quota APIs (Phase C5)
|
||||||
|
getStorageQuotaOverview: () => get<any>('/admin/storage/quota/overview'),
|
||||||
|
getStorageQuotaUsers: (params?: any) => {
|
||||||
|
if (params) {
|
||||||
|
const query = Object.entries(params).map(([k, v]) => v !== undefined && v !== '' && v !== null ? `${k}=${encodeURIComponent(String(v))}` : '').filter(Boolean).join('&');
|
||||||
|
return get<any>(`/admin/storage/quota/users${query ? '?' + query : ''}`);
|
||||||
|
}
|
||||||
|
return get<any>('/admin/storage/quota/users');
|
||||||
|
},
|
||||||
|
getStorageQuotaUser: (userId: string) => get<any>(`/admin/storage/quota/users/${userId}`),
|
||||||
|
adjustStorageQuota: (userId: string, data: any) => put<any>(`/admin/storage/quota/users/${userId}`, data),
|
||||||
|
recalcStorageQuota: (userId: string) => post<any>(`/admin/storage/quota/recalculate/${userId}`, {}),
|
||||||
|
initAllStorageQuotas: () => post<any>('/admin/storage/quota/init-all', {}),
|
||||||
|
|
||||||
|
// 自动化任务调度 (Phase 3.2)
|
||||||
|
getAdminAutomationStats: () => get<any>('/admin/automation/stats/overview'),
|
||||||
|
getAdminAutomationTasks: (params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/automation/${query}`);
|
||||||
|
},
|
||||||
|
getAdminAutomationTask: (id: string) => get<any>(`/admin/automation/${id}`),
|
||||||
|
createAdminAutomationTask: (data: any) => post<any>('/admin/automation/', data),
|
||||||
|
updateAdminAutomationTask: (id: string, data: any) => put<any>(`/admin/automation/${id}`, data),
|
||||||
|
deleteAdminAutomationTask: (id: string) => del<any>(`/admin/automation/${id}`),
|
||||||
|
toggleAdminAutomationTask: (id: string) => put<any>(`/admin/automation/${id}/toggle`),
|
||||||
|
executeAdminAutomationTask: (id: string) => post<any>(`/admin/automation/${id}/execute`),
|
||||||
|
getAdminAutomationTaskHistory: (id: string, params?: any) => {
|
||||||
|
const query = params ? '?' + Object.entries(params).filter(([_, v]) => v !== undefined && v !== '').map(([k, v]) => `${k}=${v}`).join('&') : '';
|
||||||
|
return get<any>(`/admin/automation/${id}/history${query}`);
|
||||||
|
},
|
||||||
|
// MCP Server Management
|
||||||
|
getAdminMcpStats: () => get<any>('/admin/mcp/stats/overview'),
|
||||||
|
getAdminMcpServers: (params?: any) => {
|
||||||
|
const query = new URLSearchParams(params).toString();
|
||||||
|
return get<any>(`/admin/mcp/${query ? '?' + query : ''}`);
|
||||||
|
},
|
||||||
|
getAdminMcpServer: (id: string) => get<any>(`/admin/mcp/${id}`),
|
||||||
|
createAdminMcpServer: (data: any) => post<any>('/admin/mcp/', data),
|
||||||
|
updateAdminMcpServer: (id: string, data: any) => put<any>(`/admin/mcp/${id}`, data),
|
||||||
|
deleteAdminMcpServer: (id: string) => del<any>(`/admin/mcp/${id}`),
|
||||||
|
toggleAdminMcpServer: (id: string) => put<any>(`/admin/mcp/${id}/toggle`),
|
||||||
|
testAdminMcpServer: (id: string, data?: any) => post<any>(`/admin/mcp/${id}/test`, data || {}),
|
||||||
|
getAdminMcpServerTools: (id: string) => get<any>(`/admin/mcp/${id}/tools`),
|
||||||
|
getAdminMcpServerResources: (id: string) => get<any>(`/admin/mcp/${id}/resources`),
|
||||||
|
// Developer API Management
|
||||||
|
getAdminDeveloperStats: () => get<any>('/admin/developer/stats/overview'),
|
||||||
|
getAdminApiKeys: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/developer/api-keys${sp.toString() ? '?' + sp.toString() : ''}`);
|
||||||
|
},
|
||||||
|
createAdminApiKey: (data: any) => post<any>('/admin/developer/api-keys/', data),
|
||||||
|
updateAdminApiKey: (id: string, data: any) => put<any>(`/admin/developer/api-keys/${id}`, data),
|
||||||
|
revokeAdminApiKey: (id: string) => post<any>(`/admin/developer/api-keys/${id}/revoke`),
|
||||||
|
deleteAdminApiKey: (id: string) => del<any>(`/admin/developer/api-keys/${id}`),
|
||||||
|
getAdminOpenApiClients: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/developer/openapi-clients${sp.toString() ? '?' + sp.toString() : ''}`);
|
||||||
|
},
|
||||||
|
createAdminOpenApiClient: (data: any) => post<any>('/admin/developer/openapi-clients/', data),
|
||||||
|
updateAdminOpenApiClient: (id: string, data: any) => put<any>(`/admin/developer/openapi-clients/${id}`, data),
|
||||||
|
resetAdminOpenApiClientSecret: (id: string) => post<any>(`/admin/developer/openapi-clients/${id}/reset-secret`),
|
||||||
|
deleteAdminOpenApiClient: (id: string) => del<any>(`/admin/developer/openapi-clients/${id}`),
|
||||||
|
getAdminCallStats: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/developer/call-stats${sp.toString() ? '?' + sp.toString() : ''}`);
|
||||||
|
},
|
||||||
|
getAdminCallStatsOverview: () => get<any>('/admin/developer/call-stats/overview'),
|
||||||
|
getAdminSlowLogs: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/developer/slow-logs${sp.toString() ? '?' + sp.toString() : ''}`);
|
||||||
|
},
|
||||||
|
clearAdminSlowLogs: () => del<any>('/admin/developer/slow-logs'),
|
||||||
|
getAdminSlowLogsStats: () => get<any>('/admin/developer/slow-logs/stats'),
|
||||||
|
// AI App Management
|
||||||
|
getAIAppStats: () => get<any>('/admin/apps/stats/overview'),
|
||||||
|
getAIApps: (params?: string) => get<any>('/admin/apps/apps' + (params ? '?' + params : '')),
|
||||||
|
getAIApp: (id: string) => get<any>('/admin/apps/apps/' + id),
|
||||||
|
createAIApp: (data: any) => post<any>('/admin/apps/apps', data),
|
||||||
|
updateAIApp: (id: string, data: any) => put<any>('/admin/apps/apps/' + id, data),
|
||||||
|
deleteAIApp: (id: string) => del<any>('/admin/apps/apps/' + id),
|
||||||
|
aiAppLifecycle: (id: string, action: string) => post<any>('/admin/apps/apps/' + id + '/' + action, {}),
|
||||||
|
getAIAppVersions: (id: string) => get<any>('/admin/apps/apps/' + id + '/versions'),
|
||||||
|
getAIAppAnalytics: (id: string) => get<any>('/admin/apps/apps/' + id + '/analytics'),
|
||||||
|
getAIAppTemplates: () => get<any>('/admin/apps/templates'),
|
||||||
|
createAIAppTemplate: (data: any) => post<any>('/admin/apps/templates', data),
|
||||||
|
createAIAppFromTemplate: (templateId: string, data: any) => post<any>('/admin/apps/apps/from-template/' + templateId, data),
|
||||||
|
getAIAppCategories: () => get<any>('/admin/apps/categories'),
|
||||||
|
// Logo 上传
|
||||||
|
uploadLogo: (formData: FormData) => {
|
||||||
|
const token = localStorage.getItem('access_token');
|
||||||
|
return fetch(`/app/api/admin/settings/logo/upload`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Authorization': `Bearer ${token}` },
|
||||||
|
body: formData,
|
||||||
|
}).then(res => res.json());
|
||||||
|
},
|
||||||
|
|
||||||
|
// MCP Market (Phase G1)
|
||||||
|
getMcpMarketStats: () =>
|
||||||
|
get<any>('/admin/mcp-market/stats'),
|
||||||
|
getMcpTools: (params?: Record<string, any>) =>
|
||||||
|
get<any>('/admin/mcp-market/?' + new URLSearchParams(params || {}).toString()),
|
||||||
|
getMcpToolDetail: (id: string) =>
|
||||||
|
get<any>('/admin/mcp-market/' + id),
|
||||||
|
createMcpTool: (data: any) =>
|
||||||
|
post<any>('/admin/mcp-market/', data),
|
||||||
|
updateMcpTool: (id: string, data: any) =>
|
||||||
|
put<any>('/admin/mcp-market/' + id, data),
|
||||||
|
deleteMcpTool: (id: string) =>
|
||||||
|
del<any>('/admin/mcp-market/' + id),
|
||||||
|
scanMcpTool: (id: string) =>
|
||||||
|
post<any>('/admin/mcp-market/' + id + '/security-scan'),
|
||||||
|
updateMcpToolSecurity: (id: string, data: any) =>
|
||||||
|
put<any>('/admin/mcp-market/' + id + '/security-status', data),
|
||||||
|
regenMcpDeepLink: (id: string) =>
|
||||||
|
post<any>('/admin/mcp-market/' + id + '/deep-link'),
|
||||||
|
getMcpManagedServers: () =>
|
||||||
|
get<any>('/admin/mcp-market/managed/servers'),
|
||||||
|
seedMcpTools: () =>
|
||||||
|
post<any>('/admin/mcp-market/seed'),
|
||||||
|
|
||||||
|
// Code Execution Sandbox (Phase G2)
|
||||||
|
getCodeExecStats: () => get<any>('/admin/code-exec/stats'),
|
||||||
|
getCodeExecRuntimes: () => get<any>('/admin/code-exec/runtimes'),
|
||||||
|
executeCode: (data: { language: string; code: string; stdin?: string; timeout?: number }) =>
|
||||||
|
post<any>('/admin/code-exec/execute', data),
|
||||||
|
getCodeExecTasks: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/code-exec/tasks${sp.toString() ? '?' + sp.toString() : ''}`);
|
||||||
|
},
|
||||||
|
getCodeExecTask: (id: string) => get<any>(`/admin/code-exec/tasks/${id}`),
|
||||||
|
deleteCodeExecTask: (id: string) => del<any>(`/admin/code-exec/tasks/${id}`),
|
||||||
|
|
||||||
|
|
||||||
|
// Distribution Builder (Phase G4)
|
||||||
|
getDistributionStats: () => get<any>('/admin/distributions/stats'),
|
||||||
|
getDistributions: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]: [string, any]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>('/admin/distributions' + (sp.toString() ? '?' + sp.toString() : ''));
|
||||||
|
},
|
||||||
|
getDistributionTemplates: () => get<any>('/admin/distributions/templates'),
|
||||||
|
createDistribution: (data: any) => post<any>('/admin/distributions', data),
|
||||||
|
getDistribution: (id: string) => get<any>('/admin/distributions/' + id),
|
||||||
|
updateDistribution: (id: string, data: any) => put<any>('/admin/distributions/' + id, data),
|
||||||
|
deleteDistribution: (id: string) => del<any>('/admin/distributions/' + id),
|
||||||
|
getDistributionLicenses: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]: [string, any]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>('/admin/distributions/licenses' + (sp.toString() ? '?' + sp.toString() : ''));
|
||||||
|
},
|
||||||
|
createDistributionLicense: (distroId: string, data: any) => post<any>('/admin/distributions/' + distroId + '/licenses', data),
|
||||||
|
getDistributionLicense: (id: string) => get<any>('/admin/distributions/licenses/' + id),
|
||||||
|
revokeDistributionLicense: (id: string) => post<any>('/admin/distributions/licenses/' + id + '/revoke'),
|
||||||
|
// ===== Ads Management =====
|
||||||
|
getAds: () => get<any>('/admin/ads/'),
|
||||||
|
addAd: (data: any) => post<any>('/admin/ads/', data),
|
||||||
|
updateAd: (id: string, data: any) => put<any>(`/admin/ads/${id}`, data),
|
||||||
|
deleteAd: (id: string) => del<any>(`/admin/ads/${id}`),
|
||||||
|
|
||||||
|
// ===== Market Admin (extended) =====
|
||||||
|
getMarketOverview: () => get<any>('/admin/market/overview'),
|
||||||
|
getTopApps: (metric?: string, limit?: number) => get<any>(`/admin/market/top-apps${metric ? '?metric=' + metric : ''}${limit ? (metric ? '&' : '?') + 'limit=' + limit : ''}`),
|
||||||
|
getAdminMarketApps: (params?: string) => get<any>(`/admin/market/apps${params ? '?' + params : ''}`),
|
||||||
|
getPendingApps: () => get<any>('/admin/market/pending'),
|
||||||
|
getCoupons: () => get<any>('/admin/market/coupons'),
|
||||||
|
getRecentReviews: () => get<any>('/admin/market/reviews'),
|
||||||
|
approveApp: (id: string) => post<any>(`/admin/market/apps/${id}/approve`),
|
||||||
|
rejectApp: (id: string) => post<any>(`/admin/market/apps/${id}/reject`),
|
||||||
|
setFeaturedApp: (id: string, featured: boolean, sortOrder?: number) => put<any>(`/admin/market/apps/${id}/featured`, { featured, sort_order: sortOrder }),
|
||||||
|
deleteMarketApp: (id: string) => del<any>(`/admin/market/apps/${id}`),
|
||||||
|
deleteCoupon: (id: string) => del<any>(`/admin/market/coupons/${id}`),
|
||||||
|
updateMarketApp: (id: string, data: any) => put<any>(`/admin/market/apps/${id}`, data),
|
||||||
|
updateCoupon: (id: string, data: any) => put<any>(`/admin/market/coupons/${id}`, data),
|
||||||
|
addCoupon: (data: any) => post<any>('/admin/market/coupons', data),
|
||||||
|
|
||||||
|
// ===== Membership (extended) =====
|
||||||
|
getMembershipStats: () => get<any>('/admin/membership/stats'),
|
||||||
|
revokeMembership: (userId: string) => post<any>(`/admin/membership/users/${userId}/revoke`),
|
||||||
|
|
||||||
|
// ===== Logs (extended) =====
|
||||||
|
getOperationLogs: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any[]>(`/admin/logs/operation-logs${sp.toString() ? '?' + sp.toString() : ''}`);
|
||||||
|
},
|
||||||
|
getTokenLogs: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any[]>(`/admin/logs/token-logs${sp.toString() ? '?' + sp.toString() : ''}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
// ===== Analytics =====
|
||||||
|
getAnalyticsOverview: (days?: number) => get<any>(`/admin/analytics/overview${days ? '?days=' + days : ''}`),
|
||||||
|
getAnalyticsApiTrends: (days?: number) => get<any>(`/admin/analytics/trends/api-calls${days ? '?days=' + days : ''}`),
|
||||||
|
getAnalyticsTokenTrends: (days?: number) => get<any>(`/admin/analytics/trends/tokens${days ? '?days=' + days : ''}`),
|
||||||
|
getAnalyticsUserTrends: (days?: number) => get<any>(`/admin/analytics/trends/users${days ? '?days=' + days : ''}`),
|
||||||
|
getAnalyticsRevenueTrends: (days?: number) => get<any>(`/admin/analytics/trends/revenue${days ? '?days=' + days : ''}`),
|
||||||
|
getAnalyticsModelUsage: (days?: number) => get<any>(`/admin/analytics/models/usage${days ? '?days=' + days : ''}`),
|
||||||
|
|
||||||
|
// ===== Billing =====
|
||||||
|
getBillingRules: () => get<any>('/admin/billing/rules'),
|
||||||
|
getBillingPackages: () => get<any>('/admin/billing/packages'),
|
||||||
|
getBillingTransactions: (page?: number) => get<any>(`/admin/billing/transactions${page ? '?page=' + page : ''}`),
|
||||||
|
getBillingStats: () => get<any>('/admin/billing/stats/overview'),
|
||||||
|
|
||||||
|
// ===== Tenant =====
|
||||||
|
getTenants: (page?: number) => get<any>(`/admin/tenant/list${page ? '?page=' + page : ''}`),
|
||||||
|
getTenantStats: () => get<any>('/admin/tenant/stats/overview'),
|
||||||
|
getTenantMembers: (tenantId: string) => get<any>(`/admin/tenant/${tenantId}/members`),
|
||||||
|
createTenant: (params: string) => post<any>(`/admin/tenant/create${params}`),
|
||||||
|
toggleAd: (id: string) => put<any>(`/admin/ads/${id}/toggle`),
|
||||||
|
getAdminApps: () => get<any[]>('/admin/market/apps'),
|
||||||
|
updateApp: (id: string, data: any) => put<any>(`/admin/market/apps/${id}`, data),
|
||||||
|
assignCoupon: (id: string, userId: string) => post<any>(`/admin/market/coupons/${id}/assign`, { user_id: userId }),
|
||||||
|
|
||||||
|
};
|
||||||
// ===== AI自进化API =====
|
// ===== AI自进化API =====
|
||||||
export const evolutionAPI = {
|
export const evolutionAPI = {
|
||||||
// 驾驶舱面板
|
// 驾驶舱面板
|
||||||
@@ -510,4 +798,216 @@ export const evolutionAPI = {
|
|||||||
return get<import('@/types').EvolutionReport[]>(`/evolution/reports${qs}`);
|
return get<import('@/types').EvolutionReport[]>(`/evolution/reports${qs}`);
|
||||||
},
|
},
|
||||||
getReportDetail: (reportId: string) => get<import('@/types').EvolutionReport>(`/evolution/reports/${reportId}`),
|
getReportDetail: (reportId: string) => get<import('@/types').EvolutionReport>(`/evolution/reports/${reportId}`),
|
||||||
|
|
||||||
|
|
||||||
|
// Workflow (Phase 3.6)
|
||||||
|
getWorkflows: (params?: Record<string, any>) =>
|
||||||
|
get<any>('/admin/workflows/?' + new URLSearchParams(params || {}).toString()),
|
||||||
|
getWorkflow: (id: string) =>
|
||||||
|
get<any>(`/admin/workflows/${id}`),
|
||||||
|
getWorkflowStats: () =>
|
||||||
|
get<any>('/admin/workflows/stats'),
|
||||||
|
getWorkflowTemplates: () =>
|
||||||
|
get<any>('/admin/workflows/templates'),
|
||||||
|
createWorkflow: (data: any) =>
|
||||||
|
post<any>('/admin/workflows/', data),
|
||||||
|
updateWorkflow: (id: string, data: any) =>
|
||||||
|
put<any>(`/admin/workflows/${id}`, data),
|
||||||
|
deleteWorkflow: (id: string) =>
|
||||||
|
del<any>(`/admin/workflows/${id}`),
|
||||||
|
toggleWorkflow: (id: string, isActive: boolean) =>
|
||||||
|
post<any>(`/admin/workflows/${id}/toggle?is_active=${isActive}`),
|
||||||
|
executeWorkflow: (id: string, inputText: string) =>
|
||||||
|
post<any>(`/admin/workflows/${id}/execute`, { input_text: inputText }),
|
||||||
|
|
||||||
|
|
||||||
|
// Privacy & Local Agent (Phase G5)
|
||||||
|
getPrivacyStats: () => get<any>('/admin/privacy/stats'),
|
||||||
|
getPrivacyConfig: () => get<any>('/admin/privacy/config'),
|
||||||
|
updatePrivacyConfig: (params: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
Object.entries(params).forEach(([k, v]) => { if (v != null) sp.append(k, String(v)); });
|
||||||
|
return put<any>('/admin/privacy/config?' + sp.toString());
|
||||||
|
},
|
||||||
|
switchPrivacyMode: (mode: string) => post<any>('/admin/privacy/switch-mode?mode=' + encodeURIComponent(mode)),
|
||||||
|
getPrivacyLicenses: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params?.status) sp.append('status', params.status);
|
||||||
|
return get<any>('/admin/privacy/licenses' + (sp.toString() ? '?' + sp.toString() : ''));
|
||||||
|
},
|
||||||
|
generateOfflineLicense: (data: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (data.agent_id) sp.append('agent_id', data.agent_id);
|
||||||
|
sp.append('max_offline_days', String(data.max_offline_days || 7));
|
||||||
|
return post<any>('/admin/privacy/licenses/generate?' + sp.toString());
|
||||||
|
},
|
||||||
|
revokePrivacyLicense: (id: number) => post<any>('/admin/privacy/licenses/' + id + '/revoke'),
|
||||||
|
validatePrivacyLicense: (licenseKey: string) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
sp.append('license_key', licenseKey);
|
||||||
|
return post<any>('/admin/privacy/licenses/validate?' + sp.toString());
|
||||||
|
},
|
||||||
|
getKbSyncStates: () => get<any>('/admin/privacy/kb-sync'),
|
||||||
|
triggerKbSync: (kbId: number, direction: string) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
sp.append('knowledge_base_id', String(kbId));
|
||||||
|
sp.append('sync_direction', direction);
|
||||||
|
return post<any>('/admin/privacy/kb-sync/trigger?' + sp.toString());
|
||||||
|
},
|
||||||
|
getLocalAgents: () => get<any>('/admin/privacy/local-agents'),
|
||||||
|
getPrivacyUsageStats: () => get<any>('/admin/privacy/usage/stats'),
|
||||||
|
getBridgeConfig: () => get<any>('/admin/privacy/bridge-config'),
|
||||||
|
|
||||||
|
// IM Bot Management (Phase 4)
|
||||||
|
getImBotStats: () => get('/admin/im-bot/stats'),
|
||||||
|
getImBotDashboard: () => get('/admin/im-bot/dashboard'),
|
||||||
|
getImBotChannels: (params?: string) => get(`/admin/im-bot/channels${params || ''}`),
|
||||||
|
getImBotChannelDetail: (id: string) => get(`/admin/im-bot/channels/${id}`),
|
||||||
|
testImBotChannel: (id: string) => post(`/admin/im-bot/channels/${id}/test`),
|
||||||
|
activateImBotChannel: (id: string) => post(`/admin/im-bot/channels/${id}/activate`),
|
||||||
|
deactivateImBotChannel: (id: string) => post(`/admin/im-bot/channels/${id}/deactivate`),
|
||||||
|
getImBotRoutes: (params?: string) => get(`/admin/im-bot/routes${params || ''}`),
|
||||||
|
createImBotRoute: (params: string) => post(`/admin/im-bot/routes${params}`),
|
||||||
|
deleteImBotRoute: (id: string) => del(`/admin/im-bot/routes/${id}`),
|
||||||
|
// 个人微信(iLink 协议)原生适配器
|
||||||
|
getWechatConfig: () => get('/admin/im-bot/wechat'),
|
||||||
|
wechatQrcode: () => post('/admin/im-bot/wechat/qrcode'),
|
||||||
|
wechatQrcodeStatus: (params: string) => post(`/admin/im-bot/wechat/qrcode/status${params}`),
|
||||||
|
getWechatStatus: () => get('/admin/im-bot/wechat/status'),
|
||||||
|
disconnectWechat: () => post('/admin/im-bot/wechat/disconnect'),
|
||||||
|
getImBotPlatforms: () => get('/admin/im-bot/platforms'),
|
||||||
|
getImBotWebhookUrl: (platform: string) => get(`/admin/im-bot/webhook-url/${platform}`),
|
||||||
|
getImBotMessages: (params?: string) => get(`/admin/im-bot/messages${params || ''}`),
|
||||||
|
imBotQuickSetup: (params: string) => post(`/admin/im-bot/quick-setup${params}`),
|
||||||
|
|
||||||
|
// 推广系统
|
||||||
|
getPromotionStats: () => get<any>('/admin/promotion/stats'),
|
||||||
|
getPromotions: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v !== undefined && v !== null && v !== '') sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/promotion/promotions${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
createPromotion: (params: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
Object.entries(params).forEach(([k, v]) => { if (v !== undefined && v !== null && v !== '') sp.set(k, String(v)); });
|
||||||
|
return post<any>(`/admin/promotion/promotions${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
updatePromotion: (id: string, params: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
Object.entries(params).forEach(([k, v]) => { if (v !== undefined && v !== null && v !== '') sp.set(k, String(v)); });
|
||||||
|
return put<any>(`/admin/promotion/promotions/${id}${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
deletePromotion: (id: string) => del<any>(`/admin/promotion/promotions/${id}`),
|
||||||
|
togglePromotion: (id: string) => post<any>(`/admin/promotion/promotions/${id}/toggle`),
|
||||||
|
getReferralLinks: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/promotion/referral-links${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
generateReferralLink: (params: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return post<any>(`/admin/promotion/referral-links/generate${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
getReferralRewards: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/promotion/rewards${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
approveReward: (id: string) => post<any>(`/admin/promotion/rewards/${id}/approve`),
|
||||||
|
markRewardPaid: (id: string, params: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return post<any>(`/admin/promotion/rewards/${id}/pay${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
getPromotionLeaderboard: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/promotion/leaderboard${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
regenerateReferralCode: (id: string) => post<any>(`/admin/promotion/referral-links/${id}/regenerate`),
|
||||||
|
getMyReferrals: () => get<any>('/admin/promotion/my-referrals'),
|
||||||
|
getMyRewards: () => get<any>('/admin/promotion/my-rewards'),
|
||||||
|
|
||||||
|
// 成就系统
|
||||||
|
getAchievements: (params?: string) => get<any>(`/admin/achievement/achievements${params || ''}`),
|
||||||
|
getAchievementDetail: (id: string) => get<any>(`/admin/achievement/achievements/${id}`),
|
||||||
|
createAchievement: (params: string) => post<any>(`/admin/achievement/achievements${params}`),
|
||||||
|
updateAchievement: (id: string, params: string) => put<any>(`/admin/achievement/achievements/${id}${params}`),
|
||||||
|
deleteAchievement: (id: string) => del<any>(`/admin/achievement/achievements/${id}`),
|
||||||
|
getUserAchievements: () => get<any>('/admin/achievement/user/achievements'),
|
||||||
|
claimAchievementReward: (id: string) => post<any>(`/admin/achievement/user/achievements/${id}/claim`),
|
||||||
|
checkAchievementProgress: () => post<any>('/admin/achievement/check-progress'),
|
||||||
|
getAchievementLeaderboard: (params?: string) => get<any>(`/admin/achievement/leaderboard${params || ''}`),
|
||||||
|
|
||||||
|
// 多租户管理
|
||||||
|
getTenants: (page?: number, keyword?: string, status?: string) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (page) sp.set('page', String(page));
|
||||||
|
if (keyword) sp.set('keyword', keyword);
|
||||||
|
if (status) sp.set('status', status);
|
||||||
|
sp.set('page_size', '20');
|
||||||
|
return get<any>(`/admin/tenant/list${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
createTenant: (params: string) => post<any>(`/admin/tenant/create${params}`),
|
||||||
|
getTenantDetail: (id: string) => get<any>(`/admin/tenant/${id}`),
|
||||||
|
updateTenant: (id: string, params: string) => put<any>(`/admin/tenant/${id}${params}`),
|
||||||
|
deleteTenant: (id: string) => del<any>(`/admin/tenant/${id}`),
|
||||||
|
getTenantMembers: (tenantId: string, page?: number) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
sp.set('page', String(page || 1));
|
||||||
|
sp.set('page_size', '100');
|
||||||
|
return get<any>(`/admin/tenant/${tenantId}/members?${sp.toString()}`);
|
||||||
|
},
|
||||||
|
addTenantMember: (tenantId: string, params: string) => post<any>(`/admin/tenant/${tenantId}/members/add${params}`),
|
||||||
|
updateTenantMember: (tenantId: string, memberId: string, params: string) => put<any>(`/admin/tenant/${tenantId}/members/${memberId}${params}`),
|
||||||
|
removeTenantMember: (tenantId: string, memberId: string) => del<any>(`/admin/tenant/${tenantId}/members/${memberId}`),
|
||||||
|
getTenantQuotas: (tenantId: string) => get<any>(`/admin/tenant/${tenantId}/quotas`),
|
||||||
|
updateTenantQuota: (tenantId: string, params: string) => put<any>(`/admin/tenant/${tenantId}/quotas${params}`),
|
||||||
|
getTenantInvitations: (tenantId: string) => get<any>(`/admin/tenant/${tenantId}/invitations`),
|
||||||
|
createTenantInvitation: (tenantId: string, params: string) => post<any>(`/admin/tenant/${tenantId}/invitations${params}`),
|
||||||
|
getTenantStats: () => get<any>('/admin/tenant/stats/overview'),
|
||||||
|
|
||||||
|
// 计费与支付
|
||||||
|
getBillingRules: (page?: number) => get<any>(`/admin/billing/rules?page=${page || 1}&page_size=100`),
|
||||||
|
createBillingRule: (params: string) => post<any>(`/admin/billing/rules/create${params}`),
|
||||||
|
updateBillingRule: (id: string, params: string) => put<any>(`/admin/billing/rules/${id}${params}`),
|
||||||
|
deleteBillingRule: (id: string) => del<any>(`/admin/billing/rules/${id}`),
|
||||||
|
getBillingPackages: () => get<any>('/admin/billing/packages'),
|
||||||
|
createBillingPackage: (params: string) => post<any>(`/admin/billing/packages/create${params}`),
|
||||||
|
updateBillingPackage: (id: string, params: string) => put<any>(`/admin/billing/packages/${id}${params}`),
|
||||||
|
deleteBillingPackage: (id: string) => del<any>(`/admin/billing/packages/${id}`),
|
||||||
|
getBillingTransactions: (page?: number) => get<any>(`/admin/billing/transactions?page=${page || 1}&page_size=20`),
|
||||||
|
getInvoices: (page?: number) => get<any>(`/admin/billing/invoices?page=${page || 1}&page_size=20`),
|
||||||
|
generateInvoice: (params: string) => post<any>(`/admin/billing/invoices/generate${params}`),
|
||||||
|
getPaymentConfigs: () => get<any>('/admin/billing/payment-configs'),
|
||||||
|
updatePaymentConfig: (id: string, params: string) => put<any>(`/admin/billing/payment-configs/${id}${params}`),
|
||||||
|
getBillingStats: () => get<any>('/admin/billing/stats/overview'),
|
||||||
|
|
||||||
|
// 数据分析
|
||||||
|
getAnalyticsOverview: (days?: number) => get<any>(`/admin/analytics/overview?days=${days || 30}`),
|
||||||
|
getAnalyticsApiTrends: (days?: number) => get<any>(`/admin/analytics/trends/api-calls?days=${days || 7}`),
|
||||||
|
getAnalyticsTokenTrends: (days?: number) => get<any>(`/admin/analytics/trends/tokens?days=${days || 7}`),
|
||||||
|
getAnalyticsUserTrends: (days?: number) => get<any>(`/admin/analytics/trends/users?days=${days || 30}`),
|
||||||
|
getAnalyticsRevenueTrends: (days?: number) => get<any>(`/admin/analytics/trends/revenue?days=${days || 30}`),
|
||||||
|
getAnalyticsModelUsage: (days?: number) => get<any>(`/admin/analytics/models/usage?days=${days || 30}`),
|
||||||
|
getAnalyticsDashboards: () => get<any>('/admin/analytics/dashboards'),
|
||||||
|
createAnalyticsDashboard: (params: string) => post<any>(`/admin/analytics/dashboards/create${params}`),
|
||||||
|
deleteAnalyticsDashboard: (id: string) => del<any>(`/admin/analytics/dashboards/${id}`),
|
||||||
|
getAnalyticsEvents: (params?: any) => {
|
||||||
|
const sp = new URLSearchParams();
|
||||||
|
if (params) Object.entries(params).forEach(([k, v]) => { if (v) sp.set(k, String(v)); });
|
||||||
|
return get<any>(`/admin/analytics/events${sp.toString() ? `?${sp.toString()}` : ''}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ===== 前台用户个人微信 (iLink 协议 / 微信 ClawBot 插件) =====
|
||||||
|
export const imUserAPI = {
|
||||||
|
getStatus: () => get<any>('/im/wechat/status'),
|
||||||
|
qrcode: () => post<any>('/im/wechat/qrcode'),
|
||||||
|
qrcodeStatus: (qrcode: string) => post<any>(`/im/wechat/qrcode/status?qrcode=${encodeURIComponent(qrcode)}`),
|
||||||
|
disconnect: () => post<any>('/im/wechat/disconnect'),
|
||||||
|
history: () => get<any>('/im/wechat/history'),
|
||||||
};
|
};
|
||||||
Reference in new issue
Block a user