import 'package:flutter/widgets.dart'; import 'package:get/get.dart'; import 'package:get/get_rx/get_rx.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:starwork_flutter/api/model/team/request/create_new_person.dart'; import 'package:starwork_flutter/api/model/team/response/depart_list_reponse.dart'; import 'package:starwork_flutter/api/model/team/response/role_list_response.dart'; import 'package:starwork_flutter/api/service/team_api_service.dart'; import 'package:starwork_flutter/base/base_controller.dart'; import 'package:starwork_flutter/common/constant/app_view_parameter_keys.dart'; class AddPersonController extends BaseController { RxString selectedGender = 'male'.obs; final teamApi = Get.find(); var selectedDepartItem = DepartItem().obs; // 当前选中的组织 TextEditingController nameInputController = TextEditingController(); TextEditingController phoneInputController = TextEditingController(); TextEditingController jobNoInputController = TextEditingController(); // 工号 TextEditingController postInputController = TextEditingController(); // 职务 TextEditingController idCardInputController = TextEditingController(); // 身份证号码 TextEditingController remarkInputController = TextEditingController(); // 备注 var isOpeningAccount = false.obs; // 是否开通账户 var isLongTerm = true.obs; // 有效期是否为长期 var startDate = 0.obs; // 使用时间戳表示开始时间 var endDate = 0.obs; // 使用时间戳表示结束时间 var selectedRoles = [].obs; @override void onReady() { super.onReady(); // 读取参数 final args = Get.arguments; if (args != null && args.containsKey(AppViewParameterKeys.departItem)) { final json = args[AppViewParameterKeys.departItem]; selectedDepartItem.value = DepartItem.fromJson(json); } } // 获取选中角色的显示文本 String getSelectedRoleDisplayText() { if (selectedRoles.isEmpty) { return '请选择'; // 如果没有选中角色,显示"请选择" } else { // 将所有选中角色的名称用逗号连接 return selectedRoles.map((role) => role.roleName ?? '').join('、'); // 使用顿号或逗号分隔 } } /// 保存员工信息 /// [isSustain] 是否为持续保存 void savePerson({ bool isSustain = false, }) async { List list = selectedRoles.map((role) => role.id).toList(); var response = await teamApi.requestAddPerson( request: CreateNewPerson( departNo: selectedDepartItem.value.departNo, personName: nameInputController.text.trim(), phone: phoneInputController.text.trim(), sex: selectedGender.value == 'male' ? 1 : 2, position: postInputController.text.trim(), idCard: idCardInputController.text.trim(), remark: remarkInputController.text.trim(), jobNumber: jobNoInputController.text.trim(), limitType: isLongTerm.value ? 1 : 2, limitStartTime: isLongTerm.value ? null : formatTimestamp(startDate.value), limitEndTime: isLongTerm.value ? null : formatTimestamp(endDate.value), isConfirm: true, roleIds: list.whereType().toList(), ), ); if (response.isSuccess) { showSuccess(); if (!isSustain) { Get.back(result: true); } else { resetForm(); } } else { showError(message: response.errorMsg!); } } // 辅助方法:将时间戳转换为日期字符串 String formatTimestamp(int timestamp) { if (timestamp <= 0) return '请选择'; try { final dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp); return '${dateTime.year}-${dateTime.month.toString().padLeft(2, '0')}-${dateTime.day.toString().padLeft(2, '0')}'; } catch (e) { return '请选择'; } } // 重置表单 void resetForm() { nameInputController.text = ''; phoneInputController.text = ''; jobNoInputController.text = ''; postInputController.text = ''; idCardInputController.text = ''; remarkInputController.text = ''; selectedGender.value = 'male'; isOpeningAccount.value = false; isLongTerm.value = true; startDate.value = 0; endDate.value = 0; selectedRoles.clear(); selectedDepartItem.value = DepartItem(); } }