Procházet zdrojové kódy

0018037: 【体检系统】【体检表】1.辅助检查下的X线片选项模板中与文档不一致,需调整 2.健康评价下的异常情况和文档不一致,没有列举具体的异常选项

finlay před 1 rokem
rodič
revize
2123b3d7bb

+ 95 - 0
lib/pages/check/widgets/exam_configurable/exam_abnormal.dart

@@ -0,0 +1,95 @@
+import 'package:flutter/material.dart';
+import 'package:vitalapp/components/button.dart';
+import 'package:vitalapp/pages/check/models/form.dart';
+import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_radio_and_select.dart';
+
+class ExamAbnormal extends StatelessWidget {
+  final List<dynamic>? currentValue;
+  final Function? addAbnormal;
+  final FormObject currentFormObject;
+  final Function? deleteAbnormal;
+
+  const ExamAbnormal({
+    super.key,
+    this.currentValue,
+    this.addAbnormal,
+    required this.currentFormObject,
+    this.deleteAbnormal,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Stack(
+      children: [
+        ExamCardRadioSelect(
+          title: currentFormObject.label ?? "",
+          clickCard: null,
+          content: Container(
+            alignment: Alignment.centerLeft,
+            padding: const EdgeInsets.only(
+              right: 20,
+              left: 20,
+              bottom: 10,
+            ),
+            child: Column(children: [
+              ...currentValue!
+                  .asMap()
+                  .entries
+                  .map(
+                    (entry) => Row(
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      mainAxisAlignment: MainAxisAlignment.start,
+                      children: [
+                        Expanded(
+                          child: Text(
+                            "异常${entry.key + 1}:${entry.value.toString()}",
+                            style:
+                                TextStyle(fontSize: 18, color: Colors.black54),
+                            textAlign: TextAlign.left,
+                          ),
+                        ),
+                        IconButton(
+                          onPressed: () {
+                            deleteAbnormal!(entry.key);
+                          },
+                          icon: Icon(Icons.delete),
+                        ),
+                      ],
+                    ),
+                  )
+                  .toList()
+            ]),
+          ),
+        ),
+        Positioned(
+          right: 16,
+          top: 8,
+          child: SizedBox(
+            width: 130,
+            height: 54,
+            child: VButton(
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.center,
+                children: const [
+                  Icon(Icons.add, size: 24),
+                  SizedBox(
+                    width: 8,
+                  ),
+                  Text(
+                    "新增",
+                    style: TextStyle(
+                      fontSize: 20,
+                    ),
+                  )
+                ],
+              ),
+              onTap: () {
+                addAbnormal!();
+              },
+            ),
+          ),
+        ),
+      ],
+    );
+  }
+}

+ 39 - 0
lib/pages/check/widgets/new_configurable_card.dart

@@ -1,6 +1,7 @@
 import 'dart:convert';
 
 import 'package:fis_common/event/event_type.dart';
+import 'package:fis_common/index.dart';
 import 'package:fis_common/logger/logger.dart';
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:flutter/material.dart';
@@ -13,6 +14,7 @@ import 'package:vitalapp/managers/interfaces/cachedRecord.dart';
 import 'package:vitalapp/managers/interfaces/registration.dart';
 import 'package:vitalapp/managers/interfaces/template.dart';
 import 'package:vitalapp/pages/check/models/form.dart';
+import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_abnormal.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_blood_pressure.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_blood_sugar.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_body_temperature.dart';
@@ -424,6 +426,7 @@ class NewConfigurableFormState extends State<NewConfigurableCard> {
       'safetyPrecautions': _buildToxicSubstance,
       'urinalys': _buildUrinalysis,
       "dentition": _buildDentition,
+      "abnormal": _buildAbnormal,
     };
     Widget Function(FormObject) builder =
         widgetMap[currentFormObject?.type] ?? _buildInput;
@@ -1106,4 +1109,40 @@ class NewConfigurableFormState extends State<NewConfigurableCard> {
       currentFormObject: currentFormObject,
     );
   }
+
+  Widget _buildAbnormal(FormObject currentFormObject) {
+    List<dynamic> currentValue = [];
+    var value = formValue[currentFormObject.key!];
+    if (value is String) {
+      currentValue.add(value);
+    } else {
+      currentValue = value ?? [];
+    }
+
+    Future<void> addAbnormalData() async {
+      String? result = await VDialogInput(
+        title: currentFormObject.label,
+      ).show();
+      if (result.isNotNullOrEmpty) {
+        currentValue.add(result);
+        formValue[currentFormObject.key!] = null;
+        formValue[currentFormObject.key!] = currentValue;
+      }
+      setState(() {});
+    }
+
+    Future<void> deleteAbnormalData(int index) async {
+      currentValue.removeAt(index);
+      formValue[currentFormObject.key!] = null;
+      formValue[currentFormObject.key!] = currentValue;
+      setState(() {});
+    }
+
+    return ExamAbnormal(
+      currentFormObject: currentFormObject,
+      currentValue: currentValue,
+      addAbnormal: addAbnormalData,
+      deleteAbnormal: deleteAbnormalData,
+    );
+  }
 }