import 'package:fis_jsonrpc/rpc.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:vitalapp/architecture/defines.dart'; import 'package:vitalapp/architecture/network_connectivity.dart'; import 'package:vitalapp/architecture/utils/prompt_box.dart'; import 'package:vitalapp/global.dart'; import 'package:vitalapp/managers/interfaces/patient.dart'; import 'package:vitalapp/pages/controllers/crowd_labels.dart'; import 'package:vitalapp/pages/home/controller.dart'; import 'package:vitalapp/pages/medical/controller.dart'; import 'package:vitalapp/pages/patient/detail/controller.dart'; import 'package:fis_common/logger/logger.dart'; import 'state.dart'; class PatientListController extends FControllerBase { final GlobalKey scaffoldKey = GlobalKey(); final state = PatientListState(); final _homeController = Get.find(); final _patientDetailController = Get.find(); // final createPatientController = Get.find(); final _patientManager = Get.find(); final crowdLabelsController = CrowdLabelsController(); void patientListGotoDetail(PatientDTO dto) async { await _patientManager.switchCurrentPatient(dto); logger.i('list切换居民 当前居民是:${dto.patientName} 居民code:${dto.code}'); gotoDetail(dto.code!); } /// 前进到用户详情页面 Future gotoDetail( String code, [ PatientDTO? patientInfoDto, PatientBaseDTO? patientInfo, ]) async { await _patientDetailController.loadData(code: code); // _homeController.updateMenus(); _homeController.switchNavByName("/patient/detail"); //这里应该刷新病人诊断数据缓存 // _medicalController.changePatient.emit(this, code); } Future gotoCreate( String code, [ PatientDTO? patientInfoDto, PatientBaseDTO? patientInfo, ]) async { _homeController.initMenus(); if (patientInfo != null) { _homeController.switchNavByName( "/patient/create", patientInfo.toJson(), ); } } /// 新建档案 void onCreateClicked() { // Get.toNamed( // "/patient/create", // id: 1001, // parameters: {"from": "list"}, // ); _homeController.switchNavByName("/patient/create"); } /// 筛选 void onFilterClicked() { Get.snackbar("提示", "尚未开发此功能"); } @override void onReady() { reloadList(); netChecker.onlineChangedEvent.addListener(_onlineChanged); super.onReady(); } void _onlineChanged(_, e) { state.isOnline = e; } /// 重新加载列表 Future reloadList({bool isFilter = false}) async { busy = true; state.pageIndex = 0; state.dataList = []; if (kIsOnline) { if (!kIsWeb) { var offlineList = await _patientManager.getPagedOfflineList( state.searchString, state.startTime.value, state.endTime.value?.add(const Duration(days: 1)), ); if (offlineList != null) state.appendDataList(offlineList); } } await loadNextPageList(isFilter: isFilter); _loadStatistic(); } /// 加载下一页列表 Future loadNextPageList({bool isFilter = false}) async { busy = true; final request = PatientPageRequest( pageIndex: state.pageIndex + 1, pageSize: state.pageSize, keyword: state.searchString, startTime: state.startTime.value, endTime: state.endTime.value?.add(const Duration(days: 1)), crowdLabels: crowdLabelsController.state.selectedCodes, ); final pagedList = await _patientManager.getPagedList(request); if (pagedList != null) { state.totalCount = pagedList.dataCount; if (pagedList.pageData != null) { state.pageIndex = state.pageIndex + 1; state.appendDataList(pagedList.pageData!); } } busy = false; } Future removePatient(String code) async { setBusy("正在删除..."); final result = await _patientManager.removePatient(code); cancelBusy(); if (result) { PromptBox.toast("删除成功"); await Future.delayed(const Duration(milliseconds: 500)); await reloadList(); } else { PromptBox.toast("删除失败"); } } Future _loadStatistic() async { final result = await _patientManager.getStatistic(); state.statisticTodayCount = result.todayCount; state.statisticTotalCount = result.count; } @override void onClose() { netChecker.onlineChangedEvent.removeListener(_onlineChanged); } }