Browse Source

labour request 模版

liukai 8 months ago
parent
commit
4eccaa616c
20 changed files with 801 additions and 43 deletions
  1. 19 3
      packages/cpt_job/lib/modules/labour_request_add/labour_request_add_controller.dart
  2. 18 10
      packages/cpt_job/lib/modules/labour_request_list/labour_request_item.dart
  3. 100 7
      packages/cpt_job/lib/modules/labour_request_list/labour_request_list_controller.dart
  4. 1 1
      packages/cpt_job/lib/modules/labour_request_list/labour_request_list_page.dart
  5. 89 1
      packages/cpt_job/lib/modules/labour_request_workflow/labour_request_workflow_controller.dart
  6. 35 6
      packages/cpt_job/lib/modules/labour_request_workflow/labour_request_workflow_page.dart
  7. 8 3
      packages/cpt_job/lib/modules/labour_request_workflow/labour_request_workflow_state.dart
  8. 230 0
      packages/cpt_job/lib/modules/labour_request_workflow/labour_workflow_item.dart
  9. 15 5
      packages/cpt_job/lib/widget/labour_request_filter.dart
  10. 4 0
      packages/cs_domain/lib/entity/response/labour_request_edit_index_entity.dart
  11. 55 0
      packages/cs_domain/lib/entity/response/labour_request_work_flow_entity.dart
  12. 9 0
      packages/cs_domain/lib/generated/json/base/json_convert_content.dart
  13. 14 0
      packages/cs_domain/lib/generated/json/labour_request_edit_index_entity.g.dart
  14. 114 0
      packages/cs_domain/lib/generated/json/labour_request_work_flow_entity.g.dart
  15. 61 2
      packages/cs_domain/lib/repository/labour_repository.dart
  16. 2 3
      packages/cs_plugin_basic/lib/constants/app_constant.dart
  17. 0 2
      packages/cs_plugin_platform/lib/engine/loading/loading_engine.dart
  18. 3 0
      packages/cs_resources/lib/constants/color_constants.dart
  19. 12 0
      packages/cs_resources/lib/local/language/en_US.dart
  20. 12 0
      packages/cs_resources/lib/local/language/zh_CN.dart

+ 19 - 3
packages/cpt_job/lib/modules/labour_request_add/labour_request_add_controller.dart

@@ -2,10 +2,12 @@ import 'package:domain/entity/response/labour_request_edit_index_entity.dart';
 import 'package:domain/repository/labour_repository.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
+import 'package:plugin_basic/constants/app_constant.dart';
 import 'package:plugin_platform/engine/notify/notify_engine.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:plugin_platform/http/http_result.dart';
 import 'package:shared/utils/date_time_utils.dart';
+import 'package:shared/utils/event_bus.dart';
 import 'package:shared/utils/util.dart';
 import 'package:widgets/picker/date_picker_util.dart';
 import 'package:widgets/picker/option_pick_util.dart';
