瀏覽代碼

报告预览页面提交

loki.wu 1 年之前
父節點
當前提交
2b0a80c7a8

+ 0 - 1
lib/managers/interfaces/report.dart

@@ -109,7 +109,6 @@ abstract class IReportManager {
     String reportCode = '',
     int patientTab = 0,
     String referralRecordCode = '',
-    ReportEditSource reportEditSource = ReportEditSource.VSono,
   });
 
   Future<RemedicalListResult> getRemedicalListByRecordInfoAsync(

+ 13 - 8
lib/managers/remedical_Manager.dart

@@ -216,14 +216,19 @@ class RemedicalManager extends BaseManager implements IRemedicalManager {
 
   @override
   Future<List<ReportDTO>> findExamReports(String recordCode) async {
-    var result = await rpc.report.findExamReportsAsync(
-      FindReportsRequest(
-        token: token,
-        recordCode: recordCode,
-        languageCode: 'zh-CN',
-      ),
-    );
-    return result;
+    try {
+      var result = await rpc.report.findExamReportsAsync(
+        FindReportsRequest(
+          token: token,
+          recordCode: recordCode,
+          languageCode: 'zh-CN',
+        ),
+      );
+      return result;
+    } catch (e) {
+      logger.e('RemedicalManager findExamReports ex:$e');
+      return [];
+    }
   }
 
   ///查询检查详情

+ 47 - 17
lib/managers/report_manager.dart

@@ -7,6 +7,7 @@ import 'package:fis_jsonrpc/rpc.dart';
 import 'package:fis_lib_report/report/report_template_document.dart';
 import 'package:fis_lib_report/report_info/report_info.dart';
 import 'package:fis_ui/index.dart';
+import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_sms/flutter_sms.dart';
@@ -20,13 +21,13 @@ import 'package:vitalapp/pages/measure_home/view.dart';
 import 'package:vitalapp/pages/report_edit/controller.dart';
 import 'package:vitalapp/pages/report_edit/view.dart';
 import 'package:vitalapp/pages/report_edit/widgets/report_share_dialog.dart';
+import 'package:vitalapp/pages/report_preview/controller.dart';
+import 'package:vitalapp/pages/report_preview/view.dart';
 import 'package:vitalapp/pages/widgets/row_separator.dart';
 import 'package:vitalapp/rpc.dart';
 import 'interfaces/base_manager.dart';
-import 'interfaces/models/report_edit_source.dart';
 import 'interfaces/models/report_element_info.dart';
 import 'interfaces/models/report_tag_key.dart';
-import 'interfaces/models/vid_image_source.dart';
 import 'interfaces/report.dart';
 import 'package:fis_common/event/event_type.dart';
 import 'package:fis_i18n/i18n.dart';
@@ -221,13 +222,43 @@ class ReportManager extends BaseManager implements IReportManager {
 
   @override
   Future<List<r.ReportDTO>> findReportsAsync(String recordCode) async {
-    var reportInfo = await rpc.report.findReportsAsync(
-      FindReportsRequest(
-        token: token,
-        recordCode: recordCode,
-      ),
-    );
-    return reportInfo;
+    try {
+      var reportInfo = await rpc.report.findReportsAsync(
+        FindReportsRequest(
+          token: token,
+          recordCode: recordCode,
+        ),
+      );
+      return reportInfo;
+    } catch (e) {
+      logger.e('ReportManager findReportsAsync ex:$e');
+      if (kDebugMode) {
+        return [
+          ReportDTO(
+            canEditReport: true,
+            reportCode: '0',
+            deviceName: '1',
+            patientName: '2',
+            reportUserName: '3',
+            reportTemplateName: '4',
+            reportOrgan: DiagnosisOrganEnum.Abdomen,
+            reportType: ReportTypeEnum.RemoteDiagnosis,
+            createTime: DateTime.now(),
+            updateTime: DateTime.now(),
+            reportPreviewList: [
+              ReportPreviewDTO(
+                fileToken:
+                    'https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/E1FE934BEB2D4F7CB0DF243E911DC4C1.pdf',
+                fileType: UploadFileTypeEnum.PDF,
+                thumbnailToken:
+                    'https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/6E9655504E24483A964BD62FBEF4BBFF.jpg',
+              ),
+            ],
+          ),
+        ];
+      }
+      return [];
+    }
   }
 
   ///获取报告提交内容信息Json
@@ -272,9 +303,6 @@ class ReportManager extends BaseManager implements IReportManager {
     String reportCode = '',
     int patientTab = 0,
     String referralRecordCode = '',
-
-    ///reportEditSource这个参数目前只有群组中会传入,暂不可作为区分实时或分时的依据
-    ReportEditSource reportEditSource = ReportEditSource.VSono,
   }) async {
     _openReportEditPage(token, patientCode, referralRecordCode, reportCode,
         consultationCode, recordCode);
@@ -572,11 +600,13 @@ class ReportManager extends BaseManager implements IReportManager {
       'reportCode': reportCode,
       'recordCode': recordCode,
     };
-    // router.to(
-    //   RouteNames.Remedical.ReportPreview,
-    //   id: NavIds.HOME,
-    //   parameters: arguments,
-    // );
+    Get.to(
+      () => ReportPreviewPage(),
+      binding: BindingsBuilder(() {
+        Get.put(ReportPreviewController());
+      }),
+      arguments: arguments,
+    );
   }
 
   Future<void> _initPreviewReport(String reportCode) async {

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

@@ -190,12 +190,13 @@ class HomeController extends FControllerBase with HomeNavMixin {
         iconWidget: _buildImgIcon('diagnosisDisplay.png'),
         isSelected: true,
       ),
-      HomeMenuItem(
-        title: "分时诊断",
-        routeName: "/remedicalRecordView",
-        key: "FSZD",
-        iconWidget: _buildImgIcon("doctorSigning.png"),
-      ),
+      if (kDebugMode)
+        HomeMenuItem(
+          title: "分时诊断",
+          routeName: "/remedicalRecordView",
+          key: "FSZD",
+          iconWidget: _buildImgIcon("doctorSigning.png"),
+        ),
       HomeMenuItem(
         key: 'SZZX',
         title: "设置中心",

+ 25 - 0
lib/pages/image_report_inner_view/controller.dart

@@ -163,6 +163,31 @@ class ImagereportinnerviewController extends GetxController {
       return;
     }
     reports = await remedicalManager.findExamReports(recordCode);
+    if (kDebugMode && reports.isEmpty) {
+      reports.add(
+        ReportDTO(
+          canEditReport: true,
+          reportCode: '0',
+          deviceName: '1',
+          patientName: '2',
+          reportUserName: '3',
+          reportTemplateName: '4',
+          reportOrgan: DiagnosisOrganEnum.Abdomen,
+          reportType: ReportTypeEnum.RemoteDiagnosis,
+          createTime: DateTime.now(),
+          updateTime: DateTime.now(),
+          reportPreviewList: [
+            ReportPreviewDTO(
+              fileToken:
+                  'https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/E1FE934BEB2D4F7CB0DF243E911DC4C1.pdf',
+              fileType: UploadFileTypeEnum.PDF,
+              thumbnailToken:
+                  'https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/6E9655504E24483A964BD62FBEF4BBFF.jpg',
+            ),
+          ],
+        ),
+      );
+    }
     update([MainViewId]);
   }
 

+ 0 - 3
lib/pages/image_report_inner_view/view.dart

@@ -102,9 +102,6 @@ class ImageReportInnerView extends GetView<ImagereportinnerviewController>
                         recordCode: controller.recordCode,
                         referralRecordCode:
                             controller.isReferral ? controller.recordCode : "",
-                        reportEditSource: controller.isCanWriteReport
-                            ? ReportEditSource.UserGroup
-                            : ReportEditSource.VSono,
                       );
                     },
                     style: ButtonStyle(

+ 4 - 10
lib/pages/image_report_inner_view/widgets/build_record_view.dart

@@ -7,6 +7,7 @@ import 'package:fis_ui/index.dart';
 import 'package:fis_ui/usual/hover_text_button.dart';
 import 'package:fis_ui/values/paddings.dart';
 import 'package:fis_ui/values/spacings.dart';
+import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:intl/intl.dart';
@@ -477,15 +478,6 @@ class BuildReportRecord extends StatelessWidget implements FPage {
                 if (!isSmailCard) ...[
                   _buildReportTags(context),
                 ],
-
-                /// TODO 【质控功能暂时屏蔽,后面放开只要解开注释】
-                // if (currReport.isQualityControlled &&
-                //     Store.user.hasFeature(FeatureKeys.QualityControl)) ...[
-                //   FSizedBox(
-                //     height: 5,
-                //   ),
-                //   FText(i18nBook.common.qualityControlled.t),
-                // ],
               ],
             ),
           ),
