Pārlūkot izejas kodu

泰国revise的相关接口与页面

liukai 1 mēnesi atpakaļ
vecāks
revīzija
b9dc58dd6e
32 mainītis faili ar 3674 papildinājumiem un 282 dzēšanām
  1. 6 0
      packages/cpt_th/lib/modules/job_er/applied_er/applied_er_controller.dart
  2. 22 1
      packages/cpt_th/lib/modules/job_er/applied_er/applied_er_item.dart
  3. 3 0
      packages/cpt_th/lib/modules/job_er/applied_er/applied_er_page.dart
  4. 84 0
      packages/cpt_th/lib/modules/job_er/revise_edit_er/revise_er_edit_controller.dart
  5. 555 0
      packages/cpt_th/lib/modules/job_er/revise_edit_er/revise_er_edit_page.dart
  6. 31 0
      packages/cpt_th/lib/modules/job_er/revise_edit_er/revise_er_edit_state.dart
  7. 279 0
      packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_controller.dart
  8. 323 0
      packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_item.dart
  9. 157 0
      packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_page.dart
  10. 13 0
      packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_state.dart
  11. 98 0
      packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_controller.dart
  12. 132 0
      packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_item.dart
  13. 102 0
      packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_page.dart
  14. 10 0
      packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_state.dart
  15. 22 0
      packages/cpt_th/lib/router/th_router.dart
  16. 28 1
      packages/cs_domain/lib/constants/api_constants.dart
  17. 22 0
      packages/cs_domain/lib/entity/response/revise_option_entity.dart
  18. 47 0
      packages/cs_domain/lib/entity/response/t_h_revise_detail_entity.dart
  19. 60 0
      packages/cs_domain/lib/entity/response/t_h_revise_table_entity.dart
  20. 277 0
      packages/cs_domain/lib/entity/response/t_h_revise_workflow_entity.dart
  21. 95 221
      packages/cs_domain/lib/generated/json/base/json_convert_content.dart
  22. 29 0
      packages/cs_domain/lib/generated/json/revise_option_entity.g.dart
  23. 117 0
      packages/cs_domain/lib/generated/json/t_h_revise_detail_entity.g.dart
  24. 143 0
      packages/cs_domain/lib/generated/json/t_h_revise_table_entity.g.dart
  25. 766 0
      packages/cs_domain/lib/generated/json/t_h_revise_workflow_entity.g.dart
  26. 4 10
      packages/cs_domain/lib/generated/json/uk_labour_request_detail_entity.g.dart
  27. 7 16
      packages/cs_domain/lib/generated/json/uk_labour_request_preselect_addstaff_list_entity.g.dart
  28. 5 12
      packages/cs_domain/lib/generated/json/uk_template_detail_entity.g.dart
  29. 5 12
      packages/cs_domain/lib/generated/json/uk_template_detail_index_entity.g.dart
  30. 4 9
      packages/cs_domain/lib/generated/json/uk_template_table_entity.g.dart
  31. 225 0
      packages/cs_domain/lib/repository/th_er_repository.dart
  32. 3 0
      packages/cs_router/lib/path/router_path.dart

+ 6 - 0
packages/cpt_th/lib/modules/job_er/applied_er/applied_er_controller.dart

@@ -18,6 +18,7 @@ import 'package:widgets/picker/option_pick_util.dart';
 import 'package:widgets/widget_export.dart';
 import '../applied_er_staff_detail/applied_er_staff_detail_page.dart';
 import '../applied_er_workflow/applied_er_workflow_page.dart';
+import '../revise_list_er/revise_list_er_page.dart';
 import 'applied_er_state.dart';
 import 'widget/er_applied_add_staff.dart';
 import 'widget/er_applied_butch_modify.dart';
@@ -283,6 +284,11 @@ class AppliedErController extends GetxController with DioCancelableMixin {
     AppliedErStaffDetailPage.startInstance(data.memberId);
   }
 
+  //去Revise的记录列表
+  void gotoRevisePage(THAppliedTableRows data) {
+    ReviseListErPage.startInstance(data.id, data.jobTitle, data.jobDate);
+  }
+
   /// Item选中与未选中设置
   void doSelectedOrNot(THAppliedTableRows data) {
     //只有 Approve = 3 的状态才能选中

+ 22 - 1
packages/cpt_th/lib/modules/job_er/applied_er/applied_er_item.dart

@@ -23,6 +23,7 @@ class AppliedErItem extends StatelessWidget {
   final THAppliedTableRows item;
   final VoidCallback? onStatusAction;
   final VoidCallback? onEditAction;
+  final VoidCallback? onReviseAction;
   final VoidCallback? onRemarkAction;
   final VoidCallback? onItemAction;
   final VoidCallback? onMemberAction;
@@ -32,6 +33,7 @@ class AppliedErItem extends StatelessWidget {
     required this.item,
     required this.jobInfo,
     this.onStatusAction,
+    this.onReviseAction,
     this.onRemarkAction,
     this.onEditAction,
     this.onItemAction,
@@ -406,7 +408,7 @@ class AppliedErItem extends StatelessWidget {
               children: [
                 //编辑按钮
                 Visibility(
-                  visible: true,
+                  visible: item.statusShow != "Completed",
                   child: MyButton(
                     onPressed: () {
                       FocusScope.of(context).unfocus();
@@ -423,6 +425,25 @@ class AppliedErItem extends StatelessWidget {
                   ).marginOnly(left: 12),
                 ),
 
+                //Revise按钮
+                Visibility(
+                  visible: item.statusShow == "Completed",
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onReviseAction?.call();
+                    },
+                    text: "Revise".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor(
+                      "#FFBB1B",
+                    ),
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 35,
+                  ).marginOnly(left: 12),
+                ),
+
                 //状态工作流按钮
                 Visibility(
                   visible: true,

+ 3 - 0
packages/cpt_th/lib/modules/job_er/applied_er/applied_er_page.dart

@@ -200,6 +200,9 @@ class _JobAppliedState extends BaseState<AppliedErPage, AppliedErController> {
                           onMemberAction: () {
                             controller.gotoStaffDetailPage(state.datas[index]);
                           },
+                          onReviseAction: () {
+                            controller.gotoRevisePage(state.datas[index]);
+                          },
                         );
                       },
                       childCount: state.datas.length,

+ 84 - 0
packages/cpt_th/lib/modules/job_er/revise_edit_er/revise_er_edit_controller.dart

@@ -0,0 +1,84 @@
+import 'package:domain/repository/th_er_repository.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:get/get.dart';
+import 'package:plugin_platform/engine/notify/notify_engine.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
+import 'package:plugin_platform/http/http_result.dart';
+import 'package:shared/utils/event_bus.dart';
+import 'package:shared/utils/util.dart';
+import 'revise_er_edit_state.dart';
+
+class ReviseErEditController extends GetxController with DioCancelableMixin {
+  final THERRepository _erRepository = Get.find();
+  final ReviseErEditState state = ReviseErEditState();
+
+  // 获取编辑的详情
+  void fetchAppliedEditView() async {
+    final httpResult = Utils.isNotEmpty(state.reviseId)
+        ? _erRepository.fetchERReviseEditDetail(reviseId: state.reviseId ?? "", cancelToken: cancelToken)
+        : _erRepository.fetchERReviseAddDetail(appliedId: state.appliedId ?? "", cancelToken: cancelToken);
+
+    final result = await httpResult;
+
+    if (result.isSuccess) {
+      state.detailEntity = result.data;
+
+      if (Utils.isNotEmpty(state.detailEntity?.reviseHours)) {
+        var reviseHourController = state.formData['revise_hours']!['controller'];
+        reviseHourController.text = state.detailEntity?.reviseHours;
+      }
+      if (Utils.isNotEmpty(state.detailEntity?.reviseMsg)) {
+        var reasonController = state.formData['reason']!['controller'];
+        reasonController.text = state.detailEntity?.reviseMsg;
+      }
+
+      update();
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+      return;
+    }
+  }
+
+  @override
+  void onReady() {
+    super.onReady();
+    fetchAppliedEditView();
+  }
+
+  /// 提交修改
+  void doSubmit() async {
+    if (state.detailEntity == null) return;
+
+    //输入框的数据赋值
+    TextEditingController reviseHourController = state.formData['revise_hours']!['controller'];
+    TextEditingController reasonController = state.formData['reason']!['controller'];
+
+    String? reviseHours = reviseHourController.text;
+    String? reason = reasonController.text;
+
+    final Future<HttpResult> httpResult;
+    if (Utils.isNotEmpty(state.reviseId)) {
+      httpResult = _erRepository.submitReviseEdit(reviseId: state.reviseId ?? "", reviseHours: reviseHours, reviseMsg: reason);
+    } else {
+      httpResult = _erRepository.submitReviseAdd(appliedId: state.appliedId ?? "", reviseHours: reviseHours, reviseMsg: reason);
+    }
+
+    final result = await httpResult;
+
+    if (result.isSuccess) {
+      NotifyEngine.showSuccess("Successful".tr);
+
+      if (Utils.isNotEmpty(state.reviseId)) {
+        state.cb?.call(state.reviseId);
+      } else {
+        state.cb?.call(null);
+      }
+
+      Get.back();
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+      return;
+    }
+  }
+}

+ 555 - 0
packages/cpt_th/lib/modules/job_er/revise_edit_er/revise_er_edit_page.dart

@@ -0,0 +1,555 @@
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:cs_resources/generated/assets.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:get/get.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/no_shadow_scroll_behavior.dart';
+import 'package:widgets/shatter/custom_radio_check.dart';
+import 'package:widgets/shatter/form_require_text.dart';
+import 'package:widgets/shatter/round_my_text_field.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'revise_er_edit_controller.dart';
+
+import 'package:plugin_basic/base/base_state.dart';
+import 'package:plugin_basic/base/base_stateful_page.dart';
+import 'package:plugin_basic/utils/ext_get_nav.dart';
+import 'package:router/path/router_path.dart';
+import 'package:shared/utils/screen_util.dart';
+import 'package:widgets/my_appbar.dart';
+
+import 'revise_er_edit_state.dart';
+
+/*
+ * 添加或者编辑 Revise 数据
+ */
+class ReviseErEditPage extends BaseStatefulPage<ReviseErEditController> {
+  ReviseErEditPage({Key? key}) : super(key: key);
+
+  //启动当前页面  0是新增  1是编辑  2是详情
+  static void startInstance(
+    String? appliedId,
+    String? reviseId,
+    int type,
+    void Function(dynamic value)? cb,
+  ) {
+    return Get.start(RouterPath.THReviseEditER, arguments: {"appliedId": appliedId, "reviseId": reviseId, "type": type, "cb": cb});
+  }
+
+  @override
+  ReviseErEditController createRawController() {
+    return ReviseErEditController();
+  }
+
+  @override
+  State<ReviseErEditPage> createState() => _ReviseEditState();
+}
+
+class _ReviseEditState extends BaseState<ReviseErEditPage, ReviseErEditController> {
+  late ReviseErEditState state;
+  int type = 0;
+
+  @override
+  void initState() {
+    super.initState();
+    state = controller.state;
+    state.appliedId = Get.arguments['appliedId'];
+    state.reviseId = Get.arguments['reviseId'];
+    type = Get.arguments['type'];
+    state.cb = Get.arguments['cb'] as void Function(dynamic)?;
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return autoCtlGetBuilder(builder: (controller) {
+      return Scaffold(
+        extendBodyBehindAppBar: true,
+        appBar: MyAppBar.appBar(context, "Edit".tr),
+        body: SafeArea(
+          bottom: MediaQuery.of(context).padding.bottom > 38,
+          top: false,
+          child: Container(
+            width: double.infinity,
+            height: double.infinity,
+            padding: EdgeInsets.only(top: kToolbarHeight + ScreenUtil.getStatusBarH(context) + 1),
+            decoration: const BoxDecoration(
+              gradient: LinearGradient(
+                colors: [
+                  Color(0xFF091D44),
+                  Color(0xFF245A8A),
+                  Color(0xFF7F7CEC),
+                ],
+                begin: Alignment.topCenter,
+                end: Alignment.bottomCenter,
+              ),
+            ),
+            child: Scrollbar(
+              child: ScrollConfiguration(
+                behavior: NoShadowScrollBehavior(),
+                child: SingleChildScrollView(
+                  scrollDirection: Axis.vertical,
+                  physics: const BouncingScrollPhysics(),
+                  child: Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      MyTextView(
+                        "Job Date".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //工作时间
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.jobDate ?? "-",
+                              fontSize: 15,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                          ],
+                        ),
+                      ),
+
+                      //工作标题,选择模板
+                      MyTextView(
+                        "Staff Name".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //文本
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.labourerName ?? "-",
+                              fontSize: 15,
+                              hint: "Choose Job Title".tr,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                          ],
+                        ),
+                      ),
+
+                      //开始时间
+                      FormRequireText(
+                        text: "Start Time".tr,
+                      ).marginOnly(top: 15),
+
+                      //选择时间
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.startTime ?? "-",
+                              fontSize: 14,
+                              hint: "Job Start Time".tr,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                            //下拉选图标
+                            const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                          ],
+                        ),
+                      ),
+
+                      //门卫签到时间
+                      MyTextView(
+                        "Security In".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //门卫签到时间
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.securityIn ?? "-",
+                              fontSize: 14,
+                              hint: "Security In".tr,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                            //下拉选图标
+                            const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                          ],
+                        ),
+                      ),
+
+                      //工作地签到时间
+                      MyTextView(
+                        "Work In".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //工作地签到时间
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.workIn ?? "-",
+                              fontSize: 14,
+                              hint: "Work In".tr,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                            //下拉选图标
+                            const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                          ],
+                        ),
+                      ),
+
+                      //结束时间
+                      FormRequireText(
+                        text: "End Time".tr,
+                      ).marginOnly(top: 15),
+
+                      //结束时间
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.endTime ?? "-",
+                              fontSize: 14,
+                              hint: "Job End Time".tr,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+
+                            //下拉选图标
+                            const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                          ],
+                        ),
+                      ),
+
+                      //门卫签出时间
+                      MyTextView(
+                        "Security Out".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //门卫签出时间
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.securityOut ?? "-",
+                              fontSize: 14,
+                              hint: "Security Out".tr,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                            //下拉选图标
+                            const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                          ],
+                        ),
+                      ),
+
+                      //工作地签出时间
+                      MyTextView(
+                        "Work Out".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //工作地签出时间
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.workOut ?? "-",
+                              fontSize: 14,
+                              hint: "Work Out".tr,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                            //下拉选图标
+                            const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                          ],
+                        ),
+                      ),
+
+                      // + - 小时
+                      MyTextView(
+                        "+/- Hours".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //文本
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.adjustHours ?? "-",
+                              fontSize: 15,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                          ],
+                        ),
+                      ),
+
+                      // 总小时
+                      MyTextView(
+                        "Total Hours".tr,
+                        textColor: Colors.white,
+                        fontSize: 15,
+                        marginTop: 15,
+                        isFontRegular: true,
+                      ),
+
+                      //文本
+                      Container(
+                        padding: const EdgeInsets.only(left: 16, right: 10),
+                        margin: const EdgeInsets.only(top: 10),
+                        height: 45,
+                        decoration: BoxDecoration(
+                          color: const Color(0xFF4DCFF6).withOpacity(0.5),
+                          borderRadius: const BorderRadius.all(Radius.circular(5)),
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          children: [
+                            MyTextView(
+                              state.detailEntity?.totalHours ?? "-",
+                              fontSize: 15,
+                              textHintColor: ColorConstants.textGrayAECAE5,
+                              isFontMedium: true,
+                              textColor: ColorConstants.white,
+                            ).expanded(),
+                          ],
+                        ),
+                      ),
+
+                      // 修改的小时
+                      FormRequireText(
+                        text: "Revise Hours".tr,
+                        fontSize: 15,
+                        fontWeight: FontWeight.w400,
+                        isRequired: true,
+                      ).marginOnly(top: 15),
+
+                      //+ - 小时输入框
+                      CustomTextField(
+                        formKey: "revise_hours",
+                        marginLeft: 0,
+                        marginRight: 0,
+                        paddingTop: 0,
+                        paddingBottom: 0,
+                        height: 45,
+                        fillBackgroundColor: const Color(0xFF4DCFF6).withOpacity(type != 2 ? 0.2 : 0.5),
+                        enabled: type != 2,
+                        textInputType: const TextInputType.numberWithOptions(decimal: true, signed: false),
+                        formData: state.formData,
+                        textInputAction: TextInputAction.done,
+                        onSubmit: (key, value) {
+                          FocusScope.of(context).unfocus();
+                        },
+                        marginTop: 10,
+                      ),
+
+                      // 修改的理由
+                      FormRequireText(
+                        text: "Reason".tr,
+                        fontSize: 15,
+                        fontWeight: FontWeight.w400,
+                        isRequired: true,
+                      ).marginOnly(top: 15, bottom: 10),
+
+                      IgnoreKeyboardDismiss(
+                        child: Container(
+                          height: 130,
+                          padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15),
+                          decoration: BoxDecoration(
+                            color: const Color(0xFF4DCFF6).withOpacity(type != 2 ? 0.2 : 0.5),
+                            borderRadius: const BorderRadius.all(Radius.circular(5)),
+                          ),
+                          child: TextField(
+                            cursorColor: ColorConstants.white,
+                            cursorWidth: 1.5,
+                            autofocus: false,
+                            controller: state.formData["reason"]!['controller'],
+                            focusNode: state.formData["reason"]!['focusNode'],
+                            obscureText: state.formData["reason"]!['obsecure'],
+                            // 装饰
+                            decoration: InputDecoration(
+                              isDense: true,
+                              isCollapsed: true,
+                              enabled: type != 2,
+                              border: InputBorder.none,
+                              hintText: state.formData["reason"]!['hintText'],
+                              hintStyle: const TextStyle(
+                                color: ColorConstants.white,
+                                fontSize: 15.0,
+                                fontWeight: FontWeight.w400,
+                              ),
+                            ),
+                            style: const TextStyle(
+                              color: ColorConstants.white,
+                              fontSize: 15.0,
+                              fontWeight: FontWeight.w400,
+                            ),
+                            // 键盘动作右下角图标
+                            textInputAction: TextInputAction.done,
+                            onSubmitted: (value) {
+                              FocusScope.of(context).unfocus();
+                            },
+                          ),
+                        ),
+                      ),
+
+                      //提交按钮
+                      Visibility(
+                          visible: type != 2,
+                          child: MyButton(
+                            type: ClickType.throttle,
+                            milliseconds: 500,
+                            onPressed: () {
+                              FocusScope.of(context).unfocus();
+                              controller.doSubmit();
+                            },
+                            text: "Submit".tr,
+                            textColor: ColorConstants.white,
+                            fontSize: 16,
+                            radius: 22.5,
+                            backgroundColor: hexToColor("#FFBB1B"),
+                            fontWeight: FontWeight.w500,
+                          )).marginSymmetric(horizontal: 0, vertical: 30),
+                    ],
+                  ).paddingOnly(left: 15, right: 15),
+                ),
+              ),
+            ),
+          ),
+        ),
+      );
+    });
+  }
+}

+ 31 - 0
packages/cpt_th/lib/modules/job_er/revise_edit_er/revise_er_edit_state.dart

