// ignore_for_file: must_be_immutable import 'dart:convert'; import 'package:fis_jsonrpc/rpc.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:vitalapp/architecture/types/index.dart'; import 'package:vitalapp/components/no_data_view.dart'; import 'package:vitalapp/managers/interfaces/data_convert.dart'; import 'package:vitalapp/managers/interfaces/dictionary.dart'; import 'package:vitalapp/managers/interfaces/models/exce_keys.dart'; import 'package:vitalapp/pages/medical/controller.dart'; import 'package:vitalapp/pages/medical/widgets/health_check/health_check_left/index.dart'; import 'package:vitalapp/pages/medical/widgets/health_check/health_check_list/controller.dart'; import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart'; import 'package:vitalapp/pages/patient/detail/widgets/last_record.dart'; class HealthCheck extends StatefulWidget { HealthCheck({ super.key, this.checkDialog, required this.checkKey, this.isBiochemOrBlood = false, this.editBiochemOrBlood, }); final String checkKey; Widget? checkDialog; ValueCallback? editBiochemOrBlood; /// 生化或者血常规 bool? isBiochemOrBlood; @override State createState() => _HealthCheckState(); } class _HealthCheckState extends State { final controller = Get.find(); final medicalController = Get.put(MedicalController()); ResidentModel currentResident = ResidentModel(idNumber: ""); @override void initState() { medicalController.onSelectExam.addListener(selectExamEvent); super.initState(); } @override void dispose() { medicalController.onSelectExam.removeListener(selectExamEvent); Get.delete(); super.dispose(); } void selectExamEvent(sender, e) async { if (e) { await _onResponseClick(currentResident, false); } } @override Widget build(BuildContext context) { return Row( children: [ Expanded( child: HealthCheckLeft( onRowTap: (value) async { currentResident = value; await _onResponseClick(value, false); }, onCheckTap: (value) async { /// 这是表格选中 controller.currectSelected = controller.residentList.indexOf(value); currentResident = value; controller.update(["healthCheck_table"]); await _onResponseClick(value, true); }, ), ), Container( width: 320, decoration: BoxDecoration( border: Border( left: BorderSide( color: Colors.grey[300]!, width: 1, ), ), ), child: _buildDetail(), ) ], ); } Future _onResponseClick(ResidentModel value, bool isBtn) async { // medicalController.diagnosisDataValue.clear(); controller.tableData == null; controller.update(['health_detail']); if (value.physicalExamNumber?.isEmpty ?? true) { return; } List? examList = await controller.registrationManager .getExamListByPhysicalExamNumberAsync( physicalExamNumber: value.physicalExamNumber ?? ''); List sourceKeys = [widget.checkKey]; if (widget.checkKey == "HEIBiochemical") { sourceKeys.addAll(ExcelTemplateKeys.AllBiochemicalKeys); } else if (widget.checkKey == "HEIBloodRoutine") { sourceKeys.addAll(ExcelTemplateKeys.AllBloodRoutineKeys); } ExamDTO? currentExam = examList ?.firstWhereOrNull((element) => sourceKeys.contains(element.key)); if (currentExam?.examData != null) { medicalController.diagnosisDataValue = jsonDecode(currentExam?.examData ?? ''); } else { medicalController.diagnosisDataValue = {}; } /// 生化或者血常规暂时的特殊处理 if ((widget.isBiochemOrBlood ?? false) && currentExam != null && isBtn) { widget.editBiochemOrBlood!.call(currentExam); return; } if (isBtn) { Get.dialog( widget.checkDialog ?? Container(), arguments: { "name": value.name, "examData": currentExam?.examData ?? '', }, ); } controller.tableData = await Get.find().getTableData( currentExam?.examData ?? '', ); controller.update(['health_detail']); // Get.dialog(checkDialog ?? Container()); controller.healthGuidance = null; if (widget.checkKey == "HEITCMC") { controller.healthGuidance = _getHealthGuidance( currentExam?.examData ?? '', ); } } MapEntry? _getHealthGuidance(String data) { MapEntry? currentDiagnosis; var jsonData = json.decode(data); currentDiagnosis = MapEntry("HealthGuidance", jsonData["HealthGuidance"]); controller.CurrentConstitution = jsonData["PhysicalConclusion"]; return currentDiagnosis; } String _getHealthGuidanceResult(dynamic data) { String result = ""; if (data != null) { var jsonData = json.decode(data.toString()); for (var element in jsonData) { result += (healthGuidanceType[element] ?? '') + " "; } } return result; } Map typeMap = { 'Peaceful_Quality': "Ping_Score", "Yang_Deficiency_Substance": "Yang_Score", "Idiosyncratic_Quality": "Te_Score", "Qi_Stagnation_Constitution": "Qiyu_Score", "Blood_Stasis_Substance": "Xue_Score", "Damp-heat_constitution": "Shi_Score", "Phlegm-dampness_constitution": "Tan_Score", "Yin_Deficiency_Substance": "Yin_Score", "Qi_Deficiency_Constitution": "Qi_Score", }; Map storeTypeMap = { "Qi_Score": '气虚质', "Yang_Score": '阳虚质', "Yin_Score": '阴虚质', "Tan_Score": '痰虚质', "Shi_Score": '湿热质', "Xue_Score": '血瘀质', "Qiyu_Score": '气郁质', "Te_Score": '特禀质', "Ping_Score": '平和质', }; Map healthGuidanceType = { 1: '情志调摄', 2: '饮食调养', 3: '起居调摄', 4: '运动保健', 5: '穴位保健', 6: '其他', }; Widget _buildDetail() { return GetBuilder( id: "health_detail", builder: (_) { if (controller.tableData == null || controller.tableData?.length == 0) return VNoDataView(); return Column( children: [ LastRecordTable( columnNames: const ['检测项目', '检测结果', '单位'], tableData: controller.tableData ?? [[]], checkKey: controller.checkKey, ), if (controller.healthGuidance != null) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "体质结果:${storeTypeMap[controller.CurrentConstitution] ?? ''}", style: TextStyle(fontSize: 20), ), if (controller.healthGuidance?.value != null) Text( "中医保健指导:${_getHealthGuidanceResult(controller.healthGuidance?.value)}", style: TextStyle(fontSize: 20), softWrap: true, ), SizedBox( height: 200, ), ], ), ], ); }, ); } }