@@ -20,7 +22,7 @@ class LabourRequestAddController extends GetxController {
   void fetchRequestDetail() async {
     //获取到数据
     Future<HttpResult<LabourRequestEditIndexEntity>> taskFuture;
-    if (state.pageType != 0 && Utils.isNotEmpty(state.appliedId)&& state.appliedId != "0") {
+    if (state.pageType != 0 && Utils.isNotEmpty(state.appliedId) && state.appliedId != "0") {
       taskFuture = _labourRepository.fetchLabourRequestEditDetail(state.appliedId);
     } else {
       taskFuture = _labourRepository.fetchLabourRequestAddOption();
@@ -36,6 +38,8 @@ class LabourRequestAddController extends GetxController {
       state.noStaff = state.labReqOption?.needNum.toString() == "0" ? "" : state.labReqOption?.needNum.toString();
       var needNumController = state.formData['no_of_staff']!['controller'];
       needNumController.text = state.noStaff;
+      state.selectedTemplateId = state.labReqOption?.templateId;
+      state.selectedDepartmentId = state.labReqOption?.departmentId;
 
       update();
     } else {
@@ -96,6 +100,17 @@ class LabourRequestAddController extends GetxController {
     //处理数据
     if (result.isSuccess) {
       NotifyEngine.showSuccess("Successful".tr);
+
+      //根据类型刷新
+
+      if (state.pageType != 0 && Utils.isNotEmpty(state.appliedId) && state.appliedId != "0") {
+        //编辑就发送指定的 requestId
+        bus.emit(AppConstant.eventLabourRequestRefresh, state.appliedId);
+      } else {
+        //新增的就发送空
+        bus.emit(AppConstant.eventLabourRequestRefresh, "");
+      }
+
       Get.back();
     } else {
       ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
@@ -129,7 +144,7 @@ class LabourRequestAddController extends GetxController {
     );
   }
 
-  //选开始时间
+  //选开始时间
   void pickStartTime() {
     if (state.labReqOption == null || state.pageType == 2) {
       return;
@@ -146,13 +161,14 @@ class LabourRequestAddController extends GetxController {
     );
   }
 
+  // 选择结束时间
   void pickEndTime() {
     if (state.labReqOption == null || state.pageType == 2) {
       return;
     }
 
     DatePickerUtil.showCupertinoDatePicker(
-      selectedDateTime: state.selectedEndTime,
+      selectedDateTime: state.selectedEndTime ?? state.selectedStartTime,
       mode: CupertinoDatePickerMode.dateAndTime,
       onDateTimeChanged: (date) {
         state.selectedEndTime = date;

+ 18 - 10
packages/cpt_job/lib/modules/labour_request_list/labour_request_item.dart

@@ -9,7 +9,7 @@ import 'package:widgets/my_button.dart';
 import 'package:widgets/my_text_view.dart';
 
 /**
- * 用工请求的主页面列表
+ * 用工请求的主页面列表Item
  */
 class LabourRequestItem extends StatelessWidget {
   final int index;
@@ -48,8 +48,10 @@ class LabourRequestItem extends StatelessWidget {
             textColor: ColorConstants.textYellowFFBB1B,
             fontSize: 14,
             textDecoration: TextDecoration.underline,
-            decorationColor: ColorConstants.textYellowFFBB1B, // 可选,设置下划线的颜色
-            decorationThickness: 2.0, // 可选,设置下划线的粗细
+            decorationColor: ColorConstants.textYellowFFBB1B,
+            // 可选,设置下划线的颜色
+            decorationThickness: 2.0,
+            // 可选,设置下划线的粗细
             decorationStyle: TextDecorationStyle.solid, // 可选,设置下划线的样式
           ),
 
@@ -113,7 +115,7 @@ class LabourRequestItem extends StatelessWidget {
 
               //人数
               MyTextView(
-                item.needNum?.toString() ?? "-",
+                item.needNum.toString(),
                 marginLeft: 5,
                 isFontRegular: true,
                 textColor: Colors.white,
@@ -136,10 +138,16 @@ class LabourRequestItem extends StatelessWidget {
 
               //状态
               MyTextView(
-                item.coStatusShow ?? "-",
+                item.coStatusShow == null ? "" : item.coStatusShow!.tr,
                 marginLeft: 5,
                 isFontRegular: true,
-                textColor: Colors.white,
+                textColor: "Approved" == item.coStatusShow
+                    ? ColorConstants.textGreen05DC82
+                    : "Rejected" == item.coStatusShow
+                        ? ColorConstants.textRedFF6262
+                        : "Recall" == item.coStatusShow
+                            ? ColorConstants.textYellowFFBB1B
+                            : ColorConstants.textBlue06D9FF,
                 fontSize: 14,
               ).expanded(),
             ],
@@ -159,7 +167,7 @@ class LabourRequestItem extends StatelessWidget {
 
               //发布状态
               MyTextView(
-                item.publishStatus ? " Published".tr : " Unpublished".tr,
+                item.publishStatus ? "Published".tr : "Unpublished".tr,
                 marginLeft: 5,
                 isFontRegular: true,
                 textColor: Colors.white,
@@ -201,7 +209,7 @@ class LabourRequestItem extends StatelessWidget {
               children: [
                 //详情按钮
                 Visibility(
-                  // visible: item.actionList?.contains("detail") ?? false,
+                  visible: item.actionList?.contains("detail") ?? false,
                   child: MyButton(
                     onPressed: () {
                       FocusScope.of(context).unfocus();
@@ -237,7 +245,7 @@ class LabourRequestItem extends StatelessWidget {
 
                 //Edit按钮
                 Visibility(
-                  // visible: item.actionList?.contains("edit") ?? false,
+                  visible: item.actionList?.contains("edit") ?? false,
                   child: MyButton(
                     onPressed: () {
                       FocusScope.of(context).unfocus();
@@ -254,7 +262,7 @@ class LabourRequestItem extends StatelessWidget {
 
                 //状态工作流按钮
                 Visibility(
-                  // visible: item.actionList?.contains("status") ?? false,
+                  visible: item.actionList?.contains("status") ?? false,
                   child: MyButton(
                     onPressed: () {
                       FocusScope.of(context).unfocus();

+ 100 - 7
packages/cpt_job/lib/modules/labour_request_list/labour_request_list_controller.dart

@@ -3,16 +3,24 @@ import 'package:domain/entity/response/labour_request_index_entity.dart';
 import 'package:domain/entity/response/labour_request_list_entity.dart';
 import 'package:domain/repository/labour_repository.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/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: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 '../../widget/labour_request_filter.dart';
+import '../labour_request_workflow/labour_request_workflow_page.dart';
 import 'labour_request_list_state.dart';
 
-class LabourRequestListController extends GetxController {
+class LabourRequestListController extends GetxController with DioCancelableMixin {
   final LabourRepository _labourRepository = Get.find();
   final LabourRequestListState state = LabourRequestListState();
 
@@ -69,8 +77,13 @@ class LabourRequestListController extends GetxController {
         state.selectedStatusId,
         state.selectedDepartmentId,
         curPage: _curPage,
+        cancelToken: cancelToken,
       ),
-      state.indexOptions == null ? _labourRepository.fetchLabourRequestIndex() : Future(() => HttpResult(isSuccess: true).convert(data: state.indexOptions!)),
+      state.indexOptions == null
+          ? _labourRepository.fetchLabourRequestIndex(
+              cancelToken: cancelToken,
+            )
+          : Future(() => HttpResult(isSuccess: true).convert(data: state.indexOptions!)),
     ];
 
     //拿到结果
@@ -157,10 +170,6 @@ class LabourRequestListController extends GetxController {
           selectedEndDate: state.selectedEndDate,
           selectedStatusId: state.selectedStatusId,
           selectedDepartmentId: state.selectedDepartmentId,
-          onResetAction: () {
-            //重置参数
-            resetFiltering();
-          },
           onFilterAction: (startDate, endDate, statusId, departmentId) {
             state.selectedStartDate = startDate;
             state.selectedEndDate = endDate;
@@ -177,10 +186,78 @@ class LabourRequestListController extends GetxController {
     }
   }
 
+  /// 执行Recall请求
+  void requestRecall(String requestId) async {
+    var recallResult = await _labourRepository.recallLabourRequest(
+      requestId,
+      cancelToken: cancelToken,
+    );
+
+    //处理数据
+    if (recallResult.isSuccess) {
+      NotifyEngine.showSuccess("Successful".tr);
+      fetchItemByIdAndRefreshItem(requestId);
+    } else {
+      ToastEngine.show(recallResult.errorMsg ?? "Network Load Error".tr);
+    }
+  }
+
+  /// 根据ID获取Item对象,用于刷新
+  void fetchItemByIdAndRefreshItem(String requestId) async {
+    var result = await _labourRepository.fetchItemByRequestId(
+      requestId,
+      cancelToken: cancelToken,
+    );
+
+    //处理数据
+    if (result.isSuccess) {
+      var data = result.data;
+      if (data != null && data.rows != null && data.rows!.isNotEmpty) {
+        final requestItem = data.rows![0];
+
+        //找到当前数据中的此 requestId,并替换对象,再刷新
+        var index = state.datas.indexWhere((element) => element.requestId == requestItem.requestId);
+        if (index >= 0) {
+          state.datas[index] = requestItem;
+          update();
+        }
+      }
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+    }
+  }
+
   @override
   void onReady() {
     super.onReady();
     fetchNotifyList();
+
+    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);
   }
 
   //跳转到添加页面
@@ -198,5 +275,21 @@ class LabourRequestListController extends GetxController {
     LabourRequestAddPage.startInstance(1, data.requestId.toString());
   }
 
-  void doRecall(LabourRequestListRows data) {}
+  //去状态工作流的页面
+  void gotoWorkflowPage(LabourRequestListRows data) {
+    LabourRequestWorkflowPage.startInstance(data.requestId.toString());
+  }
+
+  void doRecall(LabourRequestListRows data) {
+    DialogEngine.show(
+        widget: AppDefaultDialog(
+      title: "Message".tr,
+      message: "Are you sure you want to recall?".tr,
+      confirmAction: () {
+        requestRecall(data.requestId.toString());
+      },
+    ));
+  }
+
+
 }

+ 1 - 1
packages/cpt_job/lib/modules/labour_request_list/labour_request_list_page.dart

@@ -151,7 +151,7 @@ class _LabourRequestListState extends BaseState<LabourRequestListPage, LabourReq
                               controller.gotoEditPage(state.datas[index]);
                             },
                             onStatusAction: (){
-                              ToastEngine.show("进入状态页面");
+                              controller.gotoWorkflowPage(state.datas[index]);
                             },
                           );
                         },

+ 89 - 1
packages/cpt_job/lib/modules/labour_request_workflow/labour_request_workflow_controller.dart

@@ -1,7 +1,95 @@
+import 'package:domain/entity/response/labour_request_work_flow_entity.dart';
+import 'package:domain/repository/labour_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 'labour_request_workflow_state.dart';
 
-class LabourRequestWorkflowController extends GetxController {
+class LabourRequestWorkflowController extends GetxController with DioCancelableMixin{
+  final LabourRepository _labourRepository = Get.find();
   final LabourRequestWorkflowState state = LabourRequestWorkflowState();
+
+  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 _labourRepository.fetchLabourRequestWorkFlow(
+      state.requestId,
+      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<LabourRequestWorkFlowRecords>? 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();
+  }
 }

+ 35 - 6
packages/cpt_job/lib/modules/labour_request_workflow/labour_request_workflow_page.dart

@@ -6,18 +6,23 @@ 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 'labour_request_workflow_controller.dart';
 import 'labour_request_workflow_state.dart';
+import 'labour_workflow_item.dart';
 
-
+/**
+ * 用工请求-状态工作流列表
+ */
 class LabourRequestWorkflowPage extends BaseStatefulPage<LabourRequestWorkflowController> {
   LabourRequestWorkflowPage({Key? key}) : super(key: key);
 
   //启动当前页面
-  static void startInstance() {
-    return Get.start(RouterPath.JOB_LABOUR_REQUEST_WORKFLOW);
+  static void startInstance(String? requestId) {
+    return Get.start(RouterPath.JOB_LABOUR_REQUEST_WORKFLOW,arguments: {'requestId': requestId});
   }
 
   @override
@@ -38,6 +43,7 @@ class _LabourRequestWorkflowState extends BaseState<LabourRequestWorkflowPage, L
   void initState() {
     super.initState();
     state = controller.state;
+    state.requestId = Get.arguments['requestId'];
   }
 
   @override
@@ -45,7 +51,7 @@ class _LabourRequestWorkflowState extends BaseState<LabourRequestWorkflowPage, L
     return autoCtlGetBuilder(builder: (controller) {
       return Scaffold(
         extendBodyBehindAppBar: true,
-        appBar: MyAppBar.appBar(context, "Reset Password".tr),
+        appBar: MyAppBar.appBar(context, "Workflow".tr),
         body: SafeArea(
           bottom: true,
           top: false,
@@ -64,7 +70,30 @@ class _LabourRequestWorkflowState extends BaseState<LabourRequestWorkflowPage, L
                 end: Alignment.bottomCenter,
               ),
             ),
-            child: Container(),
+            child: Column(
+              children: [
+
+                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 LabourWorkFlowItem(index: index,item: state.datas[index]);
+                            },
+                            childCount: state.datas.length,
+                          ))
+                    ],
+                  ),
+                ).expanded(),
+              ],
+            ).marginOnly(top: 10),
           ),
         ),
       );

+ 8 - 3
packages/cpt_job/lib/modules/labour_request_workflow/labour_request_workflow_state.dart

@@ -1,5 +1,10 @@
+import 'package:domain/entity/response/labour_request_work_flow_entity.dart';
+
 class LabourRequestWorkflowState {
-  LabourRequestWorkflowState() {
-    ///Initialize variables
-  }
+
+  String? requestId;
+
+  //页面的列表数据
+  List<LabourRequestWorkFlowRecords> datas = [];
+
 }

+ 230 - 0
packages/cpt_job/lib/modules/labour_request_workflow/labour_workflow_item.dart

@@ -0,0 +1,230 @@
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:domain/entity/response/labour_request_list_entity.dart';
+import 'package:domain/entity/response/labour_request_work_flow_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';
+
+/**
+ * 用工请求的工作流列表Item
+ */
+class LabourWorkFlowItem extends StatelessWidget {
+  final int index;
+  final LabourRequestWorkFlowRecords item;
+
+  LabourWorkFlowItem({
+    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: [
+          //Node
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Node:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              MyTextView(
+                item.nodeName ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ),
+
+          // assigneeType
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Type:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //日期时间
+              MyTextView(
+                item.assigneeTypeShow ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // Designation
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Designation:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //人数
+              MyTextView(
+                item.designationShow ?? "-",
+                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: "Approved" == item.statusShow
+                    ? ColorConstants.textGreen05DC82
+                    : "Rejected" == item.statusShow
+                    ? ColorConstants.textRedFF6262
+                    : "Recall" == item.statusShow
+                    ? ColorConstants.textYellowFFBB1B
+                    : ColorConstants.textBlue06D9FF,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // Operator
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Operator:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //发布状态
+              MyTextView(
+                item.auditName ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // 操作时间
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Audit Time:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //时间
+              MyTextView(
+                item.auditTime ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // 创建时间
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Created At:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //时间
+              MyTextView(
+                item.createdAt ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+          // Remark
+          Row(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "Remark:".tr,
+                isFontRegular: true,
+                textColor: ColorConstants.textGrayAECAE5,
+                fontSize: 14,
+              ),
+
+              //时间
+              MyTextView(
+                item.auditMark ?? "-",
+                marginLeft: 5,
+                isFontRegular: true,
+                textColor: Colors.white,
+                fontSize: 14,
+              ).expanded(),
+            ],
+          ).marginOnly(top: 15),
+
+        ],
+      ),
+    );
+  }
+}

+ 15 - 5
packages/cpt_job/lib/widget/labour_request_filter.dart

@@ -23,7 +23,7 @@ import 'package:widgets/widget_export.dart';
  * 用工请求列表的筛选
  */
 class LabourRequestFilter extends StatefulWidget {
-  VoidCallback? onResetAction;
+
   void Function(DateTime? selectedStartDate, DateTime? selectedEndDate, String? selectedStatusId, String? selectedDepartmentId)? onFilterAction;
   LabourRequestIndexEntity optionResult;
   DateTime? selectedStartDate;
@@ -37,7 +37,6 @@ class LabourRequestFilter extends StatefulWidget {
     required this.selectedEndDate,
     required this.selectedStatusId,
     required this.selectedDepartmentId,
-    this.onResetAction,
     this.onFilterAction,
   });
 
@@ -238,8 +237,19 @@ class _LabourRequestFilterState extends State<LabourRequestFilter> {
                 children: [
                   MyButton(
                     onPressed: () {
-                      onCancel();
-                      widget.onResetAction?.call();
+                      //只是Reset当前的弹窗筛选选项
+                      widget.selectedStartDate = null;
+                      widget.selectedEndDate = null;
+                      widget.selectedStatusId = null;
+                      widget.selectedDepartmentId = null;
+
+                      setState(() {
+                        selectedStartDate = null;
+                        selectedEndDate = null;
+                        selectedStatusId = null;
+                        selectedDepartmentId = null;
+                      });
+
                     },
                     text: "Reset".tr,
                     textColor: ColorConstants.white,
@@ -294,7 +304,7 @@ class _LabourRequestFilterState extends State<LabourRequestFilter> {
   /// 筛选结束日期
   void pickerEndDate() {
     DatePickerUtil.showCupertinoDatePicker(
-      selectedDateTime: selectedEndDate,
+      selectedDateTime: selectedEndDate ?? selectedStartDate,
       onDateTimeChanged: (date) {
         setState(() {
           selectedEndDate = date;

+ 4 - 0
packages/cs_domain/lib/entity/response/labour_request_edit_index_entity.dart

@@ -11,6 +11,10 @@ class LabourRequestEditIndexEntity {
   String? jobStart;
   @JSONField(name: "job_end")
   String? jobEnd;
+  @JSONField(name: "department_id")
+  String? departmentId;
+  @JSONField(name: "template_id")
+  String? templateId;
   @JSONField(name: "need_num")
   int needNum = 0;
   @JSONField(name: "template_list")

+ 55 - 0
packages/cs_domain/lib/entity/response/labour_request_work_flow_entity.dart

@@ -0,0 +1,55 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/labour_request_work_flow_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/labour_request_work_flow_entity.g.dart';
+
+@JsonSerializable()
+class LabourRequestWorkFlowEntity {
+	@JSONField(name: "co_department_id")
+	int coDepartmentId = 0;
+	List<LabourRequestWorkFlowRecords>? records = null;
+
+	LabourRequestWorkFlowEntity();
+
+	factory LabourRequestWorkFlowEntity.fromJson(Map<String, dynamic> json) => $LabourRequestWorkFlowEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $LabourRequestWorkFlowEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class LabourRequestWorkFlowRecords {
+	@JSONField(name: "serial_number")
+	int serialNumber = 0;
+	@JSONField(name: "node_name")
+	String? nodeName = null;
+	@JSONField(name: "status_show")
+	String? statusShow = null;
+	@JSONField(name: "audit_name")
+	String? auditName = null;
+	@JSONField(name: "audit_time")
+	String? auditTime = null;
+	@JSONField(name: "audit_mark")
+	String? auditMark = null;
+	@JSONField(name: "created_at")
+	String? createdAt = null;
+	@JSONField(name: "assignee_type_show")
+	String? assigneeTypeShow = null;
+	@JSONField(name: "designation_show")
+	String? designationShow = null;
+
+	LabourRequestWorkFlowRecords();
+
+	factory LabourRequestWorkFlowRecords.fromJson(Map<String, dynamic> json) => $LabourRequestWorkFlowRecordsFromJson(json);
+
+	Map<String, dynamic> toJson() => $LabourRequestWorkFlowRecordsToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

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

@@ -11,6 +11,7 @@ import 'package:domain/entity/response/id_name_entity.dart';
 import 'package:domain/entity/response/labour_request_edit_index_entity.dart';
 import 'package:domain/entity/response/labour_request_index_entity.dart';
 import 'package:domain/entity/response/labour_request_list_entity.dart';
+import 'package:domain/entity/response/labour_request_work_flow_entity.dart';
 import 'package:domain/entity/server_time.dart';
 
 JsonConvert jsonConvert = JsonConvert();
@@ -184,6 +185,12 @@ class JsonConvert {
     if (<LabourRequestListRows>[] is M) {
       return data.map<LabourRequestListRows>((Map<String, dynamic> e) => LabourRequestListRows.fromJson(e)).toList() as M;
     }
+    if (<LabourRequestWorkFlowEntity>[] is M) {
+      return data.map<LabourRequestWorkFlowEntity>((Map<String, dynamic> e) => LabourRequestWorkFlowEntity.fromJson(e)).toList() as M;
+    }
+    if (<LabourRequestWorkFlowRecords>[] is M) {
+      return data.map<LabourRequestWorkFlowRecords>((Map<String, dynamic> e) => LabourRequestWorkFlowRecords.fromJson(e)).toList() as M;
+    }
     if (<ServerTime>[] is M) {
       return data.map<ServerTime>((Map<String, dynamic> e) => ServerTime.fromJson(e)).toList() as M;
     }
@@ -222,6 +229,8 @@ class JsonConvertClassCollection {
     (LabourRequestIndexStatusList).toString(): LabourRequestIndexStatusList.fromJson,
     (LabourRequestListEntity).toString(): LabourRequestListEntity.fromJson,
     (LabourRequestListRows).toString(): LabourRequestListRows.fromJson,
+    (LabourRequestWorkFlowEntity).toString(): LabourRequestWorkFlowEntity.fromJson,
+    (LabourRequestWorkFlowRecords).toString(): LabourRequestWorkFlowRecords.fromJson,
     (ServerTime).toString(): ServerTime.fromJson,
   };
 

+ 14 - 0
packages/cs_domain/lib/generated/json/labour_request_edit_index_entity.g.dart

@@ -15,6 +15,14 @@ LabourRequestEditIndexEntity $LabourRequestEditIndexEntityFromJson(Map<String, d
   if (jobEnd != null) {
     labourRequestEditIndexEntity.jobEnd = jobEnd;
   }
+  final String? departmentId = jsonConvert.convert<String>(json['department_id']);
+  if (departmentId != null) {
+    labourRequestEditIndexEntity.departmentId = departmentId;
+  }
+  final String? templateId = jsonConvert.convert<String>(json['template_id']);
+  if (templateId != null) {
+    labourRequestEditIndexEntity.templateId = templateId;
+  }
   final int? needNum = jsonConvert.convert<int>(json['need_num']);
   if (needNum != null) {
     labourRequestEditIndexEntity.needNum = needNum;
@@ -37,6 +45,8 @@ Map<String, dynamic> $LabourRequestEditIndexEntityToJson(LabourRequestEditIndexE
   data['request_id'] = entity.requestId;
   data['job_start'] = entity.jobStart;
   data['job_end'] = entity.jobEnd;
+  data['department_id'] = entity.departmentId;
+  data['template_id'] = entity.templateId;
   data['need_num'] = entity.needNum;
   data['template_list'] = entity.templateList.map((v) => v.toJson()).toList();
   data['department_list'] = entity.departmentList.map((v) => v.toJson()).toList();
@@ -48,6 +58,8 @@ extension LabourRequestEditIndexEntityExtension on LabourRequestEditIndexEntity
     int? requestId,
     String? jobStart,
     String? jobEnd,
+    String? departmentId,
+    String? templateId,
     int? needNum,
     List<LabourRequestEditIndexTemplateList>? templateList,
     List<LabourRequestEditIndexDepartmentList>? departmentList,
@@ -56,6 +68,8 @@ extension LabourRequestEditIndexEntityExtension on LabourRequestEditIndexEntity
       ..requestId = requestId ?? this.requestId
       ..jobStart = jobStart ?? this.jobStart
       ..jobEnd = jobEnd ?? this.jobEnd
+      ..departmentId = departmentId ?? this.departmentId
+      ..templateId = templateId ?? this.templateId
       ..needNum = needNum ?? this.needNum
       ..templateList = templateList ?? this.templateList
       ..departmentList = departmentList ?? this.departmentList;

+ 114 - 0
packages/cs_domain/lib/generated/json/labour_request_work_flow_entity.g.dart

@@ -0,0 +1,114 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/labour_request_work_flow_entity.dart';
+
+LabourRequestWorkFlowEntity $LabourRequestWorkFlowEntityFromJson(Map<String, dynamic> json) {
+  final LabourRequestWorkFlowEntity labourRequestWorkFlowEntity = LabourRequestWorkFlowEntity();
+  final int? coDepartmentId = jsonConvert.convert<int>(json['co_department_id']);
+  if (coDepartmentId != null) {
+    labourRequestWorkFlowEntity.coDepartmentId = coDepartmentId;
+  }
+  final List<LabourRequestWorkFlowRecords>? records = (json['records'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<LabourRequestWorkFlowRecords>(e) as LabourRequestWorkFlowRecords).toList();
+  if (records != null) {
+    labourRequestWorkFlowEntity.records = records;
+  }
+  return labourRequestWorkFlowEntity;
+}
+
+Map<String, dynamic> $LabourRequestWorkFlowEntityToJson(LabourRequestWorkFlowEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['co_department_id'] = entity.coDepartmentId;
+  data['records'] = entity.records?.map((v) => v.toJson()).toList();
+  return data;
+}
+
+extension LabourRequestWorkFlowEntityExtension on LabourRequestWorkFlowEntity {
+  LabourRequestWorkFlowEntity copyWith({
+    int? coDepartmentId,
+    List<LabourRequestWorkFlowRecords>? records,
+  }) {
+    return LabourRequestWorkFlowEntity()
+      ..coDepartmentId = coDepartmentId ?? this.coDepartmentId
+      ..records = records ?? this.records;
+  }
+}
+
+LabourRequestWorkFlowRecords $LabourRequestWorkFlowRecordsFromJson(Map<String, dynamic> json) {
+  final LabourRequestWorkFlowRecords labourRequestWorkFlowRecords = LabourRequestWorkFlowRecords();
+  final int? serialNumber = jsonConvert.convert<int>(json['serial_number']);
+  if (serialNumber != null) {
+    labourRequestWorkFlowRecords.serialNumber = serialNumber;
+  }
+  final String? nodeName = jsonConvert.convert<String>(json['node_name']);
+  if (nodeName != null) {
+    labourRequestWorkFlowRecords.nodeName = nodeName;
+  }
+  final String? statusShow = jsonConvert.convert<String>(json['status_show']);
+  if (statusShow != null) {
+    labourRequestWorkFlowRecords.statusShow = statusShow;
+  }
+  final String? auditName = jsonConvert.convert<String>(json['audit_name']);
+  if (auditName != null) {
+    labourRequestWorkFlowRecords.auditName = auditName;
+  }
+  final String? auditTime = jsonConvert.convert<String>(json['audit_time']);
+  if (auditTime != null) {
+    labourRequestWorkFlowRecords.auditTime = auditTime;
+  }
+  final String? auditMark = jsonConvert.convert<String>(json['audit_mark']);
+  if (auditMark != null) {
+    labourRequestWorkFlowRecords.auditMark = auditMark;
+  }
+  final String? createdAt = jsonConvert.convert<String>(json['created_at']);
+  if (createdAt != null) {
+    labourRequestWorkFlowRecords.createdAt = createdAt;
+  }
+  final String? assigneeTypeShow = jsonConvert.convert<String>(json['assignee_type_show']);
+  if (assigneeTypeShow != null) {
+    labourRequestWorkFlowRecords.assigneeTypeShow = assigneeTypeShow;
+  }
+  final String? designationShow = jsonConvert.convert<String>(json['designation_show']);
+  if (designationShow != null) {
+    labourRequestWorkFlowRecords.designationShow = designationShow;
+  }
+  return labourRequestWorkFlowRecords;
+}
+
+Map<String, dynamic> $LabourRequestWorkFlowRecordsToJson(LabourRequestWorkFlowRecords entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['serial_number'] = entity.serialNumber;
+  data['node_name'] = entity.nodeName;
+  data['status_show'] = entity.statusShow;
+  data['audit_name'] = entity.auditName;
+  data['audit_time'] = entity.auditTime;
+  data['audit_mark'] = entity.auditMark;
+  data['created_at'] = entity.createdAt;
+  data['assignee_type_show'] = entity.assigneeTypeShow;
+  data['designation_show'] = entity.designationShow;
+  return data;
+}
+
+extension LabourRequestWorkFlowRecordsExtension on LabourRequestWorkFlowRecords {
+  LabourRequestWorkFlowRecords copyWith({
+    int? serialNumber,
+    String? nodeName,
+    String? statusShow,
+    String? auditName,
+    String? auditTime,
+    String? auditMark,
+    String? createdAt,
+    String? assigneeTypeShow,
+    String? designationShow,
+  }) {
+    return LabourRequestWorkFlowRecords()
+      ..serialNumber = serialNumber ?? this.serialNumber
+      ..nodeName = nodeName ?? this.nodeName
+      ..statusShow = statusShow ?? this.statusShow
+      ..auditName = auditName ?? this.auditName
+      ..auditTime = auditTime ?? this.auditTime
+      ..auditMark = auditMark ?? this.auditMark
+      ..createdAt = createdAt ?? this.createdAt
+      ..assigneeTypeShow = assigneeTypeShow ?? this.assigneeTypeShow
+      ..designationShow = designationShow ?? this.designationShow;
+  }
+}

+ 61 - 2
packages/cs_domain/lib/repository/labour_repository.dart

@@ -1,6 +1,7 @@
 import 'package:domain/entity/response/labour_request_edit_index_entity.dart';
 import 'package:domain/entity/response/labour_request_index_entity.dart';
 import 'package:domain/entity/response/labour_request_list_entity.dart';
+import 'package:domain/entity/response/labour_request_work_flow_entity.dart';
 import 'package:get/get.dart';
 import 'package:plugin_platform/dio_export.dart';
 import 'package:plugin_platform/http/http_provider.dart';
@@ -83,13 +84,45 @@ class LabourRepository extends GetxService {
     return result.convert();
   }
 
+  /// 根据ID获取主列表的Item数据,用于刷新Item
+  Future<HttpResult<LabourRequestListEntity>> fetchItemByRequestId(
+    String? requestId, {
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params["cur_page"] = "1";
+    params["page_size"] = "1";
+
+    if (!Utils.isEmpty(requestId)) {
+      params["request_id"] = requestId!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiLabourRequestList,
+      params: params,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = LabourRequestListEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<LabourRequestListEntity>(data: data);
+    }
+    return result.convert();
+  }
+
   /// 添加用工的选项
   Future<HttpResult<LabourRequestEditIndexEntity>> fetchLabourRequestAddOption({
     CancelToken? cancelToken,
   }) async {
     final result = await httpProvider.requestNetResult(
       ApiConstants.apiLabourRequestAddOption,
-      isShowLoadingDialog:true,
+      isShowLoadingDialog: true,
       cancelToken: cancelToken,
     );
 
@@ -152,7 +185,7 @@ class LabourRepository extends GetxService {
     final result = await httpProvider.requestNetResult(
       ApiConstants.apiLabourRequestEditDetail,
       params: params,
-      isShowLoadingDialog:true,
+      isShowLoadingDialog: true,
       cancelToken: cancelToken,
     );
 
@@ -232,5 +265,31 @@ class LabourRepository extends GetxService {
   }
 
   ///  用工的审核详情工作流列表
+  Future<HttpResult<LabourRequestWorkFlowEntity>> fetchLabourRequestWorkFlow(
+    String? requestId, {
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    if (!Utils.isEmpty(requestId)) {
+      params["request_id"] = requestId!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiLabourRequestStateWorkFlow,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = LabourRequestWorkFlowEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<LabourRequestWorkFlowEntity>(data: data);
+    }
+    return result.convert();
+  }
 
 }

+ 2 - 3
packages/cs_plugin_basic/lib/constants/app_constant.dart

@@ -19,9 +19,8 @@ class AppConstant {
 
   //消息通知Key
   static const eventProfile2Refresh = 'event_profile_refresh'; //通知用户信息需要刷新
-  static const eventHotelInfoRefreshFinish = 'event_profile_refresh_finish'; //用户信息已刷新完成
-  static const eventReportIssueSuccess = 'event_report_issue'; //工作意见报告提交成功
-  static const eventHomeDataRefresh = 'event_home_data_refresh'; //只刷新首页的数据
+  static const eventLabourRequestRefresh = 'event_labour_request_refresh'; //用工请求的列表刷新
+
 
   // navbar 导航栏高度
   static const double navBarHeight = kToolbarHeight;

+ 0 - 2
packages/cs_plugin_platform/lib/engine/loading/loading_engine.dart

@@ -2,7 +2,6 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 
 class LoadingEngine {
-
   //展示加载中弹窗
   static void show({String? message}) {
     SmartDialog.showLoading(msg: message ?? "Loading...".tr);
@@ -12,5 +11,4 @@ class LoadingEngine {
   static void dismiss() {
     SmartDialog.dismiss(status: SmartStatus.loading);
   }
-
 }

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

@@ -27,6 +27,9 @@ class ColorConstants {
   static const Color textBlackHint = Color(0xFF757575);
   static const Color textGray9EB0C1 = Color(0xFF9EB0C1);
   static const Color textYellowFFBB1B = Color(0xFFFFBB1B);
+  static const Color textGreen05DC82 = Color(0xFF05DC82);
+  static const Color textRedFF6262 = Color(0xFFFF6262);
+  static const Color textBlue06D9FF = Color(0xFF06D9FF);
 
   //黑暗模式的一些色值
   static const Color darkBlackBg = Color(0xFF0F0F0F);

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

@@ -86,6 +86,18 @@ const Map<String, String> en_US = {
   'Add Labour Requisition': 'Add Labour Requisition',
   'Edit Labour Requisition': 'Edit Labour Requisition',
   'Labour Requisition': 'Labour Requisition',
+  'Message': 'Message',
+  'Are you sure you want to recall?': 'Are you sure you want to recall?',
+  'Workflow': 'Workflow',
+  'Remark:': 'Remark:',
+  'Audit Time:': 'Audit Time:',
+  'Operator:': 'Operator:',
+  'Designation:': 'Designation:',
+  'Type:': 'Type:',
+  'Node:': 'Node:',
+  'Approved': 'Approved',
+  'Pending': 'Pending',
+  'Rejected': 'Rejected',
 
   //插件的国际化
   'Pull to refresh': 'Pull to refresh',

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

@@ -86,6 +86,18 @@ const Map<String, String> zh_CN = {
   'Add Labour Requisition': '新增用工请求',
   'Edit Labour Requisition': '编辑用工请求',
   'Labour Requisition': '用工请求',
+  'Message': '通知',
+  'Are you sure you want to recall?': '你确定要撤回此用工请求吗?',
+  'Workflow': '工作流程',
+  'Remark:': '备注:',
+  'Audit Time:': '审核时间:',
+  'Operator:': '操作人员:',
+  'Designation:': '职位:',
+  'Type:': '类型:',
+  'Node:': '节点:',
+  'Approved': '已批准',
+  'Pending': '待处理',
+  'Rejected': '已拒绝',
 
   //插件的国际化
   'Pull to refresh': '下拉刷新',