Переглянути джерело

1.选择Request Type 为 Regular 之后的 Position 的选择,LabourRequest 的发布和 Job 的编辑。

liukai 2 місяців тому
батько
коміт
82fd352333

+ 38 - 2
packages/cpt_labour_sg/lib/modules/job_list_edit/job_list_edit_controller.dart

@@ -6,6 +6,7 @@ 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:shared/utils/date_time_utils.dart';
+import 'package:shared/utils/log_utils.dart';
 import 'package:shared/utils/util.dart';
 import 'package:widgets/picker/date_picker_util.dart';
 import 'package:widgets/picker/option_pick_util.dart';
@@ -35,7 +36,11 @@ class JobListEditController extends GetxController with DioCancelableMixin {
       state.selectedOutlet = state.editEntity?.outletList.firstWhere((e) => e.selected == "selected", orElse: () => JobListEditIndexOption()).txt;
       state.selectedOutletId = state.editEntity?.outletList.firstWhere((e) => e.selected == "selected", orElse: () => JobListEditIndexOption()).value;
       state.genderOptionType = state.editEntity?.sexLimit ?? 0;
-      state.selectRequestTypeIndex = state.editEntity!.requestType.indexWhere((e) => e.checked == "checked");
+      state.selectRequestTypeId = state.editEntity?.requestType.firstWhere((e) => e.checked == "checked").value;
+      state.selectPositionName = state.editEntity?.positionList.firstWhere((e) => e.selected == "selected", orElse: () => JobListEditIndexOption()).txt;
+      state.selectPositionId = state.editEntity?.positionList.firstWhere((e) => e.selected == "selected", orElse: () => JobListEditIndexOption()).value;
+
+      Log.d("selectRequestTypeId:${state.selectRequestTypeId},selectPositionId:${state.selectPositionId}");
 
       //时间赋值
       state.selectedStartTime = state.editEntity?.startTime == null ? null : DateTimeUtils.getDateTime(state.editEntity?.startTime ?? "");
@@ -48,7 +53,9 @@ class JobListEditController extends GetxController with DioCancelableMixin {
       needNoController.text = state.editEntity?.needNum == 0 ? "" : state.editEntity?.needNum.toString() ?? "";
       remarkController.text = state.editEntity?.remark ?? "";
 
+
       update();
+      update(["position"]);
     } else {
       ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
     }
@@ -122,6 +129,34 @@ class JobListEditController extends GetxController with DioCancelableMixin {
     );
   }
 
+  //选择常规职位
+  void pickRegularPosition() {
+    if (state.editEntity == null) {
+      return;
+    }
+
+    int selectedIndex;
+    if (state.selectPositionId == null) {
+      selectedIndex = 0;
+    } else {
+      selectedIndex = state.editEntity!.positionList.indexWhere((bean) => bean.value.toString() == state.selectPositionId);
+    }
+
+    if (selectedIndex < 0) {
+      selectedIndex = 0;
+    }
+
+    OptionPickerUtil.showCupertinoOptionPicker(
+      items: state.editEntity!.positionList.map((e) => e.txt!).toList(growable: false),
+      initialSelectIndex: selectedIndex,
+      onPickerChanged: (_, index) {
+        state.selectPositionId = state.editEntity!.positionList[index].value!.toString();
+        state.selectPositionName = state.editEntity!.positionList[index].txt!.toString();
+        update();
+      },
+    );
+  }
+
   // 提交表单
   void doSubmit() async {
     var maleNoController = state.formData['need_male']!['controller'];
@@ -170,7 +205,8 @@ class JobListEditController extends GetxController with DioCancelableMixin {
       maleNo,
       femaleNo,
       needNo,
-      state.editEntity?.requestType[state.selectRequestTypeIndex].value,
+      state.selectRequestTypeId,
+      state.selectPositionId,
       remark,
       cancelToken: cancelToken,
     );

+ 41 - 2
packages/cpt_labour_sg/lib/modules/job_list_edit/job_list_edit_page.dart

@@ -347,12 +347,51 @@ class JobListEditPage extends BaseStatelessPage<JobListEditController> {
                       CustomRadioCheck(
                         options: state.editEntity?.requestType.map((e) => e.txt!).toList() ?? [],
                         onOptionSelected: (index, text) {
-                          state.selectRequestTypeIndex = index;
+                          state.selectRequestTypeId = state.editEntity!.requestType[index].value;
+                          controller.update(["position"]);
                         },
                         enable: state.isEditType && state.isOtherFormDisEnable,
-                        selectedPosition: state.editEntity == null ? -1 : state.selectRequestTypeIndex,
+                        selectedPosition: state.editEntity == null ? -1 : state.editEntity!.requestType.indexWhere((e) => e.checked == "checked"),
                       ).marginOnly(top: 10),
 
+                      //当 Request Type 选择 Regular 的时候,需要展示 Position 的下拉选
+                      GetBuilder<JobListEditController>(
+                          id: "position",
+                          init: controller,
+                          builder: (controller) {
+                            return Visibility(
+                              visible: state.selectRequestTypeId == "1",
+                              child: Container(
+                                padding: const EdgeInsets.only(left: 16, right: 10),
+                                margin: const EdgeInsets.only(top: 10),
+                                height: 45,
+                                decoration: BoxDecoration(
+                                  color: const Color(0xFF4DCFF6).withOpacity(0.2),
+                                  borderRadius: const BorderRadius.all(Radius.circular(5)),
+                                ),
+                                child: Row(
+                                  mainAxisSize: MainAxisSize.max,
+                                  crossAxisAlignment: CrossAxisAlignment.center,
+                                  mainAxisAlignment: MainAxisAlignment.start,
+                                  children: [
+                                    MyTextView(
+                                      state.selectPositionName ?? "",
+                                      fontSize: 14,
+                                      hint: "Choose Position".tr,
+                                      textHintColor: ColorConstants.textGrayAECAE5,
+                                      isFontMedium: true,
+                                      textColor: ColorConstants.white,
+                                    ).expanded(),
+                                    const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                                  ],
+                                ),
+                              ).onTap(() {
+                                FocusScope.of(context).unfocus();
+                                controller.pickRegularPosition();
+                              }),
+                            );
+                          }),
+
                       //输入Remark
                       MyTextView(
                         "Remark".tr,

+ 6 - 2
packages/cpt_labour_sg/lib/modules/job_list_edit/job_list_edit_state.dart

@@ -39,7 +39,7 @@ class JobListEditState {
   String? jobId;
   void Function(dynamic value)? cb;
 
-  int genderOptionType = 0;  //使用哪一种类型限制
+  int genderOptionType = 0; //使用哪一种类型限制
 
   JobListEditIndexSGEntity? editEntity;
 
@@ -51,5 +51,9 @@ class JobListEditState {
   String? selectedOutlet;
   String? selectedOutletId;
 
-  int selectRequestTypeIndex = 0;
+  String? selectRequestTypeId;
+
+  //Regular 对应的职位
+  String? selectPositionId;
+  String? selectPositionName;
 }

+ 32 - 2
packages/cpt_labour_sg/lib/modules/labour_request_add/labour_request_add_controller.dart

@@ -104,7 +104,7 @@ class LabourRequestAddController extends GetxController with DioCancelableMixin
 
     DatePickerUtil.showCupertinoDatePicker(
       selectedDateTime: state.selectedRepeatStartTime,
-      mode: CupertinoDatePickerMode.dateAndTime,
+      mode: CupertinoDatePickerMode.date,
       onDateTimeChanged: (date) {
         state.selectedRepeatStartTime = date;
         update();
@@ -120,7 +120,7 @@ class LabourRequestAddController extends GetxController with DioCancelableMixin
 
     DatePickerUtil.showCupertinoDatePicker(
       selectedDateTime: state.selectedRepeatEndTime ?? state.selectedRepeatStartTime,
-      mode: CupertinoDatePickerMode.dateAndTime,
+      mode: CupertinoDatePickerMode.date,
       onDateTimeChanged: (date) {
         state.selectedRepeatEndTime = date;
         update();
@@ -213,6 +213,7 @@ class LabourRequestAddController extends GetxController with DioCancelableMixin
       femaleNo,
       needNo,
       state.selectRequestTypeId,
+      state.selectPositionId,
       remark,
       cancelToken: cancelToken,
     );
@@ -229,4 +230,33 @@ class LabourRequestAddController extends GetxController with DioCancelableMixin
       ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
     }
   }
+
+  //选择常规职位
+  void pickRegularPosition() {
+    if (state.indexEntity == null) {
+      return;
+    }
+
+    int selectedIndex;
+    if (state.selectPositionId == null) {
+      selectedIndex = 0;
+    } else {
+      selectedIndex = state.indexEntity!.positionList.indexWhere((bean) => bean.value.toString() == state.selectPositionId);
+    }
+
+    if (selectedIndex < 0) {
+      selectedIndex = 0;
+    }
+
+    OptionPickerUtil.showCupertinoOptionPicker(
+      items: state.indexEntity!.positionList.map((e) => e.txt!).toList(growable: false),
+      initialSelectIndex: selectedIndex,
+      onPickerChanged: (_, index) {
+        state.selectPositionId = state.indexEntity!.positionList[index].value!.toString();
+        state.selectPositionName = state.indexEntity!.positionList[index].txt!.toString();
+        update();
+      },
+    );
+  }
+
 }

+ 41 - 6
packages/cpt_labour_sg/lib/modules/labour_request_add/labour_request_add_page.dart

@@ -222,9 +222,7 @@ class LabourRequestAddPage extends BaseStatelessPage<LabourRequestAddController>
                                 mainAxisAlignment: MainAxisAlignment.start,
                                 children: [
                                   MyTextView(
-                                    state.selectedRepeatStartTime == null
-                                        ? ""
-                                        : DateTimeUtils.formatDate(state.selectedRepeatStartTime, format: "yyyy-MM-dd"),
+                                    state.selectedRepeatStartTime == null ? "" : DateTimeUtils.formatDate(state.selectedRepeatStartTime, format: "yyyy-MM-dd"),
                                     fontSize: 14,
                                     hint: "Repeat Start Time".tr,
                                     textHintColor: ColorConstants.textGrayAECAE5,
@@ -257,9 +255,7 @@ class LabourRequestAddPage extends BaseStatelessPage<LabourRequestAddController>
                                 mainAxisAlignment: MainAxisAlignment.start,
                                 children: [
                                   MyTextView(
-                                    state.selectedRepeatEndTime == null
-                                        ? ""
-                                        : DateTimeUtils.formatDate(state.selectedRepeatEndTime, format: "yyyy-MM-dd"),
+                                    state.selectedRepeatEndTime == null ? "" : DateTimeUtils.formatDate(state.selectedRepeatEndTime, format: "yyyy-MM-dd"),
                                     fontSize: 14,
                                     hint: "Repeat End Time".tr,
                                     textHintColor: ColorConstants.textGrayAECAE5,
@@ -419,10 +415,49 @@ class LabourRequestAddPage extends BaseStatelessPage<LabourRequestAddController>
                         options: state.indexEntity?.requestType.map((e) => e.txt!).toList() ?? [],
                         onOptionSelected: (index, text) {
                           state.selectRequestTypeId = state.indexEntity!.requestType[index].value;
+                          controller.update(["position"]);
                         },
                         selectedPosition: state.indexEntity == null ? -1 : 0,
                       ).marginOnly(top: 10),
 
+                      //当 Request Type 选择 Regular 的时候,需要展示 Position 的下拉选
+                      GetBuilder<LabourRequestAddController>(
+                          id: "position",
+                          init: controller,
+                          builder: (controller) {
+                            return Visibility(
+                              visible: state.selectRequestTypeId == "1",
+                              child: Container(
+                                padding: const EdgeInsets.only(left: 16, right: 10),
+                                margin: const EdgeInsets.only(top: 10),
+                                height: 45,
+                                decoration: BoxDecoration(
+                                  color: const Color(0xFF4DCFF6).withOpacity(0.2),
+                                  borderRadius: const BorderRadius.all(Radius.circular(5)),
+                                ),
+                                child: Row(
+                                  mainAxisSize: MainAxisSize.max,
+                                  crossAxisAlignment: CrossAxisAlignment.center,
+                                  mainAxisAlignment: MainAxisAlignment.start,
+                                  children: [
+                                    MyTextView(
+                                      state.selectPositionName ?? "",
+                                      fontSize: 14,
+                                      hint: "Choose Position".tr,
+                                      textHintColor: ColorConstants.textGrayAECAE5,
+                                      isFontMedium: true,
+                                      textColor: ColorConstants.white,
+                                    ).expanded(),
+                                    const MyAssetImage(Assets.baseServiceTriangleDropDownIcon, width: 11.5, height: 6.28),
+                                  ],
+                                ),
+                              ).onTap(() {
+                                FocusScope.of(context).unfocus();
+                                controller.pickRegularPosition();
+                              }),
+                            );
+                          }),
+
                       //输入Remark
                       MyTextView(
                         "Remark".tr,

+ 5 - 0
packages/cpt_labour_sg/lib/modules/labour_request_add/labour_request_add_state.dart

@@ -56,4 +56,9 @@ class LabourRequestAddState {
   String? selectedOutletId;
 
   String? selectRequestTypeId;
+
+  String? selectPositionId;
+  String? selectPositionName;
+
+
 }

+ 2 - 0
packages/cs_domain/lib/entity/response/job_list_edit_index_s_g_entity.dart

@@ -31,6 +31,8 @@ class JobListEditIndexSGEntity {
 	List<JobListEditIndexOption> outletList = [];
 	@JSONField(name: "request_type")
 	List<JobListEditIndexOption> requestType = [];
+	@JSONField(name: "position_list")
+	List<JobListEditIndexOption> positionList = [];
 	@JSONField(name: "limit_list")
 	List<JobListEditIndexOption> limitList = [];
 

+ 2 - 0
packages/cs_domain/lib/entity/response/labour_request_s_g_add_index_entity.dart

@@ -11,6 +11,8 @@ class LabourRequestSGAddIndexEntity {
 	List<LabourRequestSGAddIndexOption> outletList = [];
 	@JSONField(name: "request_type")
 	List<LabourRequestSGAddIndexOption> requestType = [];
+	@JSONField(name: "position_list")
+	List<LabourRequestSGAddIndexOption> positionList = [];
 
 	LabourRequestSGAddIndexEntity();
 

+ 8 - 0
packages/cs_domain/lib/generated/json/job_list_edit_index_s_g_entity.g.dart

@@ -61,6 +61,11 @@ JobListEditIndexSGEntity $JobListEditIndexSGEntityFromJson(Map<String, dynamic>
   if (requestType != null) {
     jobListEditIndexSGEntity.requestType = requestType;
   }
+  final List<JobListEditIndexOption>? positionList = (json['position_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<JobListEditIndexOption>(e) as JobListEditIndexOption).toList();
+  if (positionList != null) {
+    jobListEditIndexSGEntity.positionList = positionList;
+  }
   final List<JobListEditIndexOption>? limitList = (json['limit_list'] as List<dynamic>?)?.map(
           (e) => jsonConvert.convert<JobListEditIndexOption>(e) as JobListEditIndexOption).toList();
   if (limitList != null) {
@@ -85,6 +90,7 @@ Map<String, dynamic> $JobListEditIndexSGEntityToJson(JobListEditIndexSGEntity en
   data['disabled'] = entity.disabled;
   data['outlet_list'] = entity.outletList.map((v) => v.toJson()).toList();
   data['request_type'] = entity.requestType.map((v) => v.toJson()).toList();
+  data['position_list'] = entity.positionList.map((v) => v.toJson()).toList();
   data['limit_list'] = entity.limitList.map((v) => v.toJson()).toList();
   return data;
 }
@@ -105,6 +111,7 @@ extension JobListEditIndexSGEntityExtension on JobListEditIndexSGEntity {
     String? disabled,
     List<JobListEditIndexOption>? outletList,
     List<JobListEditIndexOption>? requestType,
+    List<JobListEditIndexOption>? positionList,
     List<JobListEditIndexOption>? limitList,
   }) {
     return JobListEditIndexSGEntity()
@@ -122,6 +129,7 @@ extension JobListEditIndexSGEntityExtension on JobListEditIndexSGEntity {
       ..disabled = disabled ?? this.disabled
       ..outletList = outletList ?? this.outletList
       ..requestType = requestType ?? this.requestType
+      ..positionList = positionList ?? this.positionList
       ..limitList = limitList ?? this.limitList;
   }
 }

+ 9 - 1
packages/cs_domain/lib/generated/json/labour_request_s_g_add_index_entity.g.dart

@@ -18,6 +18,11 @@ LabourRequestSGAddIndexEntity $LabourRequestSGAddIndexEntityFromJson(Map<String,
   if (requestType != null) {
     labourRequestSGAddIndexEntity.requestType = requestType;
   }
+  final List<LabourRequestSGAddIndexOption>? positionList = (json['position_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<LabourRequestSGAddIndexOption>(e) as LabourRequestSGAddIndexOption).toList();
+  if (positionList != null) {
+    labourRequestSGAddIndexEntity.positionList = positionList;
+  }
   return labourRequestSGAddIndexEntity;
 }
 
@@ -26,6 +31,7 @@ Map<String, dynamic> $LabourRequestSGAddIndexEntityToJson(LabourRequestSGAddInde
   data['title_list'] = entity.titleList.map((v) => v.toJson()).toList();
   data['outlet_list'] = entity.outletList.map((v) => v.toJson()).toList();
   data['request_type'] = entity.requestType.map((v) => v.toJson()).toList();
+  data['position_list'] = entity.positionList.map((v) => v.toJson()).toList();
   return data;
 }
 
@@ -34,11 +40,13 @@ extension LabourRequestSGAddIndexEntityExtension on LabourRequestSGAddIndexEntit
     List<LabourRequestSGAddIndexOption>? titleList,
     List<LabourRequestSGAddIndexOption>? outletList,
     List<LabourRequestSGAddIndexOption>? requestType,
+    List<LabourRequestSGAddIndexOption>? positionList,
   }) {
     return LabourRequestSGAddIndexEntity()
       ..titleList = titleList ?? this.titleList
       ..outletList = outletList ?? this.outletList
-      ..requestType = requestType ?? this.requestType;
+      ..requestType = requestType ?? this.requestType
+      ..positionList = positionList ?? this.positionList;
   }
 }
 

+ 10 - 0
packages/cs_domain/lib/repository/labour_sg_repository.dart

@@ -571,6 +571,7 @@ class LabourSGRepository extends GetxService {
     String? femaleLimit,
     String? needNum,
     String? requestType,
+    String? positionId,
     String? remark, {
     CancelToken? cancelToken,
   }) async {
@@ -604,6 +605,10 @@ class LabourSGRepository extends GetxService {
       params['request_type'] = requestType ?? "";
     }
 
+    if (Utils.isNotEmpty(positionId) && requestType == "1") {
+      params['position_id'] = positionId ?? "";
+    }
+
     if (Utils.isNotEmpty(remark)) {
       params['remark'] = remark ?? "";
     }
@@ -760,6 +765,7 @@ class LabourSGRepository extends GetxService {
     String? femaleLimit,
     String? needNum,
     String? requestType,
+    String? positionId,
     String? remark, {
     CancelToken? cancelToken,
   }) async {
@@ -785,6 +791,10 @@ class LabourSGRepository extends GetxService {
       params['request_type'] = requestType ?? "";
     }
 
+    if (Utils.isNotEmpty(positionId) && requestType == "1") {
+      params['position_id'] = positionId ?? "";
+    }
+
     if (Utils.isNotEmpty(remark)) {
       params['remark'] = remark ?? "";
     }