feat(web): Web 前端功能完善 — API 扩展 + 组件优化
- 新增 AI 透析分析 API + 药物提醒 API - MediaPicker/ThemeSwitcher/usePaginatedData 优化 - 健康管理页面组件增强(Banner/Consultation/Doctor/MediaLibrary 等) - PluginCRUDPage 导入优化
This commit is contained in:
23
apps/web/src/api/ai/dialysis.ts
Normal file
23
apps/web/src/api/ai/dialysis.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import client from '../client';
|
||||
|
||||
export interface DialysisRiskRequest {
|
||||
patient_id: string;
|
||||
dialysis_session_id?: string;
|
||||
}
|
||||
|
||||
export interface DialysisRiskAssessment {
|
||||
id: string;
|
||||
patient_id: string;
|
||||
risk_level: string;
|
||||
risk_factors: string[];
|
||||
recommendations: string[];
|
||||
kdigo_stage?: string;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export const dialysisRiskApi = {
|
||||
assess: async (data: DialysisRiskRequest) => {
|
||||
const resp = await client.post('/ai/dialysis/risk-assessment', data);
|
||||
return resp.data.data as DialysisRiskAssessment;
|
||||
},
|
||||
};
|
||||
@@ -27,6 +27,10 @@ export const suggestionApi = {
|
||||
const resp = await client.post(`/ai/suggestions/${id}/approve`, { action });
|
||||
return resp.data.data as { id: string; status: string };
|
||||
},
|
||||
execute: async (id: string) => {
|
||||
const resp = await client.post(`/ai/suggestions/${id}/execute`);
|
||||
return resp.data.data as { id: string; status: string };
|
||||
},
|
||||
getComparison: async (id: string) => {
|
||||
const resp = await client.get(`/ai/suggestions/${id}/comparison`);
|
||||
return resp.data.data as ComparisonReport;
|
||||
|
||||
@@ -9,6 +9,42 @@ export interface TypeDistribution {
|
||||
count: number;
|
||||
}
|
||||
|
||||
export interface ProviderInfo {
|
||||
id: string;
|
||||
name: string;
|
||||
provider_type: string;
|
||||
is_active: boolean;
|
||||
model_name?: string;
|
||||
}
|
||||
|
||||
export interface ProviderHealth {
|
||||
provider_id: string;
|
||||
status: string;
|
||||
latency_ms?: number;
|
||||
last_checked_at?: string;
|
||||
}
|
||||
|
||||
export interface QuotaSummary {
|
||||
provider_id: string;
|
||||
quota_limit: number;
|
||||
quota_used: number;
|
||||
quota_remaining: number;
|
||||
period: string;
|
||||
}
|
||||
|
||||
export interface BudgetStatus {
|
||||
total_budget: number;
|
||||
spent: number;
|
||||
remaining: number;
|
||||
period: string;
|
||||
}
|
||||
|
||||
export interface CostEstimate {
|
||||
analysis_type: string;
|
||||
estimated_cost: number;
|
||||
currency: string;
|
||||
}
|
||||
|
||||
export const usageApi = {
|
||||
overview: async () => {
|
||||
const resp = await client.get('/ai/usage/overview');
|
||||
@@ -18,4 +54,24 @@ export const usageApi = {
|
||||
const resp = await client.get('/ai/usage/by-type');
|
||||
return resp.data.data as TypeDistribution[];
|
||||
},
|
||||
listProviders: async () => {
|
||||
const resp = await client.get('/ai/providers');
|
||||
return resp.data.data as ProviderInfo[];
|
||||
},
|
||||
getProvidersHealth: async () => {
|
||||
const resp = await client.get('/ai/providers/health');
|
||||
return resp.data.data as ProviderHealth[];
|
||||
},
|
||||
getQuotaSummary: async () => {
|
||||
const resp = await client.get('/ai/quota/summary');
|
||||
return resp.data.data as QuotaSummary[];
|
||||
},
|
||||
getBudgetStatus: async () => {
|
||||
const resp = await client.get('/ai/budget/status');
|
||||
return resp.data.data as BudgetStatus;
|
||||
},
|
||||
getCostEstimate: async (params: { analysis_type: string }) => {
|
||||
const resp = await client.get('/ai/cost/estimate', { params });
|
||||
return resp.data.data as CostEstimate;
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user