Browse Source

Revise 的列表与日志页面

liukai 7 months ago
parent
commit
4a473acb33
22 changed files with 1793 additions and 160 deletions
  1. 1 1
      packages/cpt_auth/lib/modules/main/main_controller.dart
  2. 293 0
      packages/cpt_job_sg/lib/modules/revise_list/revise_list_controller.dart
  3. 290 0
      packages/cpt_job_sg/lib/modules/revise_list/revise_list_filter.dart
  4. 298 0
      packages/cpt_job_sg/lib/modules/revise_list/revise_list_item.dart
  5. 152 0
      packages/cpt_job_sg/lib/modules/revise_list/revise_list_page.dart
  6. 17 0
      packages/cpt_job_sg/lib/modules/revise_list/revise_list_state.dart
  7. 98 0
      packages/cpt_job_sg/lib/modules/revise_log/revise_log_controller.dart
  8. 155 0
      packages/cpt_job_sg/lib/modules/revise_log/revise_log_item.dart
  9. 102 0
      packages/cpt_job_sg/lib/modules/revise_log/revise_log_page.dart
  10. 10 0
      packages/cpt_job_sg/lib/modules/revise_log/revise_log_state.dart
  11. 2 1
      packages/cpt_job_sg/lib/router/job_sg_service_impl.dart
  12. 13 0
      packages/cpt_job_sg/lib/router/page_router.dart
  13. 8 23
      packages/cs_domain/lib/entity/response/revise_log_s_g_entity.dart
  14. 3 7
      packages/cs_domain/lib/generated/json/base/json_convert_content.dart
  15. 21 45
      packages/cs_domain/lib/generated/json/revise_log_s_g_entity.g.dart
  16. 0 74
      packages/cs_domain/lib/repository/job_repository.dart
  17. 313 8
      packages/cs_domain/lib/repository/job_sg_repository.dart
  18. 1 0
      packages/cs_resources/lib/constants/color_constants.dart
  19. 4 0
      packages/cs_resources/lib/local/language/en_US.dart
  20. 4 0
      packages/cs_resources/lib/local/language/vi_VN.dart
  21. 4 0
      packages/cs_resources/lib/local/language/zh_CN.dart
  22. 4 1
      packages/cs_router/lib/path/router_path.dart

+ 1 - 1
packages/cpt_auth/lib/modules/main/main_controller.dart

@@ -139,7 +139,7 @@ class MainController extends GetxController {
         ComponentRouterServices.jobService.startSignInSignOutPage();
         break;
       case 'reviseList':
-        ToastEngine.show("进入新加坡的 Revise List 模块");
+        ComponentRouterServices.jobSGService.startReviseListPage();
         break;
       case 'device':
         ComponentRouterServices.reportService.startDeviceListPage();

+ 293 - 0
packages/cpt_job_sg/lib/modules/revise_list/revise_list_controller.dart

@@ -0,0 +1,293 @@
+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/repository/job_sg_repository.dart';
+import 'package:get/get.dart';
+import 'package:plugin_platform/engine/dialog/dialog_engine.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/date_time_utils.dart';
+import 'package:widgets/dialog/app_default_dialog.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import '../revise_log/revise_log_page.dart';
+import 'revise_list_filter.dart';
+import 'revise_list_state.dart';
+
+class ReviseListController extends GetxController with DioCancelableMixin {
+  final JobSGRepository _jobRepository = Get.find();
+  final ReviseListState state = ReviseListState();
+
+  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;
+    fetchNotifyList();
+  }
+
+  // Refresh 加载事件
+  Future loadMore() async {
+    _curPage++;
+    fetchNotifyList();
+  }
+
+  // 重试请求
+  Future retryRequest() async {
+    _curPage = 1;
+    _needShowPlaceholder = true;
+    fetchNotifyList();
+  }
+
+  /// 获取服务器数据,通知消息列表
+  Future fetchNotifyList() async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading);
+    }
+
+    // 并发执行两个请求
+    var futures = [
+      _jobRepository.fetchReviseList(
+        null,
+        state.selectedStatusId,
+        state.keyword,
+        DateTimeUtils.formatDate(state.selectedStartDate, format: "yyyy-MM-dd"),
+        DateTimeUtils.formatDate(state.selectedEndDate, format: "yyyy-MM-dd"),
+        curPage: _curPage,
+        cancelToken: cancelToken,
+      ),
+      state.indexOptions == null
+          ? _jobRepository.fetchReviseIndex(
+              cancelToken: cancelToken,
+            )
+          : Future(() => HttpResult(isSuccess: true).convert(data: state.indexOptions!)),
+    ];
+
+    //拿到结果
+    var results = await Future.wait(futures);
+    var listResult = results[0] as HttpResult<ReviseListSGEntity>;
+    var optionResult = results[1] as HttpResult<ReviseIndexSGEntity>;
+
+    //选项数据
+    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<ReviseListSGRows>? 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);
+      }
+    }
+  }
+
+  // 执行搜索
+  void doSearch(String keyword) {
+    state.keyword = keyword;
+    //赋值之后刷新
+    refreshController.callRefresh();
+  }
+
+  // 清空搜索条件
+  void resetFiltering() {
+    state.keyword = "";
+    state.searchController.text = "";
+
+    state.selectedStartDate = null;
+    state.selectedEndDate = null;
+    state.selectedStatusId = null;
+
+    //赋值之后刷新
+    refreshController.callRefresh();
+  }
+
+  //展示筛选的弹窗
+  void showFilterDialog() {
+    if (state.indexOptions != null) {
+      DialogEngine.show(
+        widget: ReviseListFilter(
+          optionResult: state.indexOptions!,
+          selectedStartDate: state.selectedStartDate,
+          selectedEndDate: state.selectedEndDate,
+          selectedStatusId: state.selectedStatusId,
+          onFilterAction: (startDate, endDate, statusId) {
+            state.selectedStartDate = startDate;
+            state.selectedEndDate = endDate;
+            state.selectedStatusId = statusId;
+
+            //赋值之后刷新
+            refreshController.callRefresh();
+          },
+        ),
+        position: DialogPosition.top,
+        animType: DialogAnimation.fade,
+      );
+    }
+  }
+
+  @override
+  void onReady() {
+    super.onReady();
+    fetchNotifyList();
+  }
+
+  @override
+  void onClose() {
+    state.datas.clear();
+    super.onClose();
+  }
+
+  /// 去日志页面
+  void gotoReviseLogsPage(int index) {
+    ReviseLogPage.startInstance(state.datas[index].reviseId);
+  }
+
+  /// 去详情页面
+  void gotoReviseEditPage(int index) {
+
+  }
+
+  /// 去编辑页面
+  void gotoReviseDetailPage(int index) {
+
+  }
+
+  //执行取消操作
+  void doRecallAction(int index) {
+    DialogEngine.show(
+        widget: AppDefaultDialog(
+      title: "Confirmation".tr,
+      message: "Are you sure you want to recall this revise?".tr,
+      confirmAction: () {
+        _requestRecall(index);
+      },
+    ));
+  }
+
+  //执行删除操作
+  void doDeleteAction(int index) {
+    DialogEngine.show(
+        widget: AppDefaultDialog(
+      title: "Confirmation".tr,
+      message: "Are you sure you want to delete this revise?".tr,
+      confirmAction: () {
+        _requestDeactivate(index);
+      },
+    ));
+  }
+
+  // 请求接口删除Job
+  void _requestDeactivate(int index) async {
+    var result = await _jobRepository.deleteRevise(state.datas[index].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);
+    }
+  }
+
+  void _requestRecall(int index) async {
+    var result = await _jobRepository.recallRevise(state.datas[index].reviseId, cancelToken: cancelToken);
+
+    if (result.isSuccess) {
+      NotifyEngine.showSuccess("Successful".tr);
+
+      fetchItemByIdAndRefreshItem(state.datas[index].reviseId ?? "");
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+    }
+  }
+
+  /// 根据ID获取Item对象,用于刷新
+  void fetchItemByIdAndRefreshItem(String ids) async {
+    var result = await _jobRepository.fetchReviseListByIds(
+      ids,
+      cancelToken: cancelToken,
+    );
+
+    //处理数据
+    if (result.isSuccess) {
+      var data = result.data;
+      if (data != null && data.rows.isNotEmpty) {
+        List<ReviseListSGRows> newItem = data.rows;
+
+        // 创建一个 Map 来加速查找
+        Map<String, ReviseListSGRows> newItemMap = {for (var item in newItem) item.reviseId ?? "": item};
+
+        // 遍历 state.datas 进行替换
+        for (int i = 0; i < state.datas.length; i++) {
+          if (newItemMap.containsKey(state.datas[i].reviseId)) {
+            state.datas[i] = newItemMap[state.datas[i].reviseId]!;
+          }
+        }
+
+        //刷新
+        update();
+      }
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+    }
+  }
+}

