starwork_flutter/lib/views/team/addPerson/add_person_controller.dart

113 lines
4.3 KiB
Dart

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<TeamApiService>();
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 = <RoleListResponse>[].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<int?> 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<int>().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();
}
}