Kaynağa Gözat

员工详情证书显示修改

glglove 3 gün önce
ebeveyn
işleme
ba4e24fe9f

+ 98 - 2
packages/cpt_uk/lib/modules/job/job_applied_staff_detail/certification_dialog_widget.dart

@@ -13,6 +13,7 @@ import 'package:plugin_platform/engine/image/image_preview.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:shared/utils/date_time_utils.dart';
 import 'package:shared/utils/log_utils.dart';
+import 'package:shared/utils/util.dart';
 import 'package:widgets/ext/ex_widget.dart';
 import 'package:cs_resources/constants/color_constants.dart';
 import 'package:widgets/my_load_image.dart';
@@ -133,6 +134,7 @@ class _certificationDialogState extends State<certificationDialog> {
                         ],
                       ),
                       SizedBox.fromSize(size: Size(0, 10)),
+                      // status
                       Row(
                         children: [
                           MyTextView(
@@ -146,13 +148,94 @@ class _certificationDialogState extends State<certificationDialog> {
                               widget.certificateItem.status.toString()??'-',
                               fontSize: 15,
                               isFontMedium: true,
-                              textColor: const Color(0xFF666666),
+                              // textColor: const Color(0xFF666666),
+                              textColor: _getStatusColor(widget.certificateItem.statusColor?? ''),
                               marginLeft: 20,
                             ),
                           ),
                         ],
                       ),
-                      SizedBox.fromSize(size: Size(0, 30)),
+                      // 过期时间
+                      Visibility(
+                        visible: Utils.isNotEmpty(widget.certificateItem.expiryDate)?true:false,
+                        child: Padding(
+                          padding: const EdgeInsets.only(top: 10,),
+                          child: Row(
+                            children: [
+                              MyTextView(
+                                "Expire Date".tr,
+                                fontSize: 15,
+                                isFontMedium: true,
+                                textColor: const Color(0xFF666666),
+                              ),
+                              Expanded(
+                                child: MyTextView(
+                                  widget.certificateItem.expiryDate?.toString()??'-',
+                                  fontSize: 15,
+                                  isFontMedium: true,
+                                  textColor: const Color(0xFF666666),
+                                  marginLeft: 20,
+                                ),
+                              ),
+                            ],
+                          ),
+                        ),
+                      ),
+                      // 签发时间
+                      Visibility(
+                        visible: Utils.isNotEmpty(widget.certificateItem.issueDate)?true:false,
+                        child: Padding(
+                          padding: const EdgeInsets.only(top: 10),
+                          child: Row(
+                            children: [
+                              MyTextView(
+                                "Issue Date".tr,
+                                fontSize: 15,
+                                isFontMedium: true,
+                                textColor: const Color(0xFF666666),
+                              ),
+                              Expanded(
+                                child: MyTextView(
+                                  widget.certificateItem.issueDate?.toString()??'-',
+                                  fontSize: 15,
+                                  isFontMedium: true,
+                                  textColor: const Color(0xFF666666),
+                                  marginLeft: 20,
+                                ),
+                              ),
+                            ],
+                          ),
+                        ),
+                      ),
+                      // reject reason
+                      Visibility(
+                        // statusCode 2 是 approved  statusCode 3 是 rejected
+                        visible: widget.certificateItem.statusCode == 3 ? true: false,
+                        child: Padding(
+                          padding: const EdgeInsets.only(top: 10),
+                          child: Row(
+                            children: [
+                              SizedBox.fromSize(size: Size(0, 10)),
+                              MyTextView(
+                                "Reject Reason".tr,
+                                fontSize: 15,
+                                isFontMedium: true,
+                                textColor: const Color(0xFF666666),
+                              ),
+                              Expanded(
+                                child: MyTextView(
+                                  widget.certificateItem.rejectReason?.toString()??'-',
+                                  fontSize: 15,
+                                  isFontMedium: true,
+                                  textColor: const Color(0xFF666666),
+                                  marginLeft: 20,
+                                ),
+                              ),
+                            ],
+                          ),
+                        ),
+                      ),
+                      SizedBox.fromSize(size: Size(0, 30))
                     ],
                   ),
                 ],
@@ -173,6 +256,19 @@ class _certificationDialogState extends State<certificationDialog> {
     ).constrained(width: 285);
   }
 
