Browse Source

新增纯软件方案的配置

loki.wu 11 months ago
parent
commit
23a6f73d10

+ 1 - 0
assets/app_params.json

@@ -1,5 +1,6 @@
 {
     "server_gateway": "https://platform.xinglinghui.com:9400",
     "local_station": false,
+    "pure_software_mode": false,
     "server_local_gateway": "http://192.168.3.2:8400"
 }

+ 12 - 4
lib/architecture/app_parameters.dart

@@ -1,6 +1,7 @@
 import 'dart:convert';
 
 import 'package:fis_common/logger/logger.dart';
+import 'package:flutter/foundation.dart';
 import 'package:flutter/services.dart';
 
 /// 应用参数(随编译引入)
@@ -34,24 +35,28 @@ class AppParameterDataModel {
       "https://platform.xinglinghui.com:9400"; // TODO:
   static const C_HOME_PAGE_URL = "http://192.168.6.80:8408"; // TODO:
   static const C_LOCAL_STATION = false;
+  static const C_PURE_SOFTWAREMODE = false;
 
   AppParameterDataModel({
     this.serverGateway = C_DEFAULT_GATEWAY,
     this.homePageUrl = C_HOME_PAGE_URL,
     this.isLocalStation = C_LOCAL_STATION,
+    this.isPureSoftwareMode = C_PURE_SOFTWAREMODE,
   });
   factory AppParameterDataModel.fromJson(Map<String, dynamic> map) {
     final homePageUrl = map['home_page_url'] ?? C_HOME_PAGE_URL;
     final isLocalStation = map['local_station'] ?? C_LOCAL_STATION;
+    final isPureSoftwareMode =
+        kIsWeb && (map['pure_software_mode'] ?? C_PURE_SOFTWAREMODE);
     final serverGetway = isLocalStation
         ? map['server_local_gateway']
         : map['server_gateway'] ?? C_DEFAULT_GATEWAY;
 
     return AppParameterDataModel(
-      serverGateway: serverGetway,
-      homePageUrl: homePageUrl,
-      isLocalStation: isLocalStation,
-    );
+        serverGateway: serverGetway,
+        homePageUrl: homePageUrl,
+        isLocalStation: isLocalStation,
+        isPureSoftwareMode: isPureSoftwareMode);
   }
 
   String serverGateway;
@@ -59,4 +64,7 @@ class AppParameterDataModel {
 
   ///是否本地工作站,默认false,如果设置为true,将会在App启动时轮询调用成功Server的接口才会进行登录,否则将会一直处于Splash页面
   bool isLocalStation;
+
+  ///是否纯软件模式,目前仅在web和Windows下使用
+  bool isPureSoftwareMode;
 }

+ 2 - 1
lib/pages/check/follow_up/controller.dart

@@ -148,7 +148,8 @@ class FollowUpController extends GetxController {
     return true;
   }
 
