Browse Source

1、测量提交

bakamaka.guan 2 years ago
parent
commit
a4402ae7af

+ 6 - 0
lib/measure_page_test.dart

@@ -31,6 +31,11 @@ class MeasureDataTester {
       dynamic args) async {
     return null;
   }
+
+  static Future<MeasureApplicationDTO?> saveUserDefinedMeasureApplicationAsync(
+      dynamic args) async {
+    return null;
+  }
 }
 
 class MeasureTestPage extends StatefulWidget {
@@ -50,6 +55,7 @@ class _MeasureTestPageState extends State<MeasureTestPage> {
     MeasureDataTester.getRemedicalList,
     MeasureDataTester.getImageInfo,
     MeasureDataTester.getMeasureApplication,
+    MeasureDataTester.saveUserDefinedMeasureApplicationAsync,
   ));
   final controller = Get.put<IMeasureController>(MeasureController(
     "12345",

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

@@ -5,6 +5,8 @@ import 'package:fis_measure/process/workspace/measure_handler.dart';
 /// 图片信息数据
 abstract class IMeasureDataController {
   late FEventHandler<String> aiResultsInfoChanged;
+  late FEventHandler<String> measureApplicationVersionChanged;
+  late FEventHandler<String> measureLanguageChanged;
   late FEventHandler<DiagnosisConclusionEnum> diagnosisConclusionChanged;
   late FEventHandler<List<RemedicalInfoDTO>> remedicalListResultChanged;
   late FEventHandler<String> itemCurrentImageChanged;
@@ -15,6 +17,14 @@ abstract class IMeasureDataController {
   List<ItemMetaDTO> get itemMetaList;
   set itemMetaList(List<ItemMetaDTO> value);
 
+  /// 测量的翻译
+  String get measureLanguage;
+  set measureLanguage(String value);
+
+  /// 测量应用的版本号
+  String get measureApplicationVersion;
+  set measureApplicationVersion(String value);
+
   ///当前选择图像
   String get itemCurrentImage;
   set itemCurrentImage(String value);
@@ -39,6 +49,8 @@ abstract class IMeasureDataController {
 class MeasureDataController implements IMeasureDataController {
   String _aiResults = '';
   String _itemCurrentImage = '';
+  String _measureLanguage = '';
+  String _measureApplicationVersion = '';
   List<RemedicalInfoDTO> _remedicalList = [];
   List<ItemMetaDTO> _itemMetaList = [];
   List<String> _getMeasureApplicationList = [];
@@ -51,6 +63,12 @@ class MeasureDataController implements IMeasureDataController {
   @override
   var aiResultsInfoChanged = FEventHandler<String>();
 
+  @override
+  var measureLanguageChanged = FEventHandler<String>();
+
+  @override
+  var measureApplicationVersionChanged = FEventHandler<String>();
+
   @override
   var diagnosisConclusionChanged = FEventHandler<DiagnosisConclusionEnum>();
 
@@ -103,6 +121,26 @@ class MeasureDataController implements IMeasureDataController {
     }
   }
 
+  @override
+  String get measureLanguage => _measureLanguage;
+  @override
+  set measureLanguage(String value) {
+    if (value != _measureLanguage) {
+      _measureLanguage = value;
+      _onMeasureLanguageChanged();
+    }
+  }
+
+  @override
+  String get measureApplicationVersion => _measureApplicationVersion;
+  @override
+  set measureApplicationVersion(String value) {
+    if (value != _measureApplicationVersion) {
+      _measureApplicationVersion = value;
+      _onMeasureApplicationVersion();
+    }
+  }
+
   @override
   DiagnosisConclusionEnum get diagnosisConclusion => _diagnosisConclusion;
   @override
@@ -124,7 +162,11 @@ class MeasureDataController implements IMeasureDataController {
   }
 
   MeasureDataController(
-      this.getRemedicalList, this.getImageInfo, this.getMeasureApplication);
+    this.getRemedicalList,
+    this.getImageInfo,
+    this.getMeasureApplication,
+    this.saveUserDefinedMeasureApplicationAsync,
+  );
 
   ///参数1:patientCode,参数2:recordCode,参数3:token
   Future<List<RemedicalItemList>> Function(String, String, String)
@@ -137,6 +179,9 @@ class MeasureDataController implements IMeasureDataController {
   Future<MeasureApplicationDTO?> Function(MeasureModeSelection)
       getMeasureApplication;
 
+  Future<void> Function(MeasureModeSubmit)
+      saveUserDefinedMeasureApplicationAsync;
+
   void _onRemedicalListChanged() {
     remedicalListResultChanged.emit(this, remedicalList);
   }
@@ -160,4 +205,12 @@ class MeasureDataController implements IMeasureDataController {
   void _onDiagnosisConclusionChanged() {
     diagnosisConclusionChanged.emit(this, diagnosisConclusion);
   }
+
+  void _onMeasureLanguageChanged() {
+    measureLanguageChanged.emit(this, measureLanguage);
+  }
+
+  void _onMeasureApplicationVersion() {
+    measureApplicationVersionChanged.emit(this, measureApplicationVersion);
+  }
 }

+ 67 - 0
lib/process/workspace/measure_handler.dart

@@ -1,6 +1,7 @@
 import 'dart:core';
 
 import 'package:fis_common/event/event_type.dart';
+import 'package:fis_jsonrpc/rpc.dart';
 import 'package:fis_measure/view/measure/tool_chest_title.dart';
 
 class ChangeImageInfo {
@@ -31,6 +32,44 @@ class MeasureModeSelection {
   );
 }
 
+class MeasureModeSubmit {
+  /// 版本号
+  final String? version;
+
+  /// 应用名称,读取Vid获取应用
+  final String? applicationName;
+
+  /// 分类名称:读取Vid获取应用分类名称
+  final String? categoryName;
+
+  ///  测量模式
+  final UserDefinedMeasureModeDTO? workingMode;
+  MeasureModeSubmit(
+    this.version,
+    this.applicationName,
+    this.categoryName,
+    this.workingMode,
+  );
+
+  // version: measurehomeController.state.version,
+  //           applicationName: measurehomeController.state.applicationName,
+  //           categoryName: measurehomeController.state.categoryName,
+  //           workingMode: UserDefinedMeasureModeDTO(
+  //             modeName: 'Tissue',
+  //             workingGroups: [
+  //               UserDefinedMeasureGroupDTO(
+  //                 name: 'General',
+  //                 folders: [
+  //                   UserDefinedMeasureFolderDTO(
+  //                     name: 'General',
+  //                     workingItemNames: state.chooseMeasureList,
+  //                   ),
+  //                 ],
+  //               ),
+  //             ],
+  //           ),
+}
+
 abstract class IMeasureHandler {
   /// 测量切换图片事件
   late FEventHandler<ChangeImageInfo> onImageChanged;
@@ -38,6 +77,9 @@ abstract class IMeasureHandler {
   /// 测量方式选择
   late FEventHandler<MeasureModeSelection> onMeasureModeSelectionChanged;
 
+  /// 测量方式提交
+  late FEventHandler<MeasureModeSubmit> onMeasureModeSubmitChanged;
+
   /// 测量还是注释tab
   late FEventHandler<TagEnum> onChangedTab;
 
@@ -49,6 +91,10 @@ abstract class IMeasureHandler {
   MeasureModeSelection get measureModeChanged;
   set measureModeChanged(MeasureModeSelection value);
 
+  /// 测量方式变更提交
+  MeasureModeSubmit get measureModeSubmitChanged;
+  set measureModeSubmitChanged(MeasureModeSubmit value);
+
   /// 切换Tab
   TagEnum get changedTab;
   set changedTab(TagEnum value);
@@ -59,12 +105,18 @@ class MeasureHandler implements IMeasureHandler {
   MeasureModeSelection _measureModeChanged =
       MeasureModeSelection(null, null, null);
 
+  MeasureModeSubmit _measureModeSubmitChanged =
+      MeasureModeSubmit(null, null, null, null);
+
   TagEnum _changedTab = TagEnum.MeasureTool;
   @override
   var onImageChanged = FEventHandler<ChangeImageInfo>();
 
   @override
   var onMeasureModeSelectionChanged = FEventHandler<MeasureModeSelection>();
+
+  @override
+  var onMeasureModeSubmitChanged = FEventHandler<MeasureModeSubmit>();
   @override
   var onChangedTab = FEventHandler<TagEnum>();
 
@@ -74,6 +126,9 @@ class MeasureHandler implements IMeasureHandler {
   @override
   MeasureModeSelection get measureModeChanged => _measureModeChanged;
 
+  @override
+  MeasureModeSubmit get measureModeSubmitChanged => _measureModeSubmitChanged;
+
   @override
   TagEnum get changedTab => _changedTab;
   @override
@@ -100,6 +155,14 @@ class MeasureHandler implements IMeasureHandler {
     }
   }
 
+  @override
+  set measureModeSubmitChanged(MeasureModeSubmit value) {
+    if (value != _measureModeSubmitChanged) {
+      _measureModeSubmitChanged = value;
+      _onMeasureModeSubmitChanged();
+    }
+  }
+
   void _onImageChanged() {
     onImageChanged.emit(this, imageChanged);
   }
@@ -108,6 +171,10 @@ class MeasureHandler implements IMeasureHandler {
     onMeasureModeSelectionChanged.emit(this, measureModeChanged);
   }
 
+  void _onMeasureModeSubmitChanged() {
+    onMeasureModeSubmitChanged.emit(this, measureModeSubmitChanged);
+  }
+
   void _onChangedTab() {
     onChangedTab.emit(this, changedTab);
   }

+ 96 - 19
lib/view/button_group/button_group.dart

@@ -1,3 +1,4 @@
+import 'package:fis_ui/index.dart';
 import 'package:flutter/material.dart';
 
 class ButtonGroup extends StatefulWidget {
@@ -8,37 +9,113 @@ class ButtonGroup extends StatefulWidget {
 }
 
 class _ButtonGroupState extends State<ButtonGroup> {
+  double _width = 0;
+  bool _isExpanded = false;
+
+  Future<bool> _showList() async {
+    await Future.delayed(const Duration(milliseconds: 300));
+    return true;
+  }
+
+  /// TODO 翻译
   @override
   Widget build(BuildContext context) {
     return Row(
       mainAxisAlignment: MainAxisAlignment.end,
-      children: const [
-        Text(
-          'data',
-          style: TextStyle(
+      children: [
+        AnimatedContainer(
+          duration: const Duration(milliseconds: 300),
+          padding: const EdgeInsets.only(
+            top: 5,
+            bottom: 5,
+            left: 15,
+          ),
+          decoration: BoxDecoration(
+            borderRadius: const BorderRadius.only(
+              topLeft: Radius.circular(4),
+              bottomLeft: Radius.circular(4),
+            ),
+            color: Colors.grey.withOpacity(0.6),
+          ),
+          width: _width,
+          height: 60,
+          child: _isExpanded
+              ? FutureBuilder(
+                  future: _showList(),
+                  builder: (context, snapshot) {
+                    if (!snapshot.hasData) {
+                      return const SizedBox();
+                    }
+                    return Row(
+                      children: [
+                        _buildTitleButton(FIcons.fis_quash, '撤销', () {
+                          print('撤销');
+                        }),
+                        _buildTitleButton(FIcons.fis_purge, '清除', () {
+                          print('清除');
+                        }),
+                        _buildTitleButton(FIcons.fis_full_screen, '全屏', () {
+                          print('全屏');
+                        }),
+                        _buildTitleButton(FIcons.fis_save, '保存', () {
+                          print('保存');
+                        }),
+                        _buildTitleButton(FIcons.fis_share, '分享', () {
+                          print('分享');
+                        }),
+                      ],
+                    );
+                  })
+              : const SizedBox(),
+        ),
+        InkWell(
+          onTap: () {
+            if (!_isExpanded) {
+              setState(() {
+                _width = 220;
+                _isExpanded = true;
+              });
+            } else {
+              setState(() {
+                _width = 0;
+                _isExpanded = false;
+              });
+            }
+          },
+          child: Container(
+            height: 60,
             color: Colors.white,
+            child: !_isExpanded
+                ? const Icon(Icons.chevron_left_rounded)
+                : const Icon(Icons.chevron_right_rounded),
           ),
-        )
+        ),
       ],
     );
   }
 
-  Widget _buildTitleButton(IconData icon, String title, Function) {
-    return InkWell(
-      onTap: () {},
-      child: Column(
-        children: [
-          Icon(
-            icon,
-            color: Colors.white,
-          ),
-          Text(
-            title,
-            style: const TextStyle(
+  Widget _buildTitleButton(IconData icon, String title, Function onClick) {
+    return Container(
+      margin: const EdgeInsets.only(
+        right: 10,
+      ),
+      child: InkWell(
+        onTap: () => onClick.call(),
+        child: Column(
+          children: [
+            Icon(
+              icon,
               color: Colors.white,
             ),
-          )
-        ],
+            Text(
+              title,
+              style: const TextStyle(
+                color: Colors.white,
+                fontSize: 14,
+              ),
+            )
+          ],
+        ),
       ),
     );
   }

+ 210 - 219
lib/view/measure/measure_config/measure_configuation_page.dart

@@ -1,5 +1,11 @@
+import 'dart:convert';
+
 import 'package:fis_i18n/i18n.dart';
 import 'package:fis_jsonrpc/rpc.dart';
+import 'package:fis_measure/interfaces/process/workspace/application.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_theme/theme.dart';
 import 'package:fis_ui/index.dart';
 import 'package:flutter/material.dart';
@@ -34,11 +40,169 @@ class MeasureConfigurationPage extends StatelessWidget {
 }
 
 ///测量配置对话框
-class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
+class _MeasureConfigurationDialog extends StatefulWidget implements FWidget {
   const _MeasureConfigurationDialog({
     Key? key,
   }) : super(key: key);
 
+  @override
+  State<_MeasureConfigurationDialog> createState() =>
+      _MeasureConfigurationDialogState();
+}
+
+class _MeasureConfigurationDialogState
+    extends State<_MeasureConfigurationDialog> {
+  int measureToolsTab = 0;
+
+  /// 切换标签栏
+  void changeTab(int index) {
+    measureToolsTab = index;
+    setState(() {});
+  }
+
+  late final application = Get.find<IApplication>();
+  late final measureHandler = Get.find<MeasureHandler>();
+
+  /// 数据
+  final measureData = Get.find<MeasureDataController>();
+
+  /// 选中的测量项
+  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] 测量的名字 后期改版后应该是一个测量对象
+  void openHasSelectedSettingDialog(String name) {
+    // state.childItemMeta = state.allItemMeta.firstWhere(
+    //   (element) => element.name == name,
+    // );
+    // router.dialog(() => HasSelectedSettingDialog(name: name));
+  }
+  Future<void> getName() async {
+    var measureModeSelection = MeasureModeSelection(
+      application.applicationName,
+      application.categoryName,
+      application.isThirdPart ? ['TPPTissue'] : ['Tissue'],
+    );
+    measureHandler.measureModeChanged = measureModeSelection;
+    measureData.getMeasureApplicationList = [];
+    var measureApplicationDTO =
+        await measureData.getMeasureApplication.call(measureModeSelection);
+    if (measureApplicationDTO != null) {
+      /// 模式版本
+      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!.toList();
+            }
+            if (measureData.getMeasureApplicationList.isNotEmpty) {
+              changeItem(measureData.getMeasureApplicationList[0]);
+            }
+          }
+        }
+      }
+    }
+  }
+
+  void changeItem(String? name) {
+    activeName = name ?? '';
+    application.switchItemByName(activeName);
+    if (mounted) {
+      setState(() {});
+    }
+  }
+
+  void submit() async {
+    var measureModeSubmitChanged = MeasureModeSubmit(
+      measureData.measureApplicationVersion,
+      application.applicationName,
+      application.categoryName,
+      UserDefinedMeasureModeDTO(
+        modeName: 'Tissue',
+        workingGroups: [
+          UserDefinedMeasureGroupDTO(
+            name: 'General',
+            folders: [
+              UserDefinedMeasureFolderDTO(
+                name: 'General',
+                workingItemNames: chooseMeasureList,
+              ),
+            ],
+          ),
+        ],
+      ),
+    );
+    measureHandler.measureModeSubmitChanged = measureModeSubmitChanged;
+    var saveUserDefinedMeasureApplication = await measureData
+        .saveUserDefinedMeasureApplicationAsync
+        .call(measureModeSubmitChanged);
+    getName();
+    setState(() {});
+  }
+
+  @override
+  void initState() {
+    super.initState();
+    List<ItemMetaGroup> _itemMetaConfigurationList = [];
+    List<String> chooseMeasure = [];
+
+    Map<String, List<ItemMetaDTO>> _group = {};
+    getMeasureConfigurationGroupName().forEach(
+      ((element) {
+        List<ItemMetaDTO> 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;
+    chooseMeasure = measureData.getMeasureApplicationList;
+    chooseMeasureList = chooseMeasure.toSet().toList();
+  }
+
+  @override
+  void dispose() {
+    super.dispose();
+  }
+
   @override
   FWidget build(BuildContext context) {
     return FSimpleDialog(
@@ -51,10 +215,12 @@ class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
       ),
       isDefault: true,
       onOk: () {
-        // controller.saveUserDefinedMeasureApplicationAsync();
+        submit();
       },
       onCancel: () {
+        chooseMeasureList = measureData.getMeasureApplicationList;
         Get.back();
+        setState(() {});
       },
       children: [
         FContainer(
@@ -67,8 +233,6 @@ class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
   }
 
   FWidget _buildMeasureconfiguration() {
-    // final controller = Get.put(MeasureConfigurationController());
-
     return FContainer(
       padding: const EdgeInsets.symmetric(horizontal: 15),
       child: FRow(
@@ -94,7 +258,7 @@ class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
                   width: 160,
                   child: FInkWell(
                     onTap: () {
-                      // controller.changeTab(0);
+                      changeTab(0);
                     },
                     child: FContainer(
                       padding: const EdgeInsets.symmetric(
@@ -103,13 +267,11 @@ class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
                       ),
                       child: FText(
                         i18nBook.measure.measureToolSelect.t,
-                        style:
-                            //  controller.state.measureToolsTab == 0
-                            true
-                                ? TextStyle(
-                                    color: FTheme.ins.colorScheme.primary,
-                                  )
-                                : const TextStyle(),
+                        style: measureToolsTab == 0
+                            ? TextStyle(
+                                color: FTheme.ins.colorScheme.primary,
+                              )
+                            : const TextStyle(),
                         textAlign: TextAlign.end,
                       ),
                     ),
@@ -119,7 +281,7 @@ class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
                   width: 160,
                   child: FInkWell(
                     onTap: () {
-                      // controller.changeTab(1);
+                      changeTab(1);
                     },
                     child: FContainer(
                       padding: const EdgeInsets.symmetric(
@@ -128,13 +290,11 @@ class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
                       ),
                       child: FText(
                         i18nBook.measure.selectedMeasureTool.t,
-                        style:
-                            //  controller.state.measureToolsTab == 1
-                            true
-                                ? TextStyle(
-                                    color: FTheme.ins.colorScheme.primary,
-                                  )
-                                : const TextStyle(),
+                        style: measureToolsTab == 1
+                            ? TextStyle(
+                                color: FTheme.ins.colorScheme.primary,
+                              )
+                            : const TextStyle(),
                         textAlign: TextAlign.end,
                       ),
                     ),
@@ -143,199 +303,41 @@ class _MeasureConfigurationDialog extends StatelessWidget implements FWidget {
               ],
             ),
           ),
-          // FObx(
-          //   () =>
-
-          //  controller.state.measureToolsTab == 0
-          true
+          measureToolsTab == 0
               ? FExpanded(
-                  child: _SelectModulePage(),
+                  child: SelectModulePage(
+                    itemMetaListGroup: itemMetaListGroup,
+                    chooseMeasureList: chooseMeasureList,
+                  ),
                 )
               : FExpanded(
-                  child: _HasSelectedModulePage(),
+                  child: _HasSelectedModulePage(
+                    chooseMeasureList: chooseMeasureList,
+                  ),
                 ),
-          // ),
         ],
       ),
     );
   }
 }
 
-class _SelectModulePage extends FStatefulWidget {
-  @override
-  FState<_SelectModulePage> createState() => _SelectModulePageState();
-}
-
-class _SelectModulePageState extends FState<_SelectModulePage> {
-  // final controller = Get.put(MeasureConfigurationController());
-
-  @override
-  FWidget build(BuildContext context) {
-    return FListView(
-      shrinkWrap: true,
-      children:
-          // controller.state.itemMetaListGroup
-          []
-              .map(
-                (e) => FColumn(
-                  crossAxisAlignment: CrossAxisAlignment.start,
-                  children: _buildMeasureConfiguration(e),
-                ),
-              )
-              .toList(),
-    );
-  }
-
-  List<FWidget> _buildMeasureConfiguration(ItemMetaGroup e) {
-    return [
-      FInkWell(
-        onTap: () {
-          e.isExpend = !e.isExpend!;
-          setState(() {});
-        },
-        child: FContainer(
-          padding: const EdgeInsets.all(15),
-          child: _buildGroupTitleRow(
-            e.itemMetaGroupTitle.toString(),
-            e.isExpend!,
-          ),
-        ),
-      ),
-      e.isExpend! ? _buildGroupBody(e) : FContainer(),
-    ];
-  }
-
-  FWidget _buildGroupTitleRow(
-    String itemMetaGroupTitle,
-    bool isExpend,
-  ) {
-    return FRow(
-      mainAxisAlignment: MainAxisAlignment.spaceBetween,
-      children: [
-        FRow(
-          children: [
-            FText(
-              itemMetaGroupTitle,
-            ),
-            // FText(
-            //   '(${controller.getValues(
-            //     itemMetaGroupTitle,
-            //   )})',
-            // ),
-          ],
-        ),
-        isExpend
-            ? const FIcon(
-                Icons.keyboard_arrow_down_sharp,
-              )
-            : const FIcon(
-                Icons.keyboard_arrow_right,
-              ),
-      ],
-    );
-  }
+class _HasSelectedModulePage extends StatelessWidget implements FWidget {
+  final List<String> chooseMeasureList;
 
-  FWidget _buildGroupBody(ItemMetaGroup e) {
-    return FContainer(
-      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 FObx(
-            //   () {
-            return
+  /// 数据
+  final measureData = Get.find<MeasureDataController>();
+  _HasSelectedModulePage({
+    required this.chooseMeasureList,
+  });
 
-                // controller.state.chooseMeasureList.contains(
-                //   e.itemMeta[index].name,
-                // )
-                true
-                    ? FElevatedButton(
-                        onPressed: () {
-                          // controller.removeChooseMeasure(
-                          //   e.itemMeta[index].name!,
-                          // );
-                        },
-                        style: const ButtonStyle(),
-                        child: FContainer(
-                          width: 180,
-                          height: 60,
-                          child: FCenter(
-                            child: FColumn(
-                              mainAxisAlignment: MainAxisAlignment.center,
-                              children: [
-                                FText(
-                                  e.itemMeta[index].name!,
-                                  style: const TextStyle(
-                                    color: Colors.white,
-                                  ),
-                                ),
-                                const FText(
-                                  // controller.getValues(
-                                  //   e.itemMeta[index].name!,
-                                  // ),
-                                  'sss',
-                                  style: TextStyle(
-                                    color: Colors.white,
-                                  ),
-                                ),
-                              ],
-                            ),
-                          ),
-                        ),
-                      )
-                    : FElevatedButton(
-                        onPressed: () {
-                          // controller.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(
-                                  e.itemMeta[index].name!,
-                                  style: const TextStyle(
-                                    color: Colors.black,
-                                  ),
-                                ),
-                                const FText(
-                                  // controller.getValues(
-                                  //   e.itemMeta[index].name!,
-                                  // ),
-                                  'sds',
-                                  style: TextStyle(
-                                    color: Colors.black,
-                                  ),
-                                ),
-                              ],
-                            ),
-                          ),
-                        ),
-                      );
-          },
-        ),
-      ),
-    );
+  /// 根据语言包翻译
+  ///
+  /// [code] 翻译编码
+  String getValues(String code) {
+    final value = jsonDecode(measureData.measureLanguage)["Language"][code];
+    return value ?? code;
   }
-}
 
-class _HasSelectedModulePage extends StatelessWidget implements FWidget {
   @override
   FWidget build(BuildContext context) {
     return FListView(
@@ -346,19 +348,14 @@ class _HasSelectedModulePage extends StatelessWidget implements FWidget {
           children: [
             FContainer(
               padding: const EdgeInsets.only(left: 15, top: 15, bottom: 15),
-              child:
-                  //  FObx(
-                  //   () {
-                  //     return
-                  FWrap(
+              child: FWrap(
                 spacing: 16.0, // 主轴(水平)方向间距
                 runSpacing: 8.0, // 纵轴(垂直)方向间距
                 direction: Axis.horizontal,
                 crossAlignment: WrapCrossAlignment.center,
                 alignment: WrapAlignment.start,
                 children: List<FWidget>.generate(
-                  // controller.state.chooseMeasureList.length,
-                  10,
+                  chooseMeasureList.length,
                   (index) {
                     return FElevatedButton(
                       onPressed: () {
@@ -376,22 +373,18 @@ class _HasSelectedModulePage extends StatelessWidget implements FWidget {
                         height: 60,
                         child: FColumn(
                           mainAxisAlignment: MainAxisAlignment.center,
-                          children: const [
+                          children: [
                             FText(
-                              // controller.state.chooseMeasureList[index]
-                              //     .toString(),
-                              '',
-                              style: TextStyle(
+                              chooseMeasureList[index].toString(),
+                              style: const TextStyle(
                                 color: Colors.black,
                               ),
                             ),
                             FText(
-                              // controller.getValues(
-                              //   controller.state.chooseMeasureList[index]
-                              //       .toString(),
-                              '',
-
-                              style: TextStyle(
+                              getValues(
+                                chooseMeasureList[index].toString(),
+                              ),
+                              style: const TextStyle(
                                 color: Colors.black,
                               ),
                             ),
@@ -401,8 +394,6 @@ class _HasSelectedModulePage extends StatelessWidget implements FWidget {
                     );
                   },
                 ),
-                //   );
-                // },
               ),
             ),
           ],

+ 1 - 0
lib/view/measure/measure_config/widgets/has_selected_setting_dialog.dart

@@ -215,6 +215,7 @@ class _HasSelectedModuleState extends FState<_HasSelectedModule> {
     selectedMeasureFun = multiMethodItems
         .firstWhere((element) => element.isWorking == true)
         .name!;
+    print(selectedMeasureFun);
     // controller.state.childItemMetaCalculator = multiMethodItems
     //     .firstWhere((element) => element.isWorking == true)
     //     .calculator!

+ 215 - 0
lib/view/measure/measure_config/widgets/measurement_tool_selection.dart

@@ -0,0 +1,215 @@
+// ignore: must_be_immutable
+import 'dart:convert';
+
+import 'package:fis_measure/process/workspace/measure_data_controller.dart';
+import 'package:fis_measure/view/measure/measure_config/measure_configuation_page.dart';
+import 'package:fis_ui/index.dart';
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+
+class SelectModulePage extends FStatefulWidget {
+  final List<ItemMetaGroup> itemMetaListGroup;
+
+  /// 选中的测量项
+  List<String> chooseMeasureList = [];
+  SelectModulePage({
+    required this.itemMetaListGroup,
+    required this.chooseMeasureList,
+  });
+  @override
+  FState<SelectModulePage> createState() => _SelectModulePageState();
+}
+
+class _SelectModulePageState extends FState<SelectModulePage> {
+  /// 数据
+  final measureData = Get.find<MeasureDataController>();
+
+  /// 根据语言包翻译
+  ///
+  /// [code] 翻译编码
+  String getValues(String code) {
+    final value = jsonDecode(measureData.measureLanguage)["Language"][code];
+    return value ?? code;
+  }
+
+  /// 新增测量项目
+  ///
+  /// [chooseMeasure] 选中的测量项
+  void addChooseMeasure(String chooseMeasure) {
+    widget.chooseMeasureList.add(
+      chooseMeasure,
+    );
+    setState(() {});
+  }
+
+  /// 移除测量项目
+  ///
+  /// [chooseMeasure] 移除的测量项
+  void removeChooseMeasure(String chooseMeasure) {
+    widget.chooseMeasureList.remove(
+      chooseMeasure,
+    );
+    setState(() {});
+  }
+
+  @override
+  void initState() {
+    super.initState();
+  }
+
+  @override
+  FWidget build(BuildContext context) {
+    return FListView(
+      shrinkWrap: true,
+      children: widget.itemMetaListGroup
+          .map(
+            (e) => FColumn(
+              crossAxisAlignment: CrossAxisAlignment.start,
+              children: _buildMeasureConfiguration(e),
+            ),
+          )
+          .toList(),
+    );
+  }
+
+  List<FWidget> _buildMeasureConfiguration(ItemMetaGroup e) {
+    return [
+      FInkWell(
+        onTap: () {
+          e.isExpend = !e.isExpend!;
+          setState(() {});
+        },
+        child: FContainer(
+          padding: const EdgeInsets.all(15),
+          child: _buildGroupTitleRow(
+            e.itemMetaGroupTitle.toString(),
+            e.isExpend!,
+          ),
+        ),
+      ),
+      e.isExpend! ? _buildGroupBody(e) : FContainer(),
+    ];
+  }
+
+  FWidget _buildGroupTitleRow(
+    String itemMetaGroupTitle,
+    bool isExpend,
+  ) {
+    return FRow(
+      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+      children: [
+        FRow(
+          children: [
+            FText(
+              itemMetaGroupTitle,
+            ),
+            FText(
+              getValues(
+                itemMetaGroupTitle,
+              ),
+            ),
+          ],
+        ),
+        isExpend
+            ? const FIcon(
+                Icons.keyboard_arrow_down_sharp,
+              )
+            : const FIcon(
+                Icons.keyboard_arrow_right,
+              ),
+      ],
+    );
+  }
+
+  FWidget _buildGroupBody(ItemMetaGroup e) {
+    return FContainer(
+      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,
+                              ),
+                            ),
+                            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,
+                              ),
+                            ),
+                          ],
+                        ),
+                      ),
+                    ),
+                  );
+          },
+        ),
+      ),
+    );
+  }
+}

+ 16 - 4
lib/view/measure/measure_tool.dart

@@ -15,9 +15,6 @@ class LeftSiderSelectMeasure extends FStatefulWidget {
 }
 
 class _LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
-  /// 注入配置器的依赖
-  // final measureConfigController = Get.put(MeasureConfigurationController());
-
   final ScrollController scrollController = ScrollController();
 
   /// vid应用的控制器 测量模式暂时写死
@@ -37,17 +34,31 @@ class _LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
     }
   }
 
+  void itemMetaList(Object s, dynamic e) {
+    try {
+      if (e != null) {
+        setState(() {});
+      }
+    } catch (e) {
+      debugPrint("callmethod fail " + e.toString());
+    }
+  }
+
   Future<void> getName() async {
     var measureModeSelection = MeasureModeSelection(
       application.applicationName,
       application.categoryName,
-      application.isThirdPart ? [] : ['Tissue'],
+      application.isThirdPart ? ['TPPTissue'] : ['Tissue'],
     );
     measureHandler.measureModeChanged = measureModeSelection;
     measureData.getMeasureApplicationList = [];
     var measureApplicationDTO =
         await measureData.getMeasureApplication.call(measureModeSelection);
     if (measureApplicationDTO != null) {
+      /// 模式版本
+      measureData.measureApplicationVersion =
+          measureApplicationDTO.version ?? '';
+
       ///模式列表
       var models = measureApplicationDTO.availableModes;
       if (models != null && models.isNotEmpty) {
@@ -74,6 +85,7 @@ class _LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
   @override
   void initState() {
     getName();
+    measureData.itemMetaListChanged.addListener(itemMetaList);
     super.initState();
   }
 

+ 1 - 1
pubspec.yaml

@@ -73,7 +73,7 @@ dependency_overrides:
   fis_ui:
     git:
       url: http://git.ius.plus/Project-Wing/fis_lib_ui.git
-      ref: f664bde
+      ref: 46c75c6
   vid:
     git:
       url: http://git.ius.plus:88/Project-Wing/flutter_vid.git