@@ -0,0 +1,31 @@
+import 'package:domain/entity/response/t_h_revise_detail_entity.dart';
+import 'package:flutter/material.dart';
+import 'package:plugin_basic/basic_export.dart';
+
+class ReviseErEditState {
+  //表单的校验与数据
+  Map<String, Map<String, dynamic>> formData = {
+    'revise_hours': {
+      'value': '',
+      'controller': TextEditingController(),
+      'focusNode': FocusNode(),
+      'hintText': '0',
+      'obsecure': false,
+    },
+    'reason': {
+      'value': '',
+      'controller': TextEditingController(),
+      'focusNode': FocusNode(),
+      'hintText': 'Enter...'.tr,
+      'obsecure': false,
+    },
+  };
+
+  THReviseDetailEntity? detailEntity;
+
+  String? appliedId;
+  String? reviseId;
+  void Function(dynamic value)? cb;
+
+
+}

+ 279 - 0
packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_controller.dart

@@ -0,0 +1,279 @@
+import 'package:domain/entity/response/revise_option_entity.dart';
+import 'package:domain/entity/response/t_h_o_a_labour_table_entity.dart';
+import 'package:domain/entity/response/t_h_revise_table_entity.dart';
+import 'package:domain/repository/th_er_repository.dart';
+import 'package:plugin_platform/engine/notify/notify_engine.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:get/get.dart';
+import 'package:plugin_basic/constants/app_constant.dart';
+import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
+
+import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
+import 'package:plugin_platform/http/http_result.dart';
+import 'package:shared/utils/event_bus.dart';
+import 'package:shared/utils/util.dart';
+import 'package:widgets/dialog/app_default_dialog.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import '../revise_edit_er/revise_er_edit_page.dart';
+import '../revise_workflow_er/revise_er_workflow_page.dart';
+import 'revise_list_er_state.dart';
+
+class ReviseListErController extends GetxController with DioCancelableMixin {
+  final THERRepository _thRepository = Get.find();
+  final ReviseListErState state = ReviseListErState();
+
+  var _curPage = 1;
+  var _needShowPlaceholder = true;
+
+  //页面PlaceHolder的展示
+  LoadState loadingState = LoadState.State_Success;
+  String? errorMessage;
+
+  //刷新页面状态
+  void changeLoadingState(LoadState state) {
+    loadingState = state;
+    update();
+  }
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,
+    controlFinishLoad: true,
+  );
+
+  // Refresh 刷新事件
+  Future onRefresh() async {
+    _curPage = 1;
+    fetchLabourRequestList();
+  }
+
+  // Refresh 加载事件
+  Future loadMore() async {
+    _curPage++;
+    fetchLabourRequestList();
+  }
+
+  // 重试请求
+  Future retryRequest() async {
+    _curPage = 1;
+    _needShowPlaceholder = true;
+    fetchLabourRequestList();
+  }
+
+  /// 获取列表数据
+  Future fetchLabourRequestList() async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading);
+    }
+
+    // 并发执行两个请求
+    var futures = [
+      _thRepository.fetchERReviseTable(
+        appliedId: state.appliedId,
+        curPage: _curPage,
+        cancelToken: cancelToken,
+      ),
+      state.indexOptions == null
+          ? _thRepository.fetchERReviseOption(
+              cancelToken: cancelToken,
+            )
+          : Future(() => HttpResult(isSuccess: true).convert(data: state.indexOptions!)),
+    ];
+
+    //拿到结果
+    var results = await Future.wait(futures);
+    var listResult = results[0] as HttpResult<THReviseTableEntity>;
+    var optionResult = results[1] as HttpResult<ReviseOptionEntity>;
+
+    //选项数据
+    if (state.indexOptions == null && optionResult.isSuccess) {
+      state.indexOptions = optionResult.data!;
+    }
+
+    // 处理数据
+    if (listResult.isSuccess) {
+      handleList(listResult.data?.rows);
+    } else {
+      errorMessage = listResult.errorMsg;
+      changeLoadingState(LoadState.State_Error);
+    }
+
+    // 最后赋值
+    _needShowPlaceholder = false;
+  }
+
+  // 处理数据与展示的逻辑
+  void handleList(List<THReviseTableRows>? list) {
+    if (list != null && list.isNotEmpty) {
+      //有数据,判断是刷新还是加载更多的数据
+      if (_curPage == 1) {
+        //刷新的方式
+        state.datas.clear();
+        state.datas.addAll(list);
+        refreshController.finishRefresh();
+
+        //更新展示的状态
+        changeLoadingState(LoadState.State_Success);
+      } else {
+        //加载更多
+        state.datas.addAll(list);
+        refreshController.finishLoad();
+        update();
+      }
+    } else {
+      if (_curPage == 1) {
+        //展示无数据的布局
+        state.datas.clear();
+        changeLoadingState(LoadState.State_Empty);
+        refreshController.finishRefresh();
+      } else {
+        //展示加载完成,没有更多数据了
+        refreshController.finishLoad(IndicatorResult.noMore);
+      }
+    }
+  }
+
+  /// 执行Recall请求
+  void requestRecall(String reviseId) async {
+    var recallResult = await _thRepository.reviseRecall(
+      reviseId: reviseId,
+      cancelToken: cancelToken,
+    );
+
+    //处理数据
+    if (recallResult.isSuccess) {
+      NotifyEngine.showSuccess("Successful".tr);
+      fetchItemByIdAndRefreshItem(reviseId);
+    } else {
+      ToastEngine.show(recallResult.errorMsg ?? "Network Load Error".tr);
+    }
+  }
+
+  //执行删除操作
+  void doDeleteAction(String requestId, int index) {
+    DialogEngine.show(
+        widget: AppDefaultDialog(
+      title: "Confirmation".tr,
+      message: "Are you sure you want to delete this job?".tr,
+      confirmAction: () {
+        _requestDeactivate(requestId, index);
+      },
+    ));
+  }
+
+  // 请求接口删除Job
+  void _requestDeactivate(String reviseId, int index) async {
+    var result = await _thRepository.reviseDelete(reviseId: reviseId, cancelToken: cancelToken);
+
+    if (result.isSuccess) {
+      NotifyEngine.showSuccess("Successful".tr);
+
+      if (state.datas.length <= 1) {
+        refreshController.callRefresh();
+      } else {
+        state.datas.removeAt(index);
+        update();
+      }
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+    }
+  }
+
+  /// 根据ID获取Item对象,用于刷新
+  void fetchItemByIdAndRefreshItem(String reviseId) async {
+    var result = await _thRepository.fetchERReviseTable(
+      reviseId: reviseId,
+      curPage: 1,
+      cancelToken: cancelToken,
+    );
+
+    //处理数据
+    if (result.isSuccess) {
+      var data = result.data;
+      if (data != null && data.rows.isNotEmpty) {
+        final requestItem = data.rows[0];
+
+        //找到当前数据中的此 requestId,并替换对象,再刷新
+        var index = state.datas.indexWhere((element) => element.reviseId == requestItem.reviseId);
+        if (index >= 0) {
+          state.datas[index] = requestItem;
+          update();
+        }
+      }
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+    }
+  }
+
+  @override
+  void onReady() {
+    super.onReady();
+    fetchLabourRequestList();
+
+    registerEventBus();
+  }
+
+  @override
+  void onClose() {
+    unregisterEventBus();
+    state.datas.clear();
+    super.onClose();
+  }
+
+  // EventBus 的事件接收
+  Subscription? subscribe;
+
+  void registerEventBus() {
+    subscribe = bus.on(AppConstant.eventLabourRequestRefresh, (arg) {
+      var requestId = arg as String;
+      if (Utils.isNotEmpty(requestId)) {
+        fetchItemByIdAndRefreshItem(requestId);
+      } else {
+        refreshController.callRefresh();
+      }
+    });
+  }
+
+  void unregisterEventBus() {
+    bus.off(AppConstant.eventLabourRequestRefresh, subscribe);
+  }
+
+  //跳转到添加页面
+  void gotoAddPage() {
+    ReviseErEditPage.startInstance(state.appliedId, "", 0, (result) {
+      refreshController.callRefresh();
+    });
+  }
+
+  //去编辑页面
+  void gotoEditPage(THReviseTableRows data) {
+    ReviseErEditPage.startInstance("", data.reviseId, 1, (result) {
+      if (result != null && result is String) {
+        fetchItemByIdAndRefreshItem(result);
+      }
+    });
+  }
+
+  //去详情页面
+  void gotoDetailPage(THReviseTableRows data) {
+    ReviseErEditPage.startInstance("", data.reviseId, 2, null);
+  }
+
+  //去状态工作流的页面
+  void gotoWorkflowPage(THReviseTableRows data) {
+    ReviseErWorkflowPage.startInstance(data.reviseId);
+  }
+
+  void doRecall(THReviseTableRows data) {
+    DialogEngine.show(
+        widget: AppDefaultDialog(
+      title: "Message".tr,
+      message: "Are you sure you want to recall?".tr,
+      confirmAction: () {
+        requestRecall(data.reviseId.toString());
+      },
+    ));
+  }
+}

+ 323 - 0
packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_item.dart

@@ -0,0 +1,323 @@
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:domain/entity/response/t_h_o_a_labour_review_table_entity.dart';
+import 'package:domain/entity/response/t_h_o_a_labour_table_entity.dart';
+import 'package:domain/entity/response/t_h_revise_table_entity.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/widgets.dart';
+import 'package:plugin_basic/basic_export.dart';
+import 'package:shared/utils/util.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/widget_export.dart';
+
+/*
+ * 用工请求的主页面列表Item
+ */
+class ReviseListErItem extends StatelessWidget {
+  final int index;
+  final THReviseTableRows item;
+  final VoidCallback? onStatusAction;
+  final VoidCallback? onRecallAction;
+  final VoidCallback? onDetailAction;
+  final VoidCallback? onEditAction;
+  final VoidCallback? onDeleteAction;
+
+  ReviseListErItem({
+    required this.index,
+    required this.item,
+    this.onStatusAction,
+    this.onRecallAction,
+    this.onDetailAction,
+    this.onEditAction,
+    this.onDeleteAction,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 21),
+      margin: const EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5),
+      decoration: BoxDecoration(
+        color: const Color(0xFF4DCFF6).withOpacity(0.2), // 设置背景颜色和不透明度
+        borderRadius: BorderRadius.circular(5), // 设置圆角
+      ),
+      child: Column(
+        mainAxisSize: MainAxisSize.max,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          // 部门
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Name:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //名字
+              MyTextView(
+                item.name ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 6),
+
+          // 身份证
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "${"ID Card No.".tr}:",
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                item.nric ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 6),
+
+          // 工作日期
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "${"Job Time".tr}:",
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                item.jobTime ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 6),
+
+          // 修改小时
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "${"+/- Hours".tr}:",
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                item.adjustHours ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 6),
+
+          // 总小时
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "${"Total Hours".tr}:",
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                item.totalHours ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 6),
+
+          // 修改小时
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "${"Revise Hours".tr}:",
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                item.reviseHours ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 6),
+
+          // 状态
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Status:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                item.statusShow == null ? "" : item.statusShow!.tr,
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: "Completed" == item.statusShow
+                    ? ColorConstants.textGreen05DC82
+                    : "Cancelled" == item.statusShow || "Rejected" == item.statusShow
+                        ? ColorConstants.textRedFF6262
+                        : "Revised" == item.statusShow || "Pending" == item.statusShow
+                            ? ColorConstants.textYellowFFBB1B
+                            : "Approved" == item.statusShow
+                                ? ColorConstants.textYellowFFF600
+                                : ColorConstants.textBlue06D9FF,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ),
+
+          //按钮组
+          Visibility(
+            visible: item.actionList != null && item.actionList!.isNotEmpty,
+            child: Row(
+              mainAxisSize: MainAxisSize.max,
+              mainAxisAlignment: MainAxisAlignment.end,
+              crossAxisAlignment: CrossAxisAlignment.center,
+              children: [
+
+                //Recall按钮
+                Visibility(
+                  visible:item.actionList!.contains("recall"),
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onRecallAction?.call();
+                    },
+                    text: "Recall".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#FFBB1B"),
+                    radius: 17.25,
+                    padding: const EdgeInsets.symmetric(horizontal: 8),
+                    minWidth: 50,
+                    minHeight: 35,
+                  ).marginOnly(left: 10),
+                ),
+
+                //Edit按钮 (Recall)
+                Visibility(
+                  visible: item.actionList!.contains("edit"),
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onEditAction?.call();
+                    },
+                    text: "Edit".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#FFBB1B"),
+                    radius: 17.25,
+                    padding: const EdgeInsets.symmetric(horizontal: 8),
+                    minWidth: 50,
+                    minHeight: 35,
+                  ).marginOnly(left: 10),
+                ),
+
+                //详情按钮
+                Visibility(
+                  visible: item.actionList!.contains("detail"),
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onDetailAction?.call();
+                    },
+                    text: "Detail".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#56AAFF"),
+                    radius: 17.25,
+                    padding: const EdgeInsets.symmetric(horizontal: 8),
+                    minWidth: 50,
+                    minHeight: 35,
+                  ).marginOnly(left: 10),
+                ),
+
+                Visibility(
+                  visible: item.actionList!.contains("delete"),
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onDeleteAction?.call();
+                    },
+                    text: "Delete".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#56AAFF"),
+                    radius: 17.25,
+                    padding: const EdgeInsets.symmetric(horizontal: 8),
+                    minWidth: 50,
+                    minHeight: 35,
+                  ).marginOnly(left: 10),
+                ),
+
+                //状态工作流按钮
+                Visibility(
+                  visible: item.actionList!.contains("logs"),
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onStatusAction?.call();
+                    },
+                    text: "Logs".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#0AC074"),
+                    radius: 17.25,
+                    padding: const EdgeInsets.symmetric(horizontal: 8),
+                    minWidth: 50,
+                    minHeight: 35,
+                  ).marginOnly(left: 10),
+                ),
+              ],
+            ).marginOnly(top: 6, bottom: 2),
+          ),
+        ],
+      ),
+    );
+  }
+}

+ 157 - 0
packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_page.dart

@@ -0,0 +1,157 @@
+import 'package:cpt_th/modules/job_er/revise_list_er/revise_list_er_item.dart';
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:cs_resources/generated/assets.dart';
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+import 'package:plugin_basic/base/base_state.dart';
+import 'package:plugin_basic/base/base_stateful_page.dart';
+import 'package:plugin_basic/utils/ext_get_nav.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:router/path/router_path.dart';
+import 'package:shared/utils/screen_util.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'revise_list_er_controller.dart';
+import 'revise_list_er_state.dart';
+
+/*
+ * Revise 的列表
+ */
+class ReviseListErPage extends BaseStatefulPage<ReviseListErController> {
+  ReviseListErPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance(String? appliedId, String? jobTitle, String? jobDate) {
+    return Get.start(RouterPath.THReviseListER, arguments: {"appliedId": appliedId, "jobTitle": jobTitle, "jobDate": jobDate});
+  }
+
+  @override
+  ReviseListErController createRawController() {
+    return ReviseListErController();
+  }
+
+  @override
+  State<ReviseListErPage> createState() => _ReviseListErState();
+}
+
+class _ReviseListErState extends BaseState<ReviseListErPage, ReviseListErController> {
+  late ReviseListErState state;
+
+  @override
+  void initState() {
+    super.initState();
+    state = controller.state;
+    state.appliedId = Get.arguments['appliedId'];
+    state.jobTitle = Get.arguments['jobTitle'];
+    state.jobDate = Get.arguments['jobDate'];
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return autoCtlGetBuilder(builder: (controller) {
+      return SafeArea(
+        bottom: MediaQuery.of(context).padding.bottom > 38,
+        top: false,
+        child: Container(
+          width: double.infinity,
+          height: double.infinity,
+          padding: EdgeInsets.only(top: ScreenUtil.getStatusBarH(context)),
+          decoration: const BoxDecoration(
+            gradient: LinearGradient(
+              colors: [
+                Color(0xFF091D44),
+                Color(0xFF245A8A),
+                Color(0xFF7F7CEC),
+              ],
+              begin: Alignment.topCenter,
+              end: Alignment.bottomCenter,
+            ),
+          ),
+          child: Column(
+            children: [
+              MyAppBar.titleBar(context, "Revise".tr),
+
+              Row(
+                children: [
+                  MyTextView(
+                    state.jobTitle ?? "-",
+                    fontSize: 16,
+                    textColor: Colors.white,
+                    isFontMedium: true,
+                  ),
+                  MyTextView(
+                    state.jobDate ?? "-",
+                    fontSize: 16,
+                    textColor: Colors.white,
+                    isFontMedium: true,
+                  ),
+                ],
+              ).marginOnly(left: 15, right: 15, top: 10, bottom: 5),
+
+              MyButton(
+                type: ClickType.throttle,
+                milliseconds: 500,
+                onPressed: () {
+                  FocusScope.of(context).unfocus();
+                  controller.gotoAddPage();
+                },
+                text: "Add Revise".tr,
+                textColor: ColorConstants.white,
+                fontSize: 14,
+                radius: 20,
+                backgroundColor: hexToColor("#FFBB1B"),
+                fontWeight: FontWeight.w500,
+              ).marginOnly(left: 15, right: 15, top: 5, bottom: 5),
+
+              //底部的列表
+              EasyRefresh(
+                controller: controller.refreshController,
+                onRefresh: controller.onRefresh,
+                onLoad: controller.loadMore,
+                child: LoadStateLayout(
+                  state: controller.loadingState,
+                  errorMessage: controller.errorMessage,
+                  errorRetry: () {
+                    controller.retryRequest();
+                  },
+                  successSliverWidget: [
+                    SliverList(
+                        delegate: SliverChildBuilderDelegate(
+                      (context, index) {
+                        return ReviseListErItem(
+                          index: index,
+                          item: state.datas[index],
+                          onDetailAction: () {
+                            controller.gotoDetailPage(state.datas[index]);
+                          },
+                          onRecallAction: () {
+                            controller.doRecall(state.datas[index]);
+                          },
+                          onEditAction: () {
+                            controller.gotoEditPage(state.datas[index]);
+                          },
+                          onStatusAction: () {
+                            controller.gotoWorkflowPage(state.datas[index]);
+                          },
+                          onDeleteAction: () {
+                            controller.doDeleteAction(state.datas[index].reviseId!, index);
+                          },
+                        );
+                      },
+                      childCount: state.datas.length,
+                    ))
+                  ],
+                ),
+              ).expanded(),
+            ],
+          ),
+        ),
+      );
+    });
+  }
+}

+ 13 - 0
packages/cpt_th/lib/modules/job_er/revise_list_er/revise_list_er_state.dart

@@ -0,0 +1,13 @@
+import 'package:domain/entity/response/revise_option_entity.dart';
+import 'package:domain/entity/response/t_h_revise_table_entity.dart';
+
+class ReviseListErState {
+
+  String? appliedId;
+  String? jobTitle;
+  String? jobDate;
+
+  //页面的列表数据
+  List<THReviseTableRows> datas = [];
+  ReviseOptionEntity? indexOptions;
+}

+ 98 - 0
packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_controller.dart

@@ -0,0 +1,98 @@
+import 'package:domain/entity/response/t_h_revise_workflow_entity.dart';
+import 'package:domain/repository/th_er_repository.dart';
+import 'package:get/get.dart';
+import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'revise_er_workflow_state.dart';
+
+/*
+ * 状态流
+ */
+class ReviseErWorkflowController extends GetxController with DioCancelableMixin {
+  final THERRepository _erRepository = Get.find();
+  final ReviseErWorkflowState state = ReviseErWorkflowState();
+
+  var _needShowPlaceholder = true;
+
+  //页面PlaceHolder的展示
+  LoadState loadingState = LoadState.State_Success;
+  String? errorMessage;
+
+  //刷新页面状态
+  void changeLoadingState(LoadState state) {
+    loadingState = state;
+    update();
+  }
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,
+    controlFinishLoad: false,
+  );
+
+  // Refresh 刷新事件
+  Future onRefresh() async {
+    fetchWorkFlowList();
+  }
+
+  // 重试请求
+  Future retryRequest() async {
+    _needShowPlaceholder = true;
+    fetchWorkFlowList();
+  }
+
+  /// 获取服务器数据,成员考勤列表
+  Future fetchWorkFlowList() async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading);
+    }
+
+    //获取到数据
+    var result = await _erRepository.fetchERReviseWorkflow(
+      reviseId: state.reviseId ?? "",
+      cancelToken: cancelToken,
+    );
+
+    //处理数据
+    if (result.isSuccess) {
+      handleList(result.data?.records);
+      refreshController.finishRefresh(IndicatorResult.success);
+    } else {
+      errorMessage = result.errorMsg;
+      changeLoadingState(LoadState.State_Error);
+      refreshController.finishRefresh(IndicatorResult.fail);
+    }
+
+    //最后赋值
+    _needShowPlaceholder = false;
+  }
+
+  // 处理数据与展示的逻辑
+  void handleList(List<THReviseWorkflowRecords>? list) {
+    if (list != null && list.isNotEmpty) {
+      //有数据,判断是刷新还是加载更多的数据
+      state.datas.clear();
+      state.datas.addAll(list);
+      //更新状态
+      changeLoadingState(LoadState.State_Success);
+    } else {
+      //展示无数据的布局
+      state.datas.clear();
+      changeLoadingState(LoadState.State_Empty);
+    }
+  }
+
+  @override
+  void onReady() async {
+    super.onReady();
+    fetchWorkFlowList();
+  }
+
+  @override
+  void onClose() {
+    super.onClose();
+    state.datas.clear();
+  }
+}

+ 132 - 0
packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_item.dart

@@ -0,0 +1,132 @@
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:domain/entity/response/t_h_revise_workflow_entity.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/widgets.dart';
+import 'package:plugin_basic/basic_export.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_text_view.dart';
+
+/**
+ * 工作流列表
+ */
+class ReviseErWorkflowItem extends StatelessWidget {
+  final int index;
+  final THReviseWorkflowRecords item;
+
+  ReviseErWorkflowItem({
+    required this.index,
+    required this.item,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      padding: const EdgeInsets.symmetric(vertical: 23, horizontal: 21),
+      margin: const EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5),
+      decoration: BoxDecoration(
+        color: const Color(0xFF4DCFF6).withValues(alpha: 0.2), // 设置背景颜色和不透明度
+        borderRadius: BorderRadius.circular(5), // 设置圆角
+      ),
+      child: Column(
+        mainAxisSize: MainAxisSize.max,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          //Node
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "DateTime:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              MyTextView(
+                item.dataType ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ),
+
+          // assigneeType
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Operator:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //日期时间
+              MyTextView(
+                item.operationName ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // Action
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Action:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                item.actText ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+
+          // 内容
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Content:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //文本
+              MyTextView(
+                "Revise Hours  =>  ${item.content?.reviseHours?.value}\nReason  =>  ${item.content?.reviseMsg?.value}",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+
+        ],
+      ),
+    );
+  }
+}

+ 102 - 0
packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_page.dart

@@ -0,0 +1,102 @@
+
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+import 'package:plugin_basic/base/base_state.dart';
+import 'package:plugin_basic/base/base_stateful_page.dart';
+import 'package:plugin_basic/utils/ext_get_nav.dart';
+import 'package:router/path/router_path.dart';
+import 'package:shared/utils/screen_util.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'revise_er_workflow_controller.dart';
+import 'revise_er_workflow_state.dart';
+import 'revise_er_workflow_item.dart';
+
+/*
+ * 已申请的员工-状态工作流列表
+ */
+class ReviseErWorkflowPage extends BaseStatefulPage<ReviseErWorkflowController> {
+  ReviseErWorkflowPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance(String? reviseId) {
+    return Get.start(RouterPath.THReviseWorkflowER,arguments: {'reviseId': reviseId});
+  }
+
+  @override
+  ReviseErWorkflowController createRawController() {
+    return ReviseErWorkflowController();
+  }
+
+  @override
+  State<ReviseErWorkflowPage> createState() => _ReviseflowState();
+
+}
+
+class _ReviseflowState extends BaseState<ReviseErWorkflowPage, ReviseErWorkflowController> {
+
+  late ReviseErWorkflowState state;
+
+  @override
+  void initState() {
+    super.initState();
+    state = controller.state;
+    state.reviseId = Get.arguments['reviseId'];
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return autoCtlGetBuilder(builder: (controller) {
+      return  SafeArea(
+        bottom: MediaQuery.of(context).padding.bottom > 38,
+          top: false,
+          child: Container(
+            width: double.infinity,
+            height: double.infinity,
+            padding: EdgeInsets.only(top:ScreenUtil.getStatusBarH(context)),
+            decoration: const BoxDecoration(
+              gradient: LinearGradient(
+                colors: [
+                  Color(0xFF091D44),
+                  Color(0xFF245A8A),
+                  Color(0xFF7F7CEC),
+                ],
+                begin: Alignment.topCenter,
+                end: Alignment.bottomCenter,
+              ),
+            ),
+            child: Column(
+              children: [
+                MyAppBar.titleBar(context, "Workflow".tr),
+
+                EasyRefresh(
+                  controller: controller.refreshController,
+                  onRefresh: controller.onRefresh,
+                  child: LoadStateLayout(
+                    state: controller.loadingState,
+                    errorMessage: controller.errorMessage,
+                    errorRetry: () {
+                      controller.retryRequest();
+                    },
+                    successSliverWidget: [
+                      SliverList(
+                          delegate: SliverChildBuilderDelegate((context, index) {
+                              return ReviseErWorkflowItem(index: index,item: state.datas[index]);
+                            },
+                            childCount: state.datas.length,
+                          ))
+                    ],
+                  ),
+                ).marginOnly(top: 5,bottom: 5).expanded(),
+              ],
+            ).marginOnly(top: 10),
+          ),
+        );
+    });
+  }
+}
+
+

+ 10 - 0
packages/cpt_th/lib/modules/job_er/revise_workflow_er/revise_er_workflow_state.dart

@@ -0,0 +1,10 @@
+import 'package:domain/entity/response/t_h_revise_workflow_entity.dart';
+
+class ReviseErWorkflowState {
+
+  String? reviseId;
+
+  //页面的列表数据
+  List<THReviseWorkflowRecords> datas = [];
+
+}

+ 22 - 0
packages/cpt_th/lib/router/th_router.dart

@@ -1,4 +1,8 @@
 import 'package:cpt_th/modules/job_er/applied_er_edit/applied_er_edit_page.dart';
+import 'package:cpt_th/modules/job_er/revise_edit_er/revise_er_edit_page.dart';
+import 'package:cpt_th/modules/job_er/revise_list_er/revise_list_er_page.dart';
+import 'package:cpt_th/modules/job_er/revise_workflow_er/revise_er_workflow_page.dart';
+import 'package:cpt_th/modules/job_er/revise_workflow_er/revise_er_workflow_state.dart';
 import 'package:get/get.dart';
 import 'package:router/path/router_path.dart';
 import '../modules/job_er/applied_er/applied_er_page.dart';
@@ -118,5 +122,23 @@ class THPageRouter {
       page: () => LabourTemplateAddPage(),
     ),
 
+    //修改列表
+    GetPage(
+      name: RouterPath.THReviseListER,
+      page: () => ReviseListErPage(),
+    ),
+
+    //添加或者编辑Revise
+    GetPage(
+      name: RouterPath.THReviseEditER,
+      page: () => ReviseErEditPage(),
+    ),
+
+    //添加或者编辑Revise
+    GetPage(
+      name: RouterPath.THReviseWorkflowER,
+      page: () => ReviseErWorkflowPage(),
+    ),
+
   ];
 }

+ 28 - 1
packages/cs_domain/lib/constants/api_constants.dart

@@ -2,7 +2,7 @@
 
 class ApiConstants {
   //当前服务器环境
-  static const isServerRelease = true;
+  static const isServerRelease = false;
 
   //新加坡的域名
   static const sgBaseUrl = isServerRelease ? 'https://casualabour.com/' : 'http://singapore-dev.casualabour.com';
@@ -735,4 +735,31 @@ class ApiConstants {
   //批量操作预选员工的添加
   static const apiOABatchPreSelectAddEmployeeTH = "/index.php/api/er/selected/lab-batch";
 
+  //ER Revise 选项
+  static const apiERReviseOptionTH = "/index.php/api/er/revise/index";
+
+  // ER Revise 列表
+  static const apiERReviseTableTH = "/index.php/api/er/revise/table";
+
+  //ER Revise 添加详情
+  static const apiERReviseAddDetailTH = "/index.php/api/er/revise/add-view";
+
+  //ER Revise 编辑详情
+  static const apiERReviseEditDetailTH = "/index.php/api/er/revise/edit-view";
+
+  //ER Revise 添加提交
+  static const apiERReviseAddSubmitTH = "/index.php/api/er/revise/add-submit";
+
+  //ER Revise 编辑提交
+  static const apiERReviseEditSubmitTH = "/index.php/api/er/revise/edit-submit";
+
+  //ER Revise 撤销操作
+  static const apiERReviseRecallTH = "/index.php/api/er/revise/recall";
+
+  //ER Revise 删除操作
+  static const apiERReviseDeleteTH = "/index.php/api/er/revise/delete";
+
+  //ER Revise 操作日志工作流
+  static const apiERReviseWorkflowTH = "/index.php/api/er/revise/logs";
+
 }

+ 22 - 0
packages/cs_domain/lib/entity/response/revise_option_entity.dart

@@ -0,0 +1,22 @@
+import 'package:domain/entity/response/index_option_entity.dart';
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/revise_option_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/revise_option_entity.g.dart';
+
+@JsonSerializable()
+class ReviseOptionEntity {
+	@JSONField(name: "status_list")
+	List<IndexOptionEntity> statusList = [];
+
+	ReviseOptionEntity();
+
+	factory ReviseOptionEntity.fromJson(Map<String, dynamic> json) => $ReviseOptionEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $ReviseOptionEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

+ 47 - 0
packages/cs_domain/lib/entity/response/t_h_revise_detail_entity.dart

@@ -0,0 +1,47 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/t_h_revise_detail_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/t_h_revise_detail_entity.g.dart';
+
+@JsonSerializable()
+class THReviseDetailEntity {
+	@JSONField(name: "applied_id")
+	String? appliedId;
+	@JSONField(name: "labourer_name")
+	String? labourerName;
+	@JSONField(name: "job_date")
+	String? jobDate;
+	@JSONField(name: "adjust_hours")
+	String? adjustHours;
+	@JSONField(name: "total_hours")
+	String? totalHours;
+	@JSONField(name: "start_time")
+	String? startTime;
+	@JSONField(name: "end_time")
+	String? endTime;
+	@JSONField(name: "security_in")
+	String? securityIn;
+	@JSONField(name: "security_out")
+	String? securityOut;
+	@JSONField(name: "work_in")
+	String? workIn;
+	@JSONField(name: "work_out")
+	String? workOut;
+	@JSONField(name: "revise_id")
+	String? reviseId;
+	@JSONField(name: "revise_hours")
+	String? reviseHours;
+	@JSONField(name: "revise_msg")
+	String? reviseMsg;
+
+	THReviseDetailEntity();
+
+	factory THReviseDetailEntity.fromJson(Map<String, dynamic> json) => $THReviseDetailEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseDetailEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

+ 60 - 0
packages/cs_domain/lib/entity/response/t_h_revise_table_entity.dart

@@ -0,0 +1,60 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/t_h_revise_table_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/t_h_revise_table_entity.g.dart';
+
+@JsonSerializable()
+class THReviseTableEntity {
+	int total = 0;
+	List<THReviseTableRows> rows = [];
+
+	THReviseTableEntity();
+
+	factory THReviseTableEntity.fromJson(Map<String, dynamic> json) => $THReviseTableEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseTableEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class THReviseTableRows {
+	@JSONField(name: "revise_id")
+	String? reviseId;
+	@JSONField(name: "revise_hours")
+	String? reviseHours;
+	String? name;
+	String? nric;
+	@JSONField(name: "job_date")
+	String? jobDate;
+	@JSONField(name: "job_time")
+	String? jobTime;
+	@JSONField(name: "start_time")
+	String? startTime;
+	@JSONField(name: "end_time")
+	String? endTime;
+	@JSONField(name: "adjust_hours")
+	String? adjustHours;
+	@JSONField(name: "total_hours")
+	String? totalHours;
+	int status = 0;
+	@JSONField(name: "status_show")
+	String? statusShow;
+	@JSONField(name: "action_list")
+	List<String>? actionList = [];
+
+
+	THReviseTableRows();
+
+	factory THReviseTableRows.fromJson(Map<String, dynamic> json) => $THReviseTableRowsFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseTableRowsToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

+ 277 - 0
packages/cs_domain/lib/entity/response/t_h_revise_workflow_entity.dart

@@ -0,0 +1,277 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/t_h_revise_workflow_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/t_h_revise_workflow_entity.g.dart';
+
+@JsonSerializable()
+class THReviseWorkflowEntity {
+	THReviseWorkflowRevise? revise;
+	List<THReviseWorkflowRecords> records = [];
+
+	THReviseWorkflowEntity();
+
+	factory THReviseWorkflowEntity.fromJson(Map<String, dynamic> json) => $THReviseWorkflowEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseWorkflowEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class THReviseWorkflowRevise {
+	String? id;
+	@JSONField(name: "s_revise_id")
+	String? sReviseId;
+	@JSONField(name: "employer_id")
+	String? employerId;
+	@JSONField(name: "applied_id")
+	String? appliedId;
+	@JSONField(name: "s_id")
+	String? sId;
+	@JSONField(name: "revise_hours")
+	String? reviseHours;
+	@JSONField(name: "revise_gross_wage")
+	String? reviseGrossWage;
+	@JSONField(name: "revise_agency_wage")
+	String? reviseAgencyWage;
+	int status = 0;
+	@JSONField(name: "revise_msg")
+	String? reviseMsg;
+	@JSONField(name: "reject_msg")
+	String? rejectMsg;
+	@JSONField(name: "apply_time")
+	String? applyTime;
+	@JSONField(name: "complete_time")
+	String? completeTime;
+	@JSONField(name: "created_at")
+	String? createdAt;
+	@JSONField(name: "updated_at")
+	String? updatedAt;
+	@JSONField(name: "deleted_at")
+	String? deletedAt;
+	THReviseWorkflowReviseApplied? applied;
+
+	THReviseWorkflowRevise();
+
+	factory THReviseWorkflowRevise.fromJson(Map<String, dynamic> json) => $THReviseWorkflowReviseFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseWorkflowReviseToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class THReviseWorkflowReviseApplied {
+	String? id;
+	@JSONField(name: "job_id")
+	String? jobId;
+	@JSONField(name: "s_id")
+	String? sId;
+	@JSONField(name: "member_id")
+	String? memberId;
+	@JSONField(name: "labourer_id")
+	String? labourerId;
+	@JSONField(name: "labourer_name")
+	String? labourerName;
+	@JSONField(name: "labourer_nric")
+	String? labourerNric;
+	@JSONField(name: "source_type")
+	String? sourceType;
+	@JSONField(name: "employer_id")
+	String? employerId;
+	@JSONField(name: "employer_name")
+	String? employerName;
+	@JSONField(name: "agency_id")
+	String? agencyId;
+	@JSONField(name: "agency_name")
+	String? agencyName;
+	@JSONField(name: "job_title")
+	String? jobTitle;
+	@JSONField(name: "outlet_id")
+	String? outletId;
+	@JSONField(name: "outlet_name")
+	String? outletName;
+	@JSONField(name: "ballroom_id")
+	String? ballroomId;
+	@JSONField(name: "ballroom_name")
+	String? ballroomName;
+	@JSONField(name: "job_date")
+	String? jobDate;
+	@JSONField(name: "start_time")
+	String? startTime;
+	@JSONField(name: "end_time")
+	String? endTime;
+	@JSONField(name: "working_hours")
+	String? workingHours;
+	@JSONField(name: "adjust_hours")
+	String? adjustHours;
+	@JSONField(name: "total_hours")
+	String? totalHours;
+	@JSONField(name: "hourly_rate")
+	String? hourlyRate;
+	@JSONField(name: "gross_wage")
+	String? grossWage;
+	@JSONField(name: "security_clock_in")
+	int? securityClockIn;
+	@JSONField(name: "security_clock_out")
+	int? securityClockOut;
+	@JSONField(name: "work_clock_in")
+	int? workClockIn;
+	@JSONField(name: "work_clock_out")
+	int? workClockOut;
+	@JSONField(name: "security_in")
+	int? securityIn;
+	@JSONField(name: "security_out")
+	int? securityOut;
+	@JSONField(name: "work_in")
+	int? workIn;
+	@JSONField(name: "work_out")
+	int? workOut;
+	int? status;
+	@JSONField(name: "remark_status")
+	int? remarkStatus;
+	@JSONField(name: "created_at")
+	String? createdAt;
+	@JSONField(name: "updated_at")
+	String? updatedAt;
+	@JSONField(name: "sync_payroll")
+	int? syncPayroll;
+	@JSONField(name: "sign_image")
+	String? signImage;
+	@JSONField(name: "event_name")
+	String? eventName;
+	@JSONField(name: "event_type")
+	String? eventType;
+	@JSONField(name: "working_type")
+	int? workingType;
+	@JSONField(name: "epf_employer")
+	String? epfEmployer;
+	@JSONField(name: "epf_employee")
+	String? epfEmployee;
+	@JSONField(name: "epf_total")
+	String? epfTotal;
+	@JSONField(name: "net_pay")
+	String? netPay;
+	String? socso;
+	@JSONField(name: "payment_status")
+	int? paymentStatus;
+	@JSONField(name: "paid_time")
+	String? paidTime;
+	@JSONField(name: "agency_rate")
+	String? agencyRate;
+	@JSONField(name: "agency_wage")
+	String? agencyWage;
+	String? remark;
+	@JSONField(name: "reason_type")
+	int? reasonType;
+	@JSONField(name: "audit_reject")
+	int? auditReject;
+	@JSONField(name: "revise_hours")
+	String? reviseHours;
+	@JSONField(name: "revise_gross_wage")
+	String? reviseGrossWage;
+	@JSONField(name: "revise_agency_wage")
+	String? reviseAgencyWage;
+	@JSONField(name: "is_ot")
+	int? isOt;
+	@JSONField(name: "reject_msg")
+	String? rejectMsg;
+
+	THReviseWorkflowReviseApplied();
+
+	factory THReviseWorkflowReviseApplied.fromJson(Map<String, dynamic> json) => $THReviseWorkflowReviseAppliedFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseWorkflowReviseAppliedToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class THReviseWorkflowRecords {
+	String? id;
+	@JSONField(name: "operation_name")
+	String? operationName;
+	@JSONField(name: "data_type")
+	String? dataType;
+	String? desc;
+	THReviseWorkflowRecordsContent? content;
+	@JSONField(name: "created_at")
+	String? createdAt;
+	@JSONField(name: "act_class")
+	String? actClass;
+	@JSONField(name: "act_text")
+	String? actText;
+
+	THReviseWorkflowRecords();
+
+	factory THReviseWorkflowRecords.fromJson(Map<String, dynamic> json) => $THReviseWorkflowRecordsFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseWorkflowRecordsToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class THReviseWorkflowRecordsContent {
+	@JSONField(name: "revise_hours")
+	THReviseWorkflowRecordsContentReviseHours? reviseHours;
+	@JSONField(name: "revise_msg")
+	THReviseWorkflowRecordsContentReviseMsg? reviseMsg;
+
+	THReviseWorkflowRecordsContent();
+
+	factory THReviseWorkflowRecordsContent.fromJson(Map<String, dynamic> json) => $THReviseWorkflowRecordsContentFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseWorkflowRecordsContentToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class THReviseWorkflowRecordsContentReviseHours {
+	String? field;
+	String? value;
+
+	THReviseWorkflowRecordsContentReviseHours();
+
+	factory THReviseWorkflowRecordsContentReviseHours.fromJson(Map<String, dynamic> json) => $THReviseWorkflowRecordsContentReviseHoursFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseWorkflowRecordsContentReviseHoursToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class THReviseWorkflowRecordsContentReviseMsg {
+	String? field;
+	String? value;
+
+	THReviseWorkflowRecordsContentReviseMsg();
+
+	factory THReviseWorkflowRecordsContentReviseMsg.fromJson(Map<String, dynamic> json) => $THReviseWorkflowRecordsContentReviseMsgFromJson(json);
+
+	Map<String, dynamic> toJson() => $THReviseWorkflowRecordsContentReviseMsgToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

+ 95 - 221
packages/cs_domain/lib/generated/json/base/json_convert_content.dart

@@ -64,6 +64,7 @@ import 'package:domain/entity/response/position_table_entity.dart';
 import 'package:domain/entity/response/revise_index_s_g_entity.dart';
 import 'package:domain/entity/response/revise_list_s_g_entity.dart';
 import 'package:domain/entity/response/revise_log_s_g_entity.dart';
+import 'package:domain/entity/response/revise_option_entity.dart';
 import 'package:domain/entity/response/s_g_attendance_review_option_entity.dart';
 import 'package:domain/entity/response/s_g_attendance_review_table_entity.dart';
 import 'package:domain/entity/response/s_g_attendance_review_workflow_entity.dart';
@@ -98,6 +99,9 @@ import 'package:domain/entity/response/t_h_o_a_labour_table_entity.dart';
 import 'package:domain/entity/response/t_h_pre_selected_option_entity.dart';
 import 'package:domain/entity/response/t_h_pre_selected_staff_table_entity.dart';
 import 'package:domain/entity/response/t_h_pre_selected_table_entity.dart';
+import 'package:domain/entity/response/t_h_revise_detail_entity.dart';
+import 'package:domain/entity/response/t_h_revise_table_entity.dart';
+import 'package:domain/entity/response/t_h_revise_workflow_entity.dart';
 import 'package:domain/entity/response/t_h_upload_file_entity.dart';
 import 'package:domain/entity/response/u_k_attendance_entity.dart';
 import 'package:domain/entity/response/u_k_report_attendance_entity.dart';
@@ -636,6 +640,9 @@ class JsonConvert {
     if (<ReviseLogSGRecordsOption>[] is M) {
       return data.map<ReviseLogSGRecordsOption>((Map<String, dynamic> e) => ReviseLogSGRecordsOption.fromJson(e)).toList() as M;
     }
+    if (<ReviseOptionEntity>[] is M) {
+      return data.map<ReviseOptionEntity>((Map<String, dynamic> e) => ReviseOptionEntity.fromJson(e)).toList() as M;
+    }
     if (<SGAttendanceReviewOptionEntity>[] is M) {
       return data.map<SGAttendanceReviewOptionEntity>((Map<String, dynamic> e) => SGAttendanceReviewOptionEntity.fromJson(e)).toList() as M;
     }
@@ -852,6 +859,37 @@ class JsonConvert {
     if (<THPreSelectedTableRows>[] is M) {
       return data.map<THPreSelectedTableRows>((Map<String, dynamic> e) => THPreSelectedTableRows.fromJson(e)).toList() as M;
     }
+    if (<THReviseDetailEntity>[] is M) {
+      return data.map<THReviseDetailEntity>((Map<String, dynamic> e) => THReviseDetailEntity.fromJson(e)).toList() as M;
+    }
+    if (<THReviseTableEntity>[] is M) {
+      return data.map<THReviseTableEntity>((Map<String, dynamic> e) => THReviseTableEntity.fromJson(e)).toList() as M;
+    }
+    if (<THReviseTableRows>[] is M) {
+      return data.map<THReviseTableRows>((Map<String, dynamic> e) => THReviseTableRows.fromJson(e)).toList() as M;
+    }
+    if (<THReviseWorkflowEntity>[] is M) {
+      return data.map<THReviseWorkflowEntity>((Map<String, dynamic> e) => THReviseWorkflowEntity.fromJson(e)).toList() as M;
+    }
+    if (<THReviseWorkflowRevise>[] is M) {
+      return data.map<THReviseWorkflowRevise>((Map<String, dynamic> e) => THReviseWorkflowRevise.fromJson(e)).toList() as M;
+    }
+    if (<THReviseWorkflowReviseApplied>[] is M) {
+      return data.map<THReviseWorkflowReviseApplied>((Map<String, dynamic> e) => THReviseWorkflowReviseApplied.fromJson(e)).toList() as M;
+    }
+    if (<THReviseWorkflowRecords>[] is M) {
+      return data.map<THReviseWorkflowRecords>((Map<String, dynamic> e) => THReviseWorkflowRecords.fromJson(e)).toList() as M;
+    }
+    if (<THReviseWorkflowRecordsContent>[] is M) {
+      return data.map<THReviseWorkflowRecordsContent>((Map<String, dynamic> e) => THReviseWorkflowRecordsContent.fromJson(e)).toList() as M;
+    }
+    if (<THReviseWorkflowRecordsContentReviseHours>[] is M) {
+      return data.map<THReviseWorkflowRecordsContentReviseHours>((Map<String, dynamic> e) => THReviseWorkflowRecordsContentReviseHours.fromJson(e))
+          .toList() as M;
+    }
+    if (<THReviseWorkflowRecordsContentReviseMsg>[] is M) {
+      return data.map<THReviseWorkflowRecordsContentReviseMsg>((Map<String, dynamic> e) => THReviseWorkflowRecordsContentReviseMsg.fromJson(e)).toList() as M;
+    }
     if (<THUploadFileEntity>[] is M) {
       return data.map<THUploadFileEntity>((Map<String, dynamic> e) => THUploadFileEntity.fromJson(e)).toList() as M;
     }
@@ -1010,141 +1048,11 @@ class JsonConvert {
       return data.map<UkLabourRequestDetailEmploymentList>((Map<String, dynamic> e) => UkLabourRequestDetailEmploymentList.fromJson(e)).toList() as M;
     }
     if (<UkLabourRequestPreselectAddstaffListEntity>[] is M) {
-      return data.map<UkLabourRequestPreselectAddstaffListEntity>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestPreselectAddstaffListEntity.fromJson(e)).toList() as M;
+      return data.map<UkLabourRequestPreselectAddstaffListEntity>((Map<String, dynamic> e) => UkLabourRequestPreselectAddstaffListEntity.fromJson(e))
+          .toList() as M;
     }
     if (<UkLabourRequestPreselectAddstaffListRows>[] is M) {
-      return data.map<UkLabourRequestPreselectAddstaffListRows>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestPreselectAddstaffListRows.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestPreselectedListEntity>[] is M) {
-      return data.map<UkLabourRequestPreselectedListEntity>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestPreselectedListEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestPreselectedListRows>[] is M) {
-      return data.map<UkLabourRequestPreselectedListRows>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestPreselectedListRows.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestReviewDetailEntity>[] is M) {
-      return data.map<UkLabourRequestReviewDetailEntity>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestReviewDetailEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestReviewDetailOrder>[] is M) {
-      return data.map<UkLabourRequestReviewDetailOrder>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestReviewDetailOrder.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestReviewDetailOrderRequest>[] is M) {
-      return data.map<UkLabourRequestReviewDetailOrderRequest>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestReviewDetailOrderRequest.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestReviewDetailOrderRecords>[] is M) {
-      return data.map<UkLabourRequestReviewDetailOrderRecords>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestReviewDetailOrderRecords.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestReviewDetailRecords>[] is M) {
-      return data.map<UkLabourRequestReviewDetailRecords>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestReviewDetailRecords.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestReviewListEntity>[] is M) {
-      return data.map<UkLabourRequestReviewListEntity>((
-          Map<String, dynamic> e) =>
-          UkLabourRequestReviewListEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestReviewListRows>[] is M) {
-      return data.map<UkLabourRequestReviewListRows>((Map<String, dynamic> e) =>
-          UkLabourRequestReviewListRows.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestTableEntity>[] is M) {
-      return data.map<UkLabourRequestTableEntity>((Map<String, dynamic> e) =>
-          UkLabourRequestTableEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourRequestTableRows>[] is M) {
-      return data.map<UkLabourRequestTableRows>((Map<String, dynamic> e) =>
-          UkLabourRequestTableRows.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourReviewStatusEntity>[] is M) {
-      return data.map<UkLabourReviewStatusEntity>((Map<String, dynamic> e) =>
-          UkLabourReviewStatusEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourReviewStatusRow>[] is M) {
-      return data.map<UkLabourReviewStatusRow>((Map<String, dynamic> e) =>
-          UkLabourReviewStatusRow.fromJson(e)).toList() as M;
-    }
-    if (<UkLabourReviewStatusRecords>[] is M) {
-      return data.map<UkLabourReviewStatusRecords>((Map<String, dynamic> e) =>
-          UkLabourReviewStatusRecords.fromJson(e)).toList() as M;
-    }
-    if (<UkReportCasualEntity>[] is M) {
-      return data.map<UkReportCasualEntity>((Map<String, dynamic> e) =>
-          UkReportCasualEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkReportCasualRows>[] is M) {
-      return data.map<UkReportCasualRows>((Map<String, dynamic> e) =>
-          UkReportCasualRows.fromJson(e)).toList() as M;
-    }
-    if (<UkReportCasualTotal>[] is M) {
-      return data.map<UkReportCasualTotal>((Map<String, dynamic> e) =>
-          UkReportCasualTotal.fromJson(e)).toList() as M;
-    }
-    if (<UkReportCasualPayEntity>[] is M) {
-      return data.map<UkReportCasualPayEntity>((Map<String, dynamic> e) =>
-          UkReportCasualPayEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkReportCasualPayRows>[] is M) {
-      return data.map<UkReportCasualPayRows>((Map<String, dynamic> e) =>
-          UkReportCasualPayRows.fromJson(e)).toList() as M;
-    }
-    if (<UkReportCasualPayTotal>[] is M) {
-      return data.map<UkReportCasualPayTotal>((Map<String, dynamic> e) =>
-          UkReportCasualPayTotal.fromJson(e)).toList() as M;
-    }
-    if (<UkReportOutletEntity>[] is M) {
-      return data.map<UkReportOutletEntity>((Map<String, dynamic> e) =>
-          UkReportOutletEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkReportOutletRequestList>[] is M) {
-      return data.map<UkReportOutletRequestList>((Map<String, dynamic> e) =>
-          UkReportOutletRequestList.fromJson(e)).toList() as M;
-    }
-    if (<UkStaffDetailEntity>[] is M) {
-      return data.map<UkStaffDetailEntity>((Map<String, dynamic> e) =>
-          UkStaffDetailEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkStaffDetailCertificates>[] is M) {
-      return data.map<UkStaffDetailCertificates>((Map<String, dynamic> e) =>
-          UkStaffDetailCertificates.fromJson(e)).toList() as M;
-    }
-    if (<UkStaffLabourHistoryEntity>[] is M) {
-      return data.map<UkStaffLabourHistoryEntity>((Map<String, dynamic> e) =>
-          UkStaffLabourHistoryEntity.fromJson(e)).toList() as M;
-    }
-    if (<UkStaffLabourHistoryRows>[] is M) {
-      return data.map<UkStaffLabourHistoryRows>((Map<String, dynamic> e) =>
-          UkStaffLabourHistoryRows.fromJson(e)).toList() as M;
-    }
-    if (<UkStaffLabourHistoryRowsSecurityIn>[] is M) {
-      return data.map<UkStaffLabourHistoryRowsSecurityIn>((
-          Map<String, dynamic> e) =>
-          UkStaffLabourHistoryRowsSecurityIn.fromJson(e)).toList() as M;
-    }
-    if (<UkStaffLabourHistoryRowsSecurityOut>[] is M) {
-      return data.map<UkStaffLabourHistoryRowsSecurityOut>((
-          Map<String, dynamic> e) =>
-          UkStaffLabourHistoryRowsSecurityOut.fromJson(e)).toList() as M;
-    }
-    if (<UkStaffLabourHistoryRowsWorkIn>[] is M) {
-      return data.map<UkStaffLabourHistoryRowsWorkIn>((
-          Map<String, dynamic> e) => UkStaffLabourHistoryRowsWorkIn.fromJson(e))
-          .toList() as M;
+      return data.map<UkLabourRequestPreselectAddstaffListRows>((Map<String, dynamic> e) => UkLabourRequestPreselectAddstaffListRows.fromJson(e)).toList() as M;
     }
     if (<UkLabourRequestPreselectedListEntity>[] is M) {
       return data.map<UkLabourRequestPreselectedListEntity>((Map<String, dynamic> e) => UkLabourRequestPreselectedListEntity.fromJson(e)).toList() as M;
@@ -1252,9 +1160,7 @@ class JsonConvert {
       return data.map<UkTemplateDetailVehicleList>((Map<String, dynamic> e) => UkTemplateDetailVehicleList.fromJson(e)).toList() as M;
     }
     if (<UkTemplateDetailChallenge25List>[] is M) {
-      return data.map<UkTemplateDetailChallenge25List>((
-          Map<String, dynamic> e) =>
-          UkTemplateDetailChallenge25List.fromJson(e)).toList() as M;
+      return data.map<UkTemplateDetailChallenge25List>((Map<String, dynamic> e) => UkTemplateDetailChallenge25List.fromJson(e)).toList() as M;
     }
     if (<UkTemplateDetailIndexEntity>[] is M) {
       return data.map<UkTemplateDetailIndexEntity>((Map<String, dynamic> e) => UkTemplateDetailIndexEntity.fromJson(e)).toList() as M;
@@ -1266,17 +1172,13 @@ class JsonConvert {
       return data.map<UkTemplateDetailIndexVehicleList>((Map<String, dynamic> e) => UkTemplateDetailIndexVehicleList.fromJson(e)).toList() as M;
     }
     if (<UkTemplateDetailIndexChallenge25List>[] is M) {
-      return data.map<UkTemplateDetailIndexChallenge25List>((
-          Map<String, dynamic> e) =>
-          UkTemplateDetailIndexChallenge25List.fromJson(e)).toList() as M;
+      return data.map<UkTemplateDetailIndexChallenge25List>((Map<String, dynamic> e) => UkTemplateDetailIndexChallenge25List.fromJson(e)).toList() as M;
     }
     if (<UkTemplateTableEntity>[] is M) {
-      return data.map<UkTemplateTableEntity>((Map<String, dynamic> e) =>
-          UkTemplateTableEntity.fromJson(e)).toList() as M;
+      return data.map<UkTemplateTableEntity>((Map<String, dynamic> e) => UkTemplateTableEntity.fromJson(e)).toList() as M;
     }
     if (<UkTemplateTableRows>[] is M) {
-      return data.map<UkTemplateTableRows>((Map<String, dynamic> e) =>
-          UkTemplateTableRows.fromJson(e)).toList() as M;
+      return data.map<UkTemplateTableRows>((Map<String, dynamic> e) => UkTemplateTableRows.fromJson(e)).toList() as M;
     }
     if (<UkTemplateTitleOptionEntity>[] is M) {
       return data.map<UkTemplateTitleOptionEntity>((Map<String, dynamic> e) => UkTemplateTitleOptionEntity.fromJson(e)).toList() as M;
@@ -1428,6 +1330,7 @@ class JsonConvertClassCollection {
     (ReviseLogSGRecords).toString(): ReviseLogSGRecords.fromJson,
     (ReviseLogSGRecordsContent).toString(): ReviseLogSGRecordsContent.fromJson,
     (ReviseLogSGRecordsOption).toString(): ReviseLogSGRecordsOption.fromJson,
+    (ReviseOptionEntity).toString(): ReviseOptionEntity.fromJson,
     (SGAttendanceReviewOptionEntity).toString(): SGAttendanceReviewOptionEntity.fromJson,
     (SGAttendanceReviewTableEntity).toString(): SGAttendanceReviewTableEntity.fromJson,
     (SGAttendanceReviewTableRows).toString(): SGAttendanceReviewTableRows.fromJson,
@@ -1500,6 +1403,16 @@ class JsonConvertClassCollection {
     (THPreSelectedStaffTableRows).toString(): THPreSelectedStaffTableRows.fromJson,
     (THPreSelectedTableEntity).toString(): THPreSelectedTableEntity.fromJson,
     (THPreSelectedTableRows).toString(): THPreSelectedTableRows.fromJson,
+    (THReviseDetailEntity).toString(): THReviseDetailEntity.fromJson,
+    (THReviseTableEntity).toString(): THReviseTableEntity.fromJson,
+    (THReviseTableRows).toString(): THReviseTableRows.fromJson,
+    (THReviseWorkflowEntity).toString(): THReviseWorkflowEntity.fromJson,
+    (THReviseWorkflowRevise).toString(): THReviseWorkflowRevise.fromJson,
+    (THReviseWorkflowReviseApplied).toString(): THReviseWorkflowReviseApplied.fromJson,
+    (THReviseWorkflowRecords).toString(): THReviseWorkflowRecords.fromJson,
+    (THReviseWorkflowRecordsContent).toString(): THReviseWorkflowRecordsContent.fromJson,
+    (THReviseWorkflowRecordsContentReviseHours).toString(): THReviseWorkflowRecordsContentReviseHours.fromJson,
+    (THReviseWorkflowRecordsContentReviseMsg).toString(): THReviseWorkflowRecordsContentReviseMsg.fromJson,
     (THUploadFileEntity).toString(): THUploadFileEntity.fromJson,
     (UKAttendanceEntity).toString(): UKAttendanceEntity.fromJson,
     (UKAttendanceRows).toString(): UKAttendanceRows.fromJson,
@@ -1513,10 +1426,8 @@ class JsonConvertClassCollection {
     (UKSecurityAttendanceEntity).toString(): UKSecurityAttendanceEntity.fromJson,
     (UKSecurityAttendanceRows).toString(): UKSecurityAttendanceRows.fromJson,
     (UKSecurityInOut).toString(): UKSecurityInOut.fromJson,
-    (UKSecurityAttendanceOptionEntity)
-        .toString(): UKSecurityAttendanceOptionEntity.fromJson,
-    (UKSecurityAttendanceOptionFilter)
-        .toString(): UKSecurityAttendanceOptionFilter.fromJson,
+    (UKSecurityAttendanceOptionEntity).toString(): UKSecurityAttendanceOptionEntity.fromJson,
+    (UKSecurityAttendanceOptionFilter).toString(): UKSecurityAttendanceOptionFilter.fromJson,
     (UkAttendanceReviewEntity).toString(): UkAttendanceReviewEntity.fromJson,
     (UkAttendanceReviewRows).toString(): UkAttendanceReviewRows.fromJson,
     (UkAttendanceReviewRemarkEntity).toString(): UkAttendanceReviewRemarkEntity.fromJson,
@@ -1536,64 +1447,35 @@ class JsonConvertClassCollection {
     (UkJobAppliedReviseLogRecordsContentReason).toString(): UkJobAppliedReviseLogRecordsContentReason.fromJson,
     (UkJobAppliedStaffListEntity).toString(): UkJobAppliedStaffListEntity.fromJson,
     (UkJobAppliedStaffListRows).toString(): UkJobAppliedStaffListRows.fromJson,
-    (UkJobAppliedStaffListRowsSecurityIn)
-        .toString(): UkJobAppliedStaffListRowsSecurityIn.fromJson,
-    (UkJobAppliedStaffListRowsSecurityOut)
-        .toString(): UkJobAppliedStaffListRowsSecurityOut.fromJson,
-    (UkJobAppliedStaffListRowsWorkIn)
-        .toString(): UkJobAppliedStaffListRowsWorkIn.fromJson,
-    (UkJobAppliedStaffListRowsWorkOut)
-        .toString(): UkJobAppliedStaffListRowsWorkOut.fromJson,
-    (UkJobListAppliedStaffSearchEntity)
-        .toString(): UkJobListAppliedStaffSearchEntity.fromJson,
-    (UkJobListAppliedStaffSearchRows)
-        .toString(): UkJobListAppliedStaffSearchRows.fromJson,
-    (UkJobTemplateDetailBySelectTitleEntity)
-        .toString(): UkJobTemplateDetailBySelectTitleEntity.fromJson,
-    (UkLabReqShowTemplateEntity).toString(): UkLabReqShowTemplateEntity
-        .fromJson,
-    (UkLabourRequestDetailEntity).toString(): UkLabourRequestDetailEntity
-        .fromJson,
-    (UkLabourRequestDetailCertificateList)
-        .toString(): UkLabourRequestDetailCertificateList.fromJson,
-    (UkLabourRequestDetailVehicleList)
-        .toString(): UkLabourRequestDetailVehicleList.fromJson,
-    (UkLabourRequestDetailChallenge25List)
-        .toString(): UkLabourRequestDetailChallenge25List.fromJson,
-    (UkLabourRequestDetailLocationList)
-        .toString(): UkLabourRequestDetailLocationList.fromJson,
-    (UkLabourRequestDetailTemplateList)
-        .toString(): UkLabourRequestDetailTemplateList.fromJson,
-    (UkLabourRequestDetailDepartmentList)
-        .toString(): UkLabourRequestDetailDepartmentList.fromJson,
-    (UkLabourRequestDetailChargeList)
-        .toString(): UkLabourRequestDetailChargeList.fromJson,
-    (UkLabourRequestDetailEmploymentList)
-        .toString(): UkLabourRequestDetailEmploymentList.fromJson,
-    (UkLabourRequestPreselectAddstaffListEntity)
-        .toString(): UkLabourRequestPreselectAddstaffListEntity.fromJson,
-    (UkLabourRequestPreselectAddstaffListRows)
-        .toString(): UkLabourRequestPreselectAddstaffListRows.fromJson,
-    (UkLabourRequestPreselectedListEntity)
-        .toString(): UkLabourRequestPreselectedListEntity.fromJson,
-    (UkLabourRequestPreselectedListRows)
-        .toString(): UkLabourRequestPreselectedListRows.fromJson,
-    (UkLabourRequestReviewDetailEntity)
-        .toString(): UkLabourRequestReviewDetailEntity.fromJson,
-    (UkLabourRequestReviewDetailOrder)
-        .toString(): UkLabourRequestReviewDetailOrder.fromJson,
-    (UkLabourRequestReviewDetailOrderRequest)
-        .toString(): UkLabourRequestReviewDetailOrderRequest.fromJson,
-    (UkLabourRequestReviewDetailOrderRecords)
-        .toString(): UkLabourRequestReviewDetailOrderRecords.fromJson,
-    (UkLabourRequestReviewDetailRecords)
-        .toString(): UkLabourRequestReviewDetailRecords.fromJson,
-    (UkLabourRequestReviewListEntity)
-        .toString(): UkLabourRequestReviewListEntity.fromJson,
-    (UkLabourRequestReviewListRows).toString(): UkLabourRequestReviewListRows
-        .fromJson,
-    (UkLabourRequestTableEntity).toString(): UkLabourRequestTableEntity
-        .fromJson,
+    (UkJobAppliedStaffListRowsSecurityIn).toString(): UkJobAppliedStaffListRowsSecurityIn.fromJson,
+    (UkJobAppliedStaffListRowsSecurityOut).toString(): UkJobAppliedStaffListRowsSecurityOut.fromJson,
+    (UkJobAppliedStaffListRowsWorkIn).toString(): UkJobAppliedStaffListRowsWorkIn.fromJson,
+    (UkJobAppliedStaffListRowsWorkOut).toString(): UkJobAppliedStaffListRowsWorkOut.fromJson,
+    (UkJobListAppliedStaffSearchEntity).toString(): UkJobListAppliedStaffSearchEntity.fromJson,
+    (UkJobListAppliedStaffSearchRows).toString(): UkJobListAppliedStaffSearchRows.fromJson,
+    (UkJobTemplateDetailBySelectTitleEntity).toString(): UkJobTemplateDetailBySelectTitleEntity.fromJson,
+    (UkLabReqShowTemplateEntity).toString(): UkLabReqShowTemplateEntity.fromJson,
+    (UkLabourRequestDetailEntity).toString(): UkLabourRequestDetailEntity.fromJson,
+    (UkLabourRequestDetailCertificateList).toString(): UkLabourRequestDetailCertificateList.fromJson,
+    (UkLabourRequestDetailVehicleList).toString(): UkLabourRequestDetailVehicleList.fromJson,
+    (UkLabourRequestDetailChallenge25List).toString(): UkLabourRequestDetailChallenge25List.fromJson,
+    (UkLabourRequestDetailLocationList).toString(): UkLabourRequestDetailLocationList.fromJson,
+    (UkLabourRequestDetailTemplateList).toString(): UkLabourRequestDetailTemplateList.fromJson,
+    (UkLabourRequestDetailDepartmentList).toString(): UkLabourRequestDetailDepartmentList.fromJson,
+    (UkLabourRequestDetailChargeList).toString(): UkLabourRequestDetailChargeList.fromJson,
+    (UkLabourRequestDetailEmploymentList).toString(): UkLabourRequestDetailEmploymentList.fromJson,
+    (UkLabourRequestPreselectAddstaffListEntity).toString(): UkLabourRequestPreselectAddstaffListEntity.fromJson,
+    (UkLabourRequestPreselectAddstaffListRows).toString(): UkLabourRequestPreselectAddstaffListRows.fromJson,
+    (UkLabourRequestPreselectedListEntity).toString(): UkLabourRequestPreselectedListEntity.fromJson,
+    (UkLabourRequestPreselectedListRows).toString(): UkLabourRequestPreselectedListRows.fromJson,
+    (UkLabourRequestReviewDetailEntity).toString(): UkLabourRequestReviewDetailEntity.fromJson,
+    (UkLabourRequestReviewDetailOrder).toString(): UkLabourRequestReviewDetailOrder.fromJson,
+    (UkLabourRequestReviewDetailOrderRequest).toString(): UkLabourRequestReviewDetailOrderRequest.fromJson,
+    (UkLabourRequestReviewDetailOrderRecords).toString(): UkLabourRequestReviewDetailOrderRecords.fromJson,
+    (UkLabourRequestReviewDetailRecords).toString(): UkLabourRequestReviewDetailRecords.fromJson,
+    (UkLabourRequestReviewListEntity).toString(): UkLabourRequestReviewListEntity.fromJson,
+    (UkLabourRequestReviewListRows).toString(): UkLabourRequestReviewListRows.fromJson,
+    (UkLabourRequestTableEntity).toString(): UkLabourRequestTableEntity.fromJson,
     (UkLabourRequestTableRows).toString(): UkLabourRequestTableRows.fromJson,
     (UkLabourReviewStatusEntity).toString(): UkLabourReviewStatusEntity.fromJson,
     (UkLabourReviewStatusRow).toString(): UkLabourReviewStatusRow.fromJson,
@@ -1617,24 +1499,16 @@ class JsonConvertClassCollection {
     (UkTemplateDetailEntity).toString(): UkTemplateDetailEntity.fromJson,
     (UkTemplateDetailRow).toString(): UkTemplateDetailRow.fromJson,
     (UkTemplateDetailTitleList).toString(): UkTemplateDetailTitleList.fromJson,
-    (UkTemplateDetailCertificateList)
-        .toString(): UkTemplateDetailCertificateList.fromJson,
-    (UkTemplateDetailVehicleList).toString(): UkTemplateDetailVehicleList
-        .fromJson,
-    (UkTemplateDetailChallenge25List)
-        .toString(): UkTemplateDetailChallenge25List.fromJson,
-    (UkTemplateDetailIndexEntity).toString(): UkTemplateDetailIndexEntity
-        .fromJson,
-    (UkTemplateDetailIndexCertificateList)
-        .toString(): UkTemplateDetailIndexCertificateList.fromJson,
-    (UkTemplateDetailIndexVehicleList)
-        .toString(): UkTemplateDetailIndexVehicleList.fromJson,
-    (UkTemplateDetailIndexChallenge25List)
-        .toString(): UkTemplateDetailIndexChallenge25List.fromJson,
+    (UkTemplateDetailCertificateList).toString(): UkTemplateDetailCertificateList.fromJson,
+    (UkTemplateDetailVehicleList).toString(): UkTemplateDetailVehicleList.fromJson,
+    (UkTemplateDetailChallenge25List).toString(): UkTemplateDetailChallenge25List.fromJson,
+    (UkTemplateDetailIndexEntity).toString(): UkTemplateDetailIndexEntity.fromJson,
+    (UkTemplateDetailIndexCertificateList).toString(): UkTemplateDetailIndexCertificateList.fromJson,
+    (UkTemplateDetailIndexVehicleList).toString(): UkTemplateDetailIndexVehicleList.fromJson,
+    (UkTemplateDetailIndexChallenge25List).toString(): UkTemplateDetailIndexChallenge25List.fromJson,
     (UkTemplateTableEntity).toString(): UkTemplateTableEntity.fromJson,
     (UkTemplateTableRows).toString(): UkTemplateTableRows.fromJson,
-    (UkTemplateTitleOptionEntity).toString(): UkTemplateTitleOptionEntity
-        .fromJson,
+    (UkTemplateTitleOptionEntity).toString(): UkTemplateTitleOptionEntity.fromJson,
     (ServerTime).toString(): ServerTime.fromJson,
   };
 

+ 29 - 0
packages/cs_domain/lib/generated/json/revise_option_entity.g.dart

@@ -0,0 +1,29 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/revise_option_entity.dart';
+import 'package:domain/entity/response/index_option_entity.dart';
+
+
+ReviseOptionEntity $ReviseOptionEntityFromJson(Map<String, dynamic> json) {
+  final ReviseOptionEntity reviseOptionEntity = ReviseOptionEntity();
+  final List<IndexOptionEntity>? statusList = (json['status_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<IndexOptionEntity>(e) as IndexOptionEntity).toList();
+  if (statusList != null) {
+    reviseOptionEntity.statusList = statusList;
+  }
+  return reviseOptionEntity;
+}
+
+Map<String, dynamic> $ReviseOptionEntityToJson(ReviseOptionEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['status_list'] = entity.statusList.map((v) => v.toJson()).toList();
+  return data;
+}
+
+extension ReviseOptionEntityExtension on ReviseOptionEntity {
+  ReviseOptionEntity copyWith({
+    List<IndexOptionEntity>? statusList,
+  }) {
+    return ReviseOptionEntity()
+      ..statusList = statusList ?? this.statusList;
+  }
+}

+ 117 - 0
packages/cs_domain/lib/generated/json/t_h_revise_detail_entity.g.dart

@@ -0,0 +1,117 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/t_h_revise_detail_entity.dart';
+
+THReviseDetailEntity $THReviseDetailEntityFromJson(Map<String, dynamic> json) {
+  final THReviseDetailEntity tHReviseDetailEntity = THReviseDetailEntity();
+  final String? appliedId = jsonConvert.convert<String>(json['applied_id']);
+  if (appliedId != null) {
+    tHReviseDetailEntity.appliedId = appliedId;
+  }
+  final String? labourerName = jsonConvert.convert<String>(json['labourer_name']);
+  if (labourerName != null) {
+    tHReviseDetailEntity.labourerName = labourerName;
+  }
+  final String? jobDate = jsonConvert.convert<String>(json['job_date']);
+  if (jobDate != null) {
+    tHReviseDetailEntity.jobDate = jobDate;
+  }
+  final String? adjustHours = jsonConvert.convert<String>(json['adjust_hours']);
+  if (adjustHours != null) {
+    tHReviseDetailEntity.adjustHours = adjustHours;
+  }
+  final String? totalHours = jsonConvert.convert<String>(json['total_hours']);
+  if (totalHours != null) {
+    tHReviseDetailEntity.totalHours = totalHours;
+  }
+  final String? startTime = jsonConvert.convert<String>(json['start_time']);
+  if (startTime != null) {
+    tHReviseDetailEntity.startTime = startTime;
+  }
+  final String? endTime = jsonConvert.convert<String>(json['end_time']);
+  if (endTime != null) {
+    tHReviseDetailEntity.endTime = endTime;
+  }
+  final String? securityIn = jsonConvert.convert<String>(json['security_in']);
+  if (securityIn != null) {
+    tHReviseDetailEntity.securityIn = securityIn;
+  }
+  final String? securityOut = jsonConvert.convert<String>(json['security_out']);
+  if (securityOut != null) {
+    tHReviseDetailEntity.securityOut = securityOut;
+  }
+  final String? workIn = jsonConvert.convert<String>(json['work_in']);
+  if (workIn != null) {
+    tHReviseDetailEntity.workIn = workIn;
+  }
+  final String? workOut = jsonConvert.convert<String>(json['work_out']);
+  if (workOut != null) {
+    tHReviseDetailEntity.workOut = workOut;
+  }
+  final String? reviseId = jsonConvert.convert<String>(json['revise_id']);
+  if (reviseId != null) {
+    tHReviseDetailEntity.reviseId = reviseId;
+  }
+  final String? reviseHours = jsonConvert.convert<String>(json['revise_hours']);
+  if (reviseHours != null) {
+    tHReviseDetailEntity.reviseHours = reviseHours;
+  }
+  final String? reviseMsg = jsonConvert.convert<String>(json['revise_msg']);
+  if (reviseMsg != null) {
+    tHReviseDetailEntity.reviseMsg = reviseMsg;
+  }
+  return tHReviseDetailEntity;
+}
+
+Map<String, dynamic> $THReviseDetailEntityToJson(THReviseDetailEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['applied_id'] = entity.appliedId;
+  data['labourer_name'] = entity.labourerName;
+  data['job_date'] = entity.jobDate;
+  data['adjust_hours'] = entity.adjustHours;
+  data['total_hours'] = entity.totalHours;
+  data['start_time'] = entity.startTime;
+  data['end_time'] = entity.endTime;
+  data['security_in'] = entity.securityIn;
+  data['security_out'] = entity.securityOut;
+  data['work_in'] = entity.workIn;
+  data['work_out'] = entity.workOut;
+  data['revise_id'] = entity.reviseId;
+  data['revise_hours'] = entity.reviseHours;
+  data['revise_msg'] = entity.reviseMsg;
+  return data;
+}
+
+extension THReviseDetailEntityExtension on THReviseDetailEntity {
+  THReviseDetailEntity copyWith({
+    String? appliedId,
+    String? labourerName,
+    String? jobDate,
+    String? adjustHours,
+    String? totalHours,
+    String? startTime,
+    String? endTime,
+    String? securityIn,
+    String? securityOut,
+    String? workIn,
+    String? workOut,
+    String? reviseId,
+    String? reviseHours,
+    String? reviseMsg,
+  }) {
+    return THReviseDetailEntity()
+      ..appliedId = appliedId ?? this.appliedId
+      ..labourerName = labourerName ?? this.labourerName
+      ..jobDate = jobDate ?? this.jobDate
+      ..adjustHours = adjustHours ?? this.adjustHours
+      ..totalHours = totalHours ?? this.totalHours
+      ..startTime = startTime ?? this.startTime
+      ..endTime = endTime ?? this.endTime
+      ..securityIn = securityIn ?? this.securityIn
+      ..securityOut = securityOut ?? this.securityOut
+      ..workIn = workIn ?? this.workIn
+      ..workOut = workOut ?? this.workOut
+      ..reviseId = reviseId ?? this.reviseId
+      ..reviseHours = reviseHours ?? this.reviseHours
+      ..reviseMsg = reviseMsg ?? this.reviseMsg;
+  }
+}

+ 143 - 0
packages/cs_domain/lib/generated/json/t_h_revise_table_entity.g.dart

@@ -0,0 +1,143 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/t_h_revise_table_entity.dart';
+
+THReviseTableEntity $THReviseTableEntityFromJson(Map<String, dynamic> json) {
+  final THReviseTableEntity tHReviseTableEntity = THReviseTableEntity();
+  final int? total = jsonConvert.convert<int>(json['total']);
+  if (total != null) {
+    tHReviseTableEntity.total = total;
+  }
+  final List<THReviseTableRows>? rows = (json['rows'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<THReviseTableRows>(e) as THReviseTableRows).toList();
+  if (rows != null) {
+    tHReviseTableEntity.rows = rows;
+  }
+  return tHReviseTableEntity;
+}
+
+Map<String, dynamic> $THReviseTableEntityToJson(THReviseTableEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['total'] = entity.total;
+  data['rows'] = entity.rows.map((v) => v.toJson()).toList();
+  return data;
+}
+
+extension THReviseTableEntityExtension on THReviseTableEntity {
+  THReviseTableEntity copyWith({
+    int? total,
+    List<THReviseTableRows>? rows,
+  }) {
+    return THReviseTableEntity()
+      ..total = total ?? this.total
+      ..rows = rows ?? this.rows;
+  }
+}
+
+THReviseTableRows $THReviseTableRowsFromJson(Map<String, dynamic> json) {
+  final THReviseTableRows tHReviseTableRows = THReviseTableRows();
+  final String? reviseId = jsonConvert.convert<String>(json['revise_id']);
+  if (reviseId != null) {
+    tHReviseTableRows.reviseId = reviseId;
+  }
+  final String? reviseHours = jsonConvert.convert<String>(json['revise_hours']);
+  if (reviseHours != null) {
+    tHReviseTableRows.reviseHours = reviseHours;
+  }
+  final String? name = jsonConvert.convert<String>(json['name']);
+  if (name != null) {
+    tHReviseTableRows.name = name;
+  }
+  final String? nric = jsonConvert.convert<String>(json['nric']);
+  if (nric != null) {
+    tHReviseTableRows.nric = nric;
+  }
+  final String? jobDate = jsonConvert.convert<String>(json['job_date']);
+  if (jobDate != null) {
+    tHReviseTableRows.jobDate = jobDate;
+  }
+  final String? jobTime = jsonConvert.convert<String>(json['job_time']);
+  if (jobTime != null) {
+    tHReviseTableRows.jobTime = jobTime;
+  }
+  final String? startTime = jsonConvert.convert<String>(json['start_time']);
+  if (startTime != null) {
+    tHReviseTableRows.startTime = startTime;
+  }
+  final String? endTime = jsonConvert.convert<String>(json['end_time']);
+  if (endTime != null) {
+    tHReviseTableRows.endTime = endTime;
+  }
+  final String? adjustHours = jsonConvert.convert<String>(json['adjust_hours']);
+  if (adjustHours != null) {
+    tHReviseTableRows.adjustHours = adjustHours;
+  }
+  final String? totalHours = jsonConvert.convert<String>(json['total_hours']);
+  if (totalHours != null) {
+    tHReviseTableRows.totalHours = totalHours;
+  }
+  final int? status = jsonConvert.convert<int>(json['status']);
+  if (status != null) {
+    tHReviseTableRows.status = status;
+  }
+  final String? statusShow = jsonConvert.convert<String>(json['status_show']);
+  if (statusShow != null) {
+    tHReviseTableRows.statusShow = statusShow;
+  }
+  final List<String>? actionList = (json['action_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<String>(e) as String).toList();
+  if (actionList != null) {
+    tHReviseTableRows.actionList = actionList;
+  }
+  return tHReviseTableRows;
+}
+
+Map<String, dynamic> $THReviseTableRowsToJson(THReviseTableRows entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['revise_id'] = entity.reviseId;
+  data['revise_hours'] = entity.reviseHours;
+  data['name'] = entity.name;
+  data['nric'] = entity.nric;
+  data['job_date'] = entity.jobDate;
+  data['job_time'] = entity.jobTime;
+  data['start_time'] = entity.startTime;
+  data['end_time'] = entity.endTime;
+  data['adjust_hours'] = entity.adjustHours;
+  data['total_hours'] = entity.totalHours;
+  data['status'] = entity.status;
+  data['status_show'] = entity.statusShow;
+  data['action_list'] = entity.actionList;
+  return data;
+}
+
+extension THReviseTableRowsExtension on THReviseTableRows {
+  THReviseTableRows copyWith({
+    String? reviseId,
+    String? reviseHours,
+    String? name,
+    String? nric,
+    String? jobDate,
+    String? jobTime,
+    String? startTime,
+    String? endTime,
+    String? adjustHours,
+    String? totalHours,
+    int? status,
+    String? statusShow,
+    List<String>? actionList,
+  }) {
+    return THReviseTableRows()
+      ..reviseId = reviseId ?? this.reviseId
+      ..reviseHours = reviseHours ?? this.reviseHours
+      ..name = name ?? this.name
+      ..nric = nric ?? this.nric
+      ..jobDate = jobDate ?? this.jobDate
+      ..jobTime = jobTime ?? this.jobTime
+      ..startTime = startTime ?? this.startTime
+      ..endTime = endTime ?? this.endTime
+      ..adjustHours = adjustHours ?? this.adjustHours
+      ..totalHours = totalHours ?? this.totalHours
+      ..status = status ?? this.status
+      ..statusShow = statusShow ?? this.statusShow
+      ..actionList = actionList ?? this.actionList;
+  }
+}

+ 766 - 0
packages/cs_domain/lib/generated/json/t_h_revise_workflow_entity.g.dart

@@ -0,0 +1,766 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/t_h_revise_workflow_entity.dart';
+
+THReviseWorkflowEntity $THReviseWorkflowEntityFromJson(Map<String, dynamic> json) {
+  final THReviseWorkflowEntity tHReviseWorkflowEntity = THReviseWorkflowEntity();
+  final THReviseWorkflowRevise? revise = jsonConvert.convert<THReviseWorkflowRevise>(json['revise']);
+  if (revise != null) {
+    tHReviseWorkflowEntity.revise = revise;
+  }
+  final List<THReviseWorkflowRecords>? records = (json['records'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<THReviseWorkflowRecords>(e) as THReviseWorkflowRecords).toList();
+  if (records != null) {
+    tHReviseWorkflowEntity.records = records;
+  }
+  return tHReviseWorkflowEntity;
+}
+
+Map<String, dynamic> $THReviseWorkflowEntityToJson(THReviseWorkflowEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['revise'] = entity.revise?.toJson();
+  data['records'] = entity.records.map((v) => v.toJson()).toList();
+  return data;
+}
+
+extension THReviseWorkflowEntityExtension on THReviseWorkflowEntity {
+  THReviseWorkflowEntity copyWith({
+    THReviseWorkflowRevise? revise,
+    List<THReviseWorkflowRecords>? records,
+  }) {
+    return THReviseWorkflowEntity()
+      ..revise = revise ?? this.revise
+      ..records = records ?? this.records;
+  }
+}
+
+THReviseWorkflowRevise $THReviseWorkflowReviseFromJson(Map<String, dynamic> json) {
+  final THReviseWorkflowRevise tHReviseWorkflowRevise = THReviseWorkflowRevise();
+  final String? id = jsonConvert.convert<String>(json['id']);
+  if (id != null) {
+    tHReviseWorkflowRevise.id = id;
+  }
+  final String? sReviseId = jsonConvert.convert<String>(json['s_revise_id']);
+  if (sReviseId != null) {
+    tHReviseWorkflowRevise.sReviseId = sReviseId;
+  }
+  final String? employerId = jsonConvert.convert<String>(json['employer_id']);
+  if (employerId != null) {
+    tHReviseWorkflowRevise.employerId = employerId;
+  }
+  final String? appliedId = jsonConvert.convert<String>(json['applied_id']);
+  if (appliedId != null) {
+    tHReviseWorkflowRevise.appliedId = appliedId;
+  }
+  final String? sId = jsonConvert.convert<String>(json['s_id']);
+  if (sId != null) {
+    tHReviseWorkflowRevise.sId = sId;
+  }
+  final String? reviseHours = jsonConvert.convert<String>(json['revise_hours']);
+  if (reviseHours != null) {
+    tHReviseWorkflowRevise.reviseHours = reviseHours;
+  }
+  final String? reviseGrossWage = jsonConvert.convert<String>(json['revise_gross_wage']);
+  if (reviseGrossWage != null) {
+    tHReviseWorkflowRevise.reviseGrossWage = reviseGrossWage;
+  }
+  final String? reviseAgencyWage = jsonConvert.convert<String>(json['revise_agency_wage']);
+  if (reviseAgencyWage != null) {
+    tHReviseWorkflowRevise.reviseAgencyWage = reviseAgencyWage;
+  }
+  final int? status = jsonConvert.convert<int>(json['status']);
+  if (status != null) {
+    tHReviseWorkflowRevise.status = status;
+  }
+  final String? reviseMsg = jsonConvert.convert<String>(json['revise_msg']);
+  if (reviseMsg != null) {
+    tHReviseWorkflowRevise.reviseMsg = reviseMsg;
+  }
+  final String? rejectMsg = jsonConvert.convert<String>(json['reject_msg']);
+  if (rejectMsg != null) {
+    tHReviseWorkflowRevise.rejectMsg = rejectMsg;
+  }
+  final String? applyTime = jsonConvert.convert<String>(json['apply_time']);
+  if (applyTime != null) {
+    tHReviseWorkflowRevise.applyTime = applyTime;
+  }
+  final String? completeTime = jsonConvert.convert<String>(json['complete_time']);
+  if (completeTime != null) {
+    tHReviseWorkflowRevise.completeTime = completeTime;
+  }
+  final String? createdAt = jsonConvert.convert<String>(json['created_at']);
+  if (createdAt != null) {
+    tHReviseWorkflowRevise.createdAt = createdAt;
+  }
+  final String? updatedAt = jsonConvert.convert<String>(json['updated_at']);
+  if (updatedAt != null) {
+    tHReviseWorkflowRevise.updatedAt = updatedAt;
+  }
+  final String? deletedAt = jsonConvert.convert<String>(json['deleted_at']);
+  if (deletedAt != null) {
+    tHReviseWorkflowRevise.deletedAt = deletedAt;
+  }
+  final THReviseWorkflowReviseApplied? applied = jsonConvert.convert<THReviseWorkflowReviseApplied>(json['applied']);
+  if (applied != null) {
+    tHReviseWorkflowRevise.applied = applied;
+  }
+  return tHReviseWorkflowRevise;
+}
+
+Map<String, dynamic> $THReviseWorkflowReviseToJson(THReviseWorkflowRevise entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['id'] = entity.id;
+  data['s_revise_id'] = entity.sReviseId;
+  data['employer_id'] = entity.employerId;
+  data['applied_id'] = entity.appliedId;
+  data['s_id'] = entity.sId;
+  data['revise_hours'] = entity.reviseHours;
+  data['revise_gross_wage'] = entity.reviseGrossWage;
+  data['revise_agency_wage'] = entity.reviseAgencyWage;
+  data['status'] = entity.status;
+  data['revise_msg'] = entity.reviseMsg;
+  data['reject_msg'] = entity.rejectMsg;
+  data['apply_time'] = entity.applyTime;
+  data['complete_time'] = entity.completeTime;
+  data['created_at'] = entity.createdAt;
+  data['updated_at'] = entity.updatedAt;
+  data['deleted_at'] = entity.deletedAt;
+  data['applied'] = entity.applied?.toJson();
+  return data;
+}
+
+extension THReviseWorkflowReviseExtension on THReviseWorkflowRevise {
+  THReviseWorkflowRevise copyWith({
+    String? id,
+    String? sReviseId,
+    String? employerId,
+    String? appliedId,
+    String? sId,
+    String? reviseHours,
+    String? reviseGrossWage,
+    String? reviseAgencyWage,
+    int? status,
+    String? reviseMsg,
+    String? rejectMsg,
+    String? applyTime,
+    String? completeTime,
+    String? createdAt,
+    String? updatedAt,
+    String? deletedAt,
+    THReviseWorkflowReviseApplied? applied,
+  }) {
+    return THReviseWorkflowRevise()
+      ..id = id ?? this.id
+      ..sReviseId = sReviseId ?? this.sReviseId
+      ..employerId = employerId ?? this.employerId
+      ..appliedId = appliedId ?? this.appliedId
+      ..sId = sId ?? this.sId
+      ..reviseHours = reviseHours ?? this.reviseHours
+      ..reviseGrossWage = reviseGrossWage ?? this.reviseGrossWage
+      ..reviseAgencyWage = reviseAgencyWage ?? this.reviseAgencyWage
+      ..status = status ?? this.status
+      ..reviseMsg = reviseMsg ?? this.reviseMsg
+      ..rejectMsg = rejectMsg ?? this.rejectMsg
+      ..applyTime = applyTime ?? this.applyTime
+      ..completeTime = completeTime ?? this.completeTime
+      ..createdAt = createdAt ?? this.createdAt
+      ..updatedAt = updatedAt ?? this.updatedAt
+      ..deletedAt = deletedAt ?? this.deletedAt
+      ..applied = applied ?? this.applied;
+  }
+}
+
+THReviseWorkflowReviseApplied $THReviseWorkflowReviseAppliedFromJson(Map<String, dynamic> json) {
+  final THReviseWorkflowReviseApplied tHReviseWorkflowReviseApplied = THReviseWorkflowReviseApplied();
+  final String? id = jsonConvert.convert<String>(json['id']);
+  if (id != null) {
+    tHReviseWorkflowReviseApplied.id = id;
+  }
+  final String? jobId = jsonConvert.convert<String>(json['job_id']);
+  if (jobId != null) {
+    tHReviseWorkflowReviseApplied.jobId = jobId;
+  }
+  final String? sId = jsonConvert.convert<String>(json['s_id']);
+  if (sId != null) {
+    tHReviseWorkflowReviseApplied.sId = sId;
+  }
+  final String? memberId = jsonConvert.convert<String>(json['member_id']);
+  if (memberId != null) {
+    tHReviseWorkflowReviseApplied.memberId = memberId;
+  }
+  final String? labourerId = jsonConvert.convert<String>(json['labourer_id']);
+  if (labourerId != null) {
+    tHReviseWorkflowReviseApplied.labourerId = labourerId;
+  }
+  final String? labourerName = jsonConvert.convert<String>(json['labourer_name']);
+  if (labourerName != null) {
+    tHReviseWorkflowReviseApplied.labourerName = labourerName;
+  }
+  final String? labourerNric = jsonConvert.convert<String>(json['labourer_nric']);
+  if (labourerNric != null) {
+    tHReviseWorkflowReviseApplied.labourerNric = labourerNric;
+  }
+  final String? sourceType = jsonConvert.convert<String>(json['source_type']);
+  if (sourceType != null) {
+    tHReviseWorkflowReviseApplied.sourceType = sourceType;
+  }
+  final String? employerId = jsonConvert.convert<String>(json['employer_id']);
+  if (employerId != null) {
+    tHReviseWorkflowReviseApplied.employerId = employerId;
+  }
+  final String? employerName = jsonConvert.convert<String>(json['employer_name']);
+  if (employerName != null) {
+    tHReviseWorkflowReviseApplied.employerName = employerName;
+  }
+  final String? agencyId = jsonConvert.convert<String>(json['agency_id']);
+  if (agencyId != null) {
+    tHReviseWorkflowReviseApplied.agencyId = agencyId;
+  }
+  final String? agencyName = jsonConvert.convert<String>(json['agency_name']);
+  if (agencyName != null) {
+    tHReviseWorkflowReviseApplied.agencyName = agencyName;
+  }
+  final String? jobTitle = jsonConvert.convert<String>(json['job_title']);
+  if (jobTitle != null) {
+    tHReviseWorkflowReviseApplied.jobTitle = jobTitle;
+  }
+  final String? outletId = jsonConvert.convert<String>(json['outlet_id']);
+  if (outletId != null) {
+    tHReviseWorkflowReviseApplied.outletId = outletId;
+  }
+  final String? outletName = jsonConvert.convert<String>(json['outlet_name']);
+  if (outletName != null) {
+    tHReviseWorkflowReviseApplied.outletName = outletName;
+  }
+  final String? ballroomId = jsonConvert.convert<String>(json['ballroom_id']);
+  if (ballroomId != null) {
+    tHReviseWorkflowReviseApplied.ballroomId = ballroomId;
+  }
+  final String? ballroomName = jsonConvert.convert<String>(json['ballroom_name']);
+  if (ballroomName != null) {
+    tHReviseWorkflowReviseApplied.ballroomName = ballroomName;
+  }
+  final String? jobDate = jsonConvert.convert<String>(json['job_date']);
+  if (jobDate != null) {
+    tHReviseWorkflowReviseApplied.jobDate = jobDate;
+  }
+  final String? startTime = jsonConvert.convert<String>(json['start_time']);
+  if (startTime != null) {
+    tHReviseWorkflowReviseApplied.startTime = startTime;
+  }
+  final String? endTime = jsonConvert.convert<String>(json['end_time']);
+  if (endTime != null) {
+    tHReviseWorkflowReviseApplied.endTime = endTime;
+  }
+  final String? workingHours = jsonConvert.convert<String>(json['working_hours']);
+  if (workingHours != null) {
+    tHReviseWorkflowReviseApplied.workingHours = workingHours;
+  }
+  final String? adjustHours = jsonConvert.convert<String>(json['adjust_hours']);
+  if (adjustHours != null) {
+    tHReviseWorkflowReviseApplied.adjustHours = adjustHours;
+  }
+  final String? totalHours = jsonConvert.convert<String>(json['total_hours']);
+  if (totalHours != null) {
+    tHReviseWorkflowReviseApplied.totalHours = totalHours;
+  }
+  final String? hourlyRate = jsonConvert.convert<String>(json['hourly_rate']);
+  if (hourlyRate != null) {
+    tHReviseWorkflowReviseApplied.hourlyRate = hourlyRate;
+  }
+  final String? grossWage = jsonConvert.convert<String>(json['gross_wage']);
+  if (grossWage != null) {
+    tHReviseWorkflowReviseApplied.grossWage = grossWage;
+  }
+  final int? securityClockIn = jsonConvert.convert<int>(json['security_clock_in']);
+  if (securityClockIn != null) {
+    tHReviseWorkflowReviseApplied.securityClockIn = securityClockIn;
+  }
+  final int? securityClockOut = jsonConvert.convert<int>(json['security_clock_out']);
+  if (securityClockOut != null) {
+    tHReviseWorkflowReviseApplied.securityClockOut = securityClockOut;
+  }
+  final int? workClockIn = jsonConvert.convert<int>(json['work_clock_in']);
+  if (workClockIn != null) {
+    tHReviseWorkflowReviseApplied.workClockIn = workClockIn;
+  }
+  final int? workClockOut = jsonConvert.convert<int>(json['work_clock_out']);
+  if (workClockOut != null) {
+    tHReviseWorkflowReviseApplied.workClockOut = workClockOut;
+  }
+  final int? securityIn = jsonConvert.convert<int>(json['security_in']);
+  if (securityIn != null) {
+    tHReviseWorkflowReviseApplied.securityIn = securityIn;
+  }
+  final int? securityOut = jsonConvert.convert<int>(json['security_out']);
+  if (securityOut != null) {
+    tHReviseWorkflowReviseApplied.securityOut = securityOut;
+  }
+  final int? workIn = jsonConvert.convert<int>(json['work_in']);
+  if (workIn != null) {
+    tHReviseWorkflowReviseApplied.workIn = workIn;
+  }
+  final int? workOut = jsonConvert.convert<int>(json['work_out']);
+  if (workOut != null) {
+    tHReviseWorkflowReviseApplied.workOut = workOut;
+  }
+  final int? status = jsonConvert.convert<int>(json['status']);
+  if (status != null) {
+    tHReviseWorkflowReviseApplied.status = status;
+  }
+  final int? remarkStatus = jsonConvert.convert<int>(json['remark_status']);
+  if (remarkStatus != null) {
+    tHReviseWorkflowReviseApplied.remarkStatus = remarkStatus;
+  }
+  final String? createdAt = jsonConvert.convert<String>(json['created_at']);
+  if (createdAt != null) {
+    tHReviseWorkflowReviseApplied.createdAt = createdAt;
+  }
+  final String? updatedAt = jsonConvert.convert<String>(json['updated_at']);
+  if (updatedAt != null) {
+    tHReviseWorkflowReviseApplied.updatedAt = updatedAt;
+  }
+  final int? syncPayroll = jsonConvert.convert<int>(json['sync_payroll']);
+  if (syncPayroll != null) {
+    tHReviseWorkflowReviseApplied.syncPayroll = syncPayroll;
+  }
+  final String? signImage = jsonConvert.convert<String>(json['sign_image']);
+  if (signImage != null) {
+    tHReviseWorkflowReviseApplied.signImage = signImage;
+  }
+  final String? eventName = jsonConvert.convert<String>(json['event_name']);
+  if (eventName != null) {
+    tHReviseWorkflowReviseApplied.eventName = eventName;
+  }
+  final String? eventType = jsonConvert.convert<String>(json['event_type']);
+  if (eventType != null) {
+    tHReviseWorkflowReviseApplied.eventType = eventType;
+  }
+  final int? workingType = jsonConvert.convert<int>(json['working_type']);
+  if (workingType != null) {
+    tHReviseWorkflowReviseApplied.workingType = workingType;
+  }
+  final String? epfEmployer = jsonConvert.convert<String>(json['epf_employer']);
+  if (epfEmployer != null) {
+    tHReviseWorkflowReviseApplied.epfEmployer = epfEmployer;
+  }
+  final String? epfEmployee = jsonConvert.convert<String>(json['epf_employee']);
+  if (epfEmployee != null) {
+    tHReviseWorkflowReviseApplied.epfEmployee = epfEmployee;
+  }
+  final String? epfTotal = jsonConvert.convert<String>(json['epf_total']);
+  if (epfTotal != null) {
+    tHReviseWorkflowReviseApplied.epfTotal = epfTotal;
+  }
+  final String? netPay = jsonConvert.convert<String>(json['net_pay']);
+  if (netPay != null) {
+    tHReviseWorkflowReviseApplied.netPay = netPay;
+  }
+  final String? socso = jsonConvert.convert<String>(json['socso']);
+  if (socso != null) {
+    tHReviseWorkflowReviseApplied.socso = socso;
+  }
+  final int? paymentStatus = jsonConvert.convert<int>(json['payment_status']);
+  if (paymentStatus != null) {
+    tHReviseWorkflowReviseApplied.paymentStatus = paymentStatus;
+  }
+  final String? paidTime = jsonConvert.convert<String>(json['paid_time']);
+  if (paidTime != null) {
+    tHReviseWorkflowReviseApplied.paidTime = paidTime;
+  }
+  final String? agencyRate = jsonConvert.convert<String>(json['agency_rate']);
+  if (agencyRate != null) {
+    tHReviseWorkflowReviseApplied.agencyRate = agencyRate;
+  }
+  final String? agencyWage = jsonConvert.convert<String>(json['agency_wage']);
+  if (agencyWage != null) {
+    tHReviseWorkflowReviseApplied.agencyWage = agencyWage;
+  }
+  final String? remark = jsonConvert.convert<String>(json['remark']);
+  if (remark != null) {
+    tHReviseWorkflowReviseApplied.remark = remark;
+  }
+  final int? reasonType = jsonConvert.convert<int>(json['reason_type']);
+  if (reasonType != null) {
+    tHReviseWorkflowReviseApplied.reasonType = reasonType;
+  }
+  final int? auditReject = jsonConvert.convert<int>(json['audit_reject']);
+  if (auditReject != null) {
+    tHReviseWorkflowReviseApplied.auditReject = auditReject;
+  }
+  final String? reviseHours = jsonConvert.convert<String>(json['revise_hours']);
+  if (reviseHours != null) {
+    tHReviseWorkflowReviseApplied.reviseHours = reviseHours;
+  }
+  final String? reviseGrossWage = jsonConvert.convert<String>(json['revise_gross_wage']);
+  if (reviseGrossWage != null) {
+    tHReviseWorkflowReviseApplied.reviseGrossWage = reviseGrossWage;
+  }
+  final String? reviseAgencyWage = jsonConvert.convert<String>(json['revise_agency_wage']);
+  if (reviseAgencyWage != null) {
+    tHReviseWorkflowReviseApplied.reviseAgencyWage = reviseAgencyWage;
+  }
+  final int? isOt = jsonConvert.convert<int>(json['is_ot']);
+  if (isOt != null) {
+    tHReviseWorkflowReviseApplied.isOt = isOt;
+  }
+  final String? rejectMsg = jsonConvert.convert<String>(json['reject_msg']);
+  if (rejectMsg != null) {
+    tHReviseWorkflowReviseApplied.rejectMsg = rejectMsg;
+  }
+  return tHReviseWorkflowReviseApplied;
+}
+
+Map<String, dynamic> $THReviseWorkflowReviseAppliedToJson(THReviseWorkflowReviseApplied entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['id'] = entity.id;
+  data['job_id'] = entity.jobId;
+  data['s_id'] = entity.sId;
+  data['member_id'] = entity.memberId;
+  data['labourer_id'] = entity.labourerId;
+  data['labourer_name'] = entity.labourerName;
+  data['labourer_nric'] = entity.labourerNric;
+  data['source_type'] = entity.sourceType;
+  data['employer_id'] = entity.employerId;
+  data['employer_name'] = entity.employerName;
+  data['agency_id'] = entity.agencyId;
+  data['agency_name'] = entity.agencyName;
+  data['job_title'] = entity.jobTitle;
+  data['outlet_id'] = entity.outletId;
+  data['outlet_name'] = entity.outletName;
+  data['ballroom_id'] = entity.ballroomId;
+  data['ballroom_name'] = entity.ballroomName;
+  data['job_date'] = entity.jobDate;
+  data['start_time'] = entity.startTime;
+  data['end_time'] = entity.endTime;
+  data['working_hours'] = entity.workingHours;
+  data['adjust_hours'] = entity.adjustHours;
+  data['total_hours'] = entity.totalHours;
+  data['hourly_rate'] = entity.hourlyRate;
+  data['gross_wage'] = entity.grossWage;
+  data['security_clock_in'] = entity.securityClockIn;
+  data['security_clock_out'] = entity.securityClockOut;
+  data['work_clock_in'] = entity.workClockIn;
+  data['work_clock_out'] = entity.workClockOut;
+  data['security_in'] = entity.securityIn;
+  data['security_out'] = entity.securityOut;
+  data['work_in'] = entity.workIn;
+  data['work_out'] = entity.workOut;
+  data['status'] = entity.status;
+  data['remark_status'] = entity.remarkStatus;
+  data['created_at'] = entity.createdAt;
+  data['updated_at'] = entity.updatedAt;
+  data['sync_payroll'] = entity.syncPayroll;
+  data['sign_image'] = entity.signImage;
+  data['event_name'] = entity.eventName;
+  data['event_type'] = entity.eventType;
+  data['working_type'] = entity.workingType;
+  data['epf_employer'] = entity.epfEmployer;
+  data['epf_employee'] = entity.epfEmployee;
+  data['epf_total'] = entity.epfTotal;
+  data['net_pay'] = entity.netPay;
+  data['socso'] = entity.socso;
+  data['payment_status'] = entity.paymentStatus;
+  data['paid_time'] = entity.paidTime;
+  data['agency_rate'] = entity.agencyRate;
+  data['agency_wage'] = entity.agencyWage;
+  data['remark'] = entity.remark;
+  data['reason_type'] = entity.reasonType;
+  data['audit_reject'] = entity.auditReject;
+  data['revise_hours'] = entity.reviseHours;
+  data['revise_gross_wage'] = entity.reviseGrossWage;
+  data['revise_agency_wage'] = entity.reviseAgencyWage;
+  data['is_ot'] = entity.isOt;
+  data['reject_msg'] = entity.rejectMsg;
+  return data;
+}
+
+extension THReviseWorkflowReviseAppliedExtension on THReviseWorkflowReviseApplied {
+  THReviseWorkflowReviseApplied copyWith({
+    String? id,
+    String? jobId,
+    String? sId,
+    String? memberId,
+    String? labourerId,
+    String? labourerName,
+    String? labourerNric,
+    String? sourceType,
+    String? employerId,
+    String? employerName,
+    String? agencyId,
+    String? agencyName,
+    String? jobTitle,
+    String? outletId,
+    String? outletName,
+    String? ballroomId,
+    String? ballroomName,
+    String? jobDate,
+    String? startTime,
+    String? endTime,
+    String? workingHours,
+    String? adjustHours,
+    String? totalHours,
+    String? hourlyRate,
+    String? grossWage,
+    int? securityClockIn,
+    int? securityClockOut,
+    int? workClockIn,
+    int? workClockOut,
+    int? securityIn,
+    int? securityOut,
+    int? workIn,
+    int? workOut,
+    int? status,
+    int? remarkStatus,
+    String? createdAt,
+    String? updatedAt,
+    int? syncPayroll,
+    String? signImage,
+    String? eventName,
+    String? eventType,
+    int? workingType,
+    String? epfEmployer,
+    String? epfEmployee,
+    String? epfTotal,
+    String? netPay,
+    String? socso,
+    int? paymentStatus,
+    String? paidTime,
+    String? agencyRate,
+    String? agencyWage,
+    String? remark,
+    int? reasonType,
+    int? auditReject,
+    String? reviseHours,
+    String? reviseGrossWage,
+    String? reviseAgencyWage,
+    int? isOt,
+    String? rejectMsg,
+  }) {
+    return THReviseWorkflowReviseApplied()
+      ..id = id ?? this.id
+      ..jobId = jobId ?? this.jobId
+      ..sId = sId ?? this.sId
+      ..memberId = memberId ?? this.memberId
+      ..labourerId = labourerId ?? this.labourerId
+      ..labourerName = labourerName ?? this.labourerName
+      ..labourerNric = labourerNric ?? this.labourerNric
+      ..sourceType = sourceType ?? this.sourceType
+      ..employerId = employerId ?? this.employerId
+      ..employerName = employerName ?? this.employerName
+      ..agencyId = agencyId ?? this.agencyId
+      ..agencyName = agencyName ?? this.agencyName
+      ..jobTitle = jobTitle ?? this.jobTitle
+      ..outletId = outletId ?? this.outletId
+      ..outletName = outletName ?? this.outletName
+      ..ballroomId = ballroomId ?? this.ballroomId
+      ..ballroomName = ballroomName ?? this.ballroomName
+      ..jobDate = jobDate ?? this.jobDate
+      ..startTime = startTime ?? this.startTime
+      ..endTime = endTime ?? this.endTime
+      ..workingHours = workingHours ?? this.workingHours
+      ..adjustHours = adjustHours ?? this.adjustHours
+      ..totalHours = totalHours ?? this.totalHours
+      ..hourlyRate = hourlyRate ?? this.hourlyRate
+      ..grossWage = grossWage ?? this.grossWage
+      ..securityClockIn = securityClockIn ?? this.securityClockIn
+      ..securityClockOut = securityClockOut ?? this.securityClockOut
+      ..workClockIn = workClockIn ?? this.workClockIn
+      ..workClockOut = workClockOut ?? this.workClockOut
+      ..securityIn = securityIn ?? this.securityIn
+      ..securityOut = securityOut ?? this.securityOut
+      ..workIn = workIn ?? this.workIn
+      ..workOut = workOut ?? this.workOut
+      ..status = status ?? this.status
+      ..remarkStatus = remarkStatus ?? this.remarkStatus
+      ..createdAt = createdAt ?? this.createdAt
+      ..updatedAt = updatedAt ?? this.updatedAt
+      ..syncPayroll = syncPayroll ?? this.syncPayroll
+      ..signImage = signImage ?? this.signImage
+      ..eventName = eventName ?? this.eventName
+      ..eventType = eventType ?? this.eventType
+      ..workingType = workingType ?? this.workingType
+      ..epfEmployer = epfEmployer ?? this.epfEmployer
+      ..epfEmployee = epfEmployee ?? this.epfEmployee
+      ..epfTotal = epfTotal ?? this.epfTotal
+      ..netPay = netPay ?? this.netPay
+      ..socso = socso ?? this.socso
+      ..paymentStatus = paymentStatus ?? this.paymentStatus
+      ..paidTime = paidTime ?? this.paidTime
+      ..agencyRate = agencyRate ?? this.agencyRate
+      ..agencyWage = agencyWage ?? this.agencyWage
+      ..remark = remark ?? this.remark
+      ..reasonType = reasonType ?? this.reasonType
+      ..auditReject = auditReject ?? this.auditReject
+      ..reviseHours = reviseHours ?? this.reviseHours
+      ..reviseGrossWage = reviseGrossWage ?? this.reviseGrossWage
+      ..reviseAgencyWage = reviseAgencyWage ?? this.reviseAgencyWage
+      ..isOt = isOt ?? this.isOt
+      ..rejectMsg = rejectMsg ?? this.rejectMsg;
+  }
+}
+
+THReviseWorkflowRecords $THReviseWorkflowRecordsFromJson(Map<String, dynamic> json) {
+  final THReviseWorkflowRecords tHReviseWorkflowRecords = THReviseWorkflowRecords();
+  final String? id = jsonConvert.convert<String>(json['id']);
+  if (id != null) {
+    tHReviseWorkflowRecords.id = id;
+  }
+  final String? operationName = jsonConvert.convert<String>(json['operation_name']);
+  if (operationName != null) {
+    tHReviseWorkflowRecords.operationName = operationName;
+  }
+  final String? dataType = jsonConvert.convert<String>(json['data_type']);
+  if (dataType != null) {
+    tHReviseWorkflowRecords.dataType = dataType;
+  }
+  final String? desc = jsonConvert.convert<String>(json['desc']);
+  if (desc != null) {
+    tHReviseWorkflowRecords.desc = desc;
+  }
+  final THReviseWorkflowRecordsContent? content = jsonConvert.convert<THReviseWorkflowRecordsContent>(json['content']);
+  if (content != null) {
+    tHReviseWorkflowRecords.content = content;
+  }
+  final String? createdAt = jsonConvert.convert<String>(json['created_at']);
+  if (createdAt != null) {
+    tHReviseWorkflowRecords.createdAt = createdAt;
+  }
+  final String? actClass = jsonConvert.convert<String>(json['act_class']);
+  if (actClass != null) {
+    tHReviseWorkflowRecords.actClass = actClass;
+  }
+  final String? actText = jsonConvert.convert<String>(json['act_text']);
+  if (actText != null) {
+    tHReviseWorkflowRecords.actText = actText;
+  }
+  return tHReviseWorkflowRecords;
+}
+
+Map<String, dynamic> $THReviseWorkflowRecordsToJson(THReviseWorkflowRecords entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['id'] = entity.id;
+  data['operation_name'] = entity.operationName;
+  data['data_type'] = entity.dataType;
+  data['desc'] = entity.desc;
+  data['content'] = entity.content?.toJson();
+  data['created_at'] = entity.createdAt;
+  data['act_class'] = entity.actClass;
+  data['act_text'] = entity.actText;
+  return data;
+}
+
+extension THReviseWorkflowRecordsExtension on THReviseWorkflowRecords {
+  THReviseWorkflowRecords copyWith({
+    String? id,
+    String? operationName,
+    String? dataType,
+    String? desc,
+    THReviseWorkflowRecordsContent? content,
+    String? createdAt,
+    String? actClass,
+    String? actText,
+  }) {
+    return THReviseWorkflowRecords()
+      ..id = id ?? this.id
+      ..operationName = operationName ?? this.operationName
+      ..dataType = dataType ?? this.dataType
+      ..desc = desc ?? this.desc
+      ..content = content ?? this.content
+      ..createdAt = createdAt ?? this.createdAt
+      ..actClass = actClass ?? this.actClass
+      ..actText = actText ?? this.actText;
+  }
+}
+
+THReviseWorkflowRecordsContent $THReviseWorkflowRecordsContentFromJson(Map<String, dynamic> json) {
+  final THReviseWorkflowRecordsContent tHReviseWorkflowRecordsContent = THReviseWorkflowRecordsContent();
+  final THReviseWorkflowRecordsContentReviseHours? reviseHours = jsonConvert.convert<THReviseWorkflowRecordsContentReviseHours>(json['revise_hours']);
+  if (reviseHours != null) {
+    tHReviseWorkflowRecordsContent.reviseHours = reviseHours;
+  }
+  final THReviseWorkflowRecordsContentReviseMsg? reviseMsg = jsonConvert.convert<THReviseWorkflowRecordsContentReviseMsg>(json['revise_msg']);
+  if (reviseMsg != null) {
+    tHReviseWorkflowRecordsContent.reviseMsg = reviseMsg;
+  }
+  return tHReviseWorkflowRecordsContent;
+}
+
+Map<String, dynamic> $THReviseWorkflowRecordsContentToJson(THReviseWorkflowRecordsContent entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['revise_hours'] = entity.reviseHours?.toJson();
+  data['revise_msg'] = entity.reviseMsg?.toJson();
+  return data;
+}
+
+extension THReviseWorkflowRecordsContentExtension on THReviseWorkflowRecordsContent {
+  THReviseWorkflowRecordsContent copyWith({
+    THReviseWorkflowRecordsContentReviseHours? reviseHours,
+    THReviseWorkflowRecordsContentReviseMsg? reviseMsg,
+  }) {
+    return THReviseWorkflowRecordsContent()
+      ..reviseHours = reviseHours ?? this.reviseHours
+      ..reviseMsg = reviseMsg ?? this.reviseMsg;
+  }
+}
+
+THReviseWorkflowRecordsContentReviseHours $THReviseWorkflowRecordsContentReviseHoursFromJson(Map<String, dynamic> json) {
+  final THReviseWorkflowRecordsContentReviseHours tHReviseWorkflowRecordsContentReviseHours = THReviseWorkflowRecordsContentReviseHours();
+  final String? field = jsonConvert.convert<String>(json['field']);
+  if (field != null) {
+    tHReviseWorkflowRecordsContentReviseHours.field = field;
+  }
+  final String? value = jsonConvert.convert<String>(json['value']);
+  if (value != null) {
+    tHReviseWorkflowRecordsContentReviseHours.value = value;
+  }
+  return tHReviseWorkflowRecordsContentReviseHours;
+}
+
+Map<String, dynamic> $THReviseWorkflowRecordsContentReviseHoursToJson(THReviseWorkflowRecordsContentReviseHours entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['field'] = entity.field;
+  data['value'] = entity.value;
+  return data;
+}
+
+extension THReviseWorkflowRecordsContentReviseHoursExtension on THReviseWorkflowRecordsContentReviseHours {
+  THReviseWorkflowRecordsContentReviseHours copyWith({
+    String? field,
+    String? value,
+  }) {
+    return THReviseWorkflowRecordsContentReviseHours()
+      ..field = field ?? this.field
+      ..value = value ?? this.value;
+  }
+}
+
+THReviseWorkflowRecordsContentReviseMsg $THReviseWorkflowRecordsContentReviseMsgFromJson(Map<String, dynamic> json) {
+  final THReviseWorkflowRecordsContentReviseMsg tHReviseWorkflowRecordsContentReviseMsg = THReviseWorkflowRecordsContentReviseMsg();
+  final String? field = jsonConvert.convert<String>(json['field']);
+  if (field != null) {
+    tHReviseWorkflowRecordsContentReviseMsg.field = field;
+  }
+  final String? value = jsonConvert.convert<String>(json['value']);
+  if (value != null) {
+    tHReviseWorkflowRecordsContentReviseMsg.value = value;
+  }
+  return tHReviseWorkflowRecordsContentReviseMsg;
+}
+
+Map<String, dynamic> $THReviseWorkflowRecordsContentReviseMsgToJson(THReviseWorkflowRecordsContentReviseMsg entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['field'] = entity.field;
+  data['value'] = entity.value;
+  return data;
+}
+
+extension THReviseWorkflowRecordsContentReviseMsgExtension on THReviseWorkflowRecordsContentReviseMsg {
+  THReviseWorkflowRecordsContentReviseMsg copyWith({
+    String? field,
+    String? value,
+  }) {
+    return THReviseWorkflowRecordsContentReviseMsg()
+      ..field = field ?? this.field
+      ..value = value ?? this.value;
+  }
+}

+ 4 - 10
packages/cs_domain/lib/generated/json/uk_labour_request_detail_entity.g.dart

@@ -107,17 +107,12 @@ UkLabourRequestDetailEntity $UkLabourRequestDetailEntityFromJson(Map<String, dyn
   if (otherImage != null) {
     ukLabourRequestDetailEntity.otherImage = otherImage;
   }
-  final String? otherDocument = jsonConvert.convert<String>(
-      json['other_document']);
+  final String? otherDocument = jsonConvert.convert<String>(json['other_document']);
   if (otherDocument != null) {
     ukLabourRequestDetailEntity.otherDocument = otherDocument;
   }
-  final List<
-      UkLabourRequestDetailCertificateList>? certificateList = (json['certificate_list'] as List<
-      dynamic>?)?.map(
-          (e) =>
-      jsonConvert.convert<UkLabourRequestDetailCertificateList>(
-          e) as UkLabourRequestDetailCertificateList).toList();
+  final List<UkLabourRequestDetailCertificateList>? certificateList = (json['certificate_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<UkLabourRequestDetailCertificateList>(e) as UkLabourRequestDetailCertificateList).toList();
   if (certificateList != null) {
     ukLabourRequestDetailEntity.certificateList = certificateList;
   }
@@ -188,8 +183,7 @@ Map<String, dynamic> $UkLabourRequestDetailEntityToJson(UkLabourRequestDetailEnt
   data['video'] = entity.video;
   data['other_image'] = entity.otherImage;
   data['other_document'] = entity.otherDocument;
-  data['certificate_list'] =
-      entity.certificateList?.map((v) => v.toJson()).toList();
+  data['certificate_list'] = entity.certificateList?.map((v) => v.toJson()).toList();
   data['vehicle_list'] = entity.vehicleList?.map((v) => v.toJson()).toList();
   data['challenge_25_list'] = entity.challenge25List?.map((v) => v.toJson()).toList();
   data['location_list'] = entity.locationList?.map((v) => v.toJson()).toList();

+ 7 - 16
packages/cs_domain/lib/generated/json/uk_labour_request_preselect_addstaff_list_entity.g.dart

@@ -1,27 +1,21 @@
 import 'package:domain/generated/json/base/json_convert_content.dart';
 import 'package:domain/entity/response/uk_labour_request_preselect_addstaff_list_entity.dart';
 
-UkLabourRequestPreselectAddstaffListEntity $UkLabourRequestPreselectAddstaffListEntityFromJson(
-    Map<String, dynamic> json) {
+UkLabourRequestPreselectAddstaffListEntity $UkLabourRequestPreselectAddstaffListEntityFromJson(Map<String, dynamic> json) {
   final UkLabourRequestPreselectAddstaffListEntity ukLabourRequestPreselectAddstaffListEntity = UkLabourRequestPreselectAddstaffListEntity();
   final int? total = jsonConvert.convert<int>(json['total']);
   if (total != null) {
     ukLabourRequestPreselectAddstaffListEntity.total = total;
   }
-  final List<
-      UkLabourRequestPreselectAddstaffListRows>? rows = (json['rows'] as List<
-      dynamic>?)?.map(
-          (e) =>
-      jsonConvert.convert<UkLabourRequestPreselectAddstaffListRows>(
-          e) as UkLabourRequestPreselectAddstaffListRows).toList();
+  final List<UkLabourRequestPreselectAddstaffListRows>? rows = (json['rows'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<UkLabourRequestPreselectAddstaffListRows>(e) as UkLabourRequestPreselectAddstaffListRows).toList();
   if (rows != null) {
     ukLabourRequestPreselectAddstaffListEntity.rows = rows;
   }
   return ukLabourRequestPreselectAddstaffListEntity;
 }
 
-Map<String, dynamic> $UkLabourRequestPreselectAddstaffListEntityToJson(
-    UkLabourRequestPreselectAddstaffListEntity entity) {
+Map<String, dynamic> $UkLabourRequestPreselectAddstaffListEntityToJson(UkLabourRequestPreselectAddstaffListEntity entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['total'] = entity.total;
   data['rows'] = entity.rows?.map((v) => v.toJson()).toList();
@@ -39,8 +33,7 @@ extension UkLabourRequestPreselectAddstaffListEntityExtension on UkLabourRequest
   }
 }
 
-UkLabourRequestPreselectAddstaffListRows $UkLabourRequestPreselectAddstaffListRowsFromJson(
-    Map<String, dynamic> json) {
+UkLabourRequestPreselectAddstaffListRows $UkLabourRequestPreselectAddstaffListRowsFromJson(Map<String, dynamic> json) {
   final UkLabourRequestPreselectAddstaffListRows ukLabourRequestPreselectAddstaffListRows = UkLabourRequestPreselectAddstaffListRows();
   final int? id = jsonConvert.convert<int>(json['id']);
   if (id != null) {
@@ -62,8 +55,7 @@ UkLabourRequestPreselectAddstaffListRows $UkLabourRequestPreselectAddstaffListRo
   if (nric != null) {
     ukLabourRequestPreselectAddstaffListRows.nric = nric;
   }
-  final String? profilePicture = jsonConvert.convert<String>(
-      json['profile_picture']);
+  final String? profilePicture = jsonConvert.convert<String>(json['profile_picture']);
   if (profilePicture != null) {
     ukLabourRequestPreselectAddstaffListRows.profilePicture = profilePicture;
   }
@@ -82,8 +74,7 @@ UkLabourRequestPreselectAddstaffListRows $UkLabourRequestPreselectAddstaffListRo
   return ukLabourRequestPreselectAddstaffListRows;
 }
 
-Map<String, dynamic> $UkLabourRequestPreselectAddstaffListRowsToJson(
-    UkLabourRequestPreselectAddstaffListRows entity) {
+Map<String, dynamic> $UkLabourRequestPreselectAddstaffListRowsToJson(UkLabourRequestPreselectAddstaffListRows entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['id'] = entity.id;
   data['name'] = entity.name;

+ 5 - 12
packages/cs_domain/lib/generated/json/uk_template_detail_entity.g.dart

@@ -35,12 +35,8 @@ UkTemplateDetailEntity $UkTemplateDetailEntityFromJson(Map<String, dynamic> json
   if (vehicleList != null) {
     ukTemplateDetailEntity.vehicleList = vehicleList;
   }
-  final List<
-      UkTemplateDetailChallenge25List>? challenge25List = (json['challenge_25_list'] as List<
-      dynamic>?)?.map(
-          (e) =>
-      jsonConvert.convert<UkTemplateDetailChallenge25List>(
-          e) as UkTemplateDetailChallenge25List).toList();
+  final List<UkTemplateDetailChallenge25List>? challenge25List = (json['challenge_25_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<UkTemplateDetailChallenge25List>(e) as UkTemplateDetailChallenge25List).toList();
   if (challenge25List != null) {
     ukTemplateDetailEntity.challenge25List = challenge25List;
   }
@@ -56,8 +52,7 @@ Map<String, dynamic> $UkTemplateDetailEntityToJson(UkTemplateDetailEntity entity
   data['title_list'] = entity.titleList?.map((v) => v.toJson()).toList();
   data['certificate_list'] = entity.certificateList?.map((v) => v.toJson()).toList();
   data['vehicle_list'] = entity.vehicleList?.map((v) => v.toJson()).toList();
-  data['challenge_25_list'] =
-      entity.challenge25List?.map((v) => v.toJson()).toList();
+  data['challenge_25_list'] = entity.challenge25List?.map((v) => v.toJson()).toList();
   return data;
 }
 
@@ -348,8 +343,7 @@ extension UkTemplateDetailVehicleListExtension on UkTemplateDetailVehicleList {
   }
 }
 
-UkTemplateDetailChallenge25List $UkTemplateDetailChallenge25ListFromJson(
-    Map<String, dynamic> json) {
+UkTemplateDetailChallenge25List $UkTemplateDetailChallenge25ListFromJson(Map<String, dynamic> json) {
   final UkTemplateDetailChallenge25List ukTemplateDetailChallenge25List = UkTemplateDetailChallenge25List();
   final int? value = jsonConvert.convert<int>(json['value']);
   if (value != null) {
@@ -366,8 +360,7 @@ UkTemplateDetailChallenge25List $UkTemplateDetailChallenge25ListFromJson(
   return ukTemplateDetailChallenge25List;
 }
 
-Map<String, dynamic> $UkTemplateDetailChallenge25ListToJson(
-    UkTemplateDetailChallenge25List entity) {
+Map<String, dynamic> $UkTemplateDetailChallenge25ListToJson(UkTemplateDetailChallenge25List entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['value'] = entity.value;
   data['txt'] = entity.txt;

+ 5 - 12
packages/cs_domain/lib/generated/json/uk_template_detail_index_entity.g.dart

@@ -18,12 +18,8 @@ UkTemplateDetailIndexEntity $UkTemplateDetailIndexEntityFromJson(Map<String, dyn
   if (vehicleList != null) {
     ukTemplateDetailIndexEntity.vehicleList = vehicleList;
   }
-  final List<
-      UkTemplateDetailIndexChallenge25List>? challenge25List = (json['challenge_25_list'] as List<
-      dynamic>?)?.map(
-          (e) =>
-      jsonConvert.convert<UkTemplateDetailIndexChallenge25List>(
-          e) as UkTemplateDetailIndexChallenge25List).toList();
+  final List<UkTemplateDetailIndexChallenge25List>? challenge25List = (json['challenge_25_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<UkTemplateDetailIndexChallenge25List>(e) as UkTemplateDetailIndexChallenge25List).toList();
   if (challenge25List != null) {
     ukTemplateDetailIndexEntity.challenge25List = challenge25List;
   }
@@ -35,8 +31,7 @@ Map<String, dynamic> $UkTemplateDetailIndexEntityToJson(UkTemplateDetailIndexEnt
   data['template_list'] = entity.templateList;
   data['certificate_list'] = entity.certificateList?.map((v) => v.toJson()).toList();
   data['vehicle_list'] = entity.vehicleList?.map((v) => v.toJson()).toList();
-  data['challenge_25_list'] =
-      entity.challenge25List?.map((v) => v.toJson()).toList();
+  data['challenge_25_list'] = entity.challenge25List?.map((v) => v.toJson()).toList();
   return data;
 }
 
@@ -131,8 +126,7 @@ extension UkTemplateDetailIndexVehicleListExtension on UkTemplateDetailIndexVehi
   }
 }
 
-UkTemplateDetailIndexChallenge25List $UkTemplateDetailIndexChallenge25ListFromJson(
-    Map<String, dynamic> json) {
+UkTemplateDetailIndexChallenge25List $UkTemplateDetailIndexChallenge25ListFromJson(Map<String, dynamic> json) {
   final UkTemplateDetailIndexChallenge25List ukTemplateDetailIndexChallenge25List = UkTemplateDetailIndexChallenge25List();
   final int? value = jsonConvert.convert<int>(json['value']);
   if (value != null) {
@@ -149,8 +143,7 @@ UkTemplateDetailIndexChallenge25List $UkTemplateDetailIndexChallenge25ListFromJs
   return ukTemplateDetailIndexChallenge25List;
 }
 
-Map<String, dynamic> $UkTemplateDetailIndexChallenge25ListToJson(
-    UkTemplateDetailIndexChallenge25List entity) {
+Map<String, dynamic> $UkTemplateDetailIndexChallenge25ListToJson(UkTemplateDetailIndexChallenge25List entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['value'] = entity.value;
   data['txt'] = entity.txt;

+ 4 - 9
packages/cs_domain/lib/generated/json/uk_template_table_entity.g.dart

@@ -1,26 +1,21 @@
 import 'package:domain/generated/json/base/json_convert_content.dart';
 import 'package:domain/entity/response/uk_template_table_entity.dart';
 
-UkTemplateTableEntity $UkTemplateTableEntityFromJson(
-    Map<String, dynamic> json) {
+UkTemplateTableEntity $UkTemplateTableEntityFromJson(Map<String, dynamic> json) {
   final UkTemplateTableEntity ukTemplateTableEntity = UkTemplateTableEntity();
   final int? total = jsonConvert.convert<int>(json['total']);
   if (total != null) {
     ukTemplateTableEntity.total = total;
   }
-  final List<UkTemplateTableRows>? rows = (json['rows'] as List<dynamic>?)
-      ?.map(
-          (e) =>
-      jsonConvert.convert<UkTemplateTableRows>(e) as UkTemplateTableRows)
-      .toList();
+  final List<UkTemplateTableRows>? rows = (json['rows'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<UkTemplateTableRows>(e) as UkTemplateTableRows).toList();
   if (rows != null) {
     ukTemplateTableEntity.rows = rows;
   }
   return ukTemplateTableEntity;
 }
 
-Map<String, dynamic> $UkTemplateTableEntityToJson(
-    UkTemplateTableEntity entity) {
+Map<String, dynamic> $UkTemplateTableEntityToJson(UkTemplateTableEntity entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['total'] = entity.total;
   data['rows'] = entity.rows?.map((v) => v.toJson()).toList();

+ 225 - 0
packages/cs_domain/lib/repository/th_er_repository.dart

@@ -3,12 +3,16 @@ import 'package:domain/entity/response/job_list_add_staff_entity.dart';
 import 'package:domain/entity/response/job_list_e_r_detail_entity.dart';
 import 'package:domain/entity/response/job_list_e_r_option_entity.dart';
 import 'package:domain/entity/response/labour_request_e_r_entity.dart';
+import 'package:domain/entity/response/revise_option_entity.dart';
 import 'package:domain/entity/response/sign_in_sign_out_entity.dart';
 import 'package:domain/entity/response/switch_project_entity.dart';
 import 'package:domain/entity/response/t_h_applied_edit_entity.dart';
 import 'package:domain/entity/response/t_h_applied_employee_entity.dart';
 import 'package:domain/entity/response/t_h_applied_index_entity.dart';
 import 'package:domain/entity/response/t_h_applied_table_entity.dart';
+import 'package:domain/entity/response/t_h_revise_detail_entity.dart';
+import 'package:domain/entity/response/t_h_revise_table_entity.dart';
+import 'package:domain/entity/response/t_h_revise_workflow_entity.dart';
 import 'package:get/get.dart';
 import 'package:plugin_platform/http/http_provider.dart';
 import 'package:plugin_platform/http/http_result.dart';
@@ -966,4 +970,225 @@ class THERRepository extends GetxService {
     }
     return result.convert();
   }
+
+  /// ER Revise 列表选项
+  Future<HttpResult<ReviseOptionEntity>> fetchERReviseOption({
+    CancelToken? cancelToken,
+  }) async {
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseOptionTH,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      final json = result.getDataJson();
+      var data = ReviseOptionEntity.fromJson(json!);
+      return result.convert<ReviseOptionEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// ER Revise 列表
+  Future<HttpResult<THReviseTableEntity>> fetchERReviseTable({
+    String? appliedId,
+    String? reviseId,
+    required int curPage,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+    params["cur_page"] = curPage.toString();
+    params["page_size"] = "10";
+    if (!Utils.isEmpty(appliedId)) {
+      params["applied_id"] = appliedId!;
+    }
+    if (!Utils.isEmpty(reviseId)) {
+      params["revise_id"] = reviseId!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseTableTH,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      final json = result.getDataJson();
+      var data = THReviseTableEntity.fromJson(json!);
+      return result.convert<THReviseTableEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// ER Revise 添加详情
+  Future<HttpResult<THReviseDetailEntity>> fetchERReviseAddDetail({
+    required String appliedId,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+    params["applied_id"] = appliedId;
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseAddDetailTH,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      final json = result.getDataJson();
+      var data = THReviseDetailEntity.fromJson(json!);
+      return result.convert<THReviseDetailEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// ER Revise 编辑详情
+  Future<HttpResult<THReviseDetailEntity>> fetchERReviseEditDetail({
+    required String reviseId,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+    params["revise_id"] = reviseId;
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseEditDetailTH,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      final json = result.getDataJson();
+      var data = THReviseDetailEntity.fromJson(json!);
+      return result.convert<THReviseDetailEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// ER Revise 添加提交
+  Future<HttpResult> submitReviseAdd({
+    required String appliedId,
+    required String reviseHours,
+    String? reviseMsg,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, dynamic> params = {};
+    params["applied_id"] = appliedId;
+    params["revise_hours"] = reviseHours;
+    if (!Utils.isEmpty(reviseMsg)) {
+      params["revise_msg"] = reviseMsg!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseAddSubmitTH,
+      isShowLoadingDialog: true,
+      method: HttpMethod.POST,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// ER Revise 编辑提交
+  Future<HttpResult> submitReviseEdit({
+    required String reviseId,
+    required String reviseHours,
+    String? reviseMsg,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, dynamic> params = {};
+    params["revise_id"] = reviseId;
+    params["revise_hours"] = reviseHours;
+    if (!Utils.isEmpty(reviseMsg)) {
+      params["revise_msg"] = reviseMsg!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseEditSubmitTH,
+      isShowLoadingDialog: true,
+      method: HttpMethod.POST,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// ER Revise 撤销
+  Future<HttpResult> reviseRecall({
+    required String reviseId,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, dynamic> params = {};
+    params["revise_id"] = reviseId;
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseRecallTH,
+      isShowLoadingDialog: true,
+      method: HttpMethod.POST,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// ER Revise 删除
+  Future<HttpResult> reviseDelete({
+    required String reviseId,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, dynamic> params = {};
+    params["revise_id"] = reviseId;
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseDeleteTH,
+      isShowLoadingDialog: true,
+      method: HttpMethod.POST,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// ER Revise Workflow 工作流
+  Future<HttpResult<THReviseWorkflowEntity>> fetchERReviseWorkflow({
+    required String reviseId,
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+    params["revise_id"] = reviseId;
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiERReviseWorkflowTH,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      final json = result.getDataJson();
+      var data = THReviseWorkflowEntity.fromJson(json!);
+      return result.convert<THReviseWorkflowEntity>(data: data);
+    }
+    return result.convert();
+  }
+
 }

+ 3 - 0
packages/cs_router/lib/path/router_path.dart

@@ -164,6 +164,9 @@ class RouterPath {
   static const THJobAppliedEmployeeER = '/th/job/applied/employee/er';  //泰国的已申请列表员工详情信息
   static const THJobAppliedEmployeeRemarkER = '/th/job/applied/employee/remark/er';  //泰国的已申请列表员工的评价列表
   static const THJobAppliedStaffWorkflowER = '/th/job/applied/employee/workflow/er';  //泰国的已申请列表员工的评价列表
+  static const THReviseListER = '/th/revise/list/er';  //泰国修改列表
+  static const THReviseEditER = '/th/revise/edit/er';  //泰国修改列表的添加与编辑
+  static const THReviseWorkflowER = '/th/revise/workflow/er';  //泰国的修改列表的操作流
 
   //Runalone
   static const runAloneMain = '/runalone/main'; //独立运行的入口页面