123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- 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/types/kv.dart';
- import 'package:vitalapp/architecture/utils/datetime.dart';
- import 'package:vitalapp/consts/rpc_enum_labels.dart';
- import 'package:vitalapp/pages/patient/info/widgets/ext_model.dart';
- import 'package:vitalapp/store/store.dart';
- class PatientInfomationState {
- final RxString _code = RxString("");
- final RxString _name = RxString("");
- final Rx<CardTypeEnum> _cardType = Rx<CardTypeEnum>(CardTypeEnum.Identity);
- final RxString _cardNo = RxString("");
- final Rx<GenderEnum> _gender = Rx<GenderEnum>(GenderEnum.Unspecified);
- final RxString _nation = RxString("");
- final Rx<DateTime?> _birthday = Rx<DateTime?>(null);
- final RxString _age = RxString("");
- final RxString _phoneNo = RxString("");
- final RxString _emergencyPhone = RxString("");
- final RxString _address = RxString("");
- final RxString _permanentResidenceAddress = RxString("");
- final RxString _createdOrgName = RxString("");
- final RxString _createdDoctorName = RxString("");
- final RxString _contractedDoctorName = RxString("");
- final RxString _createTime = RxString("");
- final Rx<PatientDetailInfoModel> _detailInfo =
- Rx<PatientDetailInfoModel>(PatientDetailInfoModel());
- final RxBool _isSyncAddresses = RxBool(true);
- final RxString _villageCode = RxString('');
- final Rx<PatientDTO> _dto = Rx<PatientDTO>(
- PatientDTO(),
- );
- /// 村选项集合
- List<StringKVModel> get villageOptions => Store.user.residence;
- /// 健康信息
- final Rx<PatientHealthInfoModel> _healthInfo =
- Rx<PatientHealthInfoModel>(PatientHealthInfoModel());
- ///服务区域
- String get villageCode => _villageCode.value;
- set villageCode(String v) => _villageCode.value = v;
- /// 村/居委会 名称
- String get villageName {
- String name = "";
- if (villageCode.isNotEmpty) {
- final dto = villageOptions.firstWhereOrNull((e) => e.key == villageCode);
- if (dto != null) {
- name = dto.value;
- }
- }
- return name;
- }
- /// 详细信息
- PatientDetailInfoModel get detailInfo => _detailInfo.value;
- set detailInfo(PatientDetailInfoModel v) => _detailInfo.value = v;
- ///同步户籍地址到现住地址
- bool get isSyncAddresses => _isSyncAddresses.value;
- set isSyncAddresses(bool v) => _isSyncAddresses.value = v;
- void refreshDetailInfo() {
- _detailInfo.refresh();
- }
- /// 健康信息
- PatientHealthInfoModel get healthInfo => _healthInfo.value;
- set healthInfo(PatientHealthInfoModel v) => _healthInfo.value = v;
- void refreshHealthInfo() {
- _healthInfo.refresh();
- }
- /// 居民编号
- String get code => _code.value;
- set code(String val) => _code.value = val;
- /// 姓名
- String get name => _name.value;
- set name(String val) => _name.value = val;
- /// 年龄
- String get age => _age.value;
- /// 手机号
- String get phoneNo => _phoneNo.value;
- set phoneNo(String val) => _phoneNo.updateValue(val);
- /// 紧急联系手机号
- String get emergencyPhone => _emergencyPhone.value;
- set emergencyPhone(String val) => _emergencyPhone.updateValue(val);
- /// 地址
- String get address => _address.value;
- set address(String val) => _address.updateValue(val);
- /// 户籍地址
- String get permanentResidenceAddress => _permanentResidenceAddress.value;
- set permanentResidenceAddress(String val) =>
- _permanentResidenceAddress.updateValue(val);
- /// 性别
- GenderEnum get gender => _gender.value;
- set gender(GenderEnum val) => _gender.updateValue(val);
- /// 性别描述
- String get genderDesc => RpcEnumLabels.gender[gender]!;
- /// 民族
- String get nation => _nation.value;
- set nation(String val) => _nation.updateValue(val);
- /// 证件类型
- CardTypeEnum get cardType => _cardType.value;
- set cardType(CardTypeEnum val) => _cardType.updateValue(val);
- /// 证件号
- String get cardNo => _cardNo.value;
- set cardNo(String val) {
- _cardNo.updateValue(val);
- if (cardType == CardTypeEnum.Identity) {
- birthday = extractBirthDateFromIDCard(val);
- gender = checkGenderFromID(val);
- }
- }
- GenderEnum checkGenderFromID(String idNumber) {
- int secondLastDigit = int.parse(idNumber[idNumber.length - 2]);
- if (secondLastDigit % 2 == 0) {
- return GenderEnum.Female;
- } else {
- return GenderEnum.Male;
- }
- }
- DateTime extractBirthDateFromIDCard(String idCardNumber) {
- final idCardRegex = RegExp(r'^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$');
- final match = idCardRegex.firstMatch(idCardNumber);
- if (match != null) {
- final year = int.parse(match.group(2)!);
- final month = int.parse(match.group(3)!);
- final day = int.parse(match.group(4)!);
- final birthDate = DateTime(year, month, day);
- return birthDate;
- }
- return DateTime(1970, 1, 1); // 返回一个默认值,表示无法提取出生日期
- }
- /// 生日
- DateTime? get birthday => _birthday.value;
- set birthday(DateTime? val) {
- if (val != _birthday.value && val != null) {
- _birthday.value = val;
- _age.value = DataTimeUtils.calculateAge(val);
- }
- }
- ///建档医院
- String get createdOrgName => _createdOrgName.value;
- set createdOrgName(String val) => _createdOrgName.updateValue(val);
- ///建档医师
- String get createdDoctorName => _createdDoctorName.value;
- set createdDoctorName(String val) => _createdDoctorName.updateValue(val);
- //建档时间
- String get createTime => _createTime.value;
- set createTime(String val) => _createTime.updateValue(val);
- ///责任医师
- String get contractedDoctorName => _contractedDoctorName.value;
- set contractedDoctorName(String val) =>
- _contractedDoctorName.updateValue(val);
- void updateDto(PatientDTO dto) {
- _dto.value = dto;
- code = dto.code ?? "";
- name = dto.patientName ?? "";
- cardType = dto.cardType;
- cardNo = dto.cardNo ?? "";
- gender = dto.patientGender;
- nation = dto.nationality ?? "";
- birthday = dto.birthday ?? DateTime(1970, 1, 1);
- phoneNo = dto.phone ?? "";
- emergencyPhone = dto.emergencyPhone ?? "";
- address = dto.patientAddress ?? "";
- permanentResidenceAddress = dto.permanentResidenceAddress ?? "";
- createdOrgName = dto.createdOrgName ?? "";
- createdDoctorName = dto.createdDoctorName ?? "";
- contractedDoctorName = dto.contractedDoctorName ?? "";
- createTime = DateFormat("yyyy-MM-dd")
- .format(dto.createTime?.toLocal() ?? DateTime.now());
- }
- }
|