+  Color _getStatusColor(String statusColor) {
+    switch (statusColor) {
+      case 'springgreen':
+        return Color(0xFF0AC074);
+      case 'red':
+        return Color(0xFFFF6262);
+      case 'dodgerblue':
+        return Colors.blue;
+      default:
+        return Color(0xFFEA9F0D);
+    }
+  }
+
   //取消弹框
   void onCancel() async {
     SmartDialog.dismiss();

+ 68 - 0
packages/cpt_uk/lib/modules/job/job_applied_staff_detail/staff_detail_widget.dart

@@ -112,6 +112,26 @@ class StaffDetailWidget extends StatelessWidget {
             ],
           ).marginOnly(left: 22, right: 22, top: 10),
 
+          //challenge 25
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            children: [
+              MyTextView(
+                "Challenge 25:",
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+                isFontRegular: true,
+              ),
+              MyTextView(
+                detail?.challenge25!.toString() == '1'? "Confirmed" : "Pending",
+                marginLeft: 5,
+                textColor: detail?.challenge25!.toString() == '1'? Color(0xFF0AC074): Colors.blue,
+                fontSize: 14,
+                isFontMedium: true,
+              ).expanded(),
+            ],
+          ).marginOnly(left: 22, right: 22, top: 10),
+
           // //性别
           // Row(
           //   mainAxisSize: MainAxisSize.max,
@@ -283,6 +303,10 @@ class StaffDetailWidget extends StatelessWidget {
                 UkStaffDetailCertificates certificate = entry.value;
                 return _buildCertificateWidget(context, certificate, index);
               }).toList() ?? []),
+
+              // 上面循环的 detail.certificates 是用户上传的的所有证书 但是可能不是所有类型的证书(detail.certtypeList)
+              if (detail?.certtypeList != null && detail!.certtypeList!.isNotEmpty)
+                ..._buildRemainCertificatesWidgetList(context, detail!),
             ],
           ),
 
@@ -332,6 +356,8 @@ class StaffDetailWidget extends StatelessWidget {
               fontSize: 14,
               isFontRegular: true,
               marginLeft: 5,
+              textDecoration: TextDecoration.underline,
+              decorationColor: ColorConstants.textGreen0AC074,
               onClick: (){
                 onScanCertificateAction?.call(context, certificateItem);
               },
@@ -341,6 +367,48 @@ class StaffDetailWidget extends StatelessWidget {
     ).marginOnly(left: 22, right: 22,top: 10);
   }
 
+  Widget _buildOtherWidgetItem(BuildContext context,String certificateTypeName, int index ){
+    return Row(
+        children: [
+          Flexible(
+            flex: 2,
+            child: MyTextView(
+              '${certificateTypeName!}:',
+              textColor: ColorConstants.textGrayAECAE5,
+              fontSize: 14,
+              isFontRegular: true,
+            ),
+          ),
+          Flexible(
+            flex: 1,
+            child: MyTextView(
+              "\/",
+              textColor: ColorConstants.textGrayAECAE5,
+              fontSize: 14,
+              isFontRegular: true,
+              marginLeft: 5,
+              onClick: (){
+              },
+            ),
+          ),
+        ]
+    ).marginOnly(left: 22, right: 22,top: 10);
+  }
+
+
+  List<Widget> _buildRemainCertificatesWidgetList(BuildContext context,UkStaffDetailEntity detail){
+    List<String> allCertTypesList = detail?.certtypeList ?? [];
+    List<String> curCerTypesList = detail?.certificates?.map((e) => e.type!).toList() ?? [];
+    List<String> remainCertTypesList = allCertTypesList.where((element) => !curCerTypesList.contains(element)).toList()?? [];
+    return [
+      ...(remainCertTypesList?.asMap().entries.map((entry) {
+        int index = entry.key;
+        String certificateTypeName = entry.value;
+        return _buildOtherWidgetItem(context, certificateTypeName, index);
+      }).toList() ?? []),
+    ];
+  }
+
   Color _getStatusColor(String statusColor) {
     switch (statusColor) {
       case 'springgreen':

+ 17 - 15
packages/cs_domain/lib/entity/response/uk_staff_detail_entity.dart

@@ -5,7 +5,7 @@ export 'package:domain/generated/json/uk_staff_detail_entity.g.dart';
 
 @JsonSerializable()
 class UkStaffDetailEntity {
-	@JSONField(name: "member_id")
+	@JSONField(name: 'member_id')
 	int? memberId;
 	String? name;
 	String? avatar;
@@ -17,20 +17,22 @@ class UkStaffDetailEntity {
 	String? address;
 	String? natl;
 	String? lang;
-	@JSONField(name: "emer_name")
+	@JSONField(name: 'emer_name')
 	String? emerName;
-	@JSONField(name: "emer_phone")
+	@JSONField(name: 'emer_phone')
 	List<String>? emerPhone;
-	@JSONField(name: "emer_name2")
+	@JSONField(name: 'emer_name2')
 	String? emerName2;
-	@JSONField(name: "emer_phone2")
+	@JSONField(name: 'emer_phone2')
 	List<String>? emerPhone2;
-	@JSONField(name: "challenge_25")
+	@JSONField(name: 'challenge_25')
 	int? challenge25;
+	@JSONField(name: 'certtype_list')
+	List<String>? certtypeList;
 	List<UkStaffDetailCertificates>? certificates;
-	@JSONField(name: "rem_num")
+	@JSONField(name: 'rem_num')
 	int? remNum;
-	@JSONField(name: "rem_rate")
+	@JSONField(name: 'rem_rate')
 	int? remRate;
 
 	UkStaffDetailEntity();
@@ -49,19 +51,19 @@ class UkStaffDetailEntity {
 class UkStaffDetailCertificates {
 	int? id;
 	String? type;
-	@JSONField(name: "type_code")
+	@JSONField(name: 'type_code')
 	int? typeCode;
 	List<String>? url;
 	String? status;
-	@JSONField(name: "status_color")
+	@JSONField(name: 'status_color')
 	String? statusColor;
-	@JSONField(name: "status_code")
+	@JSONField(name: 'status_code')
 	int? statusCode;
-	@JSONField(name: "reject_reason")
+	@JSONField(name: 'reject_reason')
 	String? rejectReason;
-	@JSONField(name: "issue_date")
-	dynamic issueDate;
-	@JSONField(name: "expiry_date")
+	@JSONField(name: 'issue_date')
+	String? issueDate;
+	@JSONField(name: 'expiry_date')
 	String? expiryDate;
 
 	UkStaffDetailCertificates();

+ 12 - 2
packages/cs_domain/lib/generated/json/uk_staff_detail_entity.g.dart

@@ -69,6 +69,13 @@ UkStaffDetailEntity $UkStaffDetailEntityFromJson(Map<String, dynamic> json) {
   if (challenge25 != null) {
     ukStaffDetailEntity.challenge25 = challenge25;
   }
+  final List<String>? certtypeList = (json['certtype_list'] as List<dynamic>?)
+      ?.map(
+          (e) => jsonConvert.convert<String>(e) as String)
+      .toList();
+  if (certtypeList != null) {
+    ukStaffDetailEntity.certtypeList = certtypeList;
+  }
   final List<
       UkStaffDetailCertificates>? certificates = (json['certificates'] as List<
       dynamic>?)?.map(
@@ -107,6 +114,7 @@ Map<String, dynamic> $UkStaffDetailEntityToJson(UkStaffDetailEntity entity) {
   data['emer_name2'] = entity.emerName2;
   data['emer_phone2'] = entity.emerPhone2;
   data['challenge_25'] = entity.challenge25;
+  data['certtype_list'] = entity.certtypeList;
   data['certificates'] = entity.certificates?.map((v) => v.toJson()).toList();
   data['rem_num'] = entity.remNum;
   data['rem_rate'] = entity.remRate;
@@ -131,6 +139,7 @@ extension UkStaffDetailEntityExtension on UkStaffDetailEntity {
     String? emerName2,
     List<String>? emerPhone2,
     int? challenge25,
+    List<String>? certtypeList,
     List<UkStaffDetailCertificates>? certificates,
     int? remNum,
     int? remRate,
@@ -152,6 +161,7 @@ extension UkStaffDetailEntityExtension on UkStaffDetailEntity {
       ..emerName2 = emerName2 ?? this.emerName2
       ..emerPhone2 = emerPhone2 ?? this.emerPhone2
       ..challenge25 = challenge25 ?? this.challenge25
+      ..certtypeList = certtypeList ?? this.certtypeList
       ..certificates = certificates ?? this.certificates
       ..remNum = remNum ?? this.remNum
       ..remRate = remRate ?? this.remRate;
@@ -195,7 +205,7 @@ UkStaffDetailCertificates $UkStaffDetailCertificatesFromJson(
   if (rejectReason != null) {
     ukStaffDetailCertificates.rejectReason = rejectReason;
   }
-  final dynamic issueDate = json['issue_date'];
+  final String? issueDate = jsonConvert.convert<String>(json['issue_date']);
   if (issueDate != null) {
     ukStaffDetailCertificates.issueDate = issueDate;
   }
@@ -232,7 +242,7 @@ extension UkStaffDetailCertificatesExtension on UkStaffDetailCertificates {
     String? statusColor,
     int? statusCode,
     String? rejectReason,
-    dynamic issueDate,
+    String? issueDate,
     String? expiryDate,
   }) {
     return UkStaffDetailCertificates()