123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- import 'package:domain/entity/response/job_list_applied_staff_list_entity.dart';
- import 'package:domain/repository/job_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';
- 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:widgets/load_state_layout.dart';
- import 'package:widgets/widget_export.dart';
- import '../../widget/applied_butch_modify.dart';
- import 'job_applied_state.dart';
- class JobAppliedController extends GetxController with DioCancelableMixin {
- final JobRepository _jobRepository = Get.find();
- final JobAppliedState state = JobAppliedState();
- var _curPage = 1;
- var _needShowPlaceholder = true;
- //页面PlaceHolder的展示
- LoadState loadingState = LoadState.State_Success;
- String? errorMessage;
- //刷新页面状态
- void changeLoadingState(LoadState state) {
- loadingState = state;
- update();
- }
- // Refresh 控制器
- final EasyRefreshController refreshController = EasyRefreshController(
- controlFinishRefresh: true,
- controlFinishLoad: true,
- );
- // Refresh 刷新事件
- Future onRefresh() async {
- _curPage = 1;
- fetchAppliedStaffList();
- }
- // Refresh 加载事件
- Future loadMore() async {
- _curPage++;
- fetchAppliedStaffList();
- }
- // 重试请求
- Future retryRequest() async {
- _curPage = 1;
- _needShowPlaceholder = true;
- fetchAppliedStaffList();
- }
- /// 获取服务器数据,通知消息列表
- Future fetchAppliedStaffList() async {
- if (_needShowPlaceholder) {
- changeLoadingState(LoadState.State_Loading);
- }
- if (state.jobInfo == null) {
- //不是并发的,顺序执行接口
- var jobInfoResult = await _jobRepository.fetchJobAppliedInfo(
- state.jobId,
- cancelToken: cancelToken,
- );
- if (jobInfoResult.isSuccess) {
- state.jobInfo = jobInfoResult.data;
- update();
- } else {
- errorMessage = jobInfoResult.errorMsg;
- changeLoadingState(LoadState.State_Error);
- return;
- }
- }
- // 获取 Applied 列表
- var listResult = await _jobRepository.fetchJobAppliedStaffs(
- state.jobId,
- state.keyword,
- curPage: _curPage,
- cancelToken: cancelToken,
- );
- // 处理数据
- if (listResult.isSuccess) {
- handleList(listResult.data?.rows);
- } else {
- errorMessage = listResult.errorMsg;
- changeLoadingState(LoadState.State_Error);
- }
- // 最后赋值
- _needShowPlaceholder = false;
- }
- // 处理数据与展示的逻辑
- void handleList(List<JobListAppliedStaffListRows>? list) {
- if (list != null && list.isNotEmpty) {
- //有数据,判断是刷新还是加载更多的数据
- if (_curPage == 1) {
- //刷新的方式
- state.datas.clear();
- state.datas.addAll(list);
- refreshController.finishRefresh();
- //更新展示的状态
- changeLoadingState(LoadState.State_Success);
- } else {
- //加载更多
- state.datas.addAll(list);
- refreshController.finishLoad();
- update();
- }
- } else {
- if (_curPage == 1) {
- //展示无数据的布局
- state.datas.clear();
- changeLoadingState(LoadState.State_Empty);
- refreshController.finishRefresh();
- } else {
- //展示加载完成,没有更多数据了
- refreshController.finishLoad(IndicatorResult.noMore);
- }
- }
- }
- @override
- void onReady() {
- super.onReady();
- fetchAppliedStaffList();
- }
- @override
- void onClose() {
- super.onClose();
- }
- /// 搜索员工
- void doSearch(String keyword) {
- state.keyword = keyword;
- //赋值之后刷新
- refreshController.callRefresh();
- }
- /// 清空筛选条件
- void resetFiltering() {
- state.keyword = "";
- state.searchController.text = "";
- //赋值之后刷新
- refreshController.callRefresh();
- }
- /// 展示添加员工的弹窗
- void showAddStaffDialog() {
- ToastEngine.show("展示添加员工的弹窗");
- }
- /// 去编辑员工信息页面
- void gotoAppliedEditPage(JobListAppliedStaffListRows data) {
- ToastEngine.show("去编辑员工信息页面");
- }
- /// 展示评论的弹窗
- void showRemarkDialog(JobListAppliedStaffListRows data) {
- ToastEngine.show("展示评论的弹窗");
- }
- /// 去展示员工状态的工作流
- void gotoAppliedWorkflowPage(JobListAppliedStaffListRows data) {
- ToastEngine.show("去展示员工状态的工作流");
- }
- /// Item选中与未选中设置
- void doSelectedOrNot(JobListAppliedStaffListRows data) {
- data.isSelected = !data.isSelected;
- update();
- }
- /// 批量修改的弹窗
- void showBatchModifyDialog() async {
- DialogEngine.show(widget: AppliedButchModify(confirmAction: (start, end) {
- requestBatchModify(start, end);
- }));
- }
- /// 执行批量修改的请求
- void requestBatchModify(DateTime start, DateTime end) async {
- var selectedList = state.datas.where((element) => element.isSelected).toList(growable: false);
- if (selectedList.isNotEmpty) {
- var ids = selectedList.map((e) => e.appliedId.toString()).toList(growable: false);
- var separatedIds = ids.join(',');
- //执行请求
- var result = await _jobRepository.batchEditStaffCheckTime(
- state.jobId,
- separatedIds,
- DateTimeUtils.formatDate(start),
- DateTimeUtils.formatDate(end),
- cancelToken: cancelToken,
- );
- if (result.isSuccess) {
- NotifyEngine.showSuccess("Successful".tr);
- //调用接口刷新指定的Staff的信息
- fetchItemByIdAndRefreshItem(separatedIds);
- } else {
- ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
- return;
- }
- } else {
- ToastEngine.show("Please select the applied record".tr);
- }
- }
- /// 批准的操作
- void operationApprove() async {
- //找出已经选中的员工
- var selectedList = state.datas.where((element) => element.isSelected).toList(growable: false);
- if (selectedList.isNotEmpty) {
- var ids = selectedList.map((e) => e.appliedId.toString()).toList(growable: false);
- var separatedIds = ids.join(',');
- //执行请求
- var result = await _jobRepository.submitBatchStaffApprove(separatedIds, cancelToken: cancelToken);
- if (result.isSuccess) {
- NotifyEngine.showSuccess("Successful".tr);
- //调用接口刷新指定的Staff的信息
- fetchItemByIdAndRefreshItem(separatedIds);
- } else {
- ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
- return;
- }
- } else {
- ToastEngine.show("Please select the applied record".tr);
- }
- }
- /// 根据ID获取Item对象,用于刷新
- void fetchItemByIdAndRefreshItem(String appliedIds) async {
- var result = await _jobRepository.fetchItemByAppliedIds(
- state.jobId,
- appliedIds,
- cancelToken: cancelToken,
- );
- //处理数据
- if (result.isSuccess) {
- var data = result.data;
- if (data != null && data.rows != null && data.rows!.isNotEmpty) {
- List<JobListAppliedStaffListRows> newItem = data.rows!;
- // 创建一个 Map 来加速查找
- Map<int, JobListAppliedStaffListRows> newItemMap = {for (var item in newItem) item.appliedId: item};
- // 遍历 state.datas 进行替换
- for (int i = 0; i < state.datas.length; i++) {
- if (newItemMap.containsKey(state.datas[i].appliedId)) {
- state.datas[i] = newItemMap[state.datas[i].appliedId]!;
- }
- }
- //刷新
- update();
- }
- } else {
- ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
- }
- }
- }
|