Explorar o código

中介职位的Position列表,添加,删除,编辑

liukai hai 2 semanas
pai
achega
a07494d410

+ 42 - 105
packages/cpt_sg/lib/modules/agency/position_add/position_add_controller.dart

@@ -1,134 +1,71 @@
-import 'package:domain/repository/labour_sg_repository.dart';
+import 'package:domain/repository/sg_agency_repository.dart';
 import 'package:get/get.dart';
+import 'package:plugin_platform/engine/notify/notify_engine.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
+import 'package:plugin_platform/http/http_result.dart';
 import 'package:shared/utils/util.dart';
 
 import 'position_add_state.dart';
 
 class PositionAddController extends GetxController with DioCancelableMixin {
-  final LabourSGRepository _labourRepository = Get.find();
+  final SGAgencyRepository _agencyRepository = Get.find();
   final PositionAddState state = PositionAddState();
 
-  // 获取添加或者编辑的详情
-  void _fetchAddEditIndexDetail() async {
-    // //获取到数据
-    // Future<HttpResult<JobTemplateEditIndexEntity>> taskFuture;
-    // if (Utils.isNotEmpty(state.templateId) && state.templateId != "0") {
-    //   //编辑
-    //   taskFuture = _labourRepository.fetchJobTemplateEditIndex(state.templateId, cancelToken: cancelToken);
-    // } else {
-    //   //新增
-    //   taskFuture = _labourRepository.fetchJobTemplateAddIndex(cancelToken: cancelToken);
-    // }
-    //
-    // var result = await taskFuture;
-    //
-    // //处理数据
-    // if (result.isSuccess) {
-    //   state.indexEntity = result.data;
-    //
-    //   var templateNameController = state.formData['template_name']!['controller'];
-    //   var descController = state.formData['desc']!['controller'];
-    //   var contactController = state.formData['contact']!['controller'];
-    //   var contactNoController = state.formData['contact_no']!['controller'];
-    //   var noteController = state.formData['note']!['controller'];
-    //   templateNameController.text = state.indexEntity?.name ?? "";
-    //   descController.text = state.indexEntity?.description ?? "";
-    //   contactController.text = state.indexEntity?.contact ?? "";
-    //   contactNoController.text = state.indexEntity?.contactNo ?? "";
-    //   noteController.text = state.indexEntity?.note ?? "";
-    //
-    //   //默认赋值
-    //   state.selectedAgeList = state.indexEntity?.ageList.where((e) => e.checked == "checked").map((e) => e.value!).toList() ?? [];
-    //   Log.d("当前选中的年龄1:${ state.selectedAgeList}");
-    //   state.selectedLanguageList = state.indexEntity?.languageList.where((e) => e.checked == "checked").map((e) => e.value!).toList() ?? [];
-    //   Log.d("当前选中的语言1:${ state.selectedLanguageList}");
-    //   state.foodCert = state.indexEntity?.withFoodCert.toString();
-    //
-    //   update();
-    // } else {
-    //   ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
-    // }
+  // 编辑模式下展示对应的文本
+  void _showPositionName() async {
+
+    if (Utils.isNotEmpty(state.positionName)){
+      var positionController = state.formData['position']!['controller'];
+      positionController.text = state.positionName;
+    }
+
   }
 
   /// 提交
   void doSubmit() async {
 
-
-    var agencyNameController = state.formData['agency_name']!['controller'];
-    var acraController = state.formData['acra']!['controller'];
-    var personController = state.formData['person_in_charge']!['controller'];
-    var addressController = state.formData['address']!['controller'];
-    var emailController = state.formData['email']!['controller'];
-    var phoneController = state.formData['phone']!['controller'];
-
-    String agencyName = agencyNameController.text.toString();
-    String acra = acraController.text.toString();
-    String personName = personController.text.toString();
-    String address = addressController.text.toString();
-    String email = emailController.text.toString();
-    String phone = phoneController.text.toString();
+    var positionController = state.formData['position']!['controller'];
+    String positionName = positionController.text.toString();
 
     //校验必填项
-    if (Utils.isEmpty(agencyName)) {
-      ToastEngine.show("Enter Agency Name".tr);
+    if (Utils.isEmpty(positionName)) {
+      ToastEngine.show("Enter Position Name".tr);
       return;
     }
 
-    if (Utils.isEmpty(acra)) {
-      ToastEngine.show("Enter ACRA NO".tr);
-      return;
+    Future<HttpResult> taskFuture;
+    if (Utils.isNotEmpty(state.positionId) && state.positionId != "0") {
+      taskFuture = _agencyRepository.editPositionSubmit(
+        positionId: state.positionId,
+        name: positionName,
+        cancelToken: cancelToken,
+      );
+    } else {
+      taskFuture = _agencyRepository.addPositionSubmit(
+        name: positionName,
+        cancelToken: cancelToken,
+      );
     }
 
-    // Future<HttpResult> taskFuture;
-    // if (Utils.isNotEmpty(state.templateId) && state.templateId != "0") {
-    //   taskFuture = _labourRepository.editJobTemplateSubmit(
-    //     state.templateId,
-    //     templateName,
-    //     contact,
-    //     contactNo,
-    //     desc,
-    //     note,
-    //     state.selectedAgeList.join(","),
-    //     state.gender,
-    //     state.foodCert,
-    //     state.selectedLanguageList.join(","),
-    //     cancelToken: cancelToken,
-    //   );
-    // } else {
-    //   taskFuture = _labourRepository.addJobTemplateSubmit(
-    //     templateName,
-    //     contact,
-    //     contactNo,
-    //     desc,
-    //     note,
-    //     state.selectedAgeList.join(","),
-    //     state.gender,
-    //     state.foodCert,
-    //     state.selectedLanguageList.join(","),
-    //     cancelToken: cancelToken,
-    //   );
-    // }
-    //
-    // var result = await taskFuture;
-    //
-    // //处理数据
-    // if (result.isSuccess) {
-    //   NotifyEngine.showSuccess("Successful".tr);
-    //
-    //   //根据类型刷新
-    //   state.cb?.call(state.templateId);
-    //
-    //   Get.back();
-    // } else {
-    //   ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
-    // }
+    var result = await taskFuture;
+
+    //处理数据
+    if (result.isSuccess) {
+      NotifyEngine.showSuccess("Successful".tr);
+
+      //根据类型刷新
+      state.cb?.call(state.positionId);
+
+      Get.back();
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
+    }
   }
 
   @override
   void onReady() {
     super.onReady();
-    _fetchAddEditIndexDetail();
+    _showPositionName();
   }
 }

+ 3 - 3
packages/cpt_sg/lib/modules/agency/position_add/position_add_page.dart

@@ -18,7 +18,6 @@ import 'package:plugin_basic/base/base_stateless_page.dart';
 import 'package:plugin_basic/utils/ext_get_nav.dart';
 import 'package:router/path/router_path.dart';
 
-
 /*
  * 中介的添加与编辑
  */
@@ -28,9 +27,10 @@ class SGPositionAddPage extends BaseStatelessPage<PositionAddController> {
   //启动当前页面
   static void startInstance(
     String? positionId,
+    String? positionName,
     void Function(dynamic value)? cb,
   ) {
-    return Get.start(RouterPath.SGPositionAdd, arguments: {'positionId': positionId, 'cb': cb});
+    return Get.start(RouterPath.SGPositionAdd, arguments: {'positionId': positionId, 'positionName': positionName, 'cb': cb});
   }
 
   late PositionAddState state;
@@ -39,6 +39,7 @@ class SGPositionAddPage extends BaseStatelessPage<PositionAddController> {
   void initState() {
     state = controller.state;
     state.positionId = Get.arguments['positionId'];
+    state.positionName = Get.arguments['positionName'];
     state.cb = Get.arguments['cb'] as void Function(dynamic)?;
   }
 
@@ -96,7 +97,6 @@ class SGPositionAddPage extends BaseStatelessPage<PositionAddController> {
                         marginTop: 10,
                       ),
 
-
                       //提交按钮
                       MyButton(
                         type: ClickType.throttle,

+ 1 - 0
packages/cpt_sg/lib/modules/agency/position_add/position_add_state.dart

@@ -16,6 +16,7 @@ class PositionAddState {
   };
 
   String? positionId;
+  String? positionName;
   void Function(dynamic value)? cb;
 
 }

+ 7 - 8
packages/cpt_sg/lib/modules/agency/position_list/position_item.dart

@@ -1,6 +1,5 @@
 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_s_g_list_entity.dart';
+import 'package:domain/entity/response/position_table_entity.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
@@ -14,7 +13,7 @@ import 'package:widgets/my_text_view.dart';
  */
 class PositionItem extends StatelessWidget {
   final int index;
-  final LabourRequestSGListRows item;
+  final PositionTableRows item;
   final VoidCallback? onDeleteAction;
   final VoidCallback? onEditAction;
 
@@ -54,7 +53,7 @@ class PositionItem extends StatelessWidget {
 
               //文本
               MyTextView(
-                item.jobTitle ?? "-",
+                item.name ?? "-",
                 marginLeft: 5,
                 isFontMedium: true,
                 textColor: ColorConstants.textYellowFFBB1B,
@@ -106,7 +105,7 @@ class PositionItem extends StatelessWidget {
 
               //文本
               MyTextView(
-                item.createdAt ?? "-",
+                item.updatedAt ?? "-",
                 marginLeft: 5,
                 isFontRegular: true,
                 textColor: Colors.white,
@@ -118,7 +117,7 @@ class PositionItem extends StatelessWidget {
 
           //按钮组
           Visibility(
-            visible: item.actionList.isNotEmpty ?? false,
+            visible: true,
             child: Row(
               mainAxisSize: MainAxisSize.max,
               mainAxisAlignment: MainAxisAlignment.end,
@@ -127,7 +126,7 @@ class PositionItem extends StatelessWidget {
 
                 //Edit按钮
                 Visibility(
-                  visible: item.actionList.contains("edit"),
+                  visible: true,
                   child: MyButton(
                     onPressed: () {
                       FocusScope.of(context).unfocus();
@@ -144,7 +143,7 @@ class PositionItem extends StatelessWidget {
 
                 //Delete按钮
                 Visibility(
-                  visible: item.actionList.contains("delete"),
+                  visible: true,
                   child: MyButton(
                     onPressed: () {
                       FocusScope.of(context).unfocus();

+ 38 - 62
packages/cpt_sg/lib/modules/agency/position_list/position_list_controller.dart

@@ -1,7 +1,9 @@
 import 'package:domain/entity/response/labour_request_s_g_list_entity.dart';
+import 'package:domain/entity/response/position_table_entity.dart';
 import 'package:domain/repository/labour_sg_repository.dart';
 
 import 'package:domain/entity/response/labour_request_index_entity.dart';
+import 'package:domain/repository/sg_agency_repository.dart';
 import 'package:get/get.dart';
 import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
 import 'package:plugin_platform/engine/notify/notify_engine.dart';
@@ -17,7 +19,7 @@ import '../position_add/position_add_page.dart';
 import 'position_list_state.dart';
 
 class PositionListController extends GetxController with DioCancelableMixin {
-  final LabourSGRepository _labourRepository = Get.find();
+  final SGAgencyRepository _agencyRepository = Get.find();
   final PositionListState state = PositionListState();
 
   var _curPage = 1;
@@ -64,33 +66,12 @@ class PositionListController extends GetxController with DioCancelableMixin {
       changeLoadingState(LoadState.State_Loading);
     }
 
-    // 并发执行两个请求
-    var futures = [
-      _labourRepository.fetchLabourRequestSGList(
-        state.keyword,
-        "",
-        "",
-        "",
-        "",
-        curPage: _curPage,
-        cancelToken: cancelToken,
-      ),
-      state.indexOptions == null
-          ? _labourRepository.fetchLabourRequestSGIndex(
-              cancelToken: cancelToken,
-            )
-          : Future(() => HttpResult(isSuccess: true).convert(data: state.indexOptions!)),
-    ];
-
     //拿到结果
-    var results = await Future.wait(futures);
-    var listResult = results[0] as HttpResult<LabourRequestSGListEntity>;
-    var optionResult = results[1] as HttpResult<LabourRequestIndexEntity>;
-
-    //选项数据
-    if (state.indexOptions == null && optionResult.isSuccess) {
-      state.indexOptions = optionResult.data!;
-    }
+    var listResult = await _agencyRepository.fetchPositionTable(
+      curPage: _curPage,
+      keyword: state.keyword,
+      cancelToken: cancelToken,
+    );
 
     // 处理数据
     if (listResult.isSuccess) {
@@ -105,7 +86,7 @@ class PositionListController extends GetxController with DioCancelableMixin {
   }
 
   // 处理数据与展示的逻辑
-  void handleList(List<LabourRequestSGListRows>? list) {
+  void handleList(List<PositionTableRows>? list) {
     if (list != null && list.isNotEmpty) {
       //有数据,判断是刷新还是加载更多的数据
       if (_curPage == 1) {
@@ -153,27 +134,27 @@ class PositionListController extends GetxController with DioCancelableMixin {
 
   /// 根据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);
-    }
+    // 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
@@ -188,40 +169,36 @@ class PositionListController extends GetxController with DioCancelableMixin {
     super.onClose();
   }
 
-
   //跳转到添加页面
   void gotoAddAgencyPage() {
-    SGPositionAddPage.startInstance("", (result) {
+    SGPositionAddPage.startInstance("", "", (result) {
       if (result != null) {
         refreshController.callRefresh();
       }
     });
   }
 
-
   //去编辑页面
-  void gotoEditPage(LabourRequestSGListRows data) {
-    SGPositionAddPage.startInstance(data.requestId, (result) {
-      if (result != null) {
-
-      }
+  void gotoEditPage(PositionTableRows data) {
+    SGPositionAddPage.startInstance(data.id, data.name, (result) {
+      if (result != null) {}
     });
   }
 
   //删除labourRequest
-  void doDelete(String? requestId, int index) {
+  void doDelete(String? positionId, int index) {
     DialogEngine.show(
         widget: AppDefaultDialog(
       title: "Confirmation".tr,
       message: "Are you sure you want to delete this position?".tr,
       confirmAction: () {
-        _submitDeleteRequest(requestId, index);
+        _submitDeleteRequest(positionId, index);
       },
     ));
   }
 
-  void _submitDeleteRequest(String? requestId, int index) async {
-    var result = await _labourRepository.deleteLabourRequestSG(requestId, cancelToken: cancelToken);
+  void _submitDeleteRequest(String? positionId, int index) async {
+    var result = await _agencyRepository.deletePositionSubmit(positionId: positionId, cancelToken: cancelToken);
 
     if (result.isSuccess) {
       NotifyEngine.showSuccess("Successful".tr);
@@ -236,5 +213,4 @@ class PositionListController extends GetxController with DioCancelableMixin {
       ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
     }
   }
-
 }

+ 1 - 1
packages/cpt_sg/lib/modules/agency/position_list/position_list_page.dart

@@ -180,7 +180,7 @@ class _LabourRequestListState extends BaseState<SGPositionListPage, PositionList
                           index: index,
                           item: state.datas[index],
                           onDeleteAction: () {
-                            controller.doDelete(state.datas[index].requestId,index);
+                            controller.doDelete(state.datas[index].id,index);
                           },
                           onEditAction: () {
                             controller.gotoEditPage(state.datas[index]);

+ 2 - 2
packages/cpt_sg/lib/modules/agency/position_list/position_list_state.dart

@@ -1,5 +1,6 @@
 import 'package:domain/entity/response/labour_request_index_entity.dart';
 import 'package:domain/entity/response/labour_request_s_g_list_entity.dart';
+import 'package:domain/entity/response/position_table_entity.dart';
 import 'package:flutter/material.dart';
 
 class PositionListState {
@@ -9,6 +10,5 @@ class PositionListState {
   String keyword = "";
 
   //页面的列表数据
-  List<LabourRequestSGListRows> datas = [];
-  LabourRequestIndexEntity? indexOptions;
+  List<PositionTableRows> datas = [];
 }

+ 13 - 0
packages/cs_domain/lib/constants/api_constants.dart

@@ -333,4 +333,17 @@ class ApiConstants {
 
   //编辑中介
   static const apiAgencyEdit = "/index.php/api/v2/hotel/agency/edit-submit";
+
+  //中介职位的列表
+  static const apiAgencyPositionTable = "/index.php/api/v2/hotel/position/table";
+
+  //中介职位的添加
+  static const apiAgencyPositionAdd = "/index.php/api/v2/hotel/position/add-submit";
+
+  //中介职位的编辑
+  static const apiAgencyPositionEdit = "/index.php/api/v2/hotel/position/edit-submit";
+
+  //中介职位的删除
+  static const apiAgencyPositionDelete = "/index.php/api/v2/hotel/position/destroy";
+
 }

+ 42 - 0
packages/cs_domain/lib/entity/response/position_table_entity.dart

@@ -0,0 +1,42 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/position_table_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/position_table_entity.g.dart';
+
+@JsonSerializable()
+class PositionTableEntity {
+	int total= 0;
+	List<PositionTableRows> rows = [];
+
+	PositionTableEntity();
+
+	factory PositionTableEntity.fromJson(Map<String, dynamic> json) => $PositionTableEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $PositionTableEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class PositionTableRows {
+	String? id;
+	String? name;
+	@JSONField(name: "created_at")
+	String? createdAt;
+	@JSONField(name: "updated_at")
+	String? updatedAt;
+
+	PositionTableRows();
+
+	factory PositionTableRows.fromJson(Map<String, dynamic> json) => $PositionTableRowsFromJson(json);
+
+	Map<String, dynamic> toJson() => $PositionTableRowsToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

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

@@ -50,6 +50,7 @@ import 'package:domain/entity/response/labour_request_s_g_list_entity.dart';
 import 'package:domain/entity/response/labour_request_work_flow_entity.dart';
 import 'package:domain/entity/response/labour_review_list_entity.dart';
 import 'package:domain/entity/response/labour_review_status_entity.dart';
+import 'package:domain/entity/response/position_table_entity.dart';
 import 'package:domain/entity/response/revise_index_s_g_entity.dart';
 import 'package:domain/entity/response/revise_list_s_g_entity.dart';
 import 'package:domain/entity/response/revise_log_s_g_entity.dart';
@@ -494,6 +495,12 @@ class JsonConvert {
     if (<LabourReviewStatusRecords>[] is M) {
       return data.map<LabourReviewStatusRecords>((Map<String, dynamic> e) => LabourReviewStatusRecords.fromJson(e)).toList() as M;
     }
+    if (<PositionTableEntity>[] is M) {
+      return data.map<PositionTableEntity>((Map<String, dynamic> e) => PositionTableEntity.fromJson(e)).toList() as M;
+    }
+    if (<PositionTableRows>[] is M) {
+      return data.map<PositionTableRows>((Map<String, dynamic> e) => PositionTableRows.fromJson(e)).toList() as M;
+    }
     if (<ReviseIndexSGEntity>[] is M) {
       return data.map<ReviseIndexSGEntity>((Map<String, dynamic> e) => ReviseIndexSGEntity.fromJson(e)).toList() as M;
     }
@@ -695,6 +702,8 @@ class JsonConvertClassCollection {
     (LabourReviewListRows).toString(): LabourReviewListRows.fromJson,
     (LabourReviewStatusEntity).toString(): LabourReviewStatusEntity.fromJson,
     (LabourReviewStatusRecords).toString(): LabourReviewStatusRecords.fromJson,
+    (PositionTableEntity).toString(): PositionTableEntity.fromJson,
+    (PositionTableRows).toString(): PositionTableRows.fromJson,
     (ReviseIndexSGEntity).toString(): ReviseIndexSGEntity.fromJson,
     (ReviseIndexSGStatusList).toString(): ReviseIndexSGStatusList.fromJson,
     (ReviseListSGEntity).toString(): ReviseListSGEntity.fromJson,

+ 79 - 0
packages/cs_domain/lib/generated/json/position_table_entity.g.dart

@@ -0,0 +1,79 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/position_table_entity.dart';
+
+PositionTableEntity $PositionTableEntityFromJson(Map<String, dynamic> json) {
+  final PositionTableEntity positionTableEntity = PositionTableEntity();
+  final int? total = jsonConvert.convert<int>(json['total']);
+  if (total != null) {
+    positionTableEntity.total = total;
+  }
+  final List<PositionTableRows>? rows = (json['rows'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<PositionTableRows>(e) as PositionTableRows).toList();
+  if (rows != null) {
+    positionTableEntity.rows = rows;
+  }
+  return positionTableEntity;
+}
+
+Map<String, dynamic> $PositionTableEntityToJson(PositionTableEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['total'] = entity.total;
+  data['rows'] = entity.rows.map((v) => v.toJson()).toList();
+  return data;
+}
+
+extension PositionTableEntityExtension on PositionTableEntity {
+  PositionTableEntity copyWith({
+    int? total,
+    List<PositionTableRows>? rows,
+  }) {
+    return PositionTableEntity()
+      ..total = total ?? this.total
+      ..rows = rows ?? this.rows;
+  }
+}
+
+PositionTableRows $PositionTableRowsFromJson(Map<String, dynamic> json) {
+  final PositionTableRows positionTableRows = PositionTableRows();
+  final String? id = jsonConvert.convert<String>(json['id']);
+  if (id != null) {
+    positionTableRows.id = id;
+  }
+  final String? name = jsonConvert.convert<String>(json['name']);
+  if (name != null) {
+    positionTableRows.name = name;
+  }
+  final String? createdAt = jsonConvert.convert<String>(json['created_at']);
+  if (createdAt != null) {
+    positionTableRows.createdAt = createdAt;
+  }
+  final String? updatedAt = jsonConvert.convert<String>(json['updated_at']);
+  if (updatedAt != null) {
+    positionTableRows.updatedAt = updatedAt;
+  }
+  return positionTableRows;
+}
+
+Map<String, dynamic> $PositionTableRowsToJson(PositionTableRows entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['id'] = entity.id;
+  data['name'] = entity.name;
+  data['created_at'] = entity.createdAt;
+  data['updated_at'] = entity.updatedAt;
+  return data;
+}
+
+extension PositionTableRowsExtension on PositionTableRows {
+  PositionTableRows copyWith({
+    String? id,
+    String? name,
+    String? createdAt,
+    String? updatedAt,
+  }) {
+    return PositionTableRows()
+      ..id = id ?? this.id
+      ..name = name ?? this.name
+      ..createdAt = createdAt ?? this.createdAt
+      ..updatedAt = updatedAt ?? this.updatedAt;
+  }
+}

+ 110 - 0
packages/cs_domain/lib/repository/sg_agency_repository.dart

@@ -2,6 +2,7 @@ import 'package:domain/entity/response/agency_detail_entity.dart';
 import 'package:domain/entity/response/agency_option_entity.dart';
 import 'package:domain/entity/response/agency_table_entity.dart';
 import 'package:domain/entity/response/hotel_info_entity.dart';
+import 'package:domain/entity/response/position_table_entity.dart';
 import 'package:get/get.dart';
 import 'package:plugin_platform/http/http_provider.dart';
 import 'package:plugin_platform/http/http_result.dart';
@@ -215,4 +216,113 @@ class SGAgencyRepository extends GetxService {
     return result.convert();
   }
 
+  /// 获取中介职位的列表
+  Future<HttpResult<PositionTableEntity>> fetchPositionTable({
+    required int curPage,
+    String? keyword,
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params["cur_page"] = curPage.toString();
+    params["page_size"] = "10";
+
+    if (Utils.isNotEmpty(keyword)) {
+      params["keyword"] = keyword!;
+    }
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiAgencyPositionTable,
+      params: params,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = PositionTableEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<PositionTableEntity>(data: data);
+    }
+    return result.convert();
+
+  }
+
+  /// 添加职位
+  Future<HttpResult> addPositionSubmit({
+    required String? name,
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params['name'] = name ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiAgencyPositionAdd,
+      method: HttpMethod.POST,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      //重新赋值data或list
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// 编辑职位
+  Future<HttpResult> editPositionSubmit({
+    required String? positionId,
+    required String? name,
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params['position_id'] = positionId ?? "";
+    params['name'] = name ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiAgencyPositionEdit,
+      method: HttpMethod.POST,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      //重新赋值data或list
+      return result.convert();
+    }
+    return result.convert();
+  }
+
+  /// 删除职位
+  Future<HttpResult> deletePositionSubmit({
+    required String? positionId,
+    CancelToken? cancelToken,
+  }) async {
+    //参数
+    Map<String, String> params = {};
+    params['position_id'] = positionId ?? "";
+
+    final result = await httpProvider.requestNetResult(
+      ApiConstants.apiAgencyPositionDelete,
+      method: HttpMethod.POST,
+      params: params,
+      networkDebounce: true,
+      isShowLoadingDialog: true,
+      cancelToken: cancelToken,
+    );
+
+    if (result.isSuccess) {
+      //重新赋值data或list
+      return result.convert();
+    }
+    return result.convert();
+  }
+
 }