controller.dart 4.4 KB

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