feat(miniprogram): 实现小程序透析模块 — 患者端查看 + 医护端录入/审阅
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

审计后续 H1: 补齐小程序端透析功能,对接后端 12 个 API 路由。

新增内容:
- 患者端: 透析记录列表/详情 + 透析处方列表/详情(只读,4 页面)
- 医护端: 透析记录列表/详情/创建 + 处方列表/详情/创建(6 页面)
- Service 层: dialysis.ts(患者端只读)+ doctor/dialysis.ts(医护端 CRUD)
- 集成入口: 医生工作台快捷操作 + 患者"我的"菜单 + 路由注册
- 基础设施: api.delete 扩展支持 data 参数(后端 delete 需要 version)
This commit is contained in:
iven
2026-04-30 16:48:39 +08:00
parent 84fafb0bc5
commit 36a55e116e
27 changed files with 3076 additions and 343 deletions

View File

@@ -0,0 +1,141 @@
import { api } from '../request';
import type { DialysisRecord, DialysisPrescription } from '../dialysis';
// Re-export types for convenience
export type { DialysisRecord, DialysisPrescription };
// ── Request types ─────────────────────────────────────
export interface CreateDialysisRecordReq {
patient_id: string;
dialysis_date: string;
start_time?: string;
end_time?: string;
dry_weight?: number;
pre_weight?: number;
post_weight?: number;
pre_bp_systolic?: number;
pre_bp_diastolic?: number;
post_bp_systolic?: number;
post_bp_diastolic?: number;
pre_heart_rate?: number;
post_heart_rate?: number;
ultrafiltration_volume?: number;
dialysis_duration?: number;
blood_flow_rate?: number;
dialysis_type?: string;
symptoms?: Record<string, unknown>;
complication_notes?: string;
}
export type UpdateDialysisRecordReq = Omit<CreateDialysisRecordReq, 'patient_id'>;
export interface CreateDialysisPrescriptionReq {
patient_id: string;
dialyzer_model?: string;
membrane_area?: number;
dialysate_potassium?: number;
dialysate_calcium?: number;
dialysate_bicarbonate?: number;
anticoagulation_type?: string;
anticoagulation_dose?: string;
target_ultrafiltration_ml?: number;
target_dry_weight?: number;
blood_flow_rate?: number;
dialysate_flow_rate?: number;
frequency_per_week?: number;
duration_minutes?: number;
vascular_access_type?: string;
vascular_access_location?: string;
effective_from?: string;
effective_to?: string;
notes?: string;
}
export type UpdateDialysisPrescriptionReq = Omit<CreateDialysisPrescriptionReq, 'patient_id'>;
export interface DialysisStatistics {
total_records: number;
this_month: number;
type_distribution: Array<{ name: string; value: number }>;
complication_rate: number;
avg_ultrafiltration?: number;
avg_duration?: number;
pending_review: number;
}
// ── Dialysis Records CRUD ─────────────────────────────
export async function listDialysisRecords(
patientId: string,
params?: { page?: number; page_size?: number },
) {
return api.get<{ data: DialysisRecord[]; total: number }>(
`/health/patients/${patientId}/dialysis-records`,
params,
);
}
export async function getDialysisRecord(id: string) {
return api.get<DialysisRecord>(`/health/dialysis-records/${id}`);
}
export async function createDialysisRecord(data: CreateDialysisRecordReq) {
return api.post<DialysisRecord>('/health/dialysis-records', data);
}
export async function updateDialysisRecord(
id: string,
data: UpdateDialysisRecordReq,
version: number,
) {
return api.put<DialysisRecord>(`/health/dialysis-records/${id}`, { ...data, version });
}
export async function deleteDialysisRecord(id: string, version: number) {
return api.delete<void>(`/health/dialysis-records/${id}`, { version });
}
export async function reviewDialysisRecord(id: string, version: number) {
return api.put<DialysisRecord>(`/health/dialysis-records/${id}/review`, { version });
}
// ── Dialysis Prescriptions CRUD ───────────────────────
export async function listDialysisPrescriptions(params?: {
patient_id?: string;
status?: string;
page?: number;
page_size?: number;
}) {
return api.get<{ data: DialysisPrescription[]; total: number }>(
'/health/dialysis-prescriptions',
params,
);
}
export async function getDialysisPrescription(id: string) {
return api.get<DialysisPrescription>(`/health/dialysis-prescriptions/${id}`);
}
export async function createDialysisPrescription(data: CreateDialysisPrescriptionReq) {
return api.post<DialysisPrescription>('/health/dialysis-prescriptions', data);
}
export async function updateDialysisPrescription(
id: string,
data: UpdateDialysisPrescriptionReq,
version: number,
) {
return api.put<DialysisPrescription>(`/health/dialysis-prescriptions/${id}`, { ...data, version });
}
export async function deleteDialysisPrescription(id: string, version: number) {
return api.delete<void>(`/health/dialysis-prescriptions/${id}`, { version });
}
// ── Statistics ────────────────────────────────────────
export async function getDialysisStats() {
return api.get<DialysisStatistics>('/health/admin/statistics/dialysis');
}