- AI 提示词拆分为 markdown 模块(Prompts/global + modules + rag + router) - 新增 AI 同意门控(用户需同意后才能使用 AI 功能) - 新增 AI 录入草稿存储(AiEntryDraftContracts/EfAiEntryDraftStore/AiEntryDraftRecord) - 新增 AI 意图路由(ai_intent_router) - 新增医疗引用知识库(MedicalCitationKnowledge) - 重构 prompt_manager 和 ai_chat_endpoints - 优化聊天/趋势/档案/抽屉/医生端等多个页面 UI - 新增 agent 插画和趋势指标图标资源 - 删除 HANDOFF-2026-07-17.md
181 lines
4.9 KiB
Dart
181 lines
4.9 KiB
Dart
import '../core/api_client.dart';
|
|
|
|
class HealthService {
|
|
final ApiClient _api;
|
|
HealthService(this._api);
|
|
|
|
Future<Map<String, dynamic>> getLatest() async {
|
|
final res = await _api.get('/api/health-records/latest');
|
|
return res.data['data'] ?? {};
|
|
}
|
|
}
|
|
|
|
class UserService {
|
|
final ApiClient _api;
|
|
UserService(this._api);
|
|
|
|
Future<Map<String, dynamic>?> getProfile() async {
|
|
final res = await _api.get('/api/user/profile');
|
|
return res.data['data'];
|
|
}
|
|
|
|
Future<Map<String, dynamic>?> updateProfile({
|
|
String? name,
|
|
String? gender,
|
|
String? birthDate,
|
|
String? avatarUrl,
|
|
}) async {
|
|
final response = await _api.put(
|
|
'/api/user/profile',
|
|
data: {
|
|
'name': name,
|
|
'gender': gender,
|
|
'birthDate': birthDate,
|
|
'avatarUrl': avatarUrl,
|
|
},
|
|
);
|
|
final data = response.data['data'];
|
|
return data is Map ? Map<String, dynamic>.from(data) : null;
|
|
}
|
|
|
|
Future<Map<String, dynamic>?> getHealthArchive() async {
|
|
final res = await _api.get('/api/user/health-archive');
|
|
return res.data['data'];
|
|
}
|
|
|
|
Future<void> updateHealthArchive(Map<String, dynamic> data) async {
|
|
await _api.put('/api/user/health-archive', data: data);
|
|
}
|
|
|
|
Future<void> deleteAccount() async {
|
|
await _api.delete('/api/user/account');
|
|
}
|
|
}
|
|
|
|
class MedicationService {
|
|
final ApiClient _api;
|
|
MedicationService(this._api);
|
|
|
|
Future<List<Map<String, dynamic>>> getList() async {
|
|
final res = await _api.get('/api/medications');
|
|
final list = res.data['data'] as List? ?? [];
|
|
return list.cast<Map<String, dynamic>>();
|
|
}
|
|
|
|
Future<void> create(Map<String, dynamic> data) async {
|
|
await _api.post('/api/medications', data: data);
|
|
}
|
|
|
|
Future<void> update(String id, Map<String, dynamic> data) async {
|
|
await _api.put('/api/medications/$id', data: data);
|
|
}
|
|
|
|
Future<List<Map<String, dynamic>>> getMedications(String filter) async {
|
|
final params = <String, dynamic>{};
|
|
if (filter.isNotEmpty) params['filter'] = filter;
|
|
final res = await _api.get(
|
|
'/api/medications',
|
|
queryParameters: params.isNotEmpty ? params : null,
|
|
);
|
|
final list = res.data['data'] as List? ?? [];
|
|
return list.cast<Map<String, dynamic>>();
|
|
}
|
|
|
|
Future<void> deleteMedication(String id) async {
|
|
await _api.delete('/api/medications/$id');
|
|
}
|
|
|
|
Future<void> confirm(String id) async {
|
|
await _api.post('/api/medications/$id/confirm');
|
|
}
|
|
|
|
Future<List<Map<String, dynamic>>> getReminders() async {
|
|
final res = await _api.get('/api/medications/reminders');
|
|
final list = res.data['data'] as List? ?? [];
|
|
return list.cast<Map<String, dynamic>>();
|
|
}
|
|
}
|
|
|
|
class DietService {
|
|
final ApiClient _api;
|
|
DietService(this._api);
|
|
|
|
Future<List<Map<String, dynamic>>> getRecords({
|
|
String? date,
|
|
String? mealType,
|
|
}) async {
|
|
final params = <String, dynamic>{};
|
|
if (date != null) params['date'] = date;
|
|
if (mealType != null) params['mealType'] = mealType;
|
|
final res = await _api.get('/api/diet-records', queryParameters: params);
|
|
final list = res.data['data'] as List? ?? [];
|
|
return list.cast<Map<String, dynamic>>();
|
|
}
|
|
|
|
Future<void> create(Map<String, dynamic> data) async {
|
|
await _api.post('/api/diet-records', data: data);
|
|
}
|
|
|
|
Future<void> deleteRecord(String id) async {
|
|
await _api.delete('/api/diet-records/$id');
|
|
}
|
|
|
|
Future<void> updateRecord(String id, Map<String, dynamic> data) async {
|
|
await _api.put('/api/diet-records/$id', data: data);
|
|
}
|
|
}
|
|
|
|
class ConsultationService {
|
|
final ApiClient _api;
|
|
ConsultationService(this._api);
|
|
|
|
Future<List<Map<String, dynamic>>> getDoctors() async {
|
|
final res = await _api.get('/api/doctors');
|
|
final list = res.data['data'] as List? ?? [];
|
|
return list.cast<Map<String, dynamic>>();
|
|
}
|
|
}
|
|
|
|
class FollowUpService {
|
|
final ApiClient _api;
|
|
FollowUpService(this._api);
|
|
|
|
Future<List<Map<String, dynamic>>> getList() async {
|
|
final res = await _api.get('/api/follow-ups');
|
|
final list = res.data['data'] as List? ?? [];
|
|
return list.cast<Map<String, dynamic>>();
|
|
}
|
|
}
|
|
|
|
class ExerciseService {
|
|
final ApiClient _api;
|
|
ExerciseService(this._api);
|
|
|
|
Future<Map<String, dynamic>?> getCurrentPlan() async {
|
|
final res = await _api.get('/api/exercise-plans/current');
|
|
return res.data['data'];
|
|
}
|
|
|
|
Future<void> createPlanSimple(Map<String, dynamic> data) async {
|
|
await _api.post('/api/exercise-plans', data: data);
|
|
}
|
|
|
|
Future<void> deletePlan(String id) async {
|
|
await _api.delete('/api/exercise-plans/$id');
|
|
}
|
|
|
|
Future<void> checkIn(String itemId) async {
|
|
await _api.post('/api/exercise-plans/items/$itemId/checkin');
|
|
}
|
|
|
|
Future<List<Map<String, dynamic>>> getPlans() async {
|
|
final res = await _api.get('/api/exercise-plans');
|
|
return (res.data['data'] as List?)?.cast<Map<String, dynamic>>() ?? [];
|
|
}
|
|
|
|
Future<Map<String, dynamic>?> getPlanDetail(String id) async {
|
|
final res = await _api.get('/api/exercise-plans/$id');
|
|
return res.data['data'];
|
|
}
|
|
}
|