controller.dart 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import 'dart:convert';
  2. import 'package:fis_jsonrpc/rpc.dart';
  3. import 'package:get/get.dart';
  4. import 'package:intl/intl.dart';
  5. import 'package:vitalapp/architecture/defines.dart';
  6. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  7. import 'package:vitalapp/global.dart';
  8. import 'package:vitalapp/managers/interfaces/contract.dart';
  9. import 'package:vitalapp/managers/interfaces/contract_template.dart';
  10. import 'package:vitalapp/pages/home/controller.dart';
  11. import 'package:vitalapp/store/store.dart';
  12. import 'state.dart';
  13. class ContractTemplateController extends FControllerBase {
  14. final state = ContractTemplateControllerState();
  15. final contractTemplateManager = Get.find<IContractTemplateManager>();
  16. final _contractManager = Get.find<IContractManager>();
  17. PatientDTO patient = PatientDTO();
  18. String servicePackageNames = "";
  19. String servicePackageCodes = "";
  20. String serviceTime = "1";
  21. String serviceStartDate = "";
  22. String base64Image = "";
  23. String notes = "";
  24. @override
  25. void onInit() {
  26. final p = Get.parameters;
  27. state.templateCode = p["templateCode"]!;
  28. patient = PatientDTO.fromJson(json.decode(p["patientInfo"]!));
  29. servicePackageNames = p["servicePackageNames"] ?? '';
  30. servicePackageCodes = p["servicePackageCodes"] ?? '';
  31. serviceTime = p["serviceTime"] ?? '1';
  32. serviceStartDate = p["serviceStartDate"] ?? '';
  33. base64Image = p["base64Image"] ?? '';
  34. notes = p["notes"] ?? '';
  35. super.onInit();
  36. }
  37. @override
  38. void onReady() {
  39. super.onReady();
  40. loadData();
  41. }
  42. Future<void> loadData() async {
  43. final dto = await contractTemplateManager
  44. .getContractTemplateDetail(state.templateCode);
  45. if (dto != null) {
  46. state.templateContent = dto.templateContent ?? '';
  47. getkey();
  48. }
  49. }
  50. void getkey() {
  51. RegExp regExp = RegExp(r'#(.*?)#');
  52. // Iterable<Match> matches = regExp.allMatches(state.templateContent);
  53. // for (Match match in matches) {
  54. // String? key = match.group(1);
  55. // }
  56. String replacedString = state.templateContent.replaceAllMapped(
  57. regExp,
  58. (match) {
  59. String? key = match.group(1);
  60. String value = getValueForKey(key ?? ''); // 自定义函数,根据键获取真实值
  61. return value;
  62. },
  63. );
  64. state.templateContent = replacedString;
  65. }
  66. Future<void> createContractRecord() async {
  67. final result = await _contractManager.createContractRecordAsync(
  68. CreateContractRecordRequest(
  69. contractedPatient: patient.code,
  70. contractedDoctor: Store.user.userCode,
  71. contractedTime: DateTime.now(),
  72. serviceStartDate: DateTime.parse(serviceStartDate),
  73. serviceEndDate: DateTime.parse(serviceStartDate)
  74. .add(Duration(days: 365 * int.parse(serviceTime))),
  75. contractedFileUrl: state.templateContent,
  76. servicePacks: servicePackageCodes.split('、'),
  77. photos: ["data:image/png;base64,$base64Image"],
  78. notes: notes,
  79. ),
  80. );
  81. if (result != null && result.isNotEmpty) {
  82. PromptBox.toast("签约成功");
  83. }
  84. }
  85. Future<void> submitContract() async {
  86. if (!kIsOnline) {
  87. // 不支持离线签约
  88. PromptBox.toast("请检查网络连接");
  89. return;
  90. }
  91. await createContractRecord();
  92. Get.back();
  93. await Future.delayed(const Duration(milliseconds: 100));
  94. Get.back();
  95. // Get.offNamedUntil("/contract/contract_records", (route) => false);
  96. }
  97. String getValueForKey(String key) {
  98. // 根据键获取真实值的逻辑
  99. // 这里可以根据你的实际需求进行相应的处理
  100. if (key == 'doctorName') {
  101. return Store.user.displayName;
  102. } else if (key == 'principalName') {
  103. return Store.user.principalName;
  104. } else if (key == 'doctorTel') {
  105. return Store.user.principalPhone;
  106. } else if (key == 'serviceTel') {
  107. return Store.user.organizationPhone;
  108. } else if (key == 'serviceAgency') {
  109. return Store.user.organizationName;
  110. } else if (key == 'patientName') {
  111. return patient.patientName ?? '';
  112. } else if (key == 'patientAddress') {
  113. return patient.patientAddress ?? '';
  114. } else if (key == 'cardNo') {
  115. return patient.cardNo ?? '';
  116. } else if (key == 'phone') {
  117. return patient.phone ?? '';
  118. } else if (key == 'servicesPackageContent') {
  119. return servicePackageNames;
  120. } else if (key == 'signaturePartyA') {
  121. if (Store.user.signature.isEmpty ||
  122. !Store.user.signature.contains("http")) {
  123. return '';
  124. } else {
  125. return '<img src=${Store.user.signature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
  126. }
  127. } else if (key == 'signaturePartyB') {
  128. if (state.userSignature.isEmpty) {
  129. return '';
  130. } else {
  131. return '<img src=${state.userSignature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
  132. }
  133. } else if (key == 'signatureDate') {
  134. final now = DateTime.now();
  135. final formatter = DateFormat('yyyy-M-d');
  136. final dateArr = formatter.format(now).split('-');
  137. return "${dateArr[0]}年${dateArr[1]}月${dateArr[2]}日";
  138. } else if (key == 'teamName') {
  139. return Store.user.teamName;
  140. }
  141. return ''; // 如果找不到对应的键值,可以返回null或者其他默认值
  142. }
  143. }