113 lines
4.3 KiB
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();
|
|
}
|
|
}
|