+ 290 - 0
packages/cpt_job_sg/lib/modules/revise_list/revise_list_filter.dart

@@ -0,0 +1,290 @@
+import 'dart:ui';
+import 'package:cs_resources/generated/assets.dart';
+import 'package:domain/entity/response/revise_index_s_g_entity.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/widgets.dart';
+import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
+import 'package:get/get.dart';
+import 'package:shared/utils/date_time_utils.dart';
+import 'package:shared/utils/screen_util.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/picker/date_picker_util.dart';
+import 'package:widgets/picker/option_pick_util.dart';
+import 'package:widgets/widget_export.dart';
+
+/**
+ * 用工请求列表的筛选
+ */
+class ReviseListFilter extends StatefulWidget {
+  void Function(DateTime? selectedStartDate, DateTime? selectedEndDate, String? selectedStatusId)? onFilterAction;
+  ReviseIndexSGEntity optionResult;
+  DateTime? selectedStartDate;
+  DateTime? selectedEndDate;
+  String? selectedStatusId;
+
+  ReviseListFilter({
+    required this.optionResult,
+    required this.selectedStartDate,
+    required this.selectedEndDate,
+    required this.selectedStatusId,
+    this.onFilterAction,
+  });
+
+  @override
+  State<ReviseListFilter> createState() => _ReviseListFilterState();
+}
+
+class _ReviseListFilterState extends State<ReviseListFilter> {
+  DateTime? selectedStartDate;
+  DateTime? selectedEndDate;
+  String? selectedStatusId;
+
+  @override
+  void initState() {
+    super.initState();
+    this.selectedStartDate = widget.selectedStartDate;
+    this.selectedEndDate = widget.selectedEndDate;
+    this.selectedStatusId = widget.selectedStatusId;
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      mainAxisAlignment: MainAxisAlignment.start,
+      children: [
+        SizedBox(
+          height: kToolbarHeight + ScreenUtil.getStatusBarH(context) + 1,
+        ),
+        Container(
+          padding: EdgeInsets.only(left: 15, right: 15, top: 17.5, bottom: 20),
+          width: double.infinity,
+          decoration: BoxDecoration(
+            color: Colors.white,
+          ),
+          child: Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //状态
+              MyTextView(
+                "Status".tr,
+                fontSize: 14,
+                isFontMedium: true,
+                textColor: ColorConstants.black33,
+              ),
+
+              //选择状态
+              Container(
+                padding: EdgeInsets.only(left: 16, right: 10),
+                margin: EdgeInsets.only(top: 10),
+                height: 45,
+                decoration: BoxDecoration(
+                  color: ColorConstants.grayECECEC,
+                  borderRadius: const BorderRadius.all(Radius.circular(5)),
+                ),
+                child: Row(
+                  mainAxisSize: MainAxisSize.max,
+                  crossAxisAlignment: CrossAxisAlignment.center,
+                  mainAxisAlignment: MainAxisAlignment.start,
+                  children: [
+                    MyTextView(
+                      selectedStatusId == null || selectedStatusId == "0"
+                          ? ""
+                          : widget.optionResult.statusList.firstWhere((element) => element.value == selectedStatusId).txt!,
+                      fontSize: 14,
+                      hint: "Choose Status".tr,
+                      textHintColor: ColorConstants.textBlackHint,
+                      isFontMedium: true,
+                      textColor: ColorConstants.black33,
+                    ).expanded(),
+                    MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                  ],
+                ),
+              ).onTap(() {
+                pickerStatus();
+              }),
+
+              //开始时间
+              MyTextView(
+                "Start Date".tr,
+                fontSize: 14,
+                isFontMedium: true,
+                marginTop: 11,
+                textColor: ColorConstants.black33,
+              ),
+
+              //选择时间
+              Container(
+                padding: EdgeInsets.only(left: 16, right: 10),
+                margin: EdgeInsets.only(top: 10),
+                height: 45,
+                decoration: BoxDecoration(
+                  color: ColorConstants.grayECECEC,
+                  borderRadius: const BorderRadius.all(Radius.circular(5)),
+                ),
+                child: Row(
+                  mainAxisSize: MainAxisSize.max,
+                  crossAxisAlignment: CrossAxisAlignment.center,
+                  mainAxisAlignment: MainAxisAlignment.start,
+                  children: [
+                    MyTextView(
+                      selectedStartDate == null ? "" : DateTimeUtils.formatDate(selectedStartDate, format: "yyyy-MM-dd"),
+                      fontSize: 14,
+                      hint: "Choose Start Date".tr,
+                      textHintColor: ColorConstants.textBlackHint,
+                      isFontMedium: true,
+                      textColor: ColorConstants.black33,
+                    ).expanded(),
+                    MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                  ],
+                ),
+              ).onTap(() {
+                pickerStartDate();
+              }),
+
+              //结束日期
+              MyTextView(
+                "End Date".tr,
+                fontSize: 14,
+                marginTop: 11,
+                isFontMedium: true,
+                textColor: ColorConstants.black33,
+              ),
+
+              //选择结束日期
+              Container(
+                padding: EdgeInsets.only(left: 16, right: 10),
+                margin: EdgeInsets.only(top: 10),
+                height: 45,
+                decoration: BoxDecoration(
+                  color: ColorConstants.grayECECEC,
+                  borderRadius: const BorderRadius.all(Radius.circular(5)),
+                ),
+                child: Row(
+                  mainAxisSize: MainAxisSize.max,
+                  crossAxisAlignment: CrossAxisAlignment.center,
+                  mainAxisAlignment: MainAxisAlignment.start,
+                  children: [
+                    MyTextView(
+                      selectedEndDate == null ? "" : DateTimeUtils.formatDate(selectedEndDate, format: "yyyy-MM-dd"),
+                      fontSize: 14,
+                      hint: "Choose End Date".tr,
+                      textHintColor: ColorConstants.textBlackHint,
+                      isFontMedium: true,
+                      textColor: ColorConstants.black33,
+                    ).expanded(),
+                    MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                  ],
+                ),
+              ).onTap(() {
+                pickerEndDate();
+              }),
+
+              //按钮组
+              Row(
+                children: [
+                  MyButton(
+                    onPressed: () {
+                      //只是Reset当前的弹窗筛选选项
+                      widget.selectedStartDate = null;
+                      widget.selectedEndDate = null;
+                      widget.selectedStatusId = null;
+
+                      setState(() {
+                        selectedStartDate = null;
+                        selectedEndDate = null;
+                        selectedStatusId = null;
+                      });
+                    },
+                    text: "Reset".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#FFBB1B"),
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 36,
+                  ).expanded(),
+                  SizedBox(width: 15),
+                  MyButton(
+                    onPressed: () {
+                      onCancel();
+                      widget.onFilterAction?.call(selectedStartDate, selectedEndDate, selectedStatusId);
+                    },
+                    text: "Filter".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#0AC074"),
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 36,
+                  ).expanded(),
+                ],
+              ).marginOnly(top: 20),
+            ],
+          ),
+        ),
+        Center(child: MyAssetImage(Assets.baseServiceDialogDeleteIcon, width: 26.5, height: 26.5).marginOnly(top: 35)).onTap(() {
+          onCancel();
+        }),
+      ],
+    );
+  }
+
+  //取消弹框
+  void onCancel() async {
+    SmartDialog.dismiss();
+  }
+
+  /// 筛选开始日期
+  void pickerStartDate() {
+    DatePickerUtil.showCupertinoDatePicker(
+      selectedDateTime: selectedStartDate,
+      onDateTimeChanged: (date) {
+        setState(() {
+          selectedStartDate = date;
+        });
+      },
+      title: "Start Date".tr,
+    );
+  }
+
+  /// 筛选结束日期
+  void pickerEndDate() {
+    DatePickerUtil.showCupertinoDatePicker(
+      selectedDateTime: selectedEndDate ?? selectedStartDate,
+      onDateTimeChanged: (date) {
+        setState(() {
+          selectedEndDate = date;
+        });
+      },
+      title: "End Date".tr,
+    );
+  }
+
+  /// 筛选状态
+  void pickerStatus() {
+    int selectedStatusIndex;
+    if (selectedStatusId == null) {
+      selectedStatusIndex = 0;
+    } else {
+      selectedStatusIndex = widget.optionResult.statusList!.indexWhere((department) => department.value == selectedStatusId);
+    }
+
+    if (selectedStatusIndex < 0) {
+      selectedStatusIndex = 0;
+    }
+
+    OptionPickerUtil.showCupertinoOptionPicker(
+      items: widget.optionResult.statusList.map((e) => e.txt!).toList(growable: false),
+      initialSelectIndex: selectedStatusIndex,
+      onPickerChanged: (_, index) {
+        setState(() {
+          selectedStatusId = widget.optionResult.statusList[index].value;
+        });
+      },
+    );
+  }
+}

