Bläddra i källkod

1、测量配置项变更

bakamaka.guan 2 år sedan
förälder
incheckning
6960a87ba9

+ 2 - 0
lib/interfaces/process/items/terms.dart

@@ -5,10 +5,12 @@ class MeasureUnsupportedTerms {
     PSAD,
     AntPelvic_Rest,
     AntPelvic_Valsalva,
+    HR,
   ];
   static const PSAD = "PSAD";
   static const AntPelvic_Rest = "Ant. Pelvic(Rest)";
   static const AntPelvic_Valsalva = "Ant. Pelvic(Valsalva)";
+  static const HR = "HR";
 }
 
 class MeasureTerms {

+ 16 - 1
lib/process/workspace/measure_data_controller.dart

@@ -4,6 +4,7 @@ import 'package:fis_common/event/event_type.dart';
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
 import 'package:fis_measure/process/workspace/measure_handler.dart';
+import 'package:fis_measure/view/measure/measure_config/measure_configuation_page.dart';
 import 'package:vid/us/vid_us_mode.dart';
 
 class MeasureImageData {
@@ -97,10 +98,13 @@ abstract class IMeasureDataController {
   List<VidUsMode> get applicationModes;
   set applicationModes(List<VidUsMode> value);
 
-  /// 测量图片当前所有模式下所有测量项数据
+  /// 测量图片当前模式下所有测量项数据
   List<MeasureModeDTO> get availableModes;
   set availableModes(List<MeasureModeDTO> value);
 
+  List<ItemMetaGroup> get itemMetaListGroup;
+  set itemMetaListGroup(List<ItemMetaGroup> itemMetaListGroup);
+
   String get currentMode;
   set currentMode(String value);
 }
@@ -125,6 +129,7 @@ class MeasureDataController implements IMeasureDataController {
   List<ItemMeta> _getBottomItemMetaList = [];
   List<String> _getCommentsList = [];
   List<CommentItemDTO> _measureCommentItemResult = [];
+  List<ItemMetaGroup> _itemMetaListGroup = [];
   @override
   var remedicalListResultChanged = FEventHandler<List<RemedicalInfoDTO>>();
 
@@ -270,6 +275,16 @@ class MeasureDataController implements IMeasureDataController {
     }
   }
 
+  @override
+  List<ItemMetaGroup> get itemMetaListGroup => _itemMetaListGroup;
+  @override
+  set itemMetaListGroup(List<ItemMetaGroup> value) {
+    if (value != _itemMetaListGroup) {
+      _itemMetaListGroup = value;
+      // _onItemMetaListChanged();
+    }
+  }
+
   @override
   String get itemCurrentImage => _itemCurrentImage;
   @override

+ 26 - 71
lib/view/measure/measure_config/measure_configuation_page.dart

@@ -2,12 +2,13 @@ import 'dart:convert';
 
 import 'package:fis_i18n/i18n.dart';
 import 'package:fis_jsonrpc/rpc.dart';
-import 'package:fis_measure/interfaces/process/items/item_metas.dart';
+import 'package:fis_measure/interfaces/process/player/play_controller.dart';
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
-import 'package:fis_measure/process/items/item_meta_convert.dart';
 import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/process/workspace/measure_handler.dart';
 import 'package:fis_measure/view/measure/measure_config/widgets/measurement_tool_selection.dart';
+import 'package:fis_measure/view/measure/measure_view_controller.dart';
+import 'package:fis_measure/view/player/controller.dart';
 import 'package:fis_theme/theme.dart';
 import 'package:fis_ui/index.dart';
 import 'package:flutter/material.dart';
@@ -25,7 +26,7 @@ class ItemMetaGroup {
   final String itemMetaGroupTitle;
 
   /// 当前测量组的测量数组
-  final List<ItemMeta> itemMeta;
+  final List<ItemMetaDTO> itemMeta;
 
   /// 是否展开
   bool? isExpend;
@@ -64,27 +65,19 @@ class _MeasureConfigurationDialogState
 
   late final application = Get.find<IApplication>();
   late final measureHandler = Get.find<MeasureHandler>();
+  final playerController = Get.find<IPlayerController>() as VidPlayerController;
 
   /// 数据
   final measureData = Get.find<MeasureDataController>();
 
+  /// 测量项控制器
+  final measureMetaController = Get.find<MeasureMetaController>();
+
   /// 选中的测量项
   List<String> chooseMeasureList = [];
   List<ItemMetaGroup> itemMetaListGroup = [];
   String activeName = '';
 
-  /// 跟超声机端保持一致,配置 项目写死
-  List<ItemMetaGroup> getMeasureConfigurationGroupName() {
-    return [
-      ItemMetaGroup('Common', [], true),
-      ItemMetaGroup('ABD', [], true),
-      ItemMetaGroup('CARD', [], true),
-      ItemMetaGroup('GYN', [], true),
-      ItemMetaGroup('OB', [], true),
-      ItemMetaGroup('VAS', [], true),
-    ];
-  }
-
   /// 打开已选测量工具设置
   ///
   /// [name] 测量的名字 后期改版后应该是一个测量对象
@@ -95,10 +88,14 @@ class _MeasureConfigurationDialogState
     // router.dialog(() => HasSelectedSettingDialog(name: name));
   }
   Future<void> getName() async {
+    List<String> getModes = [];
+    for (var element in playerController.currentFrame?.visuals[0].modes ?? []) {
+      getModes.add(element.type.toString().split('.')[1]);
+    }
     var measureModeSelection = MeasureModeSelection(
       application.applicationName,
       application.categoryName,
-      application.isThirdPart ? ['TPPTissue'] : ['Tissue'],
+      application.isThirdPart ? ['TPPTissue'] : getModes,
     );
     measureHandler.measureModeChanged = measureModeSelection;
     measureData.getMeasureApplicationList = [];
@@ -108,30 +105,9 @@ class _MeasureConfigurationDialogState
       /// 模式版本
       measureData.measureApplicationVersion =
           measureApplicationDTO.version ?? '';
-
-      ///模式列表
-      var models = measureApplicationDTO.availableModes;
-      if (models != null && models.isNotEmpty) {
-        ///群组列表
-        var groups = models[0].availableGroups;
-        if (groups != null && groups.isNotEmpty) {
-          ///项目列表
-          var folders = groups[0].availableFolders;
-          if (folders != null && folders.isNotEmpty) {
-            measureData.getMeasureApplicationList =
-                folders[0].workingItemNames ?? [];
-            if (folders[0].availableItems != null) {
-              measureData.itemMetaList =
-                  folders[0].availableItems!.map((element) {
-                return ItemMetaConverter(element).output();
-              }).toList();
-            }
-            if (measureData.getMeasureApplicationList.isNotEmpty) {
-              changeItem(measureData.getMeasureApplicationList[0]);
-            }
-          }
-        }
-      }
+      measureData.availableModes = measureApplicationDTO.availableModes ?? [];
+      measureMetaController.setAvailableModes(measureData.currentMode);
+      activeName = measureData.getItemMetaList[0].name;
     }
   }
 
@@ -149,7 +125,7 @@ class _MeasureConfigurationDialogState
       application.applicationName,
       application.categoryName,
       UserDefinedMeasureModeDTO(
-        modeName: 'Tissue',
+        modeName: measureData.currentMode,
         workingGroups: [
           UserDefinedMeasureGroupDTO(
             name: 'General',
@@ -164,41 +140,18 @@ class _MeasureConfigurationDialogState
       ),
     );
     measureHandler.measureModeSubmitChanged = measureModeSubmitChanged;
-    var saveUserDefinedMeasureApplication = await measureData
-        .saveUserDefinedMeasureApplicationAsync
+    await measureData.saveUserDefinedMeasureApplicationAsync
         .call(measureModeSubmitChanged);
     getName();
-    setState(() {});
+    measureMetaController.setAvailableModes(measureData.currentMode);
   }
 
   @override
   void initState() {
     super.initState();
-    List<ItemMetaGroup> _itemMetaConfigurationList = [];
     List<String> chooseMeasure = [];
-
-    Map<String, List<ItemMeta>> _group = {};
-    getMeasureConfigurationGroupName().forEach(
-      ((element) {
-        List<ItemMeta> itemMetaListGroupItem = [];
-        (measureData.itemMetaList).toList().forEach(
-          (e) {
-            // if (e.categories!.contains(element.itemMetaGroupTitle)) {
-            //   itemMetaListGroupItem.add(e);
-            // }
-            _group[element.itemMetaGroupTitle] = itemMetaListGroupItem;
-          },
-        );
-      }),
-    );
-    _group.forEach(
-      (key, value) {
-        _itemMetaConfigurationList.add(
-          ItemMetaGroup(key, value, true),
-        );
-      },
-    );
-    itemMetaListGroup = _itemMetaConfigurationList;
+    measureMetaController.measureConfig();
+    itemMetaListGroup = measureData.itemMetaListGroup;
     chooseMeasure = measureData.getMeasureApplicationList;
     chooseMeasureList = chooseMeasure.toSet().toList();
   }
@@ -310,9 +263,11 @@ class _MeasureConfigurationDialogState
           ),
           measureToolsTab == 0
               ? FExpanded(
-                  child: SelectModulePage(
-                    itemMetaListGroup: itemMetaListGroup,
-                    chooseMeasureList: chooseMeasureList,
+                  child: FSingleChildScrollView(
+                    child: SelectModulePage(
+                      itemMetaListGroup: itemMetaListGroup,
+                      chooseMeasureList: chooseMeasureList,
+                    ),
                   ),
                 )
               : FExpanded(

+ 169 - 81
lib/view/measure/measure_config/widgets/measurement_tool_selection.dart

@@ -59,8 +59,19 @@ class _SelectModulePageState extends FState<SelectModulePage> {
 
   @override
   FWidget build(BuildContext context) {
-    return FListView(
-      shrinkWrap: true,
+    return FColumn(
+      children: widget.itemMetaListGroup
+          .map(
+            (e) => FColumn(
+              crossAxisAlignment: CrossAxisAlignment.start,
+              children: _buildMeasureConfiguration(e),
+            ),
+          )
+          .toList(),
+    );
+
+    FListView(
+      // shrinkWrap: true,
       children: widget.itemMetaListGroup
           .map(
             (e) => FColumn(
@@ -126,90 +137,167 @@ class _SelectModulePageState extends FState<SelectModulePage> {
       padding: const EdgeInsets.only(left: 15),
       margin: const EdgeInsets.symmetric(vertical: 10),
       child: FWrap(
-        spacing: 16.0, // 主轴(水平)方向间距
-        runSpacing: 8.0, // 纵轴(垂直)方向间距
-        direction: Axis.horizontal,
-        crossAlignment: WrapCrossAlignment.center,
-        alignment: WrapAlignment.start,
-        children: List<FWidget>.generate(
-          e.itemMeta.length,
-          (index) {
-            return widget.chooseMeasureList.contains(
-              e.itemMeta[index].name,
-            )
-                ? FElevatedButton(
-                    onPressed: () {
-                      removeChooseMeasure(
-                        e.itemMeta[index].name,
-                      );
-                    },
-                    style: const ButtonStyle(),
-                    child: FContainer(
-                      width: 180,
-                      height: 60,
-                      child: FCenter(
-                        child: FColumn(
-                          mainAxisAlignment: MainAxisAlignment.center,
-                          children: [
-                            FText(
-                              getValues(
-                                e.itemMeta[index].name,
-                              ),
-                              style: const TextStyle(
-                                color: Colors.white,
-                              ),
+          spacing: 16.0, // 主轴(水平)方向间距
+          runSpacing: 8.0, // 纵轴(垂直)方向间距
+          direction: Axis.horizontal,
+          crossAlignment: WrapCrossAlignment.center,
+          alignment: WrapAlignment.start,
+          children: e.itemMeta
+              .map(
+                (e) => widget.chooseMeasureList.contains(
+                  e.name,
+                )
+                    ? FElevatedButton(
+                        onPressed: () {
+                          removeChooseMeasure(
+                            e.name ?? '',
+                          );
+                        },
+                        style: const ButtonStyle(),
+                        child: FContainer(
+                          width: 180,
+                          height: 60,
+                          child: FCenter(
+                            child: FColumn(
+                              mainAxisAlignment: MainAxisAlignment.center,
+                              children: [
+                                FText(
+                                  getValues(
+                                    e.name ?? '',
+                                  ),
+                                  style: const TextStyle(
+                                    color: Colors.white,
+                                  ),
+                                ),
+                                FText(
+                                  e.name ?? '',
+                                  style: const TextStyle(
+                                    color: Colors.white,
+                                  ),
+                                ),
+                              ],
                             ),
-                            FText(
-                              e.itemMeta[index].name,
-                              style: const TextStyle(
-                                color: Colors.white,
-                              ),
-                            ),
-                          ],
+                          ),
                         ),
-                      ),
-                    ),
-                  )
-                : FElevatedButton(
-                    onPressed: () {
-                      addChooseMeasure(
-                        e.itemMeta[index].name,
-                      );
-                    },
-                    style: ButtonStyle(
-                      backgroundColor: MaterialStateProperty.all(
-                        Colors.white,
-                      ),
-                    ),
-                    child: FContainer(
-                      width: 180,
-                      height: 60,
-                      child: FCenter(
-                        child: FColumn(
-                          mainAxisAlignment: MainAxisAlignment.center,
-                          children: [
-                            FText(
-                              getValues(
-                                e.itemMeta[index].name,
-                              ),
-                              style: const TextStyle(
-                                color: Colors.black,
-                              ),
-                            ),
-                            FText(
-                              e.itemMeta[index].name,
-                              style: const TextStyle(
-                                color: Colors.black,
-                              ),
+                      )
+                    : FElevatedButton(
+                        onPressed: () {
+                          addChooseMeasure(
+                            e.name ?? '',
+                          );
+                        },
+                        style: ButtonStyle(
+                          backgroundColor: MaterialStateProperty.all(
+                            Colors.white,
+                          ),
+                        ),
+                        child: FContainer(
+                          width: 180,
+                          height: 60,
+                          child: FCenter(
+                            child: FColumn(
+                              mainAxisAlignment: MainAxisAlignment.center,
+                              children: [
+                                FText(
+                                  getValues(
+                                    e.name ?? '',
+                                  ),
+                                  style: const TextStyle(
+                                    color: Colors.black,
+                                  ),
+                                ),
+                                FText(
+                                  e.name ?? '',
+                                  style: const TextStyle(
+                                    color: Colors.black,
+                                  ),
+                                ),
+                              ],
                             ),
-                          ],
+                          ),
                         ),
                       ),
-                    ),
-                  );
-          },
-        ),
-      ),
+              )
+              .toList()
+
+          // List<FWidget>.generate(
+          //   e.itemMeta.length,
+          //   (index) {
+          //     return widget.chooseMeasureList.contains(
+          //       e.itemMeta[index].name,
+          //     )
+          //         ? FElevatedButton(
+          //             onPressed: () {
+          //               removeChooseMeasure(
+          //                 e.itemMeta[index].name ?? '',
+          //               );
+          //             },
+          //             style: const ButtonStyle(),
+          //             child: FContainer(
+          //               width: 180,
+          //               height: 60,
+          //               child: FCenter(
+          //                 child: FColumn(
+          //                   mainAxisAlignment: MainAxisAlignment.center,
+          //                   children: [
+          //                     FText(
+          //                       getValues(
+          //                         e.itemMeta[index].name ?? '',
+          //                       ),
+          //                       style: const TextStyle(
+          //                         color: Colors.white,
+          //                       ),
+          //                     ),
+          //                     FText(
+          //                       e.itemMeta[index].name ?? '',
+          //                       style: const TextStyle(
+          //                         color: Colors.white,
+          //                       ),
+          //                     ),
+          //                   ],
+          //                 ),
+          //               ),
+          //             ),
+          //           )
+          //         : FElevatedButton(
+          //             onPressed: () {
+          //               addChooseMeasure(
+          //                 e.itemMeta[index].name ?? '',
+          //               );
+          //             },
+          //             style: ButtonStyle(
+          //               backgroundColor: MaterialStateProperty.all(
+          //                 Colors.white,
+          //               ),
+          //             ),
+          //             child: FContainer(
+          //               width: 180,
+          //               height: 60,
+          //               child: FCenter(
+          //                 child: FColumn(
+          //                   mainAxisAlignment: MainAxisAlignment.center,
+          //                   children: [
+          //                     FText(
+          //                       getValues(
+          //                         e.itemMeta[index].name ?? '',
+          //                       ),
+          //                       style: const TextStyle(
+          //                         color: Colors.black,
+          //                       ),
+          //                     ),
+          //                     FText(
+          //                       e.itemMeta[index].name ?? '',
+          //                       style: const TextStyle(
+          //                         color: Colors.black,
+          //                       ),
+          //                     ),
+          //                   ],
+          //                 ),
+          //               ),
+          //             ),
+          //           );
+          //   },
+          ),
     );
   }
 }

+ 26 - 46
lib/view/measure/measure_tool.dart

@@ -1,12 +1,11 @@
 import 'package:fis_common/logger/logger.dart';
 import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
-import 'package:fis_measure/interfaces/process/items/terms.dart';
 import 'package:fis_measure/interfaces/process/player/play_controller.dart';
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
-import 'package:fis_measure/process/items/item_meta_convert.dart';
 import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/process/workspace/measure_handler.dart';
+import 'package:fis_measure/view/measure/measure_view_controller.dart';
 import 'package:fis_measure/view/player/controller.dart';
 import 'package:fis_ui/index.dart';
 import 'package:flutter/material.dart';
@@ -30,6 +29,9 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
   /// 数据
   late final measureData = Get.find<MeasureDataController>();
   final playerController = Get.find<IPlayerController>() as VidPlayerController;
+
+  /// 测量项控制器
+  final measureMetaController = Get.find<MeasureMetaController>();
   // final topMeasureItem = Get.put<ITopMeasureItem>();
 
   /// 当前选中的测量项目
@@ -112,46 +114,11 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
           measureApplicationDTO.version ?? '';
       measureData.availableModes = measureApplicationDTO.availableModes ?? [];
 
-      ///模式列表
-      var models = measureApplicationDTO.availableModes;
-      if (models != null && models.isNotEmpty) {
-        ///群组列表
-        var groups = models[0].availableGroups;
-        if (groups != null && groups.isNotEmpty) {
-          ///项目列表
-          var folders = groups[0].availableFolders;
-          if (folders != null && folders.isNotEmpty) {
-            measureData.getMeasureApplicationList =
-                folders[0].workingItemNames ?? [];
-            if (folders[0].availableItems != null) {
-              measureData.itemMetaList = folders[0]
-                  .availableItems!
-                  // 排除不支持的测量项
-                  .where((element) =>
-                      !MeasureUnsupportedTerms.items.contains(element.name))
-                  .map((element) {
-                    try {
-                      return ItemMetaConverter(element).output();
-                    } catch (e) {
-                      logger.e(
-                        "Item meta -[${element.name}] convert error; JSON-Text: ${element.toJson()}",
-                        e,
-                      );
-                      return null;
-                    }
-                  })
-                  .where((element) => element != null)
-                  .map((e) => e!)
-                  .toList();
-              comboList();
-            }
-            print('测量方法集: ${measureData.getMeasureApplicationList.toString()}');
-            if (measureData.getMeasureApplicationList.isNotEmpty) {
-              changeItem(measureData.getItemMetaList[0]);
-            }
-          }
-        }
-      }
+      measureMetaController.setAvailableModes(measureData.currentMode);
+
+      activeName = measureData.getItemMetaList[0].name;
+      // measureMetaController.measureConfig();
+      setState(() {});
     }
     getNoteCommentsList();
   }
@@ -174,7 +141,13 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
   }
 
   void getItemMetaListChanged(sender, e) {
+    print('getItemMetaList changed');
+    isCombo = false;
     measureData.getTopItemMetaList = measureData.getItemMetaList;
+    measureData.getBottomItemMetaList = [];
+    if (measureData.getItemMetaList.isNotEmpty) {
+      changeItem(measureData.getItemMetaList[0]);
+    }
     setState(() {});
   }
 
@@ -236,13 +209,20 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
     List<ItemMeta> bottom = [];
     List<ItemMeta> getItemMetaList = measureData.getItemMetaList;
     for (int i = 0; i < getItemMetaList.length; i++) {
-      if (i <= getItemMetaList.indexOf(itemMeta)) {
+      int indexOfItemMeta = getItemMetaList.indexOf(itemMeta);
+      if (i <= indexOfItemMeta && indexOfItemMeta % 2 != 0) {
+        top.add(getItemMetaList[i]);
+      } else if (i > indexOfItemMeta && indexOfItemMeta % 2 != 0) {
+        bottom.add(getItemMetaList[i]);
+      }
+      if (indexOfItemMeta % 2 == 0 && i <= indexOfItemMeta + 1) {
         top.add(getItemMetaList[i]);
-      } else {
+      }
+      if (indexOfItemMeta % 2 == 0 && i > indexOfItemMeta + 1) {
         bottom.add(getItemMetaList[i]);
       }
-      measureData.getTopItemMetaList = top;
-      measureData.getBottomItemMetaList = bottom;
+      measureData.getTopItemMetaList = top.toSet().toList();
+      measureData.getBottomItemMetaList = bottom.toSet().toList();
       if (i == getItemMetaList.indexOf(itemMeta)) {
         comboItemMeta = getItemMetaList[i];
         comboItemMetaActivedIndex = 0;

+ 9 - 49
lib/view/measure/measure_tools_title.dart

@@ -1,9 +1,9 @@
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
 import 'package:fis_measure/interfaces/process/visuals/visual_area.dart';
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
-import 'package:fis_measure/process/items/item_meta_convert.dart';
 import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/process/workspace/measure_handler.dart';
+import 'package:fis_measure/view/measure/measure_view_controller.dart';
 import 'package:fis_ui/index.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
@@ -25,6 +25,9 @@ class _LeftMeasureToolsState extends State<LeftMeasureTools> {
   /// 数据
   late final measureData = Get.find<MeasureDataController>();
 
+  /// 测量项控制器
+  final measureMetaController = Get.find<MeasureMetaController>();
+
   void changeItem(ItemMeta itemMeta) {
     application.switchItem(itemMeta);
     if (mounted) {
@@ -40,54 +43,10 @@ class _LeftMeasureToolsState extends State<LeftMeasureTools> {
 
   void visualAreaChanged(sender, IVisualArea e) {
     if (mounted) {
-      setAvailableModes(e.mode.modeType.toString().split('.')[1]);
-    }
-  }
-
-  /// 获取组合测量项
-  void comboList() {
-    /// 格式化数据
-    List<ItemMeta> itemMetaList = [];
-    for (var element in measureData.itemMetaList) {
-      if (measureData.getMeasureApplicationList.contains(element.name)) {
-        itemMetaList.add(element);
-      }
-    }
-    measureData.getItemMetaList = itemMetaList;
-  }
-
-  void setAvailableModes(String name) {
-    var models = measureData.availableModes;
-    measureData.currentMode = name;
-    if (models.isNotEmpty) {
-      ///群组列表
-      var groups = models
-          .firstWhereOrNull(
-              (element) => element.modeName == measureData.currentMode)
-          ?.availableGroups;
-
-      if (groups != null && groups.isNotEmpty) {
-        ///项目列表
-        var folders = groups[0].availableFolders;
-        if (folders != null && folders.isNotEmpty) {
-          measureData.getMeasureApplicationList =
-              folders[0].workingItemNames ?? [];
-          if (folders[0].availableItems != null) {
-            measureData.itemMetaList = folders[0]
-                .availableItems!
-                .where((element) => element.name != 'PSAD')
-                .map((element) {
-              return ItemMetaConverter(element).output();
-            }).toList();
-            comboList();
-          }
-          if (measureData.getMeasureApplicationList.isNotEmpty) {
-            changeItem(measureData.getItemMetaList[0]);
-          }
-        }
-      }
+      measureMetaController
+          .setAvailableModes(e.mode.modeType.toString().split('.')[1]);
+      setState(() {});
     }
-    setState(() {});
   }
 
   @override
@@ -123,7 +82,8 @@ class _LeftMeasureToolsState extends State<LeftMeasureTools> {
 
           return FInkWell(
             onTap: () {
-              setAvailableModes(e.value.type.name);
+              measureMetaController.setAvailableModes(e.value.type.name);
+              measureData.getTopItemMetaList = measureData.getItemMetaList;
               setState(() {});
             },
             child: FContainer(

+ 4 - 0
lib/view/measure/measure_view.dart

@@ -20,6 +20,7 @@ import 'package:fis_measure/view/measure/measure_search_input.dart';
 import 'package:fis_measure/view/measure/measure_tool.dart';
 import 'package:fis_measure/view/measure/carotid_measure_tool.dart';
 import 'package:fis_measure/view/measure/measure_tools_title.dart';
+import 'package:fis_measure/view/measure/measure_view_controller.dart';
 import 'package:fis_measure/view/measure/tool_chest_title.dart';
 import 'package:fis_measure/view/player/control_board/operate_bar.dart';
 import 'package:fis_ui/index.dart';
@@ -52,6 +53,9 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
 
   final mouseState = Get.put<IMouseState>(MouseState());
 
+  /// 测量项控制器
+  final measureMetaController = Get.put(MeasureMetaController());
+
   /// 页面loadding
   bool loaded = false;
 

+ 154 - 0
lib/view/measure/measure_view_controller.dart

@@ -0,0 +1,154 @@
+import 'package:fis_common/logger/logger.dart';
+import 'package:fis_jsonrpc/rpc.dart';
+import 'package:fis_measure/interfaces/process/items/item_metas.dart';
+import 'package:fis_measure/interfaces/process/items/terms.dart';
+import 'package:fis_measure/interfaces/process/workspace/application.dart';
+import 'package:fis_measure/process/items/item_meta_convert.dart';
+import 'package:fis_measure/process/workspace/measure_data_controller.dart';
+import 'package:fis_measure/process/workspace/measure_handler.dart';
+import 'package:fis_measure/view/measure/measure_config/measure_configuation_page.dart';
+import 'package:get/get.dart';
+
+class MeasureMetaController extends GetxController {
+  /// 数据
+  late final measureData = Get.find<MeasureDataController>();
+  late final application = Get.find<IApplication>();
+  late final measureHandler = Get.find<MeasureHandler>();
+
+  /// 跟超声机端保持一致,配置 项目写死
+  List<ItemMetaGroup> getMeasureConfigurationGroupName() {
+    return [
+      ItemMetaGroup('Common', [], true),
+      ItemMetaGroup('ABD', [], true),
+      ItemMetaGroup('CARD', [], true),
+      ItemMetaGroup('GYN', [], true),
+      ItemMetaGroup('OB', [], true),
+      ItemMetaGroup('VAS', [], true),
+    ];
+  }
+
+  /// 获取组合测量项
+  void comboList() {
+    /// 格式化数据
+    List<ItemMeta> itemMetaList = [];
+    for (var element in measureData.itemMetaList) {
+      if (measureData.getMeasureApplicationList.contains(element.name)) {
+        itemMetaList.add(element);
+      }
+    }
+    measureData.getItemMetaList = itemMetaList;
+  }
+
+  void setAvailableModes(String name) {
+    print('切换模式到:' + name);
+    var models = measureData.availableModes;
+    measureData.currentMode = name;
+    if (models.isNotEmpty) {
+      ///群组列表
+      var groups = models
+          .firstWhereOrNull(
+              (element) => element.modeName == measureData.currentMode)
+          ?.availableGroups;
+
+      if (groups != null && groups.isNotEmpty) {
+        ///项目列表
+        var folders = groups[0].availableFolders;
+        if (folders != null && folders.isNotEmpty) {
+          measureData.getMeasureApplicationList =
+              folders[0].workingItemNames ?? [];
+          if (folders[0].availableItems != null) {
+            measureData.itemMetaList = folders[0]
+                .availableItems!
+                // 排除不支持的测量项
+                .where((element) =>
+                    !MeasureUnsupportedTerms.items.contains(element.name))
+                .map((element) {
+                  try {
+                    return ItemMetaConverter(element).output();
+                  } catch (e) {
+                    logger.e(
+                      "Item meta -[${element.name}] convert error; JSON-Text: ${element.toJson()}",
+                      e,
+                    );
+                    return null;
+                  }
+                })
+                .where((element) => element != null)
+                .map((e) => e!)
+                .toList();
+            comboList();
+          }
+          if (measureData.getMeasureApplicationList.isNotEmpty) {
+            changeItem(measureData.getItemMetaList[0]);
+          }
+        }
+      }
+    }
+  }
+
+  // /// 获取当前图像的测量项,从第一帧取
+  // void currentFrameHandler(Object sender, VidUsImage e) async {
+  //   List<String> getModes = [];
+  //   for (var element in e.visuals[0].modes) {
+  //     getModes.add(element.type.toString().split('.')[1]);
+  //   }
+  //   measureData.applicationModes = e.visuals[0].modes;
+  //   measureData.currentMode = e.visuals[0].modes.first.type.name;
+  //   var measureModeSelection = MeasureModeSelection(
+  //     application.applicationName,
+  //     application.categoryName,
+  //     application.isThirdPart ? ['TPPTissue'] : getModes,
+  //   );
+  //   measureHandler.measureModeChanged = measureModeSelection;
+  //   var measureApplicationDTO =
+  //       await measureData.getMeasureApplication.call(measureModeSelection);
+  //   if (measureApplicationDTO != null) {
+  //     /// 模式版本
+  //     measureData.measureApplicationVersion =
+  //         measureApplicationDTO.version ?? '';
+  //     measureData.availableModes = measureApplicationDTO.availableModes ?? [];
+
+  //     setAvailableModes(measureData.currentMode);
+
+  //     activeName = measureData.getItemMetaList[0].name;
+  //     measureConfig();
+  //   }
+  //   getNoteCommentsList();
+  // }
+
+  /// 测量项配置组
+  void measureConfig() {
+    List<ItemMetaGroup> _itemMetaConfigurationList = [];
+    Map<String, List<ItemMetaDTO>> _group = {};
+    getMeasureConfigurationGroupName().forEach(
+      ((element) {
+        List<ItemMetaDTO> itemMetaListGroupItem = [];
+        print(measureData.currentMode);
+        var groups = measureData.availableModes
+            .firstWhereOrNull(
+                (element) => element.modeName == measureData.currentMode)
+            ?.availableGroups;
+        (groups![0].availableFolders![0].availableItems)?.toList().forEach(
+          (e) {
+            if (e.categories!.toList().contains(element.itemMetaGroupTitle)) {
+              itemMetaListGroupItem.add(e);
+            }
+            _group[element.itemMetaGroupTitle] = itemMetaListGroupItem;
+          },
+        );
+      }),
+    );
+    _group.forEach(
+      (key, value) {
+        _itemMetaConfigurationList.add(
+          ItemMetaGroup(key, value, true),
+        );
+      },
+    );
+    measureData.itemMetaListGroup = _itemMetaConfigurationList;
+  }
+
+  void changeItem(ItemMeta itemMeta) {
+    application.switchItem(itemMeta);
+  }
+}