123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- // 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<HealthCheck> createState() => _HealthCheckState();
- }
- class _HealthCheckState extends State<HealthCheck> {
- final controller = Get.find<HealthCheckListController>();
- 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<MedicalController>();
- 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<void> _onResponseClick(ResidentModel value, bool isBtn) async {
- // medicalController.diagnosisDataValue.clear();
- controller.tableData == null;
- controller.update(['health_detail']);
- if (value.physicalExamNumber?.isEmpty ?? true) {
- return;
- }
- List<ExamDTO>? examList = await controller.registrationManager
- .getExamListByPhysicalExamNumberAsync(
- physicalExamNumber: value.physicalExamNumber ?? '');
- List<String> 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: value.name,
- );
- }
- controller.tableData = await Get.find<IDataConvertManager>().getTableData(
- currentExam?.examData ?? '',
- );
- controller.update(['health_detail']);
- // Get.dialog(checkDialog ?? Container());
- controller.healthGuidance = null;
- if (widget.checkKey == "HEITCMC") {
- controller.healthGuidance = _getHealthGuidance(
- currentExam?.examData ?? '',
- );
- }
- }
- MapEntry<String, dynamic>? _getHealthGuidance(String data) {
- MapEntry<String, dynamic>? currentDiagnosis;
- var jsonData = json.decode(data);
- currentDiagnosis =
- MapEntry<String, dynamic>("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<String, String> 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<String, dynamic> storeTypeMap = {
- "Qi_Score": '气虚质',
- "Yang_Score": '阳虚质',
- "Yin_Score": '阴虚质',
- "Tan_Score": '痰虚质',
- "Shi_Score": '湿热质',
- "Xue_Score": '血瘀质',
- "Qiyu_Score": '气郁质',
- "Te_Score": '特禀质',
- "Ping_Score": '平和质',
- };
- Map<int, dynamic> healthGuidanceType = {
- 1: '情志调摄',
- 2: '饮食调养',
- 3: '起居调摄',
- 4: '运动保健',
- 5: '穴位保健',
- 6: '其他',
- };
- Widget _buildDetail() {
- return GetBuilder<HealthCheckListController>(
- 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,
- ),
- ],
- ),
- ],
- );
- },
- );
- }
- }
|