瀏覽代碼

Merge branch 'master' of http://git.ius.plus/Project-Vital/VitalApp

finlay 11 月之前
父節點
當前提交
b7c8ef9af3

+ 28 - 2
lib/pages/check/widgets/exam_configurable/exam_blood_pressure.dart

@@ -24,12 +24,19 @@ class VDialogBloodPressure extends StatelessWidget {
   /// 初始值
   final List<String>? initialValue;
 
+  ///是否显示心率
+  final bool isDisplayHeartRate;
+
+  final String? heartRate;
+
   const VDialogBloodPressure({
     super.key,
     this.title,
     this.description,
     this.placeholder,
     this.initialValue,
+    this.heartRate,
+    this.isDisplayHeartRate = false,
   });
 
   Future<String?> show<String>() => VAlertDialog.showDialog<String>(this);
@@ -38,14 +45,19 @@ class VDialogBloodPressure extends StatelessWidget {
   Widget build(BuildContext context) {
     final controller1 = TextEditingController(text: initialValue?.first);
     final controller2 = TextEditingController(text: initialValue?.last);
+    final controller3 = TextEditingController(text: heartRate);
     return VAlertDialog(
       title: title,
       width: 440,
       contentPadding: const EdgeInsets.symmetric(vertical: 12, horizontal: 24),
-      content: _buildContent(context, controller1, controller2),
+      content: _buildContent(context, controller1, controller2, controller3),
       showCancel: true,
       onConfirm: () {
-        Get.back(result: json.encode([controller1.text, controller2.text]));
+        var content = [controller1.text, controller2.text];
+        if (isDisplayHeartRate) {
+          content.add(controller3.text);
+        }
+        Get.back(result: json.encode(content));
       },
     );
   }
@@ -54,6 +66,7 @@ class VDialogBloodPressure extends StatelessWidget {
     BuildContext context,
     TextEditingController controller1,
     TextEditingController controller2,
+    TextEditingController controller3,
   ) {
     final children = <Widget>[];
     if (description != null) {
@@ -71,6 +84,10 @@ class VDialogBloodPressure extends StatelessWidget {
       children.add(const SizedBox(height: 12));
     }
     children.add(_buildInputWidget(context, controller1, controller2));
+    if (isDisplayHeartRate) {
+      children.add(const SizedBox(height: 12));
+      children.add(_buildInputHeartRate(context, controller3));
+    }
     return SingleChildScrollView(
       child: Column(
         mainAxisSize: MainAxisSize.min,
@@ -156,6 +173,15 @@ class VDialogBloodPressure extends StatelessWidget {
       ),
     );
   }
+
+  Widget _buildInputHeartRate(
+    BuildContext context,
+    TextEditingController controller,
+  ) {
+    return Row(
+      children: [_buildItem(context, controller, '心率')],
+    );
+  }
 }
 
 /// TODO 优化血压组件,存储需要重新设计

+ 4 - 1
lib/pages/home/controller.dart

@@ -291,7 +291,10 @@ class HomeController extends FControllerBase with HomeNavMixin {
           }
         }
       });
-      if (!menuItems.any((element) => element.key == "JKJC")) {
+      if (menuItems.any((element) => element.key == "JMLB")) {
+        state.currentSelectMenu =
+            menuItems.firstWhere((element) => element.key == "JMLB").routeName;
+      } else if (!menuItems.any((element) => element.key == "JKJC")) {
         state.currentSelectMenu = menuItems.first.routeName;
       }
       state.menuItems = menuItems;

+ 8 - 0
lib/pages/home/personal_center/controller.dart

@@ -82,4 +82,12 @@ class PersonalCenterController extends FControllerBase {
       PromptBox.toast("密码更新成功!");
     }
   }
+
+  Future<void> clear() async {
+    final saved = await Get.find<IDoctorManager>().setSignature('');
+    if (saved) {
+      state.signaturUrl = null;
+      PromptBox.toast("更新成功!");
+    }
+  }
 }

