controller.dart 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. import 'dart:convert';
  2. import 'package:fis_jsonrpc/services/followUp.m.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart';
  5. import 'package:flutter_inappwebview/flutter_inappwebview.dart';
  6. import 'package:get/get.dart';
  7. import 'package:vitalapp/architecture/defines.dart';
  8. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  9. import 'package:vitalapp/managers/interfaces/follow_up.dart';
  10. import 'package:vitalapp/pages/check/follow_up/controller.dart';
  11. import 'package:vitalapp/pages/check/follow_up/widgets/follow_up_from.dart';
  12. import 'package:vitalapp/pages/check/follow_up_record/state.dart';
  13. import 'package:vitalapp/pages/check/widgets/configurable_card.dart';
  14. import 'package:vitalapp/store/store.dart';
  15. class FollowUpRecordController extends FControllerBase {
  16. FollowUpRecordController();
  17. final state = FollowUpRecordState();
  18. final _followUpManager = Get.find<IFollowUpManager>();
  19. late String patientCode;
  20. late String patientName;
  21. late FollowUpController _followUpController;
  22. @override
  23. void onReady() {
  24. super.onReady();
  25. _initData();
  26. }
  27. _initData() {
  28. update(["contract_records"]);
  29. patientCode = Store.user.currentSelectPatientInfo?.code ?? '';
  30. patientName = Store.user.currentSelectPatientInfo?.patientName ?? '';
  31. _getFollowUpRecordList();
  32. _followUpController = Get.put(FollowUpController());
  33. }
  34. Future<void> _getFollowUpRecordList() async {
  35. try {
  36. var result = await _followUpManager.getFollowUpRecordList(
  37. followUpKeyValue.keys.toList(), patientCode);
  38. if (result != null) {
  39. state.followUpDTOList = result;
  40. }
  41. } catch (e) {
  42. return;
  43. }
  44. }
  45. Future<void> updateFollowUp(key, code, data) async {
  46. List<String> followUpPhotos = [];
  47. if (_followUpController.state.followUpPhoto?.isNotEmpty ?? false) {
  48. followUpPhotos = [_followUpController.state.followUpPhoto!];
  49. }
  50. final result = await _followUpManager.updateFollowUp(
  51. UpdateFollowUpRequest(
  52. key: key,
  53. followUpData: data,
  54. followUpTime: _followUpController.state.followUpTime,
  55. nextFollowUpTime: _followUpController.state.nextFollowUpTime,
  56. followUpMode: _followUpController.state.followUpMode ??
  57. FollowUpModeEnum.Outpatient,
  58. code: code,
  59. followUpPhotos: followUpPhotos,
  60. ),
  61. );
  62. if (result ?? false) {
  63. PromptBox.toast('保存成功');
  64. } else {
  65. PromptBox.toast('保存失败');
  66. }
  67. }
  68. ///读取静态Html
  69. Future<String> loadingLocalAsset(String key) async {
  70. String tableName = "";
  71. if (key == 'GXY') {
  72. tableName = 'assets/docs/highBloodPressureTable.html';
  73. } else if (key == 'TNB') {
  74. tableName = 'assets/docs/diabetesTable.html';
  75. }
  76. ///加载
  77. String htmlData = await rootBundle.loadString(tableName);
  78. print("加载数据完成 $htmlData");
  79. return htmlData;
  80. }
  81. Future<List> getFollowUpTableData(FollowUpRecordDTO dto, int index) async {
  82. var currentFollowUp = dto.followUpRecordDatas?[index];
  83. var followUpTableData = await _followUpManager
  84. .getFollowUpRecordListByYearAsync(GetFollowUpRecordListByYearRequest(
  85. year: (currentFollowUp?.followUpTime?.year ?? DateTime.now().year)
  86. .toString(),
  87. keys: [currentFollowUp?.key ?? ''],
  88. patientCode: patientCode,
  89. ));
  90. List tableData = [];
  91. followUpTableData?.first.followUpRecordDatas?.forEach((element) {
  92. Map followUp = {
  93. "Follow_Time": "YYYY年MM月DD日",
  94. "Follow_Type": '${(element.followUpMode?.index ?? 0) + 1} ',
  95. "Next_Follow_Up_Time": "YYYY年MM月DD日",
  96. };
  97. followUp.addAll(jsonDecode(element.followUpData ?? ''));
  98. tableData.add(followUp);
  99. });
  100. return tableData;
  101. }
  102. Future<String> loadLocalAsset(String key) async {
  103. String tableName = "";
  104. if (key == 'GXY') {
  105. tableName = 'assets/docs/highBloodPressureTable.html';
  106. } else if (key == 'TNB') {
  107. tableName = 'assets/docs/diabetesTable.html';
  108. }
  109. ///加载
  110. String htmlData = await rootBundle.loadString(tableName);
  111. print("加载数据完成 $htmlData");
  112. return htmlData;
  113. }
  114. Future<void> showDialogBox(String initialData, String jsonData) async {
  115. Get.dialog(Column(
  116. children: [
  117. Container(
  118. width: 900,
  119. alignment: Alignment.centerRight,
  120. padding: const EdgeInsets.only(right: 20, top: 10),
  121. color: Colors.white,
  122. child: IconButton(
  123. onPressed: () {
  124. Get.back();
  125. },
  126. icon: const Icon(
  127. Icons.close,
  128. ),
  129. ),
  130. ),
  131. Expanded(
  132. child: SizedBox(
  133. width: 900,
  134. child: InAppWebView(
  135. initialData: InAppWebViewInitialData(
  136. data: '<body style="padding:30px 100px;">$initialData </body>',
  137. mimeType: 'text/html',
  138. encoding: 'utf-8',
  139. ),
  140. onWebViewCreated: (controller) {
  141. controller.evaluateJavascript(
  142. source: "window.tableData = $jsonData;");
  143. },
  144. onConsoleMessage: (controller, consoleMessage) {
  145. // print(consoleMessage);
  146. },
  147. ),
  148. ),
  149. ),
  150. ],
  151. ));
  152. }
  153. Future<void> toFollowUpDetailPage(int index, FollowUpRecordDTO dto) async {
  154. var tableData = await getFollowUpTableData(dto, index);
  155. var initialData =
  156. await loadLocalAsset(dto.followUpRecordDatas?[index].key ?? '');
  157. var jsonData = jsonEncode(tableData);
  158. showDialogBox(initialData, jsonData);
  159. }
  160. toCheckPage(FollowUpRecordDataDTO dataDTO) async {
  161. _followUpController.state.followUpTime = dataDTO.followUpTime;
  162. _followUpController.state.nextFollowUpTime = dataDTO.nextFollowUpTime;
  163. _followUpController.state.followUpMode = dataDTO.followUpMode;
  164. Get.to(
  165. ConfigurableCard(
  166. cardKey: dataDTO.key!,
  167. examData: dataDTO.followUpData,
  168. followUpWidget: const FollowUpFrom(),
  169. patientCode: patientCode,
  170. callBack: (key, code, data) async {
  171. await updateFollowUp(key, dataDTO.code, data);
  172. _getFollowUpRecordList();
  173. },
  174. ),
  175. transition: Transition.rightToLeft,
  176. );
  177. }
  178. final Map<String, String> followUpKeyValue = {
  179. 'FJHSFFW': "肺结核随访服务",
  180. 'FJHRHSF': "肺结核入户随访",
  181. 'GXB': "冠心病",
  182. 'NCZ': "脑卒中",
  183. 'YZJSZASFFW': "严重精神障碍随访服务",
  184. 'YZJSZAGRXXBC': "严重精神障碍个人信息补充",
  185. 'TNB': "2型糖尿病",
  186. 'GXY': "高血压",
  187. 'LNRZYYJKGLFWJL': "老年人中医药健康管理服务记录表",
  188. 'LNRSHZLNLPGB': "老年人生活自理能力评估表",
  189. 'YCF_CH42TJKJCLB': "产后42天健康检查列表",
  190. 'YCF_CHFSLB': "产后访视列表",
  191. 'YCF_2_5CCQSFLB': "2~5次产前随访列表",
  192. 'YCF_DYCCQJCLB': "第一次产前检查列表",
  193. 'YCF_JBXX': "基本信息",
  194. 'ET_ZYYJKGLLB': "儿童中医药健康管理列表",
  195. 'ET_3_6SETJKJCLB': "3~6岁儿童健康检查列表",
  196. 'ET_1_2SETJKJCLB': "1~2岁儿童健康检查列表",
  197. 'ET_1SNETJKJCLB': "1岁内儿童健康检查列表",
  198. 'ET_XSEFSLB': "新生儿访视列表",
  199. };
  200. String getFollowUpValueByKey(String key) {
  201. if (followUpKeyValue[key] != null) {
  202. return followUpKeyValue[key]!;
  203. } else {
  204. return "";
  205. }
  206. }
  207. String followUpStateTransition(FollowUpStateEnum state) {
  208. switch (state) {
  209. case FollowUpStateEnum.NoFollowUp:
  210. return "未随访";
  211. case FollowUpStateEnum.FollowUpVisit:
  212. return "已随访";
  213. case FollowUpStateEnum.Cancelled:
  214. return "已作废";
  215. default:
  216. return "";
  217. }
  218. }
  219. MaterialColor followUpStateColors(FollowUpStateEnum state) {
  220. switch (state) {
  221. case FollowUpStateEnum.NoFollowUp:
  222. return Colors.grey;
  223. case FollowUpStateEnum.Cancelled:
  224. return Colors.red;
  225. case FollowUpStateEnum.FollowUpVisit:
  226. return Colors.green;
  227. default:
  228. return Colors.blue;
  229. }
  230. }
  231. String getFollowUpMode(FollowUpModeEnum? modeEnum) {
  232. switch (modeEnum) {
  233. case FollowUpModeEnum.Outpatient:
  234. return "门诊";
  235. case FollowUpModeEnum.Phone:
  236. return "电话";
  237. case FollowUpModeEnum.Visit:
  238. return "家庭";
  239. default:
  240. return "";
  241. }
  242. }
  243. }