Browse Source

筛选条件UI调整

finlay 10 months ago
parent
commit
470d8394b6

+ 39 - 59
lib/pages/controllers/crowd_labels.dart

@@ -40,44 +40,35 @@ class CrowdLabelsController extends FControllerBase {
     result = _updateSpecialCareChecked(code);
   }
 
+  void onItemCheckFilterChanged(String code) {
+    bool result = false;
+    result = _updateAllChecked(code);
+    if (result) return;
+    final item = state.allLabels.firstWhereOrNull((e) => e.code == code);
+    if (item == null) return;
+
+    final arr = state.selectedFilterCodes.toList();
+    if (!arr.contains(code)) {
+      if (arr.contains(code) == false) {
+        arr.add(code);
+      }
+    } else {
+      arr.remove(code);
+    }
+    state.selectedFilterCodes = arr;
+  }
+
   bool _updateAllChecked(String code) {
     if (state.isAllSelect) {
-      if (code != "0") {
-        return false;
-      } else {
-        state.isAllSelect = false;
-        state.selectedNormalCodes = [];
-        state.selectedDiseaseCodes = [];
-        state.selectedSpecialCareCodes = [];
-      }
+      state.isAllSelect = false;
+      state.selectedFilterCodes = [];
     } 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();
+        state.selectedFilterCodes =
+            state.allLabels.map((LabelDTO e) => e.code ?? '').toList();
       }
     }
     return true;
@@ -94,7 +85,6 @@ class CrowdLabelsController extends FControllerBase {
       }
     } else {
       arr.remove(code);
-      state.isAllSelect = false;
     }
     state.selectedNormalCodes = arr;
     return true;
@@ -111,7 +101,6 @@ class CrowdLabelsController extends FControllerBase {
       }
     } else {
       arr.remove(code);
-      state.isAllSelect = false;
     }
     state.selectedDiseaseCodes = arr;
     return true;
@@ -129,7 +118,6 @@ class CrowdLabelsController extends FControllerBase {
       }
     } else {
       arr.remove(code);
-      state.isAllSelect = false;
     }
     state.selectedSpecialCareCodes = arr;
     return true;
@@ -142,32 +130,13 @@ class CrowdLabelsController extends FControllerBase {
     state.diseaseOptions = (await _manager.getDiseaseCrowdLabels())
       ..removeLast();
     // state.diseaseOptions = await _manager.getDiseaseCrowdLabels();
+    var labels = await Get.find<ILabelManager>().getAllLabels();
     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();
-    }
+    state.allLabels = [
+      LabelDTO(code: 'RQFL_ET', labelName: "儿童"),
+      LabelDTO(code: "RQFL_LNR", labelName: "老年人"),
+      ...labels
+    ];
   }
 }
 
@@ -179,9 +148,20 @@ class CrowdLablesState {
   final RxList<String> _selectedNormalCodes = RxList<String>();
   final RxList<String> _selectedDiseaseCodes = RxList<String>();
   final RxList<String> _selectedSpecialCareCodes = RxList<String>();
+  final RxList<LabelDTO> _allLabels = RxList<LabelDTO>();
+  final RxList<String> _selectedFilterCodes = RxList<String>();
+
+  /// 一般人群分类 已选择Code集合
+  List<String> get selectedFilterCodes =>
+      UnmodifiableListView(_selectedFilterCodes.toList());
+  set selectedFilterCodes(List<String> val) => _selectedFilterCodes.value = val;
 
   bool isAllSelect = true;
 
+  /// 一般人群分类选项集合
+  List<LabelDTO> get allLabels => UnmodifiableListView(_allLabels.toList());
+  set allLabels(List<LabelDTO> val) => _allLabels.value = val;
+
   /// 一般人群分类选项集合
   List<LabelDTO> get normalOptions =>
       UnmodifiableListView(_normalOptions.toList());

+ 2 - 2
lib/pages/patient/list/controller.dart

@@ -294,9 +294,9 @@ class PatientListController extends FControllerBase
       endTime: state.endTime.value?.add(const Duration(days: 1)),
       crowdLabels: crowdLabelsController.state.isAllSelect
           ? ["RQFL_ET", "RQFL_LNR", ...labelKeys]
-          : crowdLabelsController.state.selectedCodes.length == 0
+          : crowdLabelsController.state.selectedFilterCodes.length == 0
               ? null
-              : crowdLabelsController.state.selectedCodes,
+              : crowdLabelsController.state.selectedFilterCodes,
       createdBySelf: state.selectBoxFilterFounder == 0,
       contractState: state.contractStateSelectedItem,
     );

+ 6 - 24
lib/pages/patient/list/widgets/crowd_select_label.dart

@@ -28,25 +28,7 @@ class _CrowdSelectLabelState extends State<CrowdSelectLabelView> {
           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))
+            ...state.allLabels
                 .map((LabelDTO e) => buildItem(e, context))
                 .toList(),
           ],
@@ -60,14 +42,14 @@ class _CrowdSelectLabelState extends State<CrowdSelectLabelView> {
         label: dto.labelName ?? '',
         isChecked: controller.state.isAllSelect
             ? controller.state.isAllSelect
-            : controller.state.selectedCodes.contains(dto.code),
+            : controller.state.selectedFilterCodes.contains(dto.code),
         isAllChecked: controller.state.isAllSelect,
         onChanged: (value) {
           if (controller.state.isAllSelect && dto.code != "0") {
             return;
           }
-          controller.onItemCheckChanged(dto.code!);
-          if (controller.state.selectedCodes.length == 7) {
+          controller.onItemCheckFilterChanged(dto.code!);
+          if (controller.state.selectedFilterCodes.length == 7) {
             controller.state.isAllSelect = true;
           }
           setState(() {});
@@ -140,7 +122,7 @@ class _VCheckBoxState extends State<VCheckBoxButton> {
               height: height,
               decoration: BoxDecoration(
                 color: (_isAllChecked && widget.label != "全选")
-                    ? Colors.grey
+                    ? Colors.grey.shade400
                     : _isChecked
                         ? primaryColor
                         : Colors.white,
@@ -157,7 +139,7 @@ class _VCheckBoxState extends State<VCheckBoxButton> {
                     widget.label,
                     style: TextStyle(
                       color: (_isAllChecked && widget.label != "全选")
-                          ? Colors.black
+                          ? Colors.white
                           : _isChecked
                               ? Colors.white
                               : primaryColor,