controller.dart 8.6 KB

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