Browse Source

modify some codes

Melon 1 year ago
parent
commit
71dcf57510

+ 6 - 0
lib/database/repositories/diagnosis.dart

@@ -71,4 +71,10 @@ class DiagnosisRepository
         await query.orderBy((x) => x.createTime, DbOrderByType.desc).toList();
     return list;
   }
+
+  @override
+  Future<DiagnosisEntity?> singleByCode(String code) async {
+    final result = await queryable.where((x) => [x.code.equals(code)]).first();
+    return result;
+  }
 }

+ 3 - 0
lib/database/repositories/interfaces/diagnosis.dart

@@ -34,4 +34,7 @@ abstract class IDiagnosisRepository
     String patientCode,
     String userCode,
   );
+
+  /// 根据code获取实体
+  Future<DiagnosisEntity?> singleByCode(String code);
 }

+ 4 - 1
lib/managers/diagnosis.dart

@@ -224,9 +224,12 @@ class DiagnosisManager implements IDiagnosisManager {
       final entity = await db.repositories.diagnosis.singleByCode(appDataId);
       if (entity != null) {
         result = await db.repositories.diagnosis.delete(entity.id);
+        if (!result) {
+          return false;
+        }
       }
 
-      if (result && kIsOnline) {
+      if (kIsOnline) {
         result = await rpc.vitalDiagnosis.removeDiagnosisByAppDataIdAsync(
           RemoveDiagnosisByAppDataIdRequest(
             token: Store.user.token,

+ 45 - 15
lib/pages/medical/controller.dart

@@ -13,8 +13,10 @@ import 'package:vitalapp/database/entities/defines.dart';
 import 'package:vitalapp/database/entities/diagnosis.dart';
 import 'package:vitalapp/global.dart';
 import 'package:vitalapp/managers/interfaces/exam.dart';
+import 'package:vitalapp/managers/interfaces/models/diagnosis_aggregation_record_model.dart';
 import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:vitalapp/managers/interfaces/record_data_cache.dart';
+import 'package:vitalapp/routes/routes.dart';
 import 'package:vitalapp/rpc.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vitalapp/architecture/defines.dart';
@@ -66,30 +68,57 @@ class MedicalController extends FControllerBase {
     MedicalItem(key: DeviceTypes.HEART, diagnosticItem: '心电'),
     MedicalItem(key: DeviceTypes.TWELVEHEART, diagnosticItem: '十二导心电'),
   ];
+
+  // @override
+  // void onInit() {
+  //   super.onInit();
+  // }
+
   @override
-  void onInit() async {
-    setBusy('Loading...');
+  void onReady() async {
+    super.onReady();
     await initData();
     await getAccessTypes();
     state.currentTab = DeviceTypes.TEMP; //等数据加载完成之后在切换到体温页面
-    busy = false;
-    logger.i('MedicalController init end');
-    super.onInit();
+    // busy = false;
+    // logger.i('MedicalController init end');
   }
 
   Future<void> initData() async {
     patientCode = Store.user.currentSelectPatientInfo?.code ?? '';
-    if (patientCode.isNotEmpty) {
-      logger.i(
-          'MedicalController initData  patientName:${Store.user.currentSelectPatientInfo?.patientName} patientCode:${Store.user.currentSelectPatientInfo?.code}');
-      var cachedAppDataId = await readCachedAppDataId();
-      if (cachedAppDataId != null) {
-        appDataId = cachedAppDataId;
-      } else {
-        await saveCachedAppDataId();
+    if (patientCode.isEmpty) {
+      logger.w("MedicalController init fail, because `patientCode` not set.");
+      return;
+    }
+    if (Routes.parameters["diagnosisEditData"] != null) {
+      await _loadDataFromRoute();
+      return;
+    }
+
+    logger.i(
+        'MedicalController initData  patientName:${Store.user.currentSelectPatientInfo?.patientName} patientCode:${Store.user.currentSelectPatientInfo?.code}');
+    var cachedAppDataId = await readCachedAppDataId();
+    if (cachedAppDataId != null) {
+      appDataId = cachedAppDataId;
+    } else {
+      await saveCachedAppDataId();
+    }
+    await initReadCached();
+  }
+
+  Future<void> _loadDataFromRoute() async {
+    final model = Routes.parameters["diagnosisEditData"]
+        as DiagnosisAggregationRecordModel;
+    appDataId = model.appDataId!;
+    final dataList = model.diagnosisAggregationData ?? [];
+    diagnosisDataValue = {};
+    for (var item in dataList) {
+      if (item.key != null && item.diagnosisData != null) {
+        diagnosisDataValue[item.key!] = jsonDecode(item.diagnosisData!);
       }
-      await initReadCached();
     }
+
+    Routes.parameters["diagnosisEditData"] = null;
   }
 
   Future<void> getAccessTypes() async {
@@ -266,12 +295,13 @@ class MedicalController extends FControllerBase {
         ///提交之后,测试结果清空
         diagnosisDataValue.clear();
         state.currentTab = state.medicalMenuList[0].key;
-
+        state.refreshCurrentTab();
         Get.back();
       }
     } catch (err) {
       busy = false;
       state.currentTab = state.medicalMenuList[0].key;
+      state.refreshCurrentTab();
       logger.e('submitDiagnosis error: ${err.toString()}');
     }
   }

+ 14 - 0
lib/pages/medical/records/controller.dart

@@ -4,10 +4,13 @@ import 'package:vitalapp/architecture/defines.dart';
 import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/consts/diagnosis.dart';
 import 'package:vitalapp/global.dart';
+import 'package:vitalapp/helper/goto_helper.dart';
 import 'package:vitalapp/managers/interfaces/diagnosis.dart';
 import 'package:vitalapp/managers/interfaces/dictionary.dart';
 import 'package:vitalapp/managers/interfaces/models/diagnosis_aggregation_record_model.dart';
+import 'package:vitalapp/pages/home/controller.dart';
 import 'package:vitalapp/pages/medical/records/state.dart';
+import 'package:vitalapp/routes/routes.dart';
 
 class MedicalRecordsController extends FControllerBase {
   final state = MedicalRecordsState();
@@ -66,4 +69,15 @@ class MedicalRecordsController extends FControllerBase {
       PromptBox.toast("删除失败");
     }
   }
+
+  /// 编辑记录(离线)
+  Future<void> editRecord(DiagnosisAggregationRecordModel model) async {
+    Get.back();
+
+    busy = true;
+    await Future.delayed(const Duration(milliseconds: 800));
+
+    Routes.parameters["diagnosisEditData"] = model;
+    Get.find<HomeController>().switchNavByName("/medical");
+  }
 }

+ 43 - 12
lib/pages/medical/records/view.dart

@@ -147,6 +147,7 @@ class _MedicalRecordCard extends GetView<MedicalRecordsController> {
 
   @override
   Widget build(BuildContext context) {
+    bool canDelete = kIsOnline || dto.isExistLocalData == true;
     final body = Stack(
       children: [
         Row(
@@ -205,12 +206,13 @@ class _MedicalRecordCard extends GetView<MedicalRecordsController> {
               ),
             ),
             Expanded(
-                flex: 1,
-                child: Icon(
-                  Icons.keyboard_arrow_right,
-                  size: 64,
-                  color: Colors.grey.shade400,
-                ))
+              flex: 1,
+              child: Icon(
+                Icons.keyboard_arrow_right,
+                size: 64,
+                color: Colors.grey.shade400,
+              ),
+            ),
           ],
         ),
         Positioned(
@@ -220,11 +222,19 @@ class _MedicalRecordCard extends GetView<MedicalRecordsController> {
             dto: dto,
           ),
         ),
-        Positioned(
-          bottom: 0,
-          right: 0,
-          child: _DiagnosisRemoveMarkButton(dto: dto),
-        ),
+        if (canDelete)
+          Positioned(
+            bottom: 0,
+            right: 0,
+            child: _DiagnosisRemoveMarkButton(dto: dto),
+          ),
+        if (dto.isExistLocalData == true)
+          Positioned(
+            top: 0,
+            bottom: 0,
+            right: 96,
+            child: _DiagnosisEidtButton(dto: dto),
+          ),
       ],
     );
     return Material(
@@ -275,7 +285,7 @@ class _diagnosisSignStatusTag extends StatelessWidget {
 class _DiagnosisRemoveMarkButton extends StatelessWidget {
   final DiagnosisAggregationRecordModel dto;
 
-  const _DiagnosisRemoveMarkButton({super.key, required this.dto});
+  const _DiagnosisRemoveMarkButton({required this.dto});
 
   @override
   Widget build(BuildContext context) {
@@ -321,3 +331,24 @@ class _DiagnosisRemoveMarkButton extends StatelessWidget {
     );
   }
 }
+
+class _DiagnosisEidtButton extends StatelessWidget {
+  final DiagnosisAggregationRecordModel dto;
+
+  const _DiagnosisEidtButton({required this.dto});
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      alignment: Alignment.center,
+      child: IconButton(
+        onPressed: () {
+          Get.find<MedicalRecordsController>().editRecord(dto);
+        },
+        iconSize: 48,
+        color: Colors.grey.shade400,
+        icon: Icon(Icons.edit_note),
+      ),
+    );
+  }
+}

+ 4 - 0
lib/pages/medical/state.dart

@@ -23,4 +23,8 @@ class MedicalState {
 
   // Map<String, dynamic> get diagnosisDataValue => _diagnosisDataValue.value;
   // set diagnosisDataValue(Map<String, dynamic> val) => _diagnosisDataValue(val);
+
+  void refreshCurrentTab() {
+    _currentTab.refresh();
+  }
 }