state.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import 'dart:collection';
  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/types/index.dart';
  6. import 'package:vitalapp/architecture/utils/datetime.dart';
  7. import 'package:vitalapp/pages/controllers/crowd_labels.dart';
  8. import 'package:vitalapp/store/store.dart';
  9. class CreatePatientState {
  10. final RxBool _isCreateOnly = RxBool(false);
  11. final RxString _name = RxString("");
  12. final RxString _personalNo = RxString("");
  13. final RxString _phoneNo = RxString("");
  14. final Rx<CardTypeEnum> _cardType = Rx<CardTypeEnum>(CardTypeEnum.Identity);
  15. final RxString _cardNo = RxString("");
  16. final RxString _nation = RxString("");
  17. final Rxn<GenderEnum> _gender = Rxn<GenderEnum>(null);
  18. final Rx<DateTime?> _birthday = Rx<DateTime?>(null);
  19. final RxString _age = RxString("");
  20. final RxString _censusRegister = RxString("");
  21. final RxString _address = RxString("");
  22. final RxString _villageCode = RxString("");
  23. final RxList<String> _crowdLabelCodes = RxList();
  24. final RxBool _isSyncAddresses = RxBool(true);
  25. final RxBool _isIdCardScanClicked = RxBool(false);
  26. void reset() {
  27. var crowdLabelController = Get.find<CrowdLabelsController>();
  28. crowdLabelController.state.selectedNormalCodes = [];
  29. crowdLabelController.state.selectedDiseaseCodes = [];
  30. crowdLabelController.state.selectedSpecialCareCodes = [];
  31. name = "";
  32. personalNo = "";
  33. cardType = CardTypeEnum.Identity;
  34. cardNo = "";
  35. nation = "";
  36. gender = GenderEnum.Male;
  37. birthday = null;
  38. censusRegister = "";
  39. address = "";
  40. villageCode = "";
  41. phoneNo = "";
  42. crowdLabelCodes = [];
  43. isSyncAddresses = true;
  44. }
  45. /// 机构名称
  46. String get organizationName => Store.user.organizationName;
  47. /// 村选项集合
  48. List<StringKVModel> get villageOptions => Store.user.residence;
  49. /// 是否只创建档案
  50. bool get isCreateOnly => _isCreateOnly.value;
  51. set isCreateOnly(bool val) => _isCreateOnly.updateValue(val);
  52. /// 姓名
  53. String get name => _name.value;
  54. set name(String val) => _name.updateValue(val);
  55. /// 个人编号
  56. String get personalNo => _personalNo.value;
  57. set personalNo(String val) => _personalNo.updateValue(val);
  58. /// 手机号
  59. String get phoneNo => _phoneNo.value;
  60. set phoneNo(String val) => _phoneNo.updateValue(val);
  61. /// 证件类型
  62. CardTypeEnum get cardType => _cardType.value;
  63. set cardType(CardTypeEnum val) => _cardType.updateValue(val);
  64. /// 证件号
  65. String get cardNo => _cardNo.value;
  66. set cardNo(String val) {
  67. _cardNo.updateValue(val);
  68. if (cardType == CardTypeEnum.Identity && val.isNotEmpty) {
  69. birthday = extractBirthDateFromIDCard(val);
  70. }
  71. }
  72. DateTime extractBirthDateFromIDCard(String idCardNumber) {
  73. if (idCardNumber.isEmpty) return DateTime(1970, 1, 1);
  74. final idCardRegex = RegExp(r'^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$');
  75. final match = idCardRegex.firstMatch(idCardNumber);
  76. if (match != null) {
  77. final year = int.parse(match.group(2)!);
  78. final month = int.parse(match.group(3)!);
  79. final day = int.parse(match.group(4)!);
  80. final birthDate = DateTime(year, month, day);
  81. return birthDate;
  82. }
  83. return DateTime(1970, 1, 1); // 返回一个默认值,表示无法提取出生日期
  84. }
  85. /// 民族
  86. String get nation => _nation.value;
  87. set nation(String val) => _nation.updateValue(val);
  88. /// 性别
  89. GenderEnum? get gender => _gender.value;
  90. set gender(GenderEnum? val) => _gender.updateValue(val);
  91. /// 户籍地址
  92. String get censusRegister => _censusRegister.value;
  93. set censusRegister(String val) => _censusRegister.updateValue(val);
  94. /// 现住址
  95. String get address => _address.value;
  96. set address(String val) => _address.updateValue(val);
  97. /// 村/居委会 编号
  98. String get villageCode => _villageCode.value;
  99. set villageCode(String val) => _villageCode.updateValue(val);
  100. /// 村/居委会 名称
  101. String get villageName {
  102. String name = "";
  103. if (villageCode.isNotEmpty) {
  104. final dto = villageOptions.firstWhereOrNull((e) => e.key == villageCode);
  105. if (dto != null) {
  106. name = dto.value;
  107. }
  108. }
  109. return name;
  110. }
  111. /// 人群分类集合
  112. List<String> get crowdLabelCodes =>
  113. UnmodifiableListView(_crowdLabelCodes.toList());
  114. set crowdLabelCodes(List<String> val) => _crowdLabelCodes.value = val;
  115. /// 生日
  116. DateTime? get birthday => _birthday.value;
  117. set birthday(DateTime? val) {
  118. if (val != _birthday.value) {
  119. _birthday.value = val;
  120. if (val != null) {
  121. _age.value = DataTimeUtils.calculateAge(val);
  122. } else if (val == null) {
  123. _age.value = "";
  124. }
  125. }
  126. }
  127. /// 年龄
  128. String get age => _age.value;
  129. /// 是否开启地址同步
  130. bool get isSyncAddresses => _isSyncAddresses.value;
  131. set isSyncAddresses(bool val) => _isSyncAddresses.updateValue(val);
  132. }