view.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // ignore_for_file: must_be_immutable
  2. import 'dart:convert';
  3. import 'package:fis_jsonrpc/rpc.dart';
  4. import 'package:flutter/foundation.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:get/get.dart';
  7. import 'package:vitalapp/components/no_data_view.dart';
  8. import 'package:vitalapp/managers/interfaces/dictionary.dart';
  9. import 'package:vitalapp/pages/medical/controller.dart';
  10. import 'package:vitalapp/pages/medical/widgets/health_heart_check/health_check_left/index.dart';
  11. import 'package:vitalapp/pages/medical/widgets/health_heart_check/health_check_list/controller.dart';
  12. import 'package:vitalapp/pages/patient/detail/widgets/last_record.dart';
  13. class HeartTableCheck extends GetView<HeartCheckListController> {
  14. HeartTableCheck({
  15. super.key,
  16. this.checkDialog,
  17. required this.checkKey,
  18. });
  19. final String checkKey;
  20. Widget? checkDialog;
  21. @override
  22. Widget build(BuildContext context) {
  23. return Row(
  24. children: [
  25. Expanded(
  26. child: HeartCheckLeft(
  27. onRowTap: (value) async {
  28. final medicalController = await Get.put(MedicalController());
  29. medicalController.diagnosisDataValue.clear();
  30. if (value.physicalExamNumber?.isEmpty ?? true) {
  31. return;
  32. }
  33. ElectrocardiogramRecord? electrocardiogramRecord =
  34. await controller.registrationManager
  35. .getElectrocardiogramRecordByPhysicalExamNumberAsync(
  36. physicalExamNumber: value.physicalExamNumber ?? '',
  37. );
  38. if (electrocardiogramRecord?.examData == null) {
  39. controller.tableData == null;
  40. controller.update(['heart_detail']);
  41. } else {
  42. controller.tableData = await getTableData(
  43. electrocardiogramRecord?.examData ?? '',
  44. );
  45. controller.update(['heart_detail']);
  46. }
  47. if (!kIsWeb) Get.dialog(checkDialog ?? Container());
  48. },
  49. ),
  50. ),
  51. Container(
  52. width: 320,
  53. decoration: BoxDecoration(
  54. border: Border(
  55. left: BorderSide(
  56. color: Colors.grey[300]!,
  57. width: 1,
  58. ),
  59. ),
  60. ),
  61. child: _buildDetail(),
  62. )
  63. ],
  64. );
  65. }
  66. Widget _buildDetail() {
  67. return GetBuilder<HeartCheckListController>(
  68. id: "heart_detail",
  69. builder: (_) {
  70. if (controller.tableData == null || controller.tableData?.length == 0)
  71. return VNoDataView();
  72. return Column(
  73. children: [
  74. LastRecordTable(
  75. columnNames: const ['检测项目', '检测结果', '单位'],
  76. tableData: controller.tableData ?? [[]],
  77. )
  78. ],
  79. );
  80. },
  81. );
  82. }
  83. Future<List<List<String>>> getTableData(String data) async {
  84. var currentDiagnosis = <List<String>>[];
  85. var jsonData = json.decode(data);
  86. List<String> keys = jsonData.keys.toList();
  87. List<DictionaryWithUnitDTO>? dtos = [];
  88. dtos = await Get.find<IDictionaryManager>()
  89. .getDictionaryNameAndUnitByKeysAsync(keys) ??
  90. [];
  91. for (var key in keys) {
  92. if (key == "ECG_POINT" || key == "ECG_POINT12") {
  93. continue;
  94. }
  95. var dto = dtos.firstWhereOrNull((item) => item.key == key);
  96. if (dto == null) {
  97. continue;
  98. }
  99. final value = jsonData[key].toString();
  100. if (value.isEmpty) {
  101. // 不展示空值
  102. continue;
  103. }
  104. currentDiagnosis.add([
  105. dto.name ?? '',
  106. value,
  107. dto.unit ?? '',
  108. ]);
  109. }
  110. return currentDiagnosis;
  111. }
  112. }