+ 298 - 0
packages/cpt_job_sg/lib/modules/revise_list/revise_list_item.dart

@@ -0,0 +1,298 @@
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:domain/entity/response/revise_list_s_g_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_button.dart';
+import 'package:widgets/my_text_view.dart';
+
+/**
+ * Revise的Item布局
+ */
+class ReviseListItem extends StatelessWidget {
+  final int index;
+  final ReviseListSGRows item;
+  final VoidCallback? onDetailAction;
+  final VoidCallback? onLogsAction;
+  final VoidCallback? onDeleteAction;
+  final VoidCallback? onRecallAction;
+  final VoidCallback? onEditAction;
+
+  ReviseListItem({
+    required this.index,
+    required this.item,
+    this.onDetailAction,
+    this.onLogsAction,
+    this.onDeleteAction,
+    this.onRecallAction,
+    this.onEditAction,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      padding: EdgeInsets.symmetric(vertical: 23, horizontal: 21),
+      margin: EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5),
+      decoration: BoxDecoration(
+        color: 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: 15),
+
+          // 身份证
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Nric".tr + ":",
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //日期时间
+              MyTextView(
+                item.nric ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // 工作时间
+          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: ColorConstants.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // 加减小时
+          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: 15),
+
+          // 总小时
+          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: 15),
+
+          // 修改小时
+          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: 15),
+
+          // 状态
+          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: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          //按钮组
+          Visibility(
+            visible: item.actionList?.isNotEmpty ?? false,
+            child: Row(
+              mainAxisSize: MainAxisSize.max,
+              mainAxisAlignment: MainAxisAlignment.end,
+              crossAxisAlignment: CrossAxisAlignment.center,
+              children: [
+                //编辑按钮
+                Visibility(
+                  visible: item.actionList?.contains("edit") ?? false,
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onEditAction?.call();
+                    },
+                    text: "Edit".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor(
+                      "#FFBB1B",
+                    ),
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 35,
+                  ).marginOnly(left: 12),
+                ),
+
+                //状态工作流按钮
+                Visibility(
+                  visible: item.actionList?.contains("recall") ?? false,
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onRecallAction?.call();
+                    },
+                    text: "Recall".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: ColorConstants.textYellowF8AE00,
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 35,
+                  ).marginOnly(left: 12),
+                ),
+
+                //状态工作流按钮
+                Visibility(
+                  visible: item.actionList?.contains("delete") ?? false,
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onDeleteAction?.call();
+                    },
+                    text: "Delete".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: ColorConstants.textRedFF6262,
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 35,
+                  ).marginOnly(left: 12),
+                ),
+
+                //详情按钮
+                Visibility(
+                  visible: item.actionList?.contains("detail") ?? false,
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onDetailAction?.call();
+                    },
+                    text: "Detail".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: ColorConstants.textBlue56AAFF,
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 35,
+                  ).marginOnly(left: 12),
+                ),
+
+                //日志
+                Visibility(
+                  visible: item.actionList?.contains("logs") ?? false,
+                  child: MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      onLogsAction?.call();
+                    },
+                    text: "Logs".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: ColorConstants.textGreen0AC074,
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 35,
+                  ).marginOnly(left: 12),
+                ),
+              ],
+            ).marginOnly(top: 18, bottom: 2),
+          ),
+        ],
+      ),
+    );
+  }
+}

