Browse Source

0018830: 【一体机】【12导心电】“报告结论”按键和心率文字重叠,需要调整 0018808: 【健康一体机】【新需求】 帐号下面可以看到已签约人数, 筛选里面在增加糖尿病 和高血压的选项,可以看到糖尿病跟高血压有多少人

finlay 10 months ago
parent
commit
2dd4e774e3

+ 75 - 0
lib/pages/controllers/crowd_labels.dart

@@ -31,6 +31,8 @@ class CrowdLabelsController extends FControllerBase {
 
   void onItemCheckChanged(String code) {
     bool result = false;
+    result = _updateAllChecked(code);
+    if (result) return;
     result = _updateNormalChecked(code);
     if (result) return;
     result = _updateDiseaseChecked(code);
@@ -38,6 +40,49 @@ class CrowdLabelsController extends FControllerBase {
     result = _updateSpecialCareChecked(code);
   }
 
+  bool _updateAllChecked(String code) {
+    if (state.isAllSelect) {
+      if (code != "0") {
+        return false;
+      } else {
+        state.isAllSelect = false;
+        state.selectedNormalCodes = [];
+        state.selectedDiseaseCodes = [];
+        state.selectedSpecialCareCodes = [];
+      }
+    } else {
+      if (code != "0") {
+        return false;
+      } else {
+        state.isAllSelect = true;
+        state.selectedNormalCodes = state.normalOptions
+            .where((element) => [
+                  "RQFL_ET",
+                  "RQFL_YF",
+                  "RQFL_LNR",
+                ].contains(element.code))
+            .map((LabelDTO e) => e.code ?? '')
+            .toList();
+
+        state.selectedDiseaseCodes = state.diseaseOptions
+            .where((element) => [
+                  "CJJB_GXY",
+                  "CJJB_TNB",
+                  "CJJB_YZJSBZA",
+                  "CJJB_FJH",
+                ].contains(element.code))
+            .map((LabelDTO e) => e.code ?? '')
+            .toList();
+
+        state.selectedSpecialCareCodes = state.specialCareOptions
+            .where((element) => [].contains(element.code))
+            .map((LabelDTO e) => e.code ?? '')
+            .toList();
+      }
+    }
+    return true;
+  }
+
   bool _updateNormalChecked(code) {
     final item = state.normalOptions.firstWhereOrNull((e) => e.code == code);
     if (item == null) return false;
@@ -49,6 +94,7 @@ class CrowdLabelsController extends FControllerBase {
       }
     } else {
       arr.remove(code);
+      state.isAllSelect = false;
     }
     state.selectedNormalCodes = arr;
     return true;
@@ -65,6 +111,7 @@ class CrowdLabelsController extends FControllerBase {
       }
     } else {
       arr.remove(code);
+      state.isAllSelect = false;
     }
     state.selectedDiseaseCodes = arr;
     return true;
@@ -82,6 +129,7 @@ class CrowdLabelsController extends FControllerBase {
       }
     } else {
       arr.remove(code);
+      state.isAllSelect = false;
     }
     state.selectedSpecialCareCodes = arr;
     return true;
@@ -95,6 +143,31 @@ class CrowdLabelsController extends FControllerBase {
       ..removeLast();
     // state.diseaseOptions = await _manager.getDiseaseCrowdLabels();
     state.specialCareOptions = await _manager.getSpecialCareCrowdLabels();
+    if (state.isAllSelect) {
+      state.selectedNormalCodes = state.normalOptions
+          .where((element) => [
+                "RQFL_ET",
+                "RQFL_YF",
+                "RQFL_LNR",
+              ].contains(element.code))
+          .map((LabelDTO e) => e.code ?? '')
+          .toList();
+
+      state.selectedDiseaseCodes = state.diseaseOptions
+          .where((element) => [
+                "CJJB_GXY",
+                "CJJB_TNB",
+                "CJJB_YZJSBZA",
+                "CJJB_FJH",
+              ].contains(element.code))
+          .map((LabelDTO e) => e.code ?? '')
+          .toList();
+
+      state.selectedSpecialCareCodes = state.specialCareOptions
+          .where((element) => [].contains(element.code))
+          .map((LabelDTO e) => e.code ?? '')
+          .toList();
+    }
   }
 }
 
