fix: keep working-tree api (chatAPI knowledge_ids compat) but swap adminAPI to full 1346fbb version (+4 post-1346fbb methods) so restored admin pages build without breaking ChatPage

This commit is contained in:
qyyfw committed 2026-07-11 15:53:50 +08:00
1 parent 36e369044a
commit 77952fd63e
1 file changed
+9 -216
+9 -216
View File
@@ -10,7 +10,7 @@ function getToken(): string | null {
} }
// 通用请求方法 // 通用请求方法
export async function request<T>( 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_base_ids?: string[]; use_tools?: boolean }) => sendMessage: (convId: string, data: { content: string; model_id?: string; agent_ids?: string[]; skill_ids?: string[]; knowledge_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),
@@ -723,12 +723,17 @@ export const adminAPI = {
getTenantStats: () => get<any>('/admin/tenant/stats/overview'), getTenantStats: () => get<any>('/admin/tenant/stats/overview'),
getTenantMembers: (tenantId: string) => get<any>(`/admin/tenant/${tenantId}/members`), getTenantMembers: (tenantId: string) => get<any>(`/admin/tenant/${tenantId}/members`),
createTenant: (params: string) => post<any>(`/admin/tenant/create${params}`), createTenant: (params: string) => post<any>(`/admin/tenant/create${params}`),
// ---- 以下 4 个方法为 1346fbb 之后新增, 保留 ----
toggleAd: (id: string) => put<any>(`/admin/ads/${id}/toggle`), toggleAd: (id: string) => put<any>(`/admin/ads/${id}/toggle`),
getAdminApps: () => get<any[]>('/admin/market/apps'), getAdminApps: () => get<any[]>('/admin/market/apps'),
updateApp: (id: string, data: any) => put<any>(`/admin/market/apps/${id}`, data), 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 }), 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 = {
// 驾驶舱面板 // 驾驶舱面板
@@ -798,216 +803,4 @@ 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'),
}; };