-  Future<String> createFollowUpOnly(key, templateCode, data) async {
+  Future<String> createFollowUpOnly(
+      String key, String templateCode, String data) async {
     List<String> followUpPhotos = [];
     if (state.followUpPhoto?.isNotEmpty ?? false) {
       followUpPhotos = [state.followUpPhoto!];

+ 0 - 6
lib/pages/home/controller.dart

@@ -89,12 +89,6 @@ class HomeController extends FControllerBase with HomeNavMixin {
       routeName: "/check/form",
       iconWidget: _buildImgIcon('healthCheckup.png'),
     ),
-    // HomeMenuItem(
-    //   key: 'RQSF',
-    //   title: "人群随访",
-    //   routeName: "/check/follow_up",
-    //   iconWidget: _buildImgIcon('populationFollowUp.png'),
-    // ),
     HomeMenuItem(
       key: 'JKJC',
       title: "健康检测",

+ 10 - 6
lib/pages/medical/widgets/blood_sugar.dart

@@ -1,5 +1,6 @@
 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/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
@@ -26,6 +27,7 @@ class BloodSugar extends StatefulWidget {
 }
 
 class _ExamBloodSugarState extends State<BloodSugar> {
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   var controller = Get.find<MedicalController>();
   DeviceControllerManager? sugar;
   SugarDeviceWorker? worker;
@@ -183,12 +185,14 @@ class _ExamBloodSugarState extends State<BloodSugar> {
     return Stack(
       children: [
         _buildSugar(),
-        if (!isConnectFail)
-          DeviceStatusPosition(
-            deviceStatus: DeviceStatus(connectStatus: _connectStatus),
-          )
-        else
-          _buildErrorButton(),
+        if (!isPureSoftwareMode) ...[
+          if (!isConnectFail)
+            DeviceStatusPosition(
+              deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+            )
+          else
+            _buildErrorButton(),
+        ],
         Positioned(
           right: 10,
           top: 60,

+ 10 - 6
lib/pages/medical/widgets/body_bmi.dart

@@ -1,6 +1,7 @@
 import 'dart:math' as math;
 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/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
@@ -26,6 +27,7 @@ class BodyWeight extends StatefulWidget {
 
 class _ExamBodyWeightState extends State<BodyWeight> {
   var controller = Get.find<MedicalController>();
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   DeviceControllerManager? bmi;
   WeightDeviceWorker? worker;
   bool isConnectFail = false;
@@ -206,12 +208,14 @@ class _ExamBodyWeightState extends State<BodyWeight> {
                   unit: 'kg',
                   onTap: _inputWeight,
                 ),
-                if (!isConnectFail)
-                  DeviceStatusPosition(
-                    deviceStatus: DeviceStatus(connectStatus: _connectStatus),
-                  )
-                else
-                  _buildErrorButton(),
+                if (!isPureSoftwareMode) ...[
+                  if (!isConnectFail)
+                    DeviceStatusPosition(
+                      deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+                    )
+                  else
+                    _buildErrorButton(),
+                ],
               ],
             ),
             const Divider(indent: 30),

+ 10 - 6
lib/pages/medical/widgets/body_temperature.dart

@@ -1,5 +1,6 @@
 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/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
@@ -22,6 +23,7 @@ class BodyTemperature extends StatefulWidget {
 }
 
 class _ExamBodyTemperatureState extends State<BodyTemperature> {
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   var controller = Get.find<MedicalController>();
   DeviceControllerManager? temp;
 
@@ -188,12 +190,14 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
     return Stack(
       children: [
         _buildTemperature(),
-        if (!isConnectFail)
-          DeviceStatusPosition(
-            deviceStatus: DeviceStatus(connectStatus: connectStatus),
-          )
-        else
-          _buildErrorButton(),
+        if (!isPureSoftwareMode) ...[
+          if (!isConnectFail)
+            DeviceStatusPosition(
+              deviceStatus: DeviceStatus(connectStatus: connectStatus),
+            )
+          else
+            _buildErrorButton(),
+        ],
       ],
     );
   }

+ 10 - 6
lib/pages/medical/widgets/body_weight_height.dart

@@ -1,6 +1,7 @@
 import 'dart:math' as math;
 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/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
@@ -27,6 +28,7 @@ class BodyWeightHeight extends StatefulWidget {
 
 class _ExamBodyWeightState extends State<BodyWeightHeight> {
   var controller = Get.find<MedicalController>();
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   DeviceControllerManager? bmi;
   WeightHeightDeviceWorker? worker;
   bool isConnectFail = false;
@@ -190,12 +192,14 @@ class _ExamBodyWeightState extends State<BodyWeightHeight> {
         // clickCard: () {},
         content: Stack(
           children: [
-            if (!isConnectFail)
-              DeviceStatusPosition(
-                deviceStatus: DeviceStatus(connectStatus: _connectStatus),
-              )
-            else
-              _buildErrorButton(),
+            if (!isPureSoftwareMode) ...[
+              if (!isConnectFail)
+                DeviceStatusPosition(
+                  deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+                )
+              else
+                _buildErrorButton(),
+            ],
             Column(
               mainAxisAlignment: MainAxisAlignment.start,
               children: [

+ 10 - 6
lib/pages/medical/widgets/bool_oxygen.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/app_parameters.dart';
 import 'package:vitalapp/components/dialog_number.dart';
 import 'package:vitalapp/managers/device_controller_manager.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
@@ -22,6 +23,7 @@ class BloodOxygen extends StatefulWidget {
 
 class _ExamBloodOxygenState extends State<BloodOxygen> {
   final controller = Get.find<MedicalController>();
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   DeviceControllerManager? spo2;
   SpO2DeviceWorker? worker;
   String pulse = '';
@@ -250,12 +252,14 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
             ],
           ),
         ),
-        if (!isConnectFail)
-          DeviceStatusPosition(
-            deviceStatus: DeviceStatus(connectStatus: _connectStatus),
-          )
-        else
-          _buildErrorButton(),
+        if (!isPureSoftwareMode) ...[
+          if (!isConnectFail)
+            DeviceStatusPosition(
+              deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+            )
+          else
+            _buildErrorButton(),
+        ],
       ],
     );
   }

+ 13 - 8
lib/pages/medical/widgets/exam_blood_pressure.dart

@@ -1,5 +1,6 @@
 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/medical/widgets/device_status_position.dart';
@@ -26,6 +27,8 @@ class ExamBloodPressure extends StatefulWidget {
 
 class _ExamBloodPressureState extends State<ExamBloodPressure> {
   var controller = Get.find<MedicalController>();
+
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   PressureDeviceStatus pressureDeviceStatus = PressureDeviceStatus.start;
   bool isConnectFail = false;
   DeviceControllerManager? nibp;
@@ -434,14 +437,16 @@ class _ExamBloodPressureState extends State<ExamBloodPressure> {
             ],
           ),
         ),
-        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),
+            ),
+          ],
         ],
       ],
     );

+ 10 - 6
lib/pages/medical/widgets/heart_rate.dart

@@ -3,6 +3,7 @@ import 'dart:convert';
 import 'package:fis_common/logger/logger.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/app_parameters.dart';
 import 'package:vitalapp/global.dart';
 import 'package:vitalapp/managers/device_controller_manager.dart';
 import 'package:vitalapp/managers/interfaces/data_convert.dart';
@@ -29,6 +30,7 @@ class HeartRate extends StatefulWidget {
 }
 
 class _HeartRateState extends State<HeartRate> {
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   final MedicalController medicalController = Get.find<MedicalController>();
   final IDataConvertManager dataConvertManager =
       Get.find<IDataConvertManager>();
@@ -171,12 +173,14 @@ class _HeartRateState extends State<HeartRate> {
             ],
           ),
         ),
-        if (!isConnectFail)
-          DeviceStatusPosition(
-            deviceStatus: DeviceStatus(connectStatus: connectStatus),
-          )
-        else
-          _buildErrorButton(),
+        if (!isPureSoftwareMode) ...[
+          if (!isConnectFail)
+            DeviceStatusPosition(
+              deviceStatus: DeviceStatus(connectStatus: connectStatus),
+            )
+          else
+            _buildErrorButton(),
+        ],
       ],
     );
   }

+ 10 - 6
lib/pages/medical/widgets/twelve_ecg.dart

@@ -3,6 +3,7 @@ import 'dart:convert';
 import 'package:fis_common/logger/logger.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/app_parameters.dart';
 import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/components/button.dart';
 import 'package:vitalapp/global.dart';
@@ -35,6 +36,7 @@ class TwelveHeartRate extends StatefulWidget {
 
 class _HeartRateState extends State<TwelveHeartRate> {
   final MedicalController medicalController = Get.find<MedicalController>();
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   final IDataConvertManager dataConvertManager =
       Get.find<IDataConvertManager>();
   DeviceControllerManager? twelveHeart;
@@ -62,12 +64,14 @@ class _HeartRateState extends State<TwelveHeartRate> {
     return Stack(
       children: [
         _buildEcgView(),
-        DeviceStatusPosition(
-          currentTop: 24,
-          deviceStatus: EcgDeviceStatus(
-            connectStatus: connectStatus,
+        if (!isPureSoftwareMode) ...[
+          DeviceStatusPosition(
+            currentTop: 24,
+            deviceStatus: EcgDeviceStatus(
+              connectStatus: connectStatus,
+            ),
           ),
-        ),
+        ],
         if (twelveEcgStatus == TwelveEcgStatus.unstableSampling)
           _buildUnstableSampling(),
         if (twelveEcgStatus == TwelveEcgStatus.stableSampling)
@@ -93,7 +97,7 @@ class _HeartRateState extends State<TwelveHeartRate> {
     return ExamCard(
       titleText: const SizedBox(),
       content: SizedBox(
-        height: 620,
+        height: 618,
         // margin: const EdgeInsets.only(bottom: 10),
         child: Column(
           children: [

+ 13 - 49
lib/pages/medical/widgets/urinalysis.dart

@@ -1,7 +1,9 @@
 import 'dart:async';
 
+import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/app_parameters.dart';
 import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/components/button.dart';
 import 'package:vitalapp/components/dialog_input.dart';
@@ -30,6 +32,7 @@ class Urinalysis extends StatefulWidget {
 
 class _ExamUrinalysisState extends State<Urinalysis> {
   var controller = Get.find<MedicalController>();
+  bool get isPureSoftwareMode => AppParameters.data.isPureSoftwareMode;
   DeviceControllerManager? urinaly;
   UrineDeviceWorker? worker;
   UrineExamData? urineExamData;
@@ -207,57 +210,18 @@ class _ExamUrinalysisState extends State<Urinalysis> {
     return Stack(
       children: [
         _buildUrinalysis(),
-        if (!isConnectFail)
-          DeviceStatusPosition(
-            deviceStatus: DeviceStatus(connectStatus: connectStatus),
-          )
-        else
-          _buildErrorButton(),
-        // _buildAutoTest(),
+        if (!isPureSoftwareMode) ...[
+          if (!isConnectFail)
+            DeviceStatusPosition(
+              deviceStatus: DeviceStatus(connectStatus: connectStatus),
+            )
+          else
+            _buildErrorButton(),
+        ],
       ],
     );
   }
 
-  Widget _buildAutoTest() {
-    Widget autoTestStatus;
-
-    if (isAutoTesting) {
-      autoTestStatus = const SizedBox();
-      // CountdownPage(
-      //   seconds: 60,
-      //   title: "等待测试",
-      // );
-    } else {
-      autoTestStatus = VButton(
-        onTap: () {
-          worker!.autoTest();
-          isAutoTesting = true;
-          _value = {};
-          setState(() {});
-        },
-        child: const Center(
-          child: Text(
-            "采样",
-            style: TextStyle(fontSize: 24),
-          ),
-        ),
-      );
-    }
-    if (connectStatus == WorkerStatus.connected) {
-      return Positioned(
-        top: 16,
-        left: 120,
-        child: SizedBox(
-          width: 200,
-          height: 50,
-          child: autoTestStatus,
-        ),
-      );
-    } else {
-      return const SizedBox();
-    }
-  }
-
   Widget _buildErrorButton() {
     return DeviceStatusPosition(
       deviceStatus: Row(
@@ -295,7 +259,7 @@ class _ExamUrinalysisState extends State<Urinalysis> {
         constraints: const BoxConstraints(minHeight: 50),
         child: GridView.count(
           shrinkWrap: true,
-          childAspectRatio: 4,
+          childAspectRatio: kIsWeb ? 4.5 : 4,
           crossAxisCount: 2, // 列数为2,即两列布局
           children: urinalysis.map((item) {
             return _buildUrineItem(item);
@@ -340,7 +304,7 @@ class _ExamUrinalysisState extends State<Urinalysis> {
             ),
           ),
           Container(
-            height: 65,
+            height: 55,
             width: 140,
             alignment: Alignment.centerLeft,
             child: Text(