+ 152 - 0
packages/cpt_job_sg/lib/modules/revise_list/revise_list_page.dart

@@ -0,0 +1,152 @@
+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: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_load_image.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'revise_list_item.dart';
+import 'revise_list_controller.dart';
+import 'revise_list_state.dart';
+
+/**
+ * Revise的全部列表
+ */
+class ReviseListPage extends BaseStatefulPage<ReviseListController> {
+  ReviseListPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance() {
+    return Get.start(RouterPath.REVISE_LIST_SG);
+  }
+
+  @override
+  ReviseListController createRawController() {
+    return ReviseListController();
+  }
+
+  @override
+  State<ReviseListPage> createState() => _JobListState();
+}
+
+class _JobListState extends BaseState<ReviseListPage, ReviseListController> {
+  late ReviseListState state;
+
+  @override
+  void initState() {
+    super.initState();
+    state = controller.state;
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return autoCtlGetBuilder(builder: (controller) {
+      return SafeArea(
+        bottom: true,
+        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.searchTitleBar(
+                context,
+                value: state.keyword,
+                hintText: 'Search'.tr,
+                controller: state.searchController,
+                onSearch: (keyword) {
+                  controller.doSearch(keyword);
+                },
+                actions: [
+                  //重置按钮
+                  MyButton(
+                    onPressed: () {
+                      FocusScope.of(context).unfocus();
+                      controller.resetFiltering();
+                    },
+                    text: "Reset".tr,
+                    textColor: ColorConstants.white,
+                    backgroundColor: hexToColor("#2BA9F9", opacity: 0.5),
+                    radius: 17.25,
+                    minWidth: 60,
+                    minHeight: 35,
+                  ).marginOnly(right: 15),
+
+                  //筛选图标
+                  MyAssetImage(
+                    Assets.baseServiceTitleBarFilterIcon,
+                    width: 24,
+                    height: 16.5,
+                  ).onTap(() {
+                    FocusScope.of(context).unfocus();
+                    controller.showFilterDialog();
+                  }).marginOnly(right: 15),
+                ],
+              ),
+              //底部的列表
+              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 ReviseListItem(
+                          index: index,
+                          item: state.datas[index],
+                          onDetailAction: () {
+                            controller.gotoReviseDetailPage(index);
+                          },
+                          onLogsAction: () {
+                            controller.gotoReviseLogsPage(index);
+                          },
+                          onDeleteAction: () {
+                            controller.doDeleteAction(index);
+                          },
+                          onRecallAction: () {
+                            controller.doRecallAction(index);
+                          },
+                          onEditAction: () {
+                            controller.gotoReviseEditPage(index);
+                          },
+                        );
+                      },
+                      childCount: state.datas.length,
+                    ))
+                  ],
+                ),
+              ).marginOnly(top: 5, bottom: 5).expanded(),
+            ],
+          ),
+        ),
+      );
+    });
+  }
+
+}

+ 17 - 0
packages/cpt_job_sg/lib/modules/revise_list/revise_list_state.dart

@@ -0,0 +1,17 @@
+import 'package:domain/entity/response/revise_index_s_g_entity.dart';
+import 'package:domain/entity/response/revise_list_s_g_entity.dart';
+
+import 'package:flutter/material.dart';
+
+class ReviseListState {
+  //筛选条件
+  final TextEditingController searchController = TextEditingController();
+  String keyword = "";
+  DateTime? selectedStartDate;
+  DateTime? selectedEndDate;
+  String? selectedStatusId;
+
+  //页面的列表数据
+  List<ReviseListSGRows> datas = [];
+  ReviseIndexSGEntity? indexOptions;
+}

+ 98 - 0
packages/cpt_job_sg/lib/modules/revise_log/revise_log_controller.dart

@@ -0,0 +1,98 @@
+import 'package:domain/entity/response/revise_log_s_g_entity.dart';
+import 'package:domain/repository/job_sg_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_log_state.dart';
+
+/**
+ * 修改的记录
+ */
+class  ReviseLogController extends GetxController with DioCancelableMixin{
+  final JobSGRepository _jobRepository = Get.find();
+  final ReviseLogState state = ReviseLogState();
+
+  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 _jobRepository.fetchReviseLogs(
+      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<ReviseLogSGRecords>? 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();
+  }
+}

+ 155 - 0
packages/cpt_job_sg/lib/modules/revise_log/revise_log_item.dart

@@ -0,0 +1,155 @@
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:domain/entity/response/revise_log_s_g_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';
+
+/**
+ * 修改记录Item
+ */
+class ReviseLogItem extends StatelessWidget {
+  final int index;
+  final ReviseLogSGRecords item;
+
+  ReviseLogItem({
+    required this.index,
+    required this.item,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      padding: EdgeInsets.symmetric(vertical: 23, horizontal: 21),
+      margin: EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5),
+      decoration: BoxDecoration(
+        color: 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(
+                "Date Time:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+              MyTextView(
+                item.createdAt ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ),
+
+          // 操作者
+          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),
+
+          // 操作类型
+          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: item.actText == "Audit" ? ColorConstants.textYellowF8AE00 : ColorConstants.textGreen0AC074,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // 操作内容
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              MyTextView(
+                "Content:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //时间
+              MyTextView(
+                _obtainContent(),
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+        ],
+      ),
+    );
+  }
+
+  String _obtainContent() {
+    String displayText = "";
+
+    // 检查 reviseHours
+    if (item.content?.reviseHours != null) {
+      displayText += "Revise Hours => ${item.content!.reviseHours!.value!}\n";
+    }
+
+    // 检查 reviseMsg
+    if (item.content?.reviseMsg != null) {
+      displayText += "Reason => ${item.content!.reviseMsg!.value!}\n";
+    }
+
+    // 检查 status
+    if (item.content?.status != null) {
+      displayText += "Status => ${item.content!.status!.value!}\n";
+    }
+
+    // 如果没有任何信息,则显示 "-"
+    if (displayText.isEmpty) {
+      displayText = "-";
+    } else {
+      // 去掉末尾的换行符
+      displayText = displayText.trim();
+    }
+
+    return displayText;
+  }
+}

