123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- import 'dart:convert';
- 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/pages/home/controller.dart';
- import 'package:vitalapp/store/store.dart';
- import 'state.dart';
- class ContractTemplateController extends FControllerBase {
- final state = ContractTemplateControllerState();
- final contractTemplateManager = Get.find<IContractTemplateManager>();
- final _contractManager = Get.find<IContractManager>();
- PatientDTO patient = PatientDTO();
- String servicePackageNames = "";
- String servicePackageCodes = "";
- String serviceTime = "1";
- String serviceStartDate = "";
- String base64Image = "";
- String notes = "";
- @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"] ?? '';
- super.onInit();
- }
- @override
- void onReady() {
- super.onReady();
- loadData();
- }
- Future<void> loadData() async {
- final dto = await contractTemplateManager
- .getContractTemplateDetail(state.templateCode);
- if (dto != null) {
- state.templateContent = dto.templateContent ?? '';
- getkey();
- }
- }
- void getkey() {
- RegExp regExp = RegExp(r'#(.*?)#');
- // Iterable<Match> 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<void> 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<void> submitContract() async {
- if (!kIsOnline) {
- // 不支持离线签约
- PromptBox.toast("请检查网络连接");
- return;
- }
- await createContractRecord();
- 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 Store.user.displayName;
- } else if (key == 'principalName') {
- return Store.user.principalName;
- } else if (key == 'doctorTel') {
- return Store.user.principalPhone;
- } else if (key == 'serviceTel') {
- return Store.user.organizationPhone;
- } 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 patient.phone ?? '';
- } else if (key == 'servicesPackageContent') {
- return servicePackageNames;
- } else if (key == 'signaturePartyA') {
- if (Store.user.signature.isEmpty ||
- !Store.user.signature.contains("http")) {
- return '';
- } else {
- return '<img src=${Store.user.signature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
- }
- } else if (key == 'signaturePartyB') {
- if (state.userSignature.isEmpty) {
- return '';
- } else {
- return '<img src=${state.userSignature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
- }
- } 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或者其他默认值
- }
- }
|