Browse Source

1、更新老年人自理评估

guanxinyi 11 months ago
parent
commit
ba16156450

+ 17 - 0
lib/architecture/utils/datetime.dart

@@ -45,4 +45,21 @@ abstract class DataTimeUtils {
     }
     return age.toString();
   }
+
+  static 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); // 返回一个默认值,表示无法提取出生日期
+  }
 }

+ 35 - 18
lib/pages/medical/widgets/health_check/health_check_list/controller.dart

@@ -13,6 +13,7 @@ import 'package:vitalapp/managers/interfaces/device.dart';
 import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:vitalapp/managers/interfaces/registration.dart';
 import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart';
+import 'package:vitalapp/pages/self_care_ability_assessment/view.dart';
 import 'package:vitalapp/store/store.dart';
 
 /// 体检表格控制器
@@ -157,24 +158,40 @@ class HealthCheckListController extends GetxController {
         ),
       ),
       TableColumn<ResidentModel>(
-        headerText: "操作",
-        maxWidth: 150,
-        render: (rowData, index) => Row(
-          mainAxisAlignment: MainAxisAlignment.center,
-          children: [
-            TextButton(
-              onPressed: () async {
-                await changeHeartCheck(rowData);
-                onRowTap.call(rowData);
-              },
-              child: Text(
-                style: TextStyle(fontSize: 18),
-                checkKey == "HEITCMC" ? "检测" : "检查",
-              ),
-            ),
-          ],
-        ),
-      ),
+          headerText: "操作",
+          maxWidth: 160,
+          render: (rowData, index) {
+            DateTime birthDay =
+                DataTimeUtils.extractBirthDateFromIDCard(rowData.idNumber);
+            String age = DataTimeUtils.calculateAge(birthDay);
+            return Row(
+              mainAxisAlignment: MainAxisAlignment.center,
+              children: [
+                TextButton(
+                  onPressed: () async {
+                    await changeHeartCheck(rowData);
+                    onRowTap.call(rowData);
+                  },
+                  child: Text(
+                    style: TextStyle(fontSize: 18),
+                    checkKey == "HEITCMC" ? "检测" : "检查",
+                  ),
+                ),
+                if (checkKey == "HEITCMC" && int.parse(age) >= 60)
+                  TextButton(
+                    onPressed: () async {
+                      await changeHeartCheck(rowData);
+                      String? selfCareScore =
+                          await Get.dialog(SelfCareAbilityAssessmentView());
+                    },
+                    child: Text(
+                      style: TextStyle(fontSize: 18),
+                      "自理评估",
+                    ),
+                  ),
+              ],
+            );
+          }),
     ];
   }
 

+ 70 - 9
lib/pages/self_care_ability_assessment/view.dart

@@ -1,44 +1,92 @@
+// ignore_for_file: must_be_immutable
+
 import 'dart:convert';
 
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:uuid/uuid.dart';
+import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/managers/interfaces/exam.dart';
+import 'package:vitalapp/managers/interfaces/registration.dart';
 import 'package:vitalapp/pages/self_care_ability_assessment/controller.dart';
 import 'package:vitalapp/pages/self_care_ability_assessment/widget/assessment_module.dart';
 import 'package:vitalapp/store/store.dart';
 
 class SelfCareAbilityAssessmentView
     extends GetView<SelfCareAbilityAssessmentController> {
-  const SelfCareAbilityAssessmentView({super.key});
+  SelfCareAbilityAssessmentView({super.key});
+  final _examManager = Get.find<IExamManager>();
+  ExamDTO? currentSelfCareAbilityAssessmentExam;
   @override
   Widget build(BuildContext context) {
     return Scaffold(
-      body: buildContent("LNRZLNLPG"),
-    );
+        body: FutureBuilder(
+      future: getExamData(
+          Store.user.currentSelectRegisterPersonInfo?.physicalExamNumber ?? ''),
+      builder: (context, snapshot) {
+        if (snapshot.connectionState == ConnectionState.waiting) {
+          return Center(child: CircularProgressIndicator());
+        } else if (snapshot.hasError) {
+          return Center(child: Text('Error: ${snapshot.error}'));
+        } else {
+          return buildContent("LNRZLNLPG");
+        }
+      },
+    ));
   }
 
   Widget buildContent(String key) {
+    if (currentSelfCareAbilityAssessmentExam != null &&
+        currentSelfCareAbilityAssessmentExam!.examData != null &&
+        currentSelfCareAbilityAssessmentExam!.examData!.isNotEmpty) {
+      return SelfCareAssessmentModule(
+        cardKey: key,
+        patientCode: Store.user.currentSelectPatientInfo?.code,
+        examData: currentSelfCareAbilityAssessmentExam!.examData,
+        callBack: (key, templateCode, data) async {
+          await updateExamAsync(
+            currentSelfCareAbilityAssessmentExam?.code,
+            data,
+          );
+
+          return true;
+        },
+      );
+    }
     return SelfCareAssessmentModule(
       cardKey: key,
       patientCode: Store.user.currentSelectPatientInfo?.code,
       callBack: (key, templateCode, data) async {
         await createBasicCheckup(
-            Store.user.currentSelectPatientInfo?.code ?? '',
-            Store.user.currentSelectRegisterPersonInfo?.physicalExamNumber ??
-                '',
-            key,
-            data);
+          Store.user.currentSelectPatientInfo?.code ?? '',
+          Store.user.currentSelectRegisterPersonInfo?.physicalExamNumber ?? '',
+          key,
+          data,
+        );
 
         return true;
       },
     );
   }
 
+  Future<void> updateExamAsync(String? code, String data) async {
+    var request = UpdateExamRequest(
+      key: "LNRZLNLPG",
+      examData: data,
+      code: code ?? '',
+    );
+    print(jsonEncode(request.toJson()));
+    final result = await _examManager.editExam(request);
+    if (result ?? false) {
+      PromptBox.toast('保存成功');
+    } else {
+      PromptBox.toast('保存失败');
+    }
+  }
+
   Future<void> createBasicCheckup(String patientCode,
       String? physicalExamNumber, String? keyValue, String data) async {
-    final _examManager = Get.find<IExamManager>();
     var uuid = Uuid().v4().toString();
     var request = CreateExamRequest(
       key: keyValue ?? "LNRZLNLPG",
@@ -51,4 +99,17 @@ class SelfCareAbilityAssessmentView
     var result = await _examManager.createExam(request);
     print(result);
   }
+
+  Future<ExamDTO?> getExamData(String physicalExamNumber) async {
+    List<ExamDTO>? examList = await Get.find<IRegistrationManager>()
+        .getExamListByPhysicalExamNumberAsync(
+      physicalExamNumber: physicalExamNumber,
+    );
+
+    ExamDTO? currentExam = examList?.firstWhereOrNull(
+      (element) => element.key == "LNRZLNLPG",
+    );
+    currentSelfCareAbilityAssessmentExam = currentExam;
+    return currentExam;
+  }
 }

+ 1 - 1
lib/routes/routes.dart

@@ -563,7 +563,7 @@ class Routes {
     ),
     VRouteSetting(
       '/SelfCareAbilityAssessment',
-      () => const SelfCareAbilityAssessmentView(),
+      () => SelfCareAbilityAssessmentView(),
       binding: BindingsBuilder(
         () {
           Get.put(SelfCareAbilityAssessmentController());