Sfoglia il codice sorgente

JobList 批量同意,批量修改,审核流程

liukai 9 mesi fa
parent
commit
d4ff5bac83

+ 98 - 0
packages/cpt_job/lib/modules/applied_workflow/applied_workflow_controller.dart

@@ -0,0 +1,98 @@
+import 'package:domain/entity/response/job_list_applied_work_flow_entity.dart';
+import 'package:domain/repository/job_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 'applied_workflow_state.dart';
+
+/**
+ * 已申请的员工状态审核流
+ */
+class  AppliedWorkflowController extends GetxController with DioCancelableMixin{
+  final JobRepository _jobRepository = Get.find();
+  final AppliedWorkflowState state = AppliedWorkflowState();
+
+  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.fetchAppliedWorkFlow(
+      state.appliedId,
+      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<JobListAppliedWorkFlowRecords>? 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();
+  }
+}

+ 228 - 0
packages/cpt_job/lib/modules/applied_workflow/applied_workflow_item.dart

@@ -0,0 +1,228 @@
+import 'package:cs_resources/constants/color_constants.dart';
+import 'package:domain/entity/response/job_list_applied_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_text_view.dart';
+
+/**
+ * 用工请求的工作流列表Item
+ */
+class AppliedWorkFlowItem extends StatelessWidget {
+  final int index;
+  final JobListAppliedWorkFlowRecords item;
+
+  AppliedWorkFlowItem({
+    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),
+
+        ],
+      ),
+    );
+  }
+}

+ 105 - 0
packages/cpt_job/lib/modules/applied_workflow/applied_workflow_page.dart

@@ -0,0 +1,105 @@
+
+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 'applied_workflow_controller.dart';
+import 'applied_workflow_state.dart';
+import 'applied_workflow_item.dart';
+
+/**
+ * 已申请的员工-状态工作流列表
+ */
+class AppliedWorkflowPage extends BaseStatefulPage<AppliedWorkflowController> {
+  AppliedWorkflowPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance(String? appliedId) {
+    return Get.start(RouterPath.JOB_APPLIED_STAFF_WORKFLOW,arguments: {'appliedId': appliedId});
+  }
+
+  @override
+  AppliedWorkflowController createRawController() {
+    return AppliedWorkflowController();
+  }
+
+  @override
+  State<AppliedWorkflowPage> createState() => _AppliedWorkflowState();
+
+}
+
+class _AppliedWorkflowState extends BaseState<AppliedWorkflowPage, AppliedWorkflowController> {
+
+  late AppliedWorkflowState state;
+
+  @override
+  void initState() {
+    super.initState();
+    state = controller.state;
+    state.appliedId = Get.arguments['appliedId'];
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return autoCtlGetBuilder(builder: (controller) {
+      return Scaffold(
+        extendBodyBehindAppBar: true,
+        appBar: MyAppBar.appBar(context, "Workflow".tr),
+        body: SafeArea(
+          bottom: true,
+          top: false,
+          child: Container(
+            width: double.infinity,
+            height: double.infinity,
+            padding: EdgeInsets.only(top: kToolbarHeight + ScreenUtil.getStatusBarH(context) + 1),
+            decoration: const BoxDecoration(
+              gradient: LinearGradient(
+                colors: [
+                  Color(0xFF091D44),
+                  Color(0xFF245A8A),
+                  Color(0xFF7F7CEC),
+                ],
+                begin: Alignment.topCenter,
+                end: Alignment.bottomCenter,
+              ),
+            ),
+            child: 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 AppliedWorkFlowItem(index: index,item: state.datas[index]);
+                            },
+                            childCount: state.datas.length,
+                          ))
+                    ],
+                  ),
+                ).expanded(),
+              ],
+            ).marginOnly(top: 10),
+          ),
+        ),
+      );
+    });
+  }
+}
+
+

+ 10 - 0
packages/cpt_job/lib/modules/applied_workflow/applied_workflow_state.dart

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

+ 14 - 5
packages/cpt_job/lib/modules/job_applied/applied_staff_item.dart

@@ -76,10 +76,13 @@ class AppliedStaffItem extends StatelessWidget {
               ).expanded(),
 
               //是否选中
