Browse Source

1、优化体检列表页面

guanxinyi 1 year ago
parent
commit
62e4b3b066

+ 20 - 13
lib/pages/check/health_check_record/controllers/list_controller.dart

@@ -112,19 +112,8 @@ class ListController {
     return TextButton(
       onPressed: () async {
         final FEventHandler<bool> onSubmitEvent = FEventHandler<bool>();
-        final _examManager = Get.find<IExamManager>();
-        List<String> stringList = [];
-        List<ExamDTO>? examList = await _examManager
-            .getExamByBatchNumberAsync(rowData.batchNumber ?? '');
-        examList?.forEach((element) {
-          stringList.add(element.examData ?? "{}");
-        });
-        Map<String, dynamic> fullMap = {};
-
-        stringList.forEach((str) {
-          Map<String, dynamic> map = jsonDecode(str);
-          fullMap.addAll(map);
-        });
+        Map<String, dynamic> fullMap =
+            await handleExamData(rowData.batchNumber);
         Get.lazyPut(
           () => ExaminationController(
             patientCode: rowData.idNumber,
@@ -232,4 +221,22 @@ class ListController {
       ),
     );
   }
+
+  /// 处理体检数据
+  Future<Map<String, dynamic>> handleExamData(String? batchNumber) async {
+    final _examManager = Get.find<IExamManager>();
+    List<String> stringList = [];
+    List<ExamDTO>? examList =
+        await _examManager.getExamByBatchNumberAsync(batchNumber ?? '');
+    examList?.forEach((element) {
+      stringList.add(element.examData ?? "{}");
+    });
+    Map<String, dynamic> fullMap = {};
+
+    stringList.forEach((str) {
+      Map<String, dynamic> map = jsonDecode(str);
+      fullMap.addAll(map);
+    });
+    return fullMap;
+  }
 }

+ 3 - 0
lib/pages/medical_checkup_station/registration/controller/list.dart

@@ -406,6 +406,8 @@ class RegistrationListController {
   void _examDialog(ResidentModel rowData) {
     final FEventHandler<bool> onSubmitEvent = FEventHandler<bool>();
 
+    /// 需要检测页面回调数据
+    Get.put(MedicalController());
     Get.dialog(
       Scaffold(
         body: Stack(
@@ -428,6 +430,7 @@ class RegistrationListController {
           ],
           iconBack: () {
             onSubmitEvent.emit(this, true);
+            Get.delete<MedicalController>();
           },
         ),
       ),

+ 0 - 2
lib/pages/medical_checkup_station/registration/view/index.dart

@@ -41,11 +41,9 @@ class RegistrationList extends GetView<RegistrationController> {
     }
     return Scaffold(
       body: table,
-      // floatingActionButton: const RegistrationActionButton(),
     );
   }
 
-  /// TODO BAKA 需要演示
   Widget _buildWeb() {
     return Row(
       children: [

+ 63 - 30
lib/pages/medical_checkup_station/registration/widgets/filter/index.dart

@@ -2,6 +2,7 @@ import 'package:fis_common/logger/logger.dart';
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/utils/advance_debounce.dart';
 import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/architecture/utils/verify_permissions.dart';
 import 'package:vitalapp/components/button.dart';
@@ -16,6 +17,7 @@ import 'package:vitalapp/pages/medical_checkup_station/registration/controller.d
 import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/card_reader/view.dart';
 import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/form/index.dart';
 import 'package:vitalapp/pages/patient/create/widgets/face_result_dialog.dart';
+import 'package:vitalapp/pages/widgets/icon_button.dart';
 
 import 'filter_time.dart';
 
@@ -31,6 +33,67 @@ class RegistrationFilter extends GetView<RegistrationController> {
 
   @override
   Widget build(BuildContext context) {
+    return Row(
+      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+      children: [
+        _buildInputAndFilter(),
+        FittedBox(
+          child: Container(
+            child: Row(
+              children: [
+                VIconButton(
+                  iconData: Icons.chrome_reader_mode,
+                  textString: '读卡识别',
+                  voidCallback: () {
+                    advanceDebounce(
+                      onReadCardClicked,
+                      "registration.onReadCardClicked",
+                      1500,
+                    );
+                  },
+                ),
+                VIconButton(
+                  iconData: Icons.perm_contact_cal_rounded,
+                  textString: '拍照识别',
+                  voidCallback: () {
+                    advanceDebounce(
+                      onIdCardScanClicked,
+                      "registration.onIdCardScanClicked",
+                      1500,
+                    );
+                  },
+                ),
+                VIconButton(
+                  iconData: Icons.sensor_occupied,
+                  textString: '人脸识别',
+                  voidCallback: () {
+                    advanceDebounce(
+                      onFaceIdLoginClicked,
+                      "registration.onFaceIdLoginClicked",
+                      1500,
+                    );
+                  },
+                ),
+                VIconButton(
+                  iconData: Icons.edit_document,
+                  textString: '手动录入',
+                  voidCallback: () {
+                    advanceDebounce(
+                      onManualInputClicked,
+                      "registration.onManualInputClicked",
+                      1500,
+                    );
+                  },
+                ),
+              ],
+            ),
+          ),
+        ),
+      ],
+    );
+  }
+
+  Widget _buildInputAndFilter() {
     return Row(
       children: [
         Container(
@@ -78,36 +141,6 @@ class RegistrationFilter extends GetView<RegistrationController> {
             color: Colors.black,
           ),
         ),
-        FittedBox(
-          child: Container(
-            child: Row(
-              children: [
-                _buildbuttonItem(
-                  iconData: Icons.chrome_reader_mode,
-                  title: "读卡",
-                  buttonTap: onReadCardClicked,
-                  width: 90,
-                ),
-                _buildbuttonItem(
-                  iconData: Icons.perm_contact_cal_rounded,
-                  title: "扫描",
-                  buttonTap: onIdCardScanClicked,
-                  width: 90,
-                ),
-                _buildbuttonItem(
-                  iconData: Icons.sensor_occupied,
-                  title: "人脸识别",
-                  buttonTap: onFaceIdLoginClicked,
-                ),
-                _buildbuttonItem(
-                  iconData: Icons.edit_document,
-                  title: "手动录入",
-                  buttonTap: onManualInputClicked,
-                ),
-              ],
-            ),
-          ),
-        ),
       ],
     );
   }

+ 1 - 0
lib/pages/patient/list/controller.dart

@@ -175,6 +175,7 @@ class PatientListController extends FControllerBase
         if (!hasConfirmed) {
           return;
         }
+        // TODO 后面需要新增一下
         // Get.find<HomeController>().switchNavByName(
         //   "/patient/create",
         //   patientInfo.toJson(),

+ 50 - 89
lib/pages/patient/list/view.dart

@@ -21,6 +21,7 @@ import 'package:vitalapp/managers/interfaces/exam.dart';
 import 'package:vitalapp/managers/interfaces/models/patient_model_dto.dart';
 import 'package:vitalapp/pages/home/controller.dart';
 import 'package:vitalapp/pages/patient/list/widgets/status.dart';
+import 'package:vitalapp/pages/widgets/icon_button.dart';
 import 'package:vitalapp/store/store.dart';
 
 import 'controller.dart';
@@ -245,63 +246,7 @@ class _HeaderWidget extends GetView<PatientListController> {
   _HeaderWidget({
     required this.onFilterPressed,
   });
-  Widget _buildIconButton(
-    IconData iconData,
-    String textString,
-    VoidCallback voidCallback,
-  ) {
-    return Material(
-      child: InkWell(
-        onTap: () => voidCallback.call(),
-        child: Container(
-          margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 20),
-          child: Column(
-            children: [
-              Icon(
-                iconData,
-                size: 38,
-              ),
-              Text(textString),
-            ],
-          ),
-        ),
-      ),
-    );
-  }
-
-  //   VSideNavMenuItem _buildCreateManualRecord() {
-  //   return VSideNavMenuItem(
-  //     title: "手动建档",
-  //     icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
-  //     pageBuilder: (_) => _buildInterval(
-  //       PatientInfo(),
-  //     ),
-  //   );
-  // }
-
-  // VSideNavMenuItem _buildIDReaderRecord() {
-  //   return VSideNavMenuItem(
-  //     title: "读卡建档",
-  //     icon: Icon(Icons.chrome_reader_mode, color: Colors.grey.shade700),
-  //     onTap: () {
-  //       controller.onReadCardClicked();
-  //     },
-  //   );
-  // }
 
-  // VSideNavMenuItem _buildScanIdCardRecord() {
-  //   return VSideNavMenuItem(
-  //     title: "身份证识别建档",
-  //     icon: Icon(Icons.perm_contact_cal_rounded, color: Colors.grey.shade700),
-  //     onTap: () {
-  //       if (!kIsOnline) {
-  //         PromptBox.toast("当前为离线模式,不支持此功能");
-  //         return;
-  //       }
-  //       controller.onIdCardScanClicked();
-  //     },
-  //   );
-  // }
   @override
   Widget build(BuildContext context) {
     return SizedBox(
@@ -310,48 +255,64 @@ class _HeaderWidget extends GetView<PatientListController> {
         children: [
           _PatientStatisticWidget(),
           if (Store.user.hasFeature(FeatureKeys.FaceRecognition))
-            _buildIconButton(Icons.sensor_occupied, '人脸识别', () {
-              if (!kIsOnline) {
-                PromptBox.toast("当前为离线模式,不支持此功能");
-                return;
-              }
-              advanceDebounce(
-                controller.onFaceIdLoginClicked,
-                "PatientList.OnFaceIdLoginClicked",
-                1500,
-              );
-            }),
-          if (Store.user.hasFeature(FeatureKeys.IdCardPhotoOCR))
-            _buildIconButton(Icons.perm_contact_cal_rounded, '拍照识别', () {
-              if (!Store.user
-                  .hasFeature(FeatureKeys.IdCardOfflineRecognition)) {
+            VIconButton(
+              iconData: Icons.sensor_occupied,
+              textString: '人脸识别',
+              voidCallback: () {
                 if (!kIsOnline) {
                   PromptBox.toast("当前为离线模式,不支持此功能");
                   return;
                 }
-              }
+                advanceDebounce(
+                  controller.onFaceIdLoginClicked,
+                  "PatientList.OnFaceIdLoginClicked",
+                  1500,
+                );
+              },
+            ),
+          if (Store.user.hasFeature(FeatureKeys.IdCardPhotoOCR))
+            VIconButton(
+              iconData: Icons.perm_contact_cal_rounded,
+              textString: '拍照识别',
+              voidCallback: () {
+                if (!Store.user
+                    .hasFeature(FeatureKeys.IdCardOfflineRecognition)) {
+                  if (!kIsOnline) {
+                    PromptBox.toast("当前为离线模式,不支持此功能");
+                    return;
+                  }
+                }
 
-              advanceDebounce(
-                controller.onIdCardScanClickedToDetail,
-                "PatientList.OnIdCardScanClickedToDetail",
-                1500,
-              );
-            }),
+                advanceDebounce(
+                  controller.onIdCardScanClickedToDetail,
+                  "PatientList.OnIdCardScanClickedToDetail",
+                  1500,
+                );
+              },
+            ),
           if (Store.user.hasFeature(FeatureKeys.IDCardReader))
-            _buildIconButton(Icons.chrome_reader_mode, '读卡识别', () {
+            VIconButton(
+              iconData: Icons.chrome_reader_mode,
+              textString: '读卡识别',
+              voidCallback: () {
+                advanceDebounce(
+                  controller.onReadCardClickedToDetail,
+                  "PatientList.OnReadCardClickedToDetail",
+                  1500,
+                );
+              },
+            ),
+          VIconButton(
+            iconData: Icons.edit_document,
+            textString: '手动录入',
+            voidCallback: () {
               advanceDebounce(
-                controller.onReadCardClickedToDetail,
-                "PatientList.OnReadCardClickedToDetail",
+                controller.onManualInputPatient,
+                "PatientList.OnManualInputPatient",
                 1500,
               );
-            }),
-          _buildIconButton(Icons.edit_document, '手动录入', () {
-            advanceDebounce(
-              controller.onManualInputPatient,
-              "PatientList.OnManualInputPatient",
-              1500,
-            );
-          }),
+            },
+          ),
           Expanded(
             child: SizedBox(
               height: 70,

+ 34 - 0
lib/pages/widgets/icon_button.dart

@@ -0,0 +1,34 @@
+import 'package:flutter/material.dart';
+
+class VIconButton extends StatelessWidget {
+  final IconData iconData;
+  final String textString;
+  final VoidCallback voidCallback;
+
+  VIconButton({
+    required this.iconData,
+    required this.textString,
+    required this.voidCallback,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Material(
+      child: InkWell(
+        onTap: () => voidCallback.call(),
+        child: Container(
+          margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 20),
+          child: Column(
+            children: [
+              Icon(
+                iconData,
+                size: 38,
+              ),
+              Text(textString),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+}

+ 0 - 2
lib/routes/routes.dart

@@ -300,8 +300,6 @@ class Routes {
       ),
       binding: BindingsBuilder(
         () {
-          /// 需要检测页面回调数据
-          Get.put(MedicalController());
           Get.put(RegistrationController());
         },
       ),