@@ -107,6 +180,8 @@ class CrowdLablesState {
   final RxList<String> _selectedDiseaseCodes = RxList<String>();
   final RxList<String> _selectedSpecialCareCodes = RxList<String>();
 
+  bool isAllSelect = true;
+
   /// 一般人群分类选项集合
   List<LabelDTO> get normalOptions =>
       UnmodifiableListView(_normalOptions.toList());

+ 1 - 1
lib/pages/medical/widgets/twelve_ecg.dart

@@ -129,7 +129,7 @@ class _HeartRateState extends State<TwelveHeartRate> {
                   style: TextStyle(fontSize: 25),
                 ),
                 const SizedBox(
-                  width: 250,
+                  width: 200,
                 )
               ],
             ),

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

@@ -36,6 +36,25 @@ class PatientListController extends FControllerBase
 
   final crowdLabelsController = CrowdLabelsController();
 
+// enum ContractStateEnum {
+// 	Unsigned,
+// 	Cancelled,
+// 	Expired,
+// 	Signed,
+// 	Voided,
+// 	Refused,
+// }
+
+  final Map<String, String> ContractStateMap = {
+    "All": "未选择",
+    "Unsigned": "未签约",
+    "Cancelled": "已取消",
+    "Expired": "已过期",
+    "Signed": "已签约",
+    "Voided": "已失效",
+    "Refused": "已拒绝",
+  };
+
   void patientListGotoDetail(PatientDTO dto) async {
     await _patientManager.switchCurrentPatient(dto);
     _homeController.switchNavByName("/patient/detail");
@@ -270,8 +289,11 @@ class PatientListController extends FControllerBase
       keyword: state.searchString,
       startTime: state.startTime.value,
       endTime: state.endTime.value?.add(const Duration(days: 1)),
-      crowdLabels: crowdLabelsController.state.selectedCodes,
+      crowdLabels: crowdLabelsController.state.isAllSelect
+          ? null
+          : crowdLabelsController.state.selectedCodes,
       createdBySelf: state.selectBoxFilterFounder == 0,
+      contractState: state.contractStateSelectedItem,
     );
 
     final pagedList = await _patientManager.getPagedList(request);

+ 8 - 0
lib/pages/patient/list/state.dart

@@ -1,3 +1,4 @@
+import 'package:fis_jsonrpc/services/vitalContractRecord.m.dart';
 import 'package:get/get.dart';
 import 'package:vitalapp/architecture/defines.dart';
 import 'package:vitalapp/global.dart';
@@ -22,6 +23,13 @@ class PatientListState with PagedStateMixin<PatientModelDTO> {
   final RxInt _statisticTotalCount = RxInt(0);
   final RxInt _statisticTodayCount = RxInt(0);
   final RxInt _selectBoxFilterFounder = RxInt(0);
+  final Rx<ContractStateEnum?> _contractStateSelectedItem =
+      Rx<ContractStateEnum?>(null);
+
+  ContractStateEnum? get contractStateSelectedItem =>
+      _contractStateSelectedItem.value;
+  set contractStateSelectedItem(ContractStateEnum? val) =>
+      _contractStateSelectedItem.value = val;
 
   int get selectBoxFilterFounder => _selectBoxFilterFounder.value;
   set selectBoxFilterFounder(int val) =>

+ 53 - 10
lib/pages/patient/list/view.dart

@@ -1,3 +1,4 @@
+import 'package:fis_jsonrpc/rpc.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
@@ -24,6 +25,7 @@ import 'package:vitalapp/managers/interfaces/exam.dart';
 import 'package:vitalapp/managers/interfaces/models/crowd_labels.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/crowd_select_label.dart';
 import 'package:vitalapp/pages/patient/list/widgets/status.dart';
 import 'package:vitalapp/pages/widgets/icon_button.dart';
 import 'package:vitalapp/store/store.dart';
@@ -182,16 +184,6 @@ class PatientListPage extends GetView<PatientListController> {
                 const SizedBox(
                   height: 20,
                 ),
-                // const Text(
-                //   '人群分类:',
-                //   style: TextStyle(fontSize: 20),
-                // ),
-                // const SizedBox(
-                //   height: 20,
-                // ),
-                // CrowdSelectLabelView(
-                //   controller: controller.crowdLabelsController,
-                // ),
                 const Text(
                   '居民查询范围:',
                   style: TextStyle(fontSize: 20),
@@ -207,6 +199,57 @@ class PatientListPage extends GetView<PatientListController> {
                     ],
                   ),
                 ),
+                const SizedBox(
+                  height: 20,
+                ),
+                const Text(
+                  '人群分类:',
+                  style: TextStyle(fontSize: 20),
+                ),
+                const SizedBox(
+                  height: 20,
+                ),
+                CrowdSelectLabelView(
+                  controller: controller.crowdLabelsController,
+                ),
+                const SizedBox(
+                  height: 20,
+                ),
+                Row(
+                  children: [
+                    const Text(
+                      '签约状态:',
+                      style: TextStyle(fontSize: 20),
+                    ),
+                    const SizedBox(
+                      width: 20,
+                    ),
+                    Obx(
+                      () => DropdownButton<ContractStateEnum>(
+                        value: controller.state.contractStateSelectedItem,
+                        onChanged: (value) {
+                          controller.state.contractStateSelectedItem = value;
+                        },
+                        focusColor: Colors.white,
+                        items: [
+                          DropdownMenuItem<ContractStateEnum>(
+                            value: null,
+                            child: Text("全部选择"),
+                          ),
+                          ...ContractStateEnum.values
+                              .map<DropdownMenuItem<ContractStateEnum>>(
+                                  (ContractStateEnum value) {
+                            return DropdownMenuItem<ContractStateEnum>(
+                              value: value,
+                              child: Text(
+                                  controller.ContractStateMap[value.name]!),
+                            );
+                          }).toList()
+                        ],
+                      ),
+                    ),
+                  ],
+                ),
               ],
             ),
           ),

