import 'dart:convert'; import 'package:fis_common/logger/logger.dart'; import 'package:fis_jsonrpc/rpc.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import 'package:vitalapp/architecture/defines.dart'; import 'package:vitalapp/architecture/utils/prompt_box.dart'; import 'package:vitalapp/global.dart'; import 'package:vitalapp/managers/interfaces/contract.dart'; import 'package:vitalapp/managers/interfaces/contract_template.dart'; import 'package:vitalapp/store/store.dart'; import 'state.dart'; class ContractTemplateController extends FControllerBase { final state = ContractTemplateControllerState(); final contractTemplateManager = Get.find(); final _contractManager = Get.find(); PatientDTO patient = PatientDTO(); String servicePackageNames = ""; String servicePackageCodes = ""; String serviceTime = "1"; String serviceStartDate = ""; String base64Image = ""; String notes = ""; String doctorName = ""; String principalName = ""; String doctorPhone = ""; String preceptorName = ""; String patientPhone = ""; @override void onInit() { final p = Get.parameters; state.templateCode = p["templateCode"]!; patient = PatientDTO.fromJson(json.decode(p["patientInfo"]!)); servicePackageNames = p["servicePackageNames"] ?? ''; servicePackageCodes = p["servicePackageCodes"] ?? ''; serviceTime = p["serviceTime"] ?? '1'; serviceStartDate = p["serviceStartDate"] ?? ''; base64Image = p["base64Image"] ?? ''; notes = p["notes"] ?? ''; doctorName = p["doctorName"] ?? ''; principalName = p["principalName"] ?? ''; doctorPhone = p["doctorPhone"] ?? ''; preceptorName = p["preceptorName"] ?? ''; patientPhone = p["patientPhone"] ?? ''; super.onInit(); } @override void onReady() { super.onReady(); loadData(); } Future loadData() async { final dto = await contractTemplateManager .getContractTemplateDetail(state.templateCode); if (dto != null) { state.templateContent = dto.templateContent ?? ''; getkey(); } } void getkey() { RegExp regExp = RegExp(r'#(.*?)#'); // Iterable matches = regExp.allMatches(state.templateContent); // for (Match match in matches) { // String? key = match.group(1); // } String replacedString = state.templateContent.replaceAllMapped( regExp, (match) { String? key = match.group(1); String value = getValueForKey(key ?? ''); // 自定义函数,根据键获取真实值 return value; }, ); state.templateContent = replacedString; } Future createContractRecord() async { final result = await _contractManager.createContractRecordAsync( CreateContractRecordRequest( contractedPatient: patient.code, contractedDoctor: Store.user.userCode, contractedTime: DateTime.now(), serviceStartDate: DateTime.parse(serviceStartDate), serviceEndDate: DateTime.parse(serviceStartDate) .add(Duration(days: 365 * int.parse(serviceTime))), contractedFileUrl: state.templateContent, servicePacks: servicePackageCodes.split('、'), photos: ["data:image/png;base64,$base64Image"], notes: notes, ), ); if (result != null && result.isNotEmpty) { PromptBox.toast("签约成功"); } } Future submitContract() async { Store.app.busy = true; try { if (!kIsOnline) { // 不支持离线签约 PromptBox.toast("请检查网络连接"); return; } logger.i( "ContractTemplateController submitContract,patient.code:${patient.code}"); await createContractRecord(); } catch (e) { logger.i( "ContractTemplateController submitContract fail,patient.code:${patient.code}"); } Store.app.busy = false; Get.back(); await Future.delayed(const Duration(milliseconds: 100)); Get.back(); // Get.offNamedUntil("/contract/contract_records", (route) => false); } String getValueForKey(String key) { // 根据键获取真实值的逻辑 // 这里可以根据你的实际需求进行相应的处理 if (key == 'doctorName') { return doctorName; } else if (key == 'principalName') { return principalName; } else if (key == 'doctorTel') { return Store.user.principalPhone; } else if (key == 'preceptorName') { return preceptorName; } else if (key == 'serviceTel') { return doctorPhone; } else if (key == 'serviceAgency') { return Store.user.organizationName; } else if (key == 'patientName') { return patient.patientName ?? ''; } else if (key == 'patientAddress') { return patient.patientAddress ?? ''; } else if (key == 'cardNo') { return patient.cardNo ?? ''; } else if (key == 'phone') { return patientPhone; } else if (key == 'servicesPackageContent') { return servicePackageNames; } else if (key == 'signaturePartyA') { if (Store.user.signature.isEmpty || !Store.user.signature.contains("http")) { return ''; } else { return '图片'; } } else if (key == 'signaturePartyB') { if (state.userSignature.isEmpty) { return ''; } else { return '图片'; } } else if (key == 'signatureDate') { final now = DateTime.now(); final formatter = DateFormat('yyyy-M-d'); final dateArr = formatter.format(now).split('-'); return "${dateArr[0]}年${dateArr[1]}月${dateArr[2]}日"; } else if (key == 'teamName') { return Store.user.teamName; } return ''; // 如果找不到对应的键值,可以返回null或者其他默认值 } }