+ 13 - 3
lib/pages/home/personal_center/widgets/signature.dart

@@ -19,9 +19,19 @@ class SignaturePage extends GetView<PersonalCenterController> {
   }
 
   Widget _buildOperateRow() {
-    return VButton(
-      label: "设  置",
-      onTap: controller.rewrite,
+    return Row(
+      mainAxisAlignment: MainAxisAlignment.center,
+      children: [
+        VButton(
+          label: "设  置",
+          onTap: controller.rewrite,
+        ),
+        SizedBox(width: 10),
+        VButton(
+          label: "清  空",
+          onTap: controller.clear,
+        ),
+      ],
     );
   }
 

+ 11 - 6
lib/pages/medical/views/biochemistry_check.dart

@@ -2,6 +2,7 @@ import 'dart:convert';
 
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/managers/interfaces/data_convert.dart';
 import 'package:vitalapp/pages/medical/views/table_input_dialog/controller.dart';
 import 'package:vitalapp/pages/medical/views/table_input_dialog/mock_data.dart';
 import 'package:vitalapp/pages/medical/views/table_input_dialog/view.dart';
@@ -28,15 +29,19 @@ class BiochemistryCheck extends StatelessWidget {
             keyValue: "HEIBiochemical",
           ),
           isBiochemOrBlood: true,
-          editBiochemOrBlood: (value) {
+          editBiochemOrBlood: (value) async {
+            List<List<String>> tableData =
+                await Get.find<IDataConvertManager>().getTableData(
+              value.examData,
+            );
             List<TableElementConfig> tableDataConfig = [];
-            MockData.mockBiochemistryTestData.forEach((element) {
+            tableData.forEach((element) {
               tableDataConfig.add(
                 TableElementConfig(
-                  id: element.id,
-                  unit: element.unit,
-                  name: element.name,
-                  initValue: jsonDecode(value.examData)[element.id],
+                  id: "",
+                  name: element[0],
+                  initValue: element[1],
+                  unit: element[2],
                 ),
               );
             });

+ 1 - 1
lib/pages/medical/views/blood_check.dart

@@ -9,7 +9,7 @@ import 'package:vitalapp/pages/medical/views/table_input_dialog/view.dart';
 import 'package:vitalapp/pages/medical/widgets/health_check/view.dart';
 import 'package:vitalapp/store/store.dart';
 
-/// 生化
+/// 血常规
 class BloodCheck extends StatelessWidget {
   BloodCheck({super.key});
 

+ 64 - 8
lib/pages/medical/widgets/blood_pressure.dart

@@ -1,7 +1,11 @@
+import 'dart:convert';
+
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/app_parameters.dart';
 import 'package:vitalapp/managers/device_controller_manager.dart';
 import 'package:vitalapp/managers/interfaces/organization.dart';
+import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_blood_pressure.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
 import 'package:vitalapp/pages/medical/widgets/exam_card.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
@@ -25,6 +29,7 @@ class BloodPressure extends StatefulWidget {
 
 class _BloodPressureState extends State<BloodPressure> {
   var controller = Get.find<MedicalController>();
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   PressureDeviceStatus pressureDeviceStatus = PressureDeviceStatus.start;
   bool isConnectFail = false;
   DeviceControllerManager? nibp;
@@ -238,6 +243,7 @@ class _BloodPressureState extends State<BloodPressure> {
       children: [
         ExamCard(
           title: '',
+          clickCard: _onClickBloodPressure,
           content: Column(
             children: [
               Row(
@@ -314,14 +320,16 @@ class _BloodPressureState extends State<BloodPressure> {
             ],
           ),
         ),
-        if (isConnectFail) ...[
-          _buildErrorButton(),
-        ] else ...[
-          Positioned(
-            right: 10,
-            top: 10,
-            child: DeviceStatus(connectStatus: _connectStatus),
-          ),
+        if (!isPureSoftwareMode) ...[
+          if (isConnectFail) ...[
+            _buildErrorButton(),
+          ] else ...[
+            Positioned(
+              right: 10,
+              top: 10,
+              child: DeviceStatus(connectStatus: _connectStatus),
+            ),
+          ],
         ],
       ],
     );
@@ -357,6 +365,7 @@ class _BloodPressureState extends State<BloodPressure> {
   Widget _buildLiveWidget() {
     return SizedBox(
       height: 130,
+      width: 180,
       child: Row(
         crossAxisAlignment: CrossAxisAlignment.center,
         children: [
@@ -450,6 +459,53 @@ class _BloodPressureState extends State<BloodPressure> {
       ],
     );
   }
+
+  Future<void> _onClickBloodPressure() async {
+    String sbp = "";
+    String dbp = "";
+    String heart = "";
+    if (controller.diagnosisDataValue.containsKey("NIBP")) {
+      var nibp = controller.diagnosisDataValue["NIBP"];
+      if (nibp is Map) {
+        if (nibp.containsKey("Sbp")) {
+          sbp = nibp["Sbp"];
+        }
+        if (nibp.containsKey("Dbo")) {
+          dbp = nibp["Dbo"];
+        }
+        if (nibp.containsKey("Pulse_Beat")) {
+          heart = nibp["Pulse_Beat"];
+        }
+      }
+    }
+
+    String? result = await VDialogBloodPressure(
+      title: '血压',
+      initialValue: [
+        sbp,
+        dbp,
+      ],
+      isDisplayHeartRate: true,
+    ).show();
+    if (result != null) {
+      try {
+        String sbp = jsonDecode(result).first;
+        String dbp = jsonDecode(result)[1];
+        String heart = jsonDecode(result)[2];
+        if (sbp.isNotEmpty && dbp.isNotEmpty) {
+          //收缩压(高压)
+          controller.diagnosisDataValue['NIBP'] = {
+            'Sbp': sbp,
+            'Dbp': dbp,
+            'Pulse_Beat': heart,
+          };
+          setState(() {});
+        }
+      } catch (e) {
+        logger.e("BloodPressure _onClickBloodPressure ex:", e);
+      }
+    }
+  }
 }
 
 class _SideBar extends StatelessWidget {

+ 2 - 2
lib/pages/medical/widgets/health_check/health_check_left/index.dart

@@ -69,7 +69,7 @@ class HealthCheckLeft extends GetView<HealthCheckListController> {
           width: 520,
           child: VSearchInput(
             textEditingController: TextEditingController(text: ""),
-            placeholder: "请输入身份证号",
+            placeholder: "请输入体检号、姓名、身份证号",
             clearable: true,
             onClear: () {},
             onSearch: (value) {
@@ -132,7 +132,7 @@ class HealthCheckLeft extends GetView<HealthCheckListController> {
   Future<void> _importClick(String key) async {
     var excelImportUrl = _excelImportUrl;
     if (kDebugMode) {
-      excelImportUrl = "http://127.0.0.1:8083";
+      // excelImportUrl = "http://127.0.0.1:8083";
     }
     html.window.open(
         "$excelImportUrl?token=${Store.user.token}&templateKey=$key",

+ 27 - 5
lib/pages/medical/widgets/health_check/health_check_list/controller.dart

@@ -93,7 +93,8 @@ class HealthCheckListController extends GetxController {
             name: i.name ?? '',
             idNumber: i.iDCardNo ?? '',
             homeAddress: i.adress,
-            age: null,
+            age: i.age,
+            sex: i.sex,
             physicalExamNumber: i.physicalExamNumber,
             phone: i.phone,
           ),
@@ -119,7 +120,7 @@ class HealthCheckListController extends GetxController {
     return <TableColumn<ResidentModel>>[
       TableColumn<ResidentModel>(
         headerText: "体检号",
-        maxWidth: 150,
+        flex: 7,
         render: (rowData, index) => Container(
           padding: const EdgeInsets.symmetric(vertical: 16),
           child: Text(
@@ -130,7 +131,7 @@ class HealthCheckListController extends GetxController {
       ),
       TableColumn<ResidentModel>(
         headerText: "姓名",
-        // maxWidth: 100,
+        flex: 5,
         render: (rowData, index) => Center(
           child: Text(
             rowData.name ?? '',
@@ -140,7 +141,7 @@ class HealthCheckListController extends GetxController {
       ),
       TableColumn<ResidentModel>(
         headerText: "身份证号",
-        // maxWidth: 200,
+        flex: 7,
         render: (rowData, index) => Center(
           child: Text(
             rowData.idNumber,
@@ -148,8 +149,29 @@ class HealthCheckListController extends GetxController {
           ),
         ),
       ),
+      TableColumn<ResidentModel>(
+        headerText: "年龄",
+        flex: 3,
+        render: (rowData, index) => Center(
+          child: Text(
+            rowData.age ?? '',
+            style: textStyle,
+          ),
+        ),
+      ),
+      TableColumn<ResidentModel>(
+        headerText: "性别",
+        flex: 3,
+        render: (rowData, index) => Center(
+          child: Text(
+            rowData.sex ?? '',
+            style: textStyle,
+          ),
+        ),
+      ),
       TableColumn<ResidentModel>(
         headerText: "手机号",
+        flex: 5,
         render: (rowData, index) => Center(
           child: Text(
             rowData.phone ?? '',
@@ -159,7 +181,7 @@ class HealthCheckListController extends GetxController {
       ),
       TableColumn<ResidentModel>(
           headerText: "操作",
-          maxWidth: 160,
+          flex: 7,
           render: (rowData, index) {
             DateTime birthDay =
                 DataTimeUtils.extractBirthDateFromIDCard(rowData.idNumber);

+ 6 - 30
pubspec.lock

@@ -21,10 +21,10 @@ packages:
     dependency: transitive
     description:
       name: archive
-      sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b"
+      sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "3.4.9"
+    version: "3.4.10"
   args:
     dependency: transitive
     description:
@@ -241,14 +241,6 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.17.2"
-  csv:
-    dependency: "direct overridden"
-    description:
-      name: csv
-      sha256: c6aa2679b2a18cb57652920f674488d89712efaf4d3fdf2e537215b35fc19d6c
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "6.0.0"
   cupertino_icons:
     dependency: transitive
     description:
@@ -329,14 +321,6 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "5.0.1"
-  equatable:
-    dependency: transitive
-    description:
-      name: equatable
-      sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.5"
   esc_utils:
     dependency: "direct main"
     description:
@@ -345,14 +329,6 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.0.1"
-  excel:
-    dependency: "direct overridden"
-    description:
-      name: excel
-      sha256: f7cde34ffdbb397edeb4566621433bb820517cc0d8676c20d6122a85f749ee49
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "3.0.0"
   fake_async:
     dependency: transitive
     description:
@@ -407,8 +383,8 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: a4f9963351
-      resolved-ref: a4f9963351ec13cad26bc336b3a827462793adeb
+      ref: aa692c0
+      resolved-ref: aa692c0e29b264675affaa4be4d03d0d75204498
       url: "http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git"
     source: git
     version: "0.0.1"
@@ -497,8 +473,8 @@ packages:
     dependency: "direct overridden"
     description:
       path: "."
-      ref: "3788950"
-      resolved-ref: "3788950863ae6fd01d08742c40091736547fa5af"
+      ref: c15c5a5
+      resolved-ref: c15c5a528f857c8f1ae0556562e08d3b2fb6a173
       url: "http://git.ius.plus/Project-Wing/fis_lib_vid.git"
     source: git
     version: "0.0.1"