+ 21 - 1
lib/pages/patient/list/widgets/crowd_select_label.dart

@@ -27,13 +27,26 @@ class _CrowdSelectLabelState extends State<CrowdSelectLabelView> {
           spacing: 16,
           runSpacing: 12,
           children: [
+            buildItem(LabelDTO(code: "0", labelName: "全选"), context),
             ...state.normalOptions
+                .where((element) => [
+                      "RQFL_ET",
+                      "RQFL_YF",
+                      "RQFL_LNR",
+                    ].contains(element.code))
                 .map((LabelDTO e) => buildItem(e, context))
                 .toList(),
             ...state.diseaseOptions
+                .where((element) => [
+                      "CJJB_GXY",
+                      "CJJB_TNB",
+                      "CJJB_YZJSBZA",
+                      "CJJB_FJH",
+                    ].contains(element.code))
                 .map((LabelDTO e) => buildItem(e, context))
                 .toList(),
             ...state.specialCareOptions
+                .where((element) => [].contains(element.code))
                 .map((LabelDTO e) => buildItem(e, context))
                 .toList(),
           ],
@@ -43,10 +56,17 @@ class _CrowdSelectLabelState extends State<CrowdSelectLabelView> {
   Widget buildItem(LabelDTO dto, BuildContext context) {
     return InkWell(
       child: VCheckBoxButton(
+        key: GlobalKey(),
         label: dto.labelName ?? '',
-        isChecked: controller.state.selectedCodes.contains(dto.code),
+        isChecked: controller.state.isAllSelect
+            ? controller.state.isAllSelect
+            : controller.state.selectedCodes.contains(dto.code),
         onChanged: (value) {
           controller.onItemCheckChanged(dto.code!);
+          if (controller.state.selectedCodes.length == 7) {
+            controller.state.isAllSelect = true;
+          }
+          setState(() {});
         },
       ),
     );

+ 2 - 2
pubspec.lock

@@ -415,8 +415,8 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: "3f85d34cc7b600f86a02d1452811edace32ff5a6"
-      resolved-ref: "3f85d34cc7b600f86a02d1452811edace32ff5a6"
+      ref: d0fbb4972be
+      resolved-ref: d0fbb4972be9d8bfdc4daf8f820cc42175de1e3b
       url: "http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git"
     source: git
     version: "0.0.1"

+ 2 - 2
pubspec.yaml

@@ -48,7 +48,7 @@ dependencies:
   fis_jsonrpc:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git
-      ref: c8395dd
+      ref: d0fbb4972be
   vnote_device_plugin:
     git:
       url: http://git.ius.plus/Project-Vital/FlutterDevicePlugin.git
@@ -163,7 +163,7 @@ dependency_overrides:
   fis_jsonrpc:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git
-      ref: 3f85d34cc7b600f86a02d1452811edace32ff5a6
+      ref: d0fbb4972be
     #path: ../fis_lib_jsonrpc
   fis_theme:
     git: