Browse Source

staff report 的越南逻辑

liukai 6 months ago
parent
commit
27de6f832b

+ 11 - 11
packages/cpt_auth/lib/modules/select_country/select_country_page.dart

@@ -95,15 +95,15 @@ class SelectCountryPage extends BaseStatelessPage<SelectCountryController> {
                       //新加坡的选项
                       Container(
                         width: double.infinity,
-                        margin: EdgeInsets.only(top: 48, left: 20, right: 20),
-                        padding: EdgeInsets.symmetric(vertical: 13, horizontal: 17),
+                        margin: const EdgeInsets.only(top: 48, left: 20, right: 20),
+                        padding: const EdgeInsets.symmetric(vertical: 13, horizontal: 17),
                         decoration: BoxDecoration(
-                          color: Color(0xFF4DCFF6).withOpacity(0.2), // 设置背景颜色和不透明度
+                          color: const Color(0xFF4DCFF6).withOpacity(0.2), // 设置背景颜色和不透明度
                           borderRadius: BorderRadius.circular(5.0), // 设置圆角
                         ),
                         child: Row(
                           children: [
-                            MyAssetImage(Assets.cptAuthSgIcon, width: 50, height: 33),
+                            const MyAssetImage(Assets.cptAuthSgIcon, width: 50, height: 33),
                             MyTextView(
                               "Singapore".tr,
                               marginLeft: 17,
@@ -114,7 +114,7 @@ class SelectCountryPage extends BaseStatelessPage<SelectCountryController> {
                             Obx(() {
                               return Visibility(
                                 visible: ConfigService.to.curSelectCountry.value == 1,
-                                child: MyAssetImage(Assets.cptAuthCheckedIcon, width: 22, height: 22),
+                                child: const MyAssetImage(Assets.cptAuthCheckedIcon, width: 22, height: 22),
                               );
                             }),
                           ],
@@ -126,15 +126,15 @@ class SelectCountryPage extends BaseStatelessPage<SelectCountryController> {
                       //越南的选项
                       Container(
                         width: double.infinity,
-                        margin: EdgeInsets.only(top: 13.5, left: 20, right: 20),
-                        padding: EdgeInsets.symmetric(vertical: 13, horizontal: 17),
+                        margin: const EdgeInsets.only(top: 13.5, left: 20, right: 20),
+                        padding: const EdgeInsets.symmetric(vertical: 13, horizontal: 17),
                         decoration: BoxDecoration(
-                          color: Color(0xFF4DCFF6).withOpacity(0.2), // 设置背景颜色和不透明度
+                          color: const Color(0xFF4DCFF6).withOpacity(0.2), // 设置背景颜色和不透明度
                           borderRadius: BorderRadius.circular(5.0), // 设置圆角
                         ),
                         child: Row(
                           children: [
-                            MyAssetImage(Assets.cptAuthVnIcon, width: 50, height: 33),
+                            const MyAssetImage(Assets.cptAuthVnIcon, width: 50, height: 33),
                             MyTextView(
                               "Vietnam".tr,
                               marginLeft: 17,
@@ -145,7 +145,7 @@ class SelectCountryPage extends BaseStatelessPage<SelectCountryController> {
                             Obx(() {
                               return Visibility(
                                 visible: ConfigService.to.curSelectCountry.value == 0,
-                                child: MyAssetImage(Assets.cptAuthCheckedIcon, width: 22, height: 22),
+                                child: const MyAssetImage(Assets.cptAuthCheckedIcon, width: 22, height: 22),
                               );
                             }),
                           ],
@@ -171,7 +171,7 @@ class SelectCountryPage extends BaseStatelessPage<SelectCountryController> {
                             backgroundColor: hexToColor("#FFBB1B"),
                             fontWeight: FontWeight.w500,
                           ),
-                          Positioned(
+                          const Positioned(
                             right: 28,
                             top: 0,
                             bottom: 0,

+ 37 - 15
packages/cpt_report/lib/modules/report_staff_request/report_staff_request_controller.dart

@@ -1,8 +1,10 @@
 import 'package:domain/entity/response/staff_request_report_entity.dart';
 import 'package:domain/repository/other_repository.dart';
 import 'package:get/get.dart';
+import 'package:plugin_basic/service/app_config_service.dart';
 import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
 import 'package:shared/utils/date_time_utils.dart';
+import 'package:shared/utils/log_utils.dart';
 import 'package:widgets/load_state_layout.dart';
 import 'package:widgets/picker/date_picker_util.dart';
 
@@ -31,20 +33,41 @@ class ReportStaffRequestController extends GetxController with DioCancelableMixi
   void fetchReportData() async {
     changeLoadingState(LoadState.State_Loading);
 
-    var result = await _otherRepository.fetchReportStaffRequest(
-      DateTimeUtils.formatDate(state.startDateTime, format: "yyyy-MM-dd"),
-      DateTimeUtils.formatDate(state.endDateTime, format: "yyyy-MM-dd"),
-      cancelToken: cancelToken,
-    );
-
-    if (result.isSuccess) {
-      state.datas = result.list
-          ?.whereType<StaffRequestReportEntity>() // 直接过滤出非 null 的 StaffRequestReportEntity
-          .toList() ?? [];
-      changeLoadingState(LoadState.State_Success);
+    //根据不同的国家,调用不同的接口
+    if (ConfigService.to.curSelectCountry.value == 1) {
+      //如果是新加坡版本的
+      var result = await _otherRepository.fetchReportStaffRequest(
+        DateTimeUtils.formatDate(state.startDateTime, format: "yyyy-MM-dd"),
+        DateTimeUtils.formatDate(state.endDateTime, format: "yyyy-MM-dd"),
+        cancelToken: cancelToken,
+      );
+      if (result.isSuccess) {
+        state.datas = result.list
+                ?.whereType<StaffRequestReportEntity>() // 直接过滤出非 null 的 StaffRequestReportEntity
+                .toList() ??
+            [];
+        changeLoadingState(LoadState.State_Success);
+      } else {
+        errorMessage = result.errorMsg ?? "Network Load Error".tr;
+        changeLoadingState(LoadState.State_Error);
+      }
     } else {
-      errorMessage = result.errorMsg ?? "Network Load Error".tr;
-      changeLoadingState(LoadState.State_Error);
+      //如果是越南的版本
+      var result = await _otherRepository.fetchStaffReportVN(
+        DateTimeUtils.formatDate(state.startDateTime, format: "yyyy-MM-dd"),
+        DateTimeUtils.formatDate(state.endDateTime, format: "yyyy-MM-dd"),
+        cancelToken: cancelToken,
+      );
+      if (result.isSuccess) {
+        state.datas = result.data?.requestList
+                .whereType<StaffRequestReportEntity>() // 直接过滤出非 null 的 StaffRequestReportEntity
+                .toList() ??
+            [];
+        changeLoadingState(LoadState.State_Success);
+      } else {
+        errorMessage = result.errorMsg ?? "Network Load Error".tr;
+        changeLoadingState(LoadState.State_Error);
+      }
     }
   }
 
@@ -70,7 +93,7 @@ class ReportStaffRequestController extends GetxController with DioCancelableMixi
   /// 筛选结束日期
   void pickerEndDate() {
     DatePickerUtil.showCupertinoDatePicker(
-      selectedDateTime: state.endDateTime??state.startDateTime,
+      selectedDateTime: state.endDateTime ?? state.startDateTime,
       onDateTimeChanged: (date) {
         state.endDateTime = date;
         update();
@@ -79,5 +102,4 @@ class ReportStaffRequestController extends GetxController with DioCancelableMixi
       title: "End Date".tr,
     );
   }
-
 }

+ 3 - 0
packages/cpt_report/lib/modules/report_staff_request/report_staff_request_page.dart

@@ -17,6 +17,9 @@ import 'package:router/path/router_path.dart';
 import 'report_staff_request_item.dart';
 import 'report_staff_request_state.dart';
 
+/*
+ * 兼容新加坡与越南的展示,不同的国家调用不同的接口统一展示一样的样式
+ */
 class ReportStaffRequestPage extends BaseStatelessPage<ReportStaffRequestController> {
   ReportStaffRequestPage({Key? key}) : super(key: key);
 

+ 28 - 0
packages/cs_domain/lib/entity/response/staff_report_v_n_entity.dart

@@ -0,0 +1,28 @@
+import 'package:domain/entity/response/staff_request_report_entity.dart';
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/staff_report_v_n_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/staff_report_v_n_entity.g.dart';
+
+@JsonSerializable()
+class StaffReportVNEntity {
+	@JSONField(name: "start_date")
+	String? startDate;
+	@JSONField(name: "end_date")
+	String? endDate;
+	@JSONField(name: "request_list")
+	List<StaffRequestReportEntity> requestList = [];
+	@JSONField(name: "total_num")
+	int totalNum = 0;
+
+	StaffReportVNEntity();
+
+	factory StaffReportVNEntity.fromJson(Map<String, dynamic> json) => $StaffReportVNEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $StaffReportVNEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

+ 5 - 0
packages/cs_domain/lib/generated/json/base/json_convert_content.dart

@@ -48,6 +48,7 @@ import 'package:domain/entity/response/staff_detail_s_g_entity.dart';
 import 'package:domain/entity/response/staff_job_history_s_g_entity.dart';
 import 'package:domain/entity/response/staff_labour_history_entity.dart';
 import 'package:domain/entity/response/staff_remark_history_entity.dart';
+import 'package:domain/entity/response/staff_report_v_n_entity.dart';
 import 'package:domain/entity/response/staff_request_report_entity.dart';
 import 'package:domain/entity/response/staff_review_history_s_g_entity.dart';
 import 'package:domain/entity/server_time.dart';
@@ -481,6 +482,9 @@ class JsonConvert {
     if (<StaffRemarkHistoryRows>[] is M) {
       return data.map<StaffRemarkHistoryRows>((Map<String, dynamic> e) => StaffRemarkHistoryRows.fromJson(e)).toList() as M;
     }
+    if (<StaffReportVNEntity>[] is M) {
+      return data.map<StaffReportVNEntity>((Map<String, dynamic> e) => StaffReportVNEntity.fromJson(e)).toList() as M;
+    }
     if (<StaffRequestReportEntity>[] is M) {
       return data.map<StaffRequestReportEntity>((Map<String, dynamic> e) => StaffRequestReportEntity.fromJson(e)).toList() as M;
     }
@@ -614,6 +618,7 @@ class JsonConvertClassCollection {
     (StaffLabourHistoryRowsWorkOut).toString(): StaffLabourHistoryRowsWorkOut.fromJson,
     (StaffRemarkHistoryEntity).toString(): StaffRemarkHistoryEntity.fromJson,
     (StaffRemarkHistoryRows).toString(): StaffRemarkHistoryRows.fromJson,
+    (StaffReportVNEntity).toString(): StaffReportVNEntity.fromJson,
     (StaffRequestReportEntity).toString(): StaffRequestReportEntity.fromJson,
     (StaffReviewHistorySGEntity).toString(): StaffReviewHistorySGEntity.fromJson,
     (StaffReviewHistorySGReviews).toString(): StaffReviewHistorySGReviews.fromJson,

+ 50 - 0
packages/cs_domain/lib/generated/json/staff_report_v_n_entity.g.dart

@@ -0,0 +1,50 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/staff_report_v_n_entity.dart';
+import 'package:domain/entity/response/staff_request_report_entity.dart';
+
+
+StaffReportVNEntity $StaffReportVNEntityFromJson(Map<String, dynamic> json) {
+  final StaffReportVNEntity staffReportVNEntity = StaffReportVNEntity();
+  final String? startDate = jsonConvert.convert<String>(json['start_date']);
+  if (startDate != null) {
+    staffReportVNEntity.startDate = startDate;
+  }
+  final String? endDate = jsonConvert.convert<String>(json['end_date']);
+  if (endDate != null) {
+    staffReportVNEntity.endDate = endDate;
+  }
+  final List<StaffRequestReportEntity>? requestList = (json['request_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<StaffRequestReportEntity>(e) as StaffRequestReportEntity).toList();
+  if (requestList != null) {
+    staffReportVNEntity.requestList = requestList;
+  }
+  final int? totalNum = jsonConvert.convert<int>(json['total_num']);
+  if (totalNum != null) {
+    staffReportVNEntity.totalNum = totalNum;
+  }
+  return staffReportVNEntity;
+}
+
+Map<String, dynamic> $StaffReportVNEntityToJson(StaffReportVNEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['start_date'] = entity.startDate;
+  data['end_date'] = entity.endDate;
+  data['request_list'] = entity.requestList.map((v) => v.toJson()).toList();
+  data['total_num'] = entity.totalNum;
+  return data;
+}
+
+extension StaffReportVNEntityExtension on StaffReportVNEntity {
+  StaffReportVNEntity copyWith({
+    String? startDate,
+    String? endDate,
+    List<StaffRequestReportEntity>? requestList,
+    int? totalNum,
+  }) {
+    return StaffReportVNEntity()
+      ..startDate = startDate ?? this.startDate
+      ..endDate = endDate ?? this.endDate
+      ..requestList = requestList ?? this.requestList
+      ..totalNum = totalNum ?? this.totalNum;
+  }
+}

+ 1 - 1
packages/cs_domain/lib/repository/labour_sg_repository.dart

@@ -34,7 +34,7 @@ class LabourSGRepository extends GetxService {
     params["cur_page"] = curPage.toString();
     params["page_size"] = "10";
 
-    if (!Utils.isEmpty(keyword)) {
+    if (Utils.isNotEmpty(keyword)) {
       params["keyword"] = keyword!;
     }
 

+ 40 - 6
packages/cs_domain/lib/repository/other_repository.dart

@@ -6,9 +6,11 @@ import 'package:get/get.dart';
 import 'package:plugin_platform/dio_export.dart';
 import 'package:plugin_platform/http/http_provider.dart';
 import 'package:plugin_platform/http/http_result.dart';
+import 'package:shared/utils/log_utils.dart';
 import 'package:shared/utils/util.dart';
 
 import '../constants/api_constants.dart';
+import '../entity/response/staff_report_v_n_entity.dart';
 
 /// 报表与其他的相关数据
 class OtherRepository extends GetxService {
@@ -51,10 +53,10 @@ class OtherRepository extends GetxService {
   }) async {
     //参数
     Map<String, String> params = {};
-    if (Utils.isEmpty(startDate)) {
+    if (Utils.isNotEmpty(startDate)) {
       params["start_date"] = startDate!;
     }
-    if (Utils.isEmpty(endDate)) {
+    if (Utils.isNotEmpty(endDate)) {
       params["end_date"] = endDate!;
     }
 
@@ -83,10 +85,10 @@ class OtherRepository extends GetxService {
   }) async {
     //参数
     Map<String, String> params = {};
-    if (Utils.isEmpty(startDate)) {
+    if (Utils.isNotEmpty(startDate)) {
       params["start_date"] = startDate!;
     }
-    if (Utils.isEmpty(endDate)) {
+    if (Utils.isNotEmpty(endDate)) {
       params["end_date"] = endDate!;
     }
 
@@ -115,10 +117,10 @@ class OtherRepository extends GetxService {
   }) async {
     //参数
     Map<String, String> params = {};
-    if (Utils.isEmpty(startDate)) {
+    if (Utils.isNotEmpty(startDate)) {
       params["start_date"] = startDate!;
     }
-    if (Utils.isEmpty(endDate)) {
+    if (Utils.isNotEmpty(endDate)) {
       params["end_date"] = endDate!;
     }
 
@@ -146,4 +148,36 @@ class OtherRepository extends GetxService {
 
   }
 
+  /// 越南的员工报表
+  Future<HttpResult<StaffReportVNEntity>> fetchStaffReportVN(
+      String? startDate,
+      String? endDate, {
+        CancelToken? cancelToken,
+      }) async {
+    //参数
+    Map<String, String> params = {};
+    if (Utils.isNotEmpty(startDate)) {
+      params["start_date"] = startDate!;
+    }
+    if (Utils.isNotEmpty(endDate)) {
+      params["end_date"] = endDate!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiReportStaffRequest,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = StaffReportVNEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<StaffReportVNEntity>(data: data);
+    }
+    return result.convert();
+  }
+
 }

+ 1 - 1
packages/cs_plugin_basic/lib/constants/app_constant.dart

@@ -7,7 +7,7 @@ class AppConstant {
   /// App运行在Release环境时,inProduction为true;当App运行在Debug和Profile环境时,inProduction为false
   static const bool inProduction = kReleaseMode; //本地打包的编译环境是 Debug 还是 Release (自动生成,不需手动修改)
 
-  static int selectCountry = 0;  //当前选中的国家,默认越南   0越南  1新加坡  2马来西亚
+  static int selectCountry = 0;  //(没用到)当前选中的国家,默认越南  0越南  1新加坡  2马来西亚
 
   static const String theme = 'AppTheme';
   static const String locale = 'locale';