exam_ability_radio.dart 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. // ignore_for_file: must_be_immutable
  2. import 'dart:convert';
  3. import 'package:fis_common/logger/logger.dart';
  4. import 'package:fis_jsonrpc/rpc.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:get/get.dart';
  7. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  8. import 'package:vitalapp/components/button.dart';
  9. import 'package:vitalapp/managers/interfaces/exam.dart';
  10. import 'package:vitalapp/pages/check/models/form.dart';
  11. import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_radio_and_select.dart';
  12. import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_self_care_card.dart';
  13. import 'package:vitalapp/pages/check/widgets/exam_title.dart';
  14. import 'package:vitalapp/pages/self_care_ability_assessment/view.dart';
  15. import 'package:vitalapp/store/store.dart';
  16. /// 特殊组件,老年人自理评估
  17. class ExamAbilityRadio extends StatefulWidget {
  18. ExamAbilityRadio({
  19. super.key,
  20. required this.currentFormObject,
  21. required this.options,
  22. required this.selectRaidoChange,
  23. required this.currentSelected,
  24. required this.patientCode,
  25. });
  26. final FormObject currentFormObject;
  27. final List<Option> options;
  28. final Function selectRaidoChange;
  29. final String currentSelected;
  30. final String patientCode;
  31. @override
  32. State<ExamAbilityRadio> createState() => _ExamAbilityRadioState();
  33. }
  34. class _ExamAbilityRadioState extends State<ExamAbilityRadio> {
  35. final _examManager = Get.find<IExamManager>();
  36. String _currentSelfCare = "";
  37. Future<void> getPatientExamList() async {
  38. try {
  39. Store.app.setBusy("加载中");
  40. // 获取当前病人所有的量表
  41. var result = await _examManager.getPatientExamByPageAsync(
  42. widget.patientCode,
  43. "LNRZLNLPG",
  44. );
  45. Store.app.cancelBusy();
  46. if (result != null) {
  47. ExamConclusionDTO examConclusion = await Get.dialog(ExamSelfCareCard(
  48. conclusionList: result,
  49. currentSelfCare: _currentSelfCare,
  50. ));
  51. if (examConclusion.examData != null) {
  52. _currentSelfCare = examConclusion.code!;
  53. String examData = examConclusion.examData!;
  54. String? selfCareScore = jsonDecode(examData)['SelfCareScore'];
  55. if (selfCareScore != null) {
  56. selectRaidoChangeByScore(int.parse(selfCareScore));
  57. }
  58. }
  59. }
  60. } catch (e) {
  61. PromptBox.toast("获取老年人自理评估结果失败");
  62. logger.e("getPatientExamList 获取自理评估结果" + e.toString());
  63. Store.app.cancelBusy();
  64. }
  65. }
  66. void selectRaidoChangeByScore(int score) {
  67. Option currentOption = Option();
  68. if (score <= 3) {
  69. currentOption = Option(label: "可自理(0~3分)", value: "1");
  70. } else if (score <= 8) {
  71. currentOption = Option(label: "轻度依赖(4~8分)", value: "2");
  72. } else if (score <= 18) {
  73. currentOption = Option(label: "中度依赖(9~18分)", value: "3");
  74. } else {
  75. currentOption = Option(label: "不能自理(19~24分)", value: "4");
  76. }
  77. if (currentOption.value != widget.currentSelected) {
  78. widget.selectRaidoChange(currentOption);
  79. }
  80. }
  81. @override
  82. Widget build(BuildContext context) {
  83. if (widget.currentFormObject.showLimit ?? true) {
  84. return Stack(
  85. children: [
  86. ExamCardRadioSelect(
  87. titleText: ExamTitle(
  88. label: widget.currentFormObject.label,
  89. titleType: '(单选)',
  90. ),
  91. title: widget.currentFormObject.label ?? '',
  92. content: Stack(
  93. children: [
  94. Container(
  95. padding: const EdgeInsets.symmetric(
  96. horizontal: 5,
  97. ),
  98. alignment: widget.currentFormObject.span == 24
  99. ? Alignment.centerLeft
  100. : Alignment.center,
  101. width: double.infinity,
  102. child: Wrap(
  103. children: widget.options
  104. .map(
  105. (e) => Container(
  106. padding: const EdgeInsets.all(7),
  107. child: InkWell(
  108. onTap: () => widget.selectRaidoChange(e),
  109. borderRadius: BorderRadius.circular(50),
  110. child: Ink(
  111. decoration: BoxDecoration(
  112. border: Border.all(
  113. color: widget.currentSelected == e.value
  114. ? Colors.blue
  115. : Colors.black26,
  116. ),
  117. borderRadius: const BorderRadius.all(
  118. Radius.circular(50),
  119. ),
  120. color: widget.currentSelected == e.value
  121. ? Colors.blue
  122. : Colors.transparent,
  123. ),
  124. child: Container(
  125. padding: const EdgeInsets.all(15),
  126. alignment: Alignment.center,
  127. width: 250,
  128. child: FittedBox(
  129. child: Text(
  130. e.label ?? '',
  131. style: TextStyle(
  132. fontSize: 20,
  133. color: widget.currentSelected == e.value
  134. ? Colors.white
  135. : Colors.black54,
  136. ),
  137. ),
  138. ),
  139. ),
  140. ),
  141. ),
  142. ),
  143. )
  144. .toList(),
  145. ),
  146. ),
  147. ],
  148. ),
  149. ),
  150. Positioned(
  151. top: 16,
  152. right: 16,
  153. child: Container(
  154. width: 180,
  155. child: VButton(
  156. label: '自理能力评估',
  157. onTap: () async {
  158. String? selfCareScore =
  159. await Get.dialog(SelfCareAbilityAssessmentView());
  160. if (selfCareScore != null) {
  161. _currentSelfCare = "";
  162. selectRaidoChangeByScore(int.parse(selfCareScore));
  163. }
  164. },
  165. ),
  166. ),
  167. ),
  168. Positioned(
  169. right: 206,
  170. top: 16,
  171. child: Container(
  172. width: 180,
  173. child: VButton(
  174. label: '导入结果',
  175. onTap: () async => {
  176. await getPatientExamList(),
  177. },
  178. ),
  179. ),
  180. ),
  181. ],
  182. );
  183. } else {
  184. return Container();
  185. }
  186. }
  187. }