controller.dart 4.4 KB

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