-              MyAssetImage(
-                item.isSelected ? Assets.baseServiceItemSelectedIcon : Assets.baseServiceItemUnselectedIcon,
-                width: 20.5,
-                height: 20.5,
+              Visibility(
+                visible: item.status == 3,
+                child: MyAssetImage(
+                  item.isSelected ? Assets.baseServiceItemSelectedIcon : Assets.baseServiceItemUnselectedIcon,
+                  width: 20.5,
+                  height: 20.5,
+                ),
               ),
             ],
           ),
@@ -340,7 +343,13 @@ class AppliedStaffItem extends StatelessWidget {
                 item.statusShow ?? "-",
                 marginLeft: 5,
                 isFontRegular: true,
-                textColor: Colors.white,
+                textColor: "Completed" == item.statusShow
+                    ? ColorConstants.textGreen05DC82
+                    : "Cancelled" == item.statusShow || "Rejected" == item.statusShow
+                        ? ColorConstants.textRedFF6262
+                        : "Revised" == item.statusShow || "Pending" == item.statusShow || "Approve" == item.statusShow
+                            ? ColorConstants.textYellowFFBB1B
+                            : ColorConstants.textBlue06D9FF,  //默认蓝色
                 fontSize: 14,
               ).expanded(),
             ],

+ 19 - 13
packages/cpt_job/lib/modules/job_applied/job_applied_controller.dart

@@ -11,6 +11,7 @@ import 'package:widgets/load_state_layout.dart';
 import 'package:widgets/widget_export.dart';
 
 import '../../widget/applied_butch_modify.dart';