+ 102 - 0
packages/cpt_job_sg/lib/modules/revise_log/revise_log_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_log_controller.dart';
+import 'revise_log_state.dart';
+import 'revise_log_item.dart';
+
+/**
+ * 修改的记录
+ */
+class ReviseLogPage extends BaseStatefulPage<ReviseLogController> {
+  ReviseLogPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance(String? reviseId) {
+    return Get.start(RouterPath.REVISE_LOG_SG,arguments: {'reviseId': reviseId});
+  }
+
+  @override
+  ReviseLogController createRawController() {
+    return ReviseLogController();
+  }
+
+  @override
+  State<ReviseLogPage> createState() => _AppliedWorkflowState();
+
+}
+
+class _AppliedWorkflowState extends BaseState<ReviseLogPage, ReviseLogController> {
+
+  late ReviseLogState 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: true,
+          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, "Logs".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 ReviseLogItem(index: index,item: state.datas[index]);
+                            },
+                            childCount: state.datas.length,
+                          ))
+                    ],
+                  ),
+                ).marginOnly(top: 5,bottom: 5).expanded(),
+              ],
+            ).marginOnly(top: 10),
+          ),
+        );
+    });
+  }
+}
+
+

+ 10 - 0
packages/cpt_job_sg/lib/modules/revise_log/revise_log_state.dart

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

+ 2 - 1
packages/cpt_job_sg/lib/router/job_sg_service_impl.dart

@@ -1,3 +1,4 @@
+import 'package:cpt_job_sg/modules/revise_list/revise_list_page.dart';
 import 'package:plugin_basic/basic_export.dart';
 import 'package:router/componentRouter/job_sg_service.dart';
 
@@ -23,7 +24,7 @@ class JobSGServiceImpl extends GetxService implements JobSGService {
 
   @override
   void startReviseListPage() {
-
+    ReviseListPage.startInstance();
   }
 
 }

+ 13 - 0
packages/cpt_job_sg/lib/router/page_router.dart

@@ -1,3 +1,5 @@
+import 'package:cpt_job_sg/modules/revise_list/revise_list_page.dart';
+import 'package:cpt_job_sg/modules/revise_log/revise_log_page.dart';
 import 'package:get/get.dart';
 import 'package:router/path/router_path.dart';
 
@@ -29,5 +31,16 @@ class JobPageSGRouter {
       name: RouterPath.JOB_LIST_APPLIED_STAFF_REVIEWS_SG,
       page: () => AppliedStaffReviewsPage(),
     ),
+
+    GetPage(
+      name: RouterPath.REVISE_LIST_SG,
+      page: () => ReviseListPage(),
+    ),
+
+    GetPage(
+      name: RouterPath.REVISE_LOG_SG,
+      page: () => ReviseLogPage(),
+    ),
+
   ];
 }

+ 8 - 23
packages/cs_domain/lib/entity/response/revise_log_s_g_entity.dart