@@ -502,7 +494,9 @@ class BuildReportRecord extends StatelessWidget implements FPage {
         canEditReport) {
       operates.addAll({i18nBook.common.modify.t: onEditReport!});
     }
-
+    if (kDebugMode && !operates.containsKey(i18nBook.common.modify.t)) {
+      operates.addAll({i18nBook.common.modify.t: onEditReport!});
+    }
     operates.addAll({
       i18nBook.remedical.print.t: handlePrint,
       i18nBook.remedical.export.t: handleExport,

+ 38 - 0
lib/pages/report_edit/controllers/thesaurus_controller.dart

@@ -4,6 +4,7 @@ import 'package:fis_common/logger/logger.dart';
 import 'package:fis_i18n/i18n.dart';
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:fis_lib_report/report_info/report_info.dart';
+import 'package:flutter/foundation.dart';
 import 'package:get/get.dart';
 import 'package:vitalapp/architecture/services/default_entry_configuration.dart';
 import 'package:vitalapp/architecture/services/default_entry_setting.dart';
@@ -56,6 +57,43 @@ class ThesaurusController {
     } catch (e) {
       print(e);
       logger.e('ReportEditController _initData ex:', e);
+      if (kDebugMode) {
+        List<ThesaurusItemDTO> items = [
+          ThesaurusItemDTO(
+            thesaurusItemCode: '9322DB11270B44F882BD7B17DD91085C',
+            thesaurusItemConclusion: '[左|右|双]侧输尿管不扩张',
+            thesaurusItemDescription: '输尿管:[左|右|双]侧输尿管未显示扩张',
+            thesaurusItemName: '00',
+            thesaurusItemType: ThesaurusItemTypeEnum.Classification,
+            hasChildren: true,
+          ),
+          ThesaurusItemDTO(
+            thesaurusItemCode: '22',
+            thesaurusItemConclusion: '[左|右|双]侧输尿管不扩张',
+            thesaurusItemDescription: '输尿管:[左|右|双]侧输尿管未显示扩张',
+            thesaurusItemName: '22',
+            thesaurusItemType: ThesaurusItemTypeEnum.Contents,
+            parentItemCode: '9322DB11270B44F882BD7B17DD91085C',
+          ),
+          ThesaurusItemDTO(
+            thesaurusItemCode: '33',
+            thesaurusItemConclusion: '[左|右|双]侧输尿管不扩张',
+            thesaurusItemDescription: '输尿管:[左|右|双]侧输尿管未显示扩张',
+            thesaurusItemName: '33',
+            thesaurusItemType: ThesaurusItemTypeEnum.Contents,
+            parentItemCode: '9322DB11270B44F882BD7B17DD91085C',
+          ),
+        ];
+        defaultThesaurus = ThesaurusAllDTO(
+          baseInfo: ThesaurusDTO(
+              thesaurusCode: '0',
+              personalCode: '0',
+              organizationCode: '0',
+              thesaurusName: '0'),
+          items: items,
+        );
+        controller.state.allThesaurusList = items;
+      }
     }
 
     //对选择词条监听

+ 44 - 21
lib/pages/report_edit/view.dart

@@ -10,6 +10,7 @@ import 'package:fis_ui/index.dart';
 import 'package:fis_ui/usual/tab_button.dart';
 import 'package:fis_ui/usual/tab_button_group.dart';
 import 'package:fis_ui/widgets/layout/button_group.dart';
+import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:fis_common/index.dart';
@@ -41,6 +42,16 @@ class _DesktopLayout extends StatefulWidget {
 
 class _DesktopLayoutState extends State<_DesktopLayout> {
   final controller = Get.find<ReportEditController>();
+  final ScrollController _scrollController = ScrollController();
+  double _scrollSensitivityFactor = 1.0;
+
+  @override
+  void initState() {
+    if (kIsMobile) {
+      _scrollSensitivityFactor = 10.0;
+    }
+    super.initState();
+  }
 
   @override
   Widget build(BuildContext context) {
@@ -80,29 +91,41 @@ class _DesktopLayoutState extends State<_DesktopLayout> {
           controller.state.selectedTemplate.reportTemplateJson ?? '';
       if (jsonStr.isEmpty) {
         return FSizedBox(
-          width: 610,
+          width: 540,
         );
       }
-      return FContainer(
+      return Container(
         color: Colors.white,
         margin: EdgeInsets.only(top: 60),
-        child: FListView(
-          controller: ScrollController(),
-          shrinkWrap: true,
-          children: [
-            FReportEditPage(
-              reporter: Store.user.displayName,
-              reportDate: DateTime.now(),
-              jsonStr: jsonStr,
-              onSelect: controller.onSelect,
-              patinentAge: state.patientAge,
-              patinentName: state.patientName,
-              patinentSex: state.patientSex,
-              selectEntry: i18nBook.remedical.selectWord.t,
-              revoke: i18nBook.common.revoke.t,
-              selectImageHint: i18nBook.remedical.clickAndSelectImage.t,
-            ),
-          ],
+        child: Listener(
+          onPointerSignal: (pointerSignal) {
+            if (pointerSignal is PointerScrollEvent) {
+              final newOffset = _scrollController.offset +
+                  pointerSignal.scrollDelta.dy * _scrollSensitivityFactor;
+              if (newOffset <= _scrollController.position.maxScrollExtent &&
+                  newOffset >= _scrollController.position.minScrollExtent) {
+                _scrollController.jumpTo(newOffset);
+              }
+            }
+          },
+          child: ListView(
+            controller: _scrollController,
+            shrinkWrap: true,
+            children: [
+              FReportEditPage(
+                reporter: Store.user.displayName,
+                reportDate: DateTime.now(),
+                jsonStr: jsonStr,
+                onSelect: controller.onSelect,
+                patinentAge: state.patientAge,
+                patinentName: state.patientName,
+                patinentSex: state.patientSex,
+                selectEntry: i18nBook.remedical.selectWord.t,
+                revoke: i18nBook.common.revoke.t,
+                selectImageHint: i18nBook.remedical.clickAndSelectImage.t,
+              ),
+            ],
+          ),
         ),
       );
     });
@@ -586,8 +609,8 @@ class _DesktopLayoutState extends State<_DesktopLayout> {
     var padding = EdgeInsets.symmetric(vertical: 8, horizontal: 0);
 
     final allWidth = MediaQuery.of(context).size.width;
-    // 930 = 左侧菜单栏(90)+ 报告编辑区域(510)+ 分割线(30)
-    final fittedWidth = allWidth - 630;
+    // 930 = 左侧菜单栏(90)+ 报告编辑区域(540)+ 分割线(30)
+    final fittedWidth = allWidth - 670;
     // 600 是图像区域最大宽度限制,防止在大分辨率下,图像区域过大造成不美观
     const maxWidth = 600.0;
     final imagePoolWidth = min(fittedWidth, maxWidth);

文件差異過大導致無法顯示
+ 31 - 25
lib/pages/report_preview/controller.dart


+ 44 - 27
lib/pages/report_preview/view.dart

@@ -16,38 +16,55 @@ import 'package:fis_i18n/i18n.dart';
 class ReportPreviewPage extends GetView<ReportPreviewController> {
   const ReportPreviewPage({Key? key}) : super(key: key);
 
-  @override
-  Widget build(BuildContext context) {
-    return _DesktopLayout();
-  }
-}
-
-///桌面端布局
-class _DesktopLayout extends GetView<ReportPreviewController> {
   @override
   Widget build(BuildContext context) {
     return Obx(() {
       if (controller.state.isLoaded) {
-        String qualityTitle;
-        qualityTitle = i18nBook.common.qualityScore.t;
-        return FStack(
-          children: [
-            FPDFRenderContainer(
-              pdfTypeEnum: ReportPreviewController.pdfType,
-              demoMode: false,
-              pdfAccessTypeEnum: PDFAccessTypeEnum.preview,
-              fileName: _generateReaportFileName(),
-              pdfExporter: TextMediaFileExporterForShell.exportFile,
-              cacheGet: controller.fileStorage.read,
-              cacheSave: controller.fileStorage.save,
-              fromEditor: ReportPreviewController.isFromEditor,
-              webSideShare: controller.shareReport,
-              imageOrFileUrls: ReportPreviewController.imageOrFileUrls,
-              onClose: controller.onPDFClose,
-              customAction: [],
-            ),
-          ],
+        List<FWidget> children = ReportPreviewController.imageOrFileUrls
+            .map(
+              (e) => FContainer(
+                child: FImage.network(
+                  e,
+                  fit: BoxFit.fitWidth,
+                ),
+              ),
+            )
+            .toList();
+        return LayoutBuilder(
+          builder: (BuildContext context, BoxConstraints constraints) {
+            print(
+                '${MediaQuery.of(context).size.height} ,, ${constraints.maxHeight}');
+            return InteractiveViewer(
+              constrained: false,
+              minScale: 0.5,
+              child: FContainer(
+                width: constraints.maxWidth,
+                child: FColumn(
+                  mainAxisAlignment: MainAxisAlignment.center,
+                  children: children,
+                ),
+              ),
+            );
+          },
         );
+        // return FStack(
+        //   children: [
+        //     FPDFRenderContainer(
+        //       pdfTypeEnum: ReportPreviewController.pdfType,
+        //       demoMode: false,
+        //       pdfAccessTypeEnum: PDFAccessTypeEnum.preview,
+        //       fileName: _generateReaportFileName(),
+        //       pdfExporter: TextMediaFileExporterForShell.exportFile,
+        //       cacheGet: controller.fileStorage.read,
+        //       cacheSave: controller.fileStorage.save,
+        //       fromEditor: ReportPreviewController.isFromEditor,
+        //       webSideShare: controller.shareReport,
+        //       imageOrFileUrls: ReportPreviewController.imageOrFileUrls,
+        //       onClose: controller.onPDFClose,
+        //       customAction: [],
+        //     ),
+        //   ],
+        // );
       } else {
         return FSizedBox();
       }

部分文件因文件數量過多而無法顯示