+import '../applied_workflow/applied_workflow_page.dart';
 import 'job_applied_state.dart';
 
 class JobAppliedController extends GetxController with DioCancelableMixin {
@@ -170,27 +171,35 @@ class JobAppliedController extends GetxController with DioCancelableMixin {
     ToastEngine.show("展示评论的弹窗");
   }
 
-  /// 去展示员工状态的工作流
+  /// 去展示员工状态的审核流程页面
   void gotoAppliedWorkflowPage(JobListAppliedStaffListRows data) {
-    ToastEngine.show("去展示员工状态的工作流");
+    AppliedWorkflowPage.startInstance(data.appliedId.toString());
   }
 
   /// Item选中与未选中设置
   void doSelectedOrNot(JobListAppliedStaffListRows data) {
-    data.isSelected = !data.isSelected;
-    update();
+    //只有 Approve = 3 的状态才能选中
+    if (data.status == 3){
+      data.isSelected = !data.isSelected;
+      update();
+    }
   }
 
   /// 批量修改的弹窗
   void showBatchModifyDialog() async {
-    DialogEngine.show(widget: AppliedButchModify(confirmAction: (start, end) {
-      requestBatchModify(start, end);
-    }));
+    if (state.jobInfo == null) return;
+    DialogEngine.show(
+        widget: AppliedButchModify(
+            selectedStartDate: DateTimeUtils.getDateTime(state.jobInfo?.startTime ?? ""),
+            selectedEndDate: DateTimeUtils.getDateTime(state.jobInfo?.endTime ?? ""),
+            confirmAction: (start, end) {
+              requestBatchModify(start, end);
+            }));
   }
 
   /// 执行批量修改的请求
   void requestBatchModify(DateTime start, DateTime end) async {
-    var selectedList = state.datas.where((element) => element.isSelected).toList(growable: false);
+    var selectedList = state.datas.where((element) => element.isSelected && element.status == 3).toList(growable: false);
     if (selectedList.isNotEmpty) {
       var ids = selectedList.map((e) => e.appliedId.toString()).toList(growable: false);
       var separatedIds = ids.join(',');
@@ -209,7 +218,6 @@ class JobAppliedController extends GetxController with DioCancelableMixin {
 
         //调用接口刷新指定的Staff的信息
         fetchItemByIdAndRefreshItem(separatedIds);
-
       } else {
         ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
         return;
@@ -221,8 +229,8 @@ class JobAppliedController extends GetxController with DioCancelableMixin {
 
   /// 批准的操作
   void operationApprove() async {
-    //找出已经选中的员工
-    var selectedList = state.datas.where((element) => element.isSelected).toList(growable: false);
+    //找出已经选中的员工(只有状态为3 Approve的状态才能修改)
+    var selectedList = state.datas.where((element) => element.isSelected && element.status == 3).toList(growable: false);
     if (selectedList.isNotEmpty) {
       var ids = selectedList.map((e) => e.appliedId.toString()).toList(growable: false);
       var separatedIds = ids.join(',');
@@ -235,7 +243,6 @@ class JobAppliedController extends GetxController with DioCancelableMixin {
 
         //调用接口刷新指定的Staff的信息
         fetchItemByIdAndRefreshItem(separatedIds);
-
       } else {
         ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
         return;
@@ -276,5 +283,4 @@ class JobAppliedController extends GetxController with DioCancelableMixin {
       ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
     }
   }
-
 }

+ 6 - 0
packages/cpt_job/lib/router/page_router.dart

@@ -1,3 +1,4 @@
+import 'package:cpt_job/modules/applied_workflow/applied_workflow_page.dart';
 import 'package:cpt_job/modules/job_applied/job_applied_page.dart';
 import 'package:get/get.dart';
 import 'package:router/path/router_path.dart';
@@ -32,5 +33,10 @@ class JobPageRouter {
       page: () => JobAppliedPage(),
     ),
 
+    //工作已申请列表
+    GetPage(
+      name: RouterPath.JOB_APPLIED_STAFF_WORKFLOW,
+      page: () => AppliedWorkflowPage(),
+    ),
   ];
 }

+ 5 - 2
packages/cpt_job/lib/widget/applied_butch_modify.dart

@@ -21,9 +21,11 @@ import 'package:widgets/widget_export.dart';
  * 批量操作修改时间的弹窗
  */
 class AppliedButchModify extends StatefulWidget {
+  DateTime? selectedStartDate;
+  DateTime? selectedEndDate;
   void Function(DateTime startTime, DateTime endTime)? confirmAction;
 
-  AppliedButchModify({this.confirmAction});
+  AppliedButchModify({this.selectedStartDate, this.selectedEndDate, this.confirmAction});
 
   @override
   State<AppliedButchModify> createState() => _AppliedButchModifyState();
@@ -36,6 +38,8 @@ class _AppliedButchModifyState extends State<AppliedButchModify> {
   @override
   void initState() {
     super.initState();
+    selectedStartDate = widget.selectedStartDate;
+    selectedEndDate = widget.selectedEndDate;
   }
 
   @override
@@ -66,7 +70,6 @@ class _AppliedButchModifyState extends State<AppliedButchModify> {
                 ),
               ),
 
-
               FormRequireText(
                 fontSize: 14,
                 textColor: ColorConstants.black33,

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

@@ -0,0 +1,55 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/job_list_applied_work_flow_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/job_list_applied_work_flow_entity.g.dart';
+
+@JsonSerializable()
+class JobListAppliedWorkFlowEntity {
+	@JSONField(name: "department_id")
+	int departmentId = 0;
+	List<JobListAppliedWorkFlowRecords>? records = [];
+
+	JobListAppliedWorkFlowEntity();
+
+	factory JobListAppliedWorkFlowEntity.fromJson(Map<String, dynamic> json) => $JobListAppliedWorkFlowEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $JobListAppliedWorkFlowEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class JobListAppliedWorkFlowRecords {
+	@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")
+	dynamic auditMark;
+	@JSONField(name: "created_at")
+	String? createdAt = null;
+	@JSONField(name: "assignee_type_show")
+	String? assigneeTypeShow = null;
+	@JSONField(name: "designation_show")
+	String? designationShow = null;
+
+	JobListAppliedWorkFlowRecords();
+
+	factory JobListAppliedWorkFlowRecords.fromJson(Map<String, dynamic> json) => $JobListAppliedWorkFlowRecordsFromJson(json);
+
+	Map<String, dynamic> toJson() => $JobListAppliedWorkFlowRecordsToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

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

@@ -12,6 +12,7 @@ import 'package:domain/entity/response/job_list_applied_edit_entity.dart';
 import 'package:domain/entity/response/job_list_applied_info_entity.dart';
 import 'package:domain/entity/response/job_list_applied_staff_list_entity.dart';
 import 'package:domain/entity/response/job_list_applied_staff_search_entity.dart';
+import 'package:domain/entity/response/job_list_applied_work_flow_entity.dart';
 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';
@@ -202,6 +203,12 @@ class JsonConvert {
     if (<JobListAppliedStaffSearchRows>[] is M) {
       return data.map<JobListAppliedStaffSearchRows>((Map<String, dynamic> e) => JobListAppliedStaffSearchRows.fromJson(e)).toList() as M;
     }
+    if (<JobListAppliedWorkFlowEntity>[] is M) {
+      return data.map<JobListAppliedWorkFlowEntity>((Map<String, dynamic> e) => JobListAppliedWorkFlowEntity.fromJson(e)).toList() as M;
+    }
+    if (<JobListAppliedWorkFlowRecords>[] is M) {
+      return data.map<JobListAppliedWorkFlowRecords>((Map<String, dynamic> e) => JobListAppliedWorkFlowRecords.fromJson(e)).toList() as M;
+    }
     if (<JobListDetailEntity>[] is M) {
       return data.map<JobListDetailEntity>((Map<String, dynamic> e) => JobListDetailEntity.fromJson(e)).toList() as M;
     }
@@ -297,6 +304,8 @@ class JsonConvertClassCollection {
     (JobListAppliedStaffListRowsWorkOut).toString(): JobListAppliedStaffListRowsWorkOut.fromJson,
     (JobListAppliedStaffSearchEntity).toString(): JobListAppliedStaffSearchEntity.fromJson,
     (JobListAppliedStaffSearchRows).toString(): JobListAppliedStaffSearchRows.fromJson,
+    (JobListAppliedWorkFlowEntity).toString(): JobListAppliedWorkFlowEntity.fromJson,
+    (JobListAppliedWorkFlowRecords).toString(): JobListAppliedWorkFlowRecords.fromJson,
     (JobListDetailEntity).toString(): JobListDetailEntity.fromJson,
     (JobListDetailDepartmentList).toString(): JobListDetailDepartmentList.fromJson,
     (JobListEntity).toString(): JobListEntity.fromJson,

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

@@ -0,0 +1,114 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/job_list_applied_work_flow_entity.dart';
+
+JobListAppliedWorkFlowEntity $JobListAppliedWorkFlowEntityFromJson(Map<String, dynamic> json) {
+  final JobListAppliedWorkFlowEntity jobListAppliedWorkFlowEntity = JobListAppliedWorkFlowEntity();
+  final int? departmentId = jsonConvert.convert<int>(json['department_id']);
+  if (departmentId != null) {
+    jobListAppliedWorkFlowEntity.departmentId = departmentId;
+  }
+  final List<JobListAppliedWorkFlowRecords>? records = (json['records'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<JobListAppliedWorkFlowRecords>(e) as JobListAppliedWorkFlowRecords).toList();
+  if (records != null) {
+    jobListAppliedWorkFlowEntity.records = records;
+  }
+  return jobListAppliedWorkFlowEntity;
+}
+
+Map<String, dynamic> $JobListAppliedWorkFlowEntityToJson(JobListAppliedWorkFlowEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['department_id'] = entity.departmentId;
+  data['records'] = entity.records?.map((v) => v.toJson()).toList();
+  return data;
+}
+
+extension JobListAppliedWorkFlowEntityExtension on JobListAppliedWorkFlowEntity {
+  JobListAppliedWorkFlowEntity copyWith({
+    int? departmentId,
+    List<JobListAppliedWorkFlowRecords>? records,
+  }) {
+    return JobListAppliedWorkFlowEntity()
+      ..departmentId = departmentId ?? this.departmentId
+      ..records = records ?? this.records;
+  }
+}
+
+JobListAppliedWorkFlowRecords $JobListAppliedWorkFlowRecordsFromJson(Map<String, dynamic> json) {
+  final JobListAppliedWorkFlowRecords jobListAppliedWorkFlowRecords = JobListAppliedWorkFlowRecords();
+  final int? serialNumber = jsonConvert.convert<int>(json['serial_number']);
+  if (serialNumber != null) {
+    jobListAppliedWorkFlowRecords.serialNumber = serialNumber;
+  }
+  final String? nodeName = jsonConvert.convert<String>(json['node_name']);
+  if (nodeName != null) {
+    jobListAppliedWorkFlowRecords.nodeName = nodeName;
+  }
+  final String? statusShow = jsonConvert.convert<String>(json['status_show']);
+  if (statusShow != null) {
+    jobListAppliedWorkFlowRecords.statusShow = statusShow;
+  }
+  final String? auditName = jsonConvert.convert<String>(json['audit_name']);
+  if (auditName != null) {
+    jobListAppliedWorkFlowRecords.auditName = auditName;
+  }
+  final String? auditTime = jsonConvert.convert<String>(json['audit_time']);
+  if (auditTime != null) {
+    jobListAppliedWorkFlowRecords.auditTime = auditTime;
+  }
+  final dynamic auditMark = json['audit_mark'];
+  if (auditMark != null) {
+    jobListAppliedWorkFlowRecords.auditMark = auditMark;
+  }
+  final String? createdAt = jsonConvert.convert<String>(json['created_at']);
+  if (createdAt != null) {
+    jobListAppliedWorkFlowRecords.createdAt = createdAt;
+  }
+  final String? assigneeTypeShow = jsonConvert.convert<String>(json['assignee_type_show']);
+  if (assigneeTypeShow != null) {
+    jobListAppliedWorkFlowRecords.assigneeTypeShow = assigneeTypeShow;
+  }
+  final String? designationShow = jsonConvert.convert<String>(json['designation_show']);
+  if (designationShow != null) {
+    jobListAppliedWorkFlowRecords.designationShow = designationShow;
+  }
+  return jobListAppliedWorkFlowRecords;
+}
+
+Map<String, dynamic> $JobListAppliedWorkFlowRecordsToJson(JobListAppliedWorkFlowRecords 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 JobListAppliedWorkFlowRecordsExtension on JobListAppliedWorkFlowRecords {
+  JobListAppliedWorkFlowRecords copyWith({
+    int? serialNumber,
+    String? nodeName,
+    String? statusShow,
+    String? auditName,
+    String? auditTime,
+    dynamic auditMark,
+    String? createdAt,
+    String? assigneeTypeShow,
+    String? designationShow,
+  }) {
+    return JobListAppliedWorkFlowRecords()
+      ..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;
+  }
+}

+ 28 - 1
packages/cs_domain/lib/repository/job_repository.dart

@@ -17,6 +17,7 @@ import 'package:shared/utils/util.dart';
 import '../constants/api_constants.dart';
 import '../entity/response/attendance_entity.dart';
 import '../entity/response/check_success_entity.dart';
+import '../entity/response/job_list_applied_work_flow_entity.dart';
 
 /// 工作相关
 class JobRepository extends GetxService {
@@ -602,7 +603,33 @@ class JobRepository extends GetxService {
     return result.convert();
   }
 
-// 员工状态的工作流
+  // 员工状态的工作流
+  Future<HttpResult<JobListAppliedWorkFlowEntity>> fetchAppliedWorkFlow(
+    String? appliedId, {
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    if (!Utils.isEmpty(appliedId)) {
+      params["applied_id"] = appliedId!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiJobListAppliedStaffStateWorkflow,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = JobListAppliedWorkFlowEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<JobListAppliedWorkFlowEntity>(data: data);
+    }
+    return result.convert();
+  }
 
 // 员工的信息
 

+ 1 - 1
packages/cs_resources/lib/local/language/zh_CN.dart

@@ -88,7 +88,7 @@ const Map<String, String> zh_CN = {
   'Labour Requisition': '用工请求',
   'Message': '通知',
   'Are you sure you want to recall?': '你确定要撤回此用工请求吗?',
-  'Workflow': '工作流程',
+  'Workflow': '审核流程',
   'Remark:': '评价:',
   'Audit Time:': '审核时间:',
   'Operator:': '操作人员:',