loki.wu 1 жил өмнө
parent
commit
2e1a689c74

+ 55 - 0
lib/components/tag_widget.dart

@@ -0,0 +1,55 @@
+import 'package:flutter/material.dart';
+
+class TagWidget extends StatelessWidget {
+  final String label;
+  final Color borderColor;
+  final Color textColor;
+  final Color backgroundColor;
+  final EdgeInsets padding;
+  final EdgeInsets margin;
+  final double? width;
+  final double? height;
+
+  const TagWidget({
+    Key? key,
+    required this.label,
+    this.borderColor = Colors.blue,
+    this.textColor = Colors.white,
+    this.backgroundColor = Colors.blue,
+    this.padding = const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
+    this.margin = const EdgeInsets.only(right: 8.0),
+    this.width,
+    this.height,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      decoration: BoxDecoration(
+        color: backgroundColor,
+        border: Border.all(color: borderColor),
+        borderRadius: BorderRadius.only(
+          topLeft: Radius.circular(4),
+          bottomLeft: Radius.circular(4),
+          topRight: Radius.circular(88),
+          bottomRight: Radius.circular(88),
+        ),
+      ),
+      width: width,
+      height: height,
+      margin: margin,
+      child: Row(
+        mainAxisSize: MainAxisSize.min,
+        children: [
+          Padding(
+            padding: padding,
+            child: Text(
+              label,
+              style: TextStyle(color: textColor),
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}

+ 27 - 0
lib/pages/patient/detail/controller.dart

@@ -163,6 +163,33 @@ class PatientDetailController extends FControllerBase with HomeNavMixin {
     }
   }
 
+  Future<void> updatePatient() async {
+    try {
+      final dto = await _patientManager.getDetail(state.dto.code!);
+      if (dto == null) {
+        return;
+      }
+      UpdatePatientRequest2 request = UpdatePatientRequest2(
+        token: Store.user.token,
+        code: dto.code,
+        patientName: dto.patientName,
+        phone: dto.phone,
+        emergencyPhone: dto.emergencyPhone,
+        cardNo: dto.cardNo,
+        nationality: dto.nationality,
+        birthday: dto.birthday,
+        cardType: dto.cardType,
+        patientGender: dto.patientGender,
+        patientAddress: dto.patientAddress,
+        crowdLabels: _patientManager.crowdLabelsConvert(state.labels),
+        permanentResidenceAddress: dto.permanentResidenceAddress,
+      );
+      _patientManager.updatePatientAsync(request);
+    } catch (e) {
+      logger.e("PatientDetailController updatePatient:${e}");
+    }
+  }
+
   Future<void> loadData({String code = ''}) async {
     PatientDTO? dto;
     if (code.isNotEmpty) {

+ 23 - 1
lib/pages/patient/detail/widgets/tag_cards.dart

@@ -8,8 +8,10 @@ import 'package:vitalapp/components/checkbox_button.dart';
 import 'package:vitalapp/components/dialog_label_select.dart';
 import 'package:vitalapp/components/dynamic_drawer.dart';
 import 'package:vitalapp/components/selectBox_button.dart';
+import 'package:vitalapp/components/tag_widget.dart';
 import 'package:vitalapp/consts/styles.dart';
 import 'package:vitalapp/managers/contract/index.dart';
+import 'package:vitalapp/managers/interfaces/models/crowd_labels.dart';
 import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:vitalapp/pages/controllers/crowd_labels.dart';
 import 'package:vitalapp/pages/patient/detail/widgets/last_record.dart';
@@ -40,6 +42,7 @@ class CrowdLabelsCard extends GetView<PatientDetailController> {
               );
               var selectedLabels = result as List<String>;
               controller.state.labels = selectedLabels;
+              controller.updatePatient();
             },
             icon: const Icon(
               Icons.edit_note,
@@ -60,7 +63,26 @@ class CrowdLabelsCard extends GetView<PatientDetailController> {
               spacing: 16,
               runSpacing: 12,
               children: controller.state.labels
-                  .map((e) => _CrowdLabelTag(name: e))
+                  .map(
+                    (e) => TagWidget(
+                      label: e,
+                      borderColor: (e == CrowdLabels.CHILDREN ||
+                              e == CrowdLabels.ELDERLY)
+                          ? Colors.blue
+                          : Colors.orange,
+                      backgroundColor: (e == CrowdLabels.CHILDREN ||
+                              e == CrowdLabels.ELDERLY)
+                          ? Colors.blue
+                          : Colors.orange,
+                      textColor: Colors.black,
+                      padding: EdgeInsets.only(
+                        right: 16,
+                        left: 14,
+                      ),
+                      width: 100,
+                      height: 40,
+                    ),
+                  )
                   .toList(),
             ),
           ),

+ 27 - 8
lib/pages/patient/list/view.dart

@@ -12,12 +12,14 @@ import 'package:vitalapp/components/dialog_date.dart';
 import 'package:vitalapp/components/dynamic_drawer.dart';
 import 'package:vitalapp/components/input.dart';
 import 'package:vitalapp/components/search_input.dart';
+import 'package:vitalapp/components/tag_widget.dart';
 import 'package:vitalapp/consts/rpc_enum_labels.dart';
 import 'package:vitalapp/consts/styles.dart';
 import 'package:vitalapp/global.dart';
 import 'package:vitalapp/managers/contract/index.dart';
 import 'package:vitalapp/managers/interfaces/diagnosis.dart';
 import 'package:vitalapp/managers/interfaces/exam.dart';
+import 'package:vitalapp/managers/interfaces/models/crowd_labels.dart';
 import 'package:vitalapp/managers/interfaces/models/patient_model_dto.dart';
 import 'package:vitalapp/pages/home/controller.dart';
 import 'package:vitalapp/pages/patient/list/widgets/status.dart';
@@ -389,12 +391,14 @@ class _PatientCard extends StatelessWidget {
                   return SizedBox(width: width, child: _buildBaseInfoRow());
                 },
               ),
-              const SizedBox(height: 8),
-              //Expanded(child: _buildClassTags()),
-              _buildClassTags(),
+              const SizedBox(height: 4),
               _buildPhone(),
               const SizedBox(height: 4),
               _buildCardNo(),
+              if (dto.labelNames?.isNotEmpty ?? false) ...[
+                const Expanded(child: SizedBox()),
+                _buildClassTags(),
+              ],
             ],
           ),
         ),
@@ -481,11 +485,26 @@ class _PatientCard extends StatelessWidget {
             minWidth: double.infinity,
             maxHeight: 50,
           ),
-          child: Text(
-            dto.labelNames?.join('、') ?? '',
-            style: const TextStyle(color: Colors.grey, fontSize: 18),
-            maxLines: 2,
-            overflow: TextOverflow.ellipsis,
+          child: Row(
+            children: dto.labelNames!
+                .map(
+                  (e) => TagWidget(
+                    label: e,
+                    borderColor:
+                        (e == CrowdLabels.CHILDREN || e == CrowdLabels.ELDERLY)
+                            ? Colors.blue
+                            : Colors.orange,
+                    backgroundColor: Colors.transparent,
+                    textColor: Colors.black,
+                    padding: EdgeInsets.only(
+                      top: 2,
+                      bottom: 2,
+                      right: 8,
+                      left: 4,
+                    ),
+                  ),
+                )
+                .toList(),
           ),
         ),
       ],