controller.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:get/get.dart';
  3. import 'package:vnoteapp/architecture/defines.dart';
  4. import 'package:vnoteapp/managers/interfaces/patient.dart';
  5. import 'package:vnoteapp/pages/controllers/crowd_labels.dart';
  6. import 'package:vnoteapp/pages/controllers/home_nav_mixin.dart';
  7. import 'package:vnoteapp/pages/home/controller.dart';
  8. import 'package:vnoteapp/pages/patient/create/state.dart';
  9. import 'package:vnoteapp/pages/patient/list/controller.dart';
  10. class CreatePatientController extends FControllerBase with HomeNavMixin {
  11. final _patientManager = Get.find<IPatientManager>();
  12. final state = CreatePatientState();
  13. @override
  14. Future<void> onLoad() {
  15. final params = Get.parameters;
  16. if (params.containsKey("from")) {
  17. if (params["from"] == "list") {
  18. state.isCreateOnly = true;
  19. }
  20. }
  21. return super.onLoad();
  22. }
  23. @override
  24. void onReady() {
  25. _loadVillageOptions();
  26. _loadCrowdLabelOptions();
  27. super.onReady();
  28. }
  29. /// 保存档案,调整签约
  30. void gotoSignContract() async {
  31. setBusy("正在保存...");
  32. final code = await _submitForm();
  33. if (code == null) {
  34. busy = false;
  35. return;
  36. }
  37. Get.find<HomeController>().switchNavByName("/patient/list");
  38. Future.delayed(
  39. const Duration(milliseconds: 800),
  40. () {
  41. // TODO:
  42. Get.find<PatientListController>().gotoDetail(code);
  43. busy = false;
  44. },
  45. );
  46. }
  47. /// 存为档案,调整到档案详情
  48. void gotoPatientDetail() async {
  49. setBusy("正在保存...");
  50. final code = await _submitForm();
  51. if (code == null) {
  52. busy = false;
  53. return;
  54. }
  55. Get.find<HomeController>().switchNavByName("/patient/list");
  56. Future.delayed(
  57. const Duration(milliseconds: 800),
  58. () {
  59. Get.find<PatientListController>().gotoDetail(code);
  60. busy = false;
  61. },
  62. );
  63. }
  64. /// 保存并返回
  65. void saveAndBack() async {
  66. setBusy("正在保存...");
  67. final code = await _submitForm();
  68. busy = false;
  69. if (code == null) {
  70. busy = false;
  71. return;
  72. }
  73. Get.back(result: code, id: 1001);
  74. }
  75. /// 点击读卡事件
  76. void onReadCardClicked() {
  77. Get.showSnackbar(
  78. const GetSnackBar(
  79. message: "尚未接入",
  80. snackPosition: SnackPosition.TOP,
  81. duration: Duration(seconds: 1),
  82. ),
  83. );
  84. }
  85. /// 处理 “同户籍地址” 勾选变更事件
  86. void onSyncAddressCheckChanged(bool isChecked) {
  87. state.isSyncAddresses = isChecked;
  88. if (isChecked) {
  89. // 同步户籍地址到现住地址
  90. state.address = state.censusRegister;
  91. } else {
  92. state.address = "";
  93. }
  94. }
  95. /// 处理户籍地址变更
  96. void onCensusRegisterChanged(String value) {
  97. state.censusRegister = value;
  98. if (state.isSyncAddresses) {
  99. state.address = value;
  100. }
  101. }
  102. Future<String?> _submitForm() async {
  103. final crowdLabelCodes =
  104. Get.find<CrowdLabelsController>().state.selectedCodes;
  105. final request = CreatePatientRequest(
  106. patientName: state.name,
  107. phone: state.phoneNo,
  108. patientGender: state.gender,
  109. nationality: state.nation,
  110. birthday: state.birthday.toUtc(),
  111. cardType: state.cardType,
  112. cardNo: state.cardNo,
  113. patientAddress: state.address,
  114. permanentResidenceAddress: state.censusRegister,
  115. crowdLabels: crowdLabelCodes,
  116. );
  117. final result = await _patientManager.create(request);
  118. return result;
  119. }
  120. /// 加载人群分类选项集合
  121. Future<void> _loadCrowdLabelOptions() async {}
  122. /// 加载村/居委会选项集合
  123. Future<void> _loadVillageOptions() async {}
  124. }