@@ -50,9 +50,10 @@ class ReviseLogSGRecords {
 @JsonSerializable()
 class ReviseLogSGRecordsContent {
 	@JSONField(name: "revise_hours")
-	ReviseLogSGRecordsContentReviseHours? reviseHours;
+	ReviseLogSGRecordsOption? reviseHours;
 	@JSONField(name: "revise_msg")
-	ReviseLogSGRecordsContentReviseMsg? reviseMsg;
+	ReviseLogSGRecordsOption? reviseMsg;
+	ReviseLogSGRecordsOption? status;
 
 	ReviseLogSGRecordsContent();
 
@@ -67,15 +68,15 @@ class ReviseLogSGRecordsContent {
 }
 
 @JsonSerializable()
-class ReviseLogSGRecordsContentReviseHours {
+class ReviseLogSGRecordsOption {
 	String? field = null;
-	int? value = 0;
+	String? value = null;
 
-	ReviseLogSGRecordsContentReviseHours();
+	ReviseLogSGRecordsOption();
 
-	factory ReviseLogSGRecordsContentReviseHours.fromJson(Map<String, dynamic> json) => $ReviseLogSGRecordsContentReviseHoursFromJson(json);
+	factory ReviseLogSGRecordsOption.fromJson(Map<String, dynamic> json) => $ReviseLogSGRecordsOptionFromJson(json);
 
-	Map<String, dynamic> toJson() => $ReviseLogSGRecordsContentReviseHoursToJson(this);
+	Map<String, dynamic> toJson() => $ReviseLogSGRecordsOptionToJson(this);
 
 	@override
 	String toString() {
@@ -83,19 +84,3 @@ class ReviseLogSGRecordsContentReviseHours {
 	}
 }
 
-@JsonSerializable()
-class ReviseLogSGRecordsContentReviseMsg {
-	String? field = null;
-	String? value = null;
-
-	ReviseLogSGRecordsContentReviseMsg();
-
-	factory ReviseLogSGRecordsContentReviseMsg.fromJson(Map<String, dynamic> json) => $ReviseLogSGRecordsContentReviseMsgFromJson(json);
-
-	Map<String, dynamic> toJson() => $ReviseLogSGRecordsContentReviseMsgToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}

+ 3 - 7
packages/cs_domain/lib/generated/json/base/json_convert_content.dart

@@ -418,11 +418,8 @@ class JsonConvert {
     if (<ReviseLogSGRecordsContent>[] is M) {
       return data.map<ReviseLogSGRecordsContent>((Map<String, dynamic> e) => ReviseLogSGRecordsContent.fromJson(e)).toList() as M;
     }
-    if (<ReviseLogSGRecordsContentReviseHours>[] is M) {
-      return data.map<ReviseLogSGRecordsContentReviseHours>((Map<String, dynamic> e) => ReviseLogSGRecordsContentReviseHours.fromJson(e)).toList() as M;
-    }
-    if (<ReviseLogSGRecordsContentReviseMsg>[] is M) {
-      return data.map<ReviseLogSGRecordsContentReviseMsg>((Map<String, dynamic> e) => ReviseLogSGRecordsContentReviseMsg.fromJson(e)).toList() as M;
+    if (<ReviseLogSGRecordsOption>[] is M) {
+      return data.map<ReviseLogSGRecordsOption>((Map<String, dynamic> e) => ReviseLogSGRecordsOption.fromJson(e)).toList() as M;
     }
     if (<StaffDetailEntity>[] is M) {
       return data.map<StaffDetailEntity>((Map<String, dynamic> e) => StaffDetailEntity.fromJson(e)).toList() as M;
@@ -576,8 +573,7 @@ class JsonConvertClassCollection {
     (ReviseLogSGEntity).toString(): ReviseLogSGEntity.fromJson,
     (ReviseLogSGRecords).toString(): ReviseLogSGRecords.fromJson,
     (ReviseLogSGRecordsContent).toString(): ReviseLogSGRecordsContent.fromJson,
-    (ReviseLogSGRecordsContentReviseHours).toString(): ReviseLogSGRecordsContentReviseHours.fromJson,
-    (ReviseLogSGRecordsContentReviseMsg).toString(): ReviseLogSGRecordsContentReviseMsg.fromJson,
+    (ReviseLogSGRecordsOption).toString(): ReviseLogSGRecordsOption.fromJson,
     (StaffDetailEntity).toString(): StaffDetailEntity.fromJson,
     (StaffDetailSGEntity).toString(): StaffDetailSGEntity.fromJson,
     (StaffDetailSGReviews).toString(): StaffDetailSGReviews.fromJson,

+ 21 - 45
packages/cs_domain/lib/generated/json/revise_log_s_g_entity.g.dart

@@ -101,14 +101,18 @@ extension ReviseLogSGRecordsExtension on ReviseLogSGRecords {
 
 ReviseLogSGRecordsContent $ReviseLogSGRecordsContentFromJson(Map<String, dynamic> json) {
   final ReviseLogSGRecordsContent reviseLogSGRecordsContent = ReviseLogSGRecordsContent();
-  final ReviseLogSGRecordsContentReviseHours? reviseHours = jsonConvert.convert<ReviseLogSGRecordsContentReviseHours>(json['revise_hours']);
+  final ReviseLogSGRecordsOption? reviseHours = jsonConvert.convert<ReviseLogSGRecordsOption>(json['revise_hours']);
   if (reviseHours != null) {
     reviseLogSGRecordsContent.reviseHours = reviseHours;
   }
-  final ReviseLogSGRecordsContentReviseMsg? reviseMsg = jsonConvert.convert<ReviseLogSGRecordsContentReviseMsg>(json['revise_msg']);
+  final ReviseLogSGRecordsOption? reviseMsg = jsonConvert.convert<ReviseLogSGRecordsOption>(json['revise_msg']);
   if (reviseMsg != null) {
     reviseLogSGRecordsContent.reviseMsg = reviseMsg;
   }
+  final ReviseLogSGRecordsOption? status = jsonConvert.convert<ReviseLogSGRecordsOption>(json['status']);
+  if (status != null) {
+    reviseLogSGRecordsContent.status = status;
+  }
   return reviseLogSGRecordsContent;
 }
 
@@ -116,77 +120,49 @@ Map<String, dynamic> $ReviseLogSGRecordsContentToJson(ReviseLogSGRecordsContent
   final Map<String, dynamic> data = <String, dynamic>{};
   data['revise_hours'] = entity.reviseHours?.toJson();
   data['revise_msg'] = entity.reviseMsg?.toJson();
+  data['status'] = entity.status?.toJson();
   return data;
 }
 
 extension ReviseLogSGRecordsContentExtension on ReviseLogSGRecordsContent {
   ReviseLogSGRecordsContent copyWith({
-    ReviseLogSGRecordsContentReviseHours? reviseHours,
-    ReviseLogSGRecordsContentReviseMsg? reviseMsg,
+    ReviseLogSGRecordsOption? reviseHours,
+    ReviseLogSGRecordsOption? reviseMsg,
+    ReviseLogSGRecordsOption? status,
   }) {
     return ReviseLogSGRecordsContent()
       ..reviseHours = reviseHours ?? this.reviseHours
-      ..reviseMsg = reviseMsg ?? this.reviseMsg;
-  }
-}
-
-ReviseLogSGRecordsContentReviseHours $ReviseLogSGRecordsContentReviseHoursFromJson(Map<String, dynamic> json) {
-  final ReviseLogSGRecordsContentReviseHours reviseLogSGRecordsContentReviseHours = ReviseLogSGRecordsContentReviseHours();
-  final String? field = jsonConvert.convert<String>(json['field']);
-  if (field != null) {
-    reviseLogSGRecordsContentReviseHours.field = field;
-  }
-  final int? value = jsonConvert.convert<int>(json['value']);
-  if (value != null) {
-    reviseLogSGRecordsContentReviseHours.value = value;
-  }
-  return reviseLogSGRecordsContentReviseHours;
-}
-
-Map<String, dynamic> $ReviseLogSGRecordsContentReviseHoursToJson(ReviseLogSGRecordsContentReviseHours entity) {
-  final Map<String, dynamic> data = <String, dynamic>{};
-  data['field'] = entity.field;
-  data['value'] = entity.value;
-  return data;
-}
-
-extension ReviseLogSGRecordsContentReviseHoursExtension on ReviseLogSGRecordsContentReviseHours {
-  ReviseLogSGRecordsContentReviseHours copyWith({
-    String? field,
-    int? value,
-  }) {
-    return ReviseLogSGRecordsContentReviseHours()
-      ..field = field ?? this.field
-      ..value = value ?? this.value;
+      ..reviseMsg = reviseMsg ?? this.reviseMsg
+      ..status = status ?? this.status;
   }
 }
 
-ReviseLogSGRecordsContentReviseMsg $ReviseLogSGRecordsContentReviseMsgFromJson(Map<String, dynamic> json) {
-  final ReviseLogSGRecordsContentReviseMsg reviseLogSGRecordsContentReviseMsg = ReviseLogSGRecordsContentReviseMsg();
+ReviseLogSGRecordsOption $ReviseLogSGRecordsOptionFromJson(Map<String, dynamic> json) {
+  final ReviseLogSGRecordsOption reviseLogSGRecordsOption = ReviseLogSGRecordsOption();
   final String? field = jsonConvert.convert<String>(json['field']);
   if (field != null) {
-    reviseLogSGRecordsContentReviseMsg.field = field;
+    reviseLogSGRecordsOption.field = field;
   }
   final String? value = jsonConvert.convert<String>(json['value']);
   if (value != null) {
-    reviseLogSGRecordsContentReviseMsg.value = value;
+    reviseLogSGRecordsOption.value = value;
   }
-  return reviseLogSGRecordsContentReviseMsg;
+  return reviseLogSGRecordsOption;
 }
 
-Map<String, dynamic> $ReviseLogSGRecordsContentReviseMsgToJson(ReviseLogSGRecordsContentReviseMsg entity) {
+Map<String, dynamic> $ReviseLogSGRecordsOptionToJson(ReviseLogSGRecordsOption entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['field'] = entity.field;
   data['value'] = entity.value;
   return data;
 }
 
-extension ReviseLogSGRecordsContentReviseMsgExtension on ReviseLogSGRecordsContentReviseMsg {
-  ReviseLogSGRecordsContentReviseMsg copyWith({
+extension ReviseLogSGRecordsOptionExtension on ReviseLogSGRecordsOption {
+  ReviseLogSGRecordsOption copyWith({
     String? field,
     String? value,
   }) {
-    return ReviseLogSGRecordsContentReviseMsg()
+    return ReviseLogSGRecordsOption()
       ..field = field ?? this.field
       ..value = value ?? this.value;
   }

+ 0 - 74
packages/cs_domain/lib/repository/job_repository.dart

@@ -9,7 +9,6 @@ import 'package:domain/entity/response/job_list_detail_entity.dart';
 import 'package:domain/entity/response/job_list_entity.dart';
 import 'package:domain/entity/response/job_list_index_entity.dart';
 import 'package:domain/entity/response/job_list_remark_view_entity.dart';
-import 'package:domain/entity/response/revise_index_s_g_entity.dart';
 import 'package:domain/entity/response/staff_detail_entity.dart';
 import 'package:domain/entity/response/staff_labour_history_entity.dart';
 import 'package:domain/entity/response/staff_remark_history_entity.dart';
@@ -731,77 +730,4 @@ class JobRepository extends GetxService {
     }
     return result.convert();
   }
-
-  /// Revise 列表选项
-  Future<HttpResult<ReviseIndexSGEntity>> fetchReviseIndex({
-    CancelToken? cancelToken,
-  }) async {
-    final result = await httpProvider.requestNetResult(
-      ApiConstants.apiReviseIndexSG,
-      cancelToken: cancelToken,
-    );
-
-    //根据返回的结果,封装原始数据为Bean/Entity对象
-    if (result.isSuccess) {
-      //重新赋值data或list
-      final json = result.getDataJson();
-      var data = ReviseIndexSGEntity.fromJson(json!);
-      //重新赋值data或list
-      return result.convert<ReviseIndexSGEntity>(data: data);
-    }
-    return result.convert();
-  }
-
-  /// Revise 列表选项
-  Future<HttpResult<StaffRemarkHistoryEntity>> fetchReviseList(
-    String? applied_id,
-    String? status,
-    String? keyword,
-    String? start_date,
-    String? end_date, {
-    required int curPage,
-    CancelToken? cancelToken,
-  }) async {
-    //参数
-    Map<String, String> params = {};
-    params["cur_page"] = curPage.toString();
-    params["page_size"] = "10";
-
-    if (!Utils.isEmpty(applied_id)) {
-      params["applied_id"] = applied_id!;
-    }
-
-    if (!Utils.isEmpty(status)) {
-      params["status"] = status!;
-    }
-
-    if (!Utils.isEmpty(keyword)) {
-      params["keyword"] = keyword!;
-    }
-
-    if (!Utils.isEmpty(start_date)) {
-      params["start_date"] = start_date!;
-    }
-
-    if (!Utils.isEmpty(end_date)) {
-      params["end_date"] = end_date!;
-    }
-
-    final result = await httpProvider.requestNetResult(
-      ApiConstants.apiJobListStaffRemarkHistory,
-      params: params,
-      cancelToken: cancelToken,
-    );
-
-    //根据返回的结果,封装原始数据为Bean/Entity对象
-    if (result.isSuccess) {
-      //重新赋值data或list
-      final json = result.getDataJson();
-      var data = StaffRemarkHistoryEntity.fromJson(json!);
-      //重新赋值data或list
-      return result.convert<StaffRemarkHistoryEntity>(data: data);
-    }
-    return result.convert();
-  }
-
 }

+ 313 - 8
packages/cs_domain/lib/repository/job_sg_repository.dart

@@ -11,6 +11,8 @@ import 'package:domain/entity/response/job_list_detail_entity.dart';
 import 'package:domain/entity/response/job_list_entity.dart';
 import 'package:domain/entity/response/job_list_index_entity.dart';
 import 'package:domain/entity/response/job_list_remark_view_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/staff_detail_entity.dart';
 import 'package:domain/entity/response/staff_detail_s_g_entity.dart';
 import 'package:domain/entity/response/staff_labour_history_entity.dart';
@@ -23,12 +25,14 @@ import 'package:plugin_platform/http/http_result.dart';
 import 'package:shared/utils/util.dart';
 
 import '../constants/api_constants.dart';
+import '../entity/response/add_edit_revise_view_s_g_entity.dart';
 import '../entity/response/attendance_entity.dart';
 import '../entity/response/check_success_entity.dart';
 import '../entity/response/job_applied_edit_index_s_g_entity.dart';
 import '../entity/response/job_applied_remark_view_s_g_entity.dart';
 import '../entity/response/job_applied_staff_s_g_entity.dart';
 import '../entity/response/job_list_applied_work_flow_entity.dart';
+import '../entity/response/revise_index_s_g_entity.dart';
 import '../entity/response/staff_job_history_s_g_entity.dart';
 
 /// 工作相关(新加坡)
@@ -458,7 +462,6 @@ class JobSGRepository extends GetxService {
     params['cur_page'] = curPage.toString();
     params['page_size'] = "10";
 
-
     final result = await httpProvider.requestNetResult(
       ApiConstants.apiJobListStaffLabourHistorySG,
       params: params,
@@ -477,9 +480,9 @@ class JobSGRepository extends GetxService {
 
   /// 获取员工的做工评价历史列表
   Future<HttpResult<StaffReviewHistorySGEntity>> fetchStaffReviewHeadView(
-      String? memberId, {
-        CancelToken? cancelToken,
-      }) async {
+    String? memberId, {
+    CancelToken? cancelToken,
+  }) async {
     //参数
     Map<String, String> params = {};
     params['member_id'] = memberId ?? "";
@@ -502,10 +505,10 @@ class JobSGRepository extends GetxService {
 
   /// 获取员工的做工评价历史列表
   Future<HttpResult<StaffReviewHistorySGEntity>> fetchStaffReviewHistory(
-      String? memberId, {
-        required int curPage,
-        CancelToken? cancelToken,
-      }) async {
+    String? memberId, {
+    required int curPage,
+    CancelToken? cancelToken,
+  }) async {
     //参数
     Map<String, String> params = {};
     params['cur_page'] = curPage.toString();
@@ -528,4 +531,306 @@ class JobSGRepository extends GetxService {
     return result.convert();
   }
 
+  /// Revise 列表选项
+  Future<HttpResult<ReviseIndexSGEntity>> fetchReviseIndex({
+    CancelToken? cancelToken,
+  }) async {
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiReviseIndexSG,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = ReviseIndexSGEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<ReviseIndexSGEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// Revise 列表选项
+  Future<HttpResult<ReviseListSGEntity>> fetchReviseList(
+    String? applied_id,
+    String? status,
+    String? keyword,
+    String? start_date,
+    String? end_date, {
+    required int curPage,
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params["cur_page"] = curPage.toString();
+    params["page_size"] = "10";
+
+    if (!Utils.isEmpty(applied_id)) {
+      params["applied_id"] = applied_id!;
+    }
+
+    if (!Utils.isEmpty(status)) {
+      params["status"] = status!;
+    }
+
+    if (!Utils.isEmpty(keyword)) {
+      params["keyword"] = keyword!;
+    }
+
+    if (!Utils.isEmpty(start_date)) {
+      params["start_date"] = start_date!;
+    }
+
+    if (!Utils.isEmpty(end_date)) {
+      params["end_date"] = end_date!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiReviseListSG,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = ReviseListSGEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<ReviseListSGEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// 根据ID获取主列表的Item数据,用于刷新Item
+  Future<HttpResult<ReviseListSGEntity>> fetchReviseListByIds(
+      String? reviseId, {
+        CancelToken? cancelToken,
+      }) async {
+    //参数
+    Map<String, String> params = {};
+    params["cur_page"] = "1";
+    params["page_size"] = "9999";
+
+    if (!Utils.isEmpty(reviseId)) {
+      params["revise_id"] = reviseId!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiReviseListSG,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = ReviseListSGEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<ReviseListSGEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// Revise 添加选项
+  Future<HttpResult<AddEditReviseViewSGEntity>> fetchReviseAddIndex(
+    String? applied_id, {
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+    params["applied_id"] = applied_id ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiAddReviseViewSG,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = AddEditReviseViewSGEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<AddEditReviseViewSGEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// Revise 编辑选项
+  Future<HttpResult<AddEditReviseViewSGEntity>> fetchReviseEditIndex(
+    String? revise_id, {
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+    params["revise_id"] = revise_id ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiEditReviseViewSG,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = AddEditReviseViewSGEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<AddEditReviseViewSGEntity>(data: data);
+    }
+    return result.convert();
+  }
+
+  /// Review Add 提交
+  Future<HttpResult> submitReviseAdd(
+    String? appliedId,
+    String? revise_hours,
+    String? revise_msg, {
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params['applied_id'] = appliedId ?? "";
+
+    if (!Utils.isEmpty(revise_hours)) {
+      params['revise_hours'] = revise_hours ?? "";
+    }
+
+    if (!Utils.isEmpty(revise_msg)) {
+      params['revise_msg'] = revise_msg ?? "";
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiAddReviseSubmitSG,
+      method: HttpMethod.POST,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// Review Edit 提交
+  Future<HttpResult> submitReviseEdit(
+    String? revise_id,
+    String? revise_hours,
+    String? revise_msg, {
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params['revise_id'] = revise_id ?? "";
+
+    if (!Utils.isEmpty(revise_hours)) {
+      params['revise_hours'] = revise_hours ?? "";
+    }
+
+    if (!Utils.isEmpty(revise_msg)) {
+      params['revise_msg'] = revise_msg ?? "";
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiEditReviseSubmitSG,
+      method: HttpMethod.POST,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// Review Recall
+  Future<HttpResult> recallRevise(
+    String? revise_id, {
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params['revise_id'] = revise_id ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiRecallReviseSG,
+      method: HttpMethod.POST,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// Review Delete
+  Future<HttpResult> deleteRevise(
+    String? revise_id, {
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params['revise_id'] = revise_id ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiDeleteReviseSG,
+      method: HttpMethod.POST,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// Review Logs
+  Future<HttpResult<ReviseLogSGEntity>> fetchReviseLogs(
+    String? revise_id, {
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+    params["revise_id"] = revise_id ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiReviseLogListSG,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = ReviseLogSGEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<ReviseLogSGEntity>(data: data);
+    }
+    return result.convert();
+  }
+
 }

+ 1 - 0
packages/cs_resources/lib/constants/color_constants.dart

@@ -35,6 +35,7 @@ class ColorConstants {
   static const Color textRedFF6262 = Color(0xFFFF6262);
   static const Color textBlue06D9FF = Color(0xFF06D9FF);
   static const Color textBlue5CEEFF = Color(0xFF5CEEFF);
+  static const Color textBlue56AAFF = Color(0xFF56AAFF);
   static const Color textYellowF8AE00 = Color(0xFFF8AE00);
 
   //黑暗模式的一些色值

+ 4 - 0
packages/cs_resources/lib/local/language/en_US.dart

@@ -218,6 +218,10 @@ const Map<String, String> en_US = {
   'Reviews': 'Reviews',
   'Mobile': 'Mobile',
   'Staff Reviews': 'Staff Reviews',
+  'Revise Hours': 'Revise Hours',
+  'Are you sure you want to recall this revise?': 'Are you sure you want to recall this revise?',
+  'Are you sure you want to delete this revise?': 'Are you sure you want to delete this revise?',
+  'Logs': 'Logs',
 
   //插件的国际化
   'Pull to refresh': 'Pull to refresh',

+ 4 - 0
packages/cs_resources/lib/local/language/vi_VN.dart

@@ -218,6 +218,10 @@ const Map<String, String> vi_VN = {
   'Reviews': 'Bình luận',
   'Mobile': 'Điện thoại',
   'Staff Reviews': 'Đánh giá nhân viên',
+  'Revise Hours': 'Giờ sửa đổi',
+  'Are you sure you want to recall this revise?': 'Anh có chắc là anh muốn rút hồ sơ sửa đổi này không??',
+  'Are you sure you want to delete this revise?': 'Bạn có chắc chắn muốn xóa bản ghi sửa đổi này?',
+  'Logs': 'Đăng nhập',
 
   //插件的国际化
   "Pull to refresh": "Kéo để làm mới",

+ 4 - 0
packages/cs_resources/lib/local/language/zh_CN.dart

@@ -218,6 +218,10 @@ const Map<String, String> zh_CN = {
   'Reviews': '评价',
   'Mobile': '电话',
   'Staff Reviews': '员工评价',
+  'Revise Hours': '修改的小时',
+  'Are you sure you want to recall this revise?': '你确定要撤回此修改记录吗?',
+  'Are you sure you want to delete this revise?': '你确定要删除此修改记录吗?',
+  'Logs': '日志',
 
   //插件的国际化
   'Pull to refresh': '下拉刷新',

+ 4 - 1
packages/cs_router/lib/path/router_path.dart

@@ -49,7 +49,10 @@ class RouterPath {
   static const JOB_LIST_APPLIED_STAFF_LIST_SG = '/job/list/applied/staff/list'; //工作列表已申请列表添加员工列表(新加坡)
   static const JOB_LIST_APPLIED_STAFF_DETAIL_SG = '/job/list/applied/staff/detail'; //工作列表已申请列表员工详情(新加坡)
   static const JOB_LIST_APPLIED_STAFF_REVIEWS_SG = '/job/list/applied/staff/reviews'; //工作列表已申请列表员工的评论列表(新加坡)
-
+  static const REVISE_LIST_SG = '/revise/list'; //Revise列表(新加坡)
+  static const REVISE_APPLIED_SG = '/revise/applied'; //Applied的Revise(新加坡)
+  static const REVISE_LOG_SG = '/revise/log'; //Revise 的日志(新加坡)
+  static const REVISE_EDIT_SG = '/revise/edit'; //Revise 的添加,编辑,详情(新加坡)
 
   //全局其他
   static const PREVIEW_IMAGE = '/preview/image'; //预览图片