|
|
|
|
@ -3,6 +3,8 @@ import 'package:get/get.dart';
|
|
|
|
|
import 'package:problem_check_system/app/core/extensions/datetime_extension.dart'; |
|
|
|
|
import 'package:problem_check_system/app/core/models/form_mode.dart'; |
|
|
|
|
import 'package:problem_check_system/app/core/routes/app_routes.dart'; |
|
|
|
|
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart'; |
|
|
|
|
import 'package:problem_check_system/app/features/enterprise/domain/usecases/get_enterprises_usecase.dart'; |
|
|
|
|
import 'package:problem_check_system/app/features/problem/domain/entities/problem_bind_status.dart'; |
|
|
|
|
import 'package:problem_check_system/app/features/problem/domain/entities/problem_entity.dart'; |
|
|
|
|
import 'package:problem_check_system/app/features/problem/domain/entities/problem_filter_params.dart'; |
|
|
|
|
@ -15,6 +17,7 @@ import 'package:problem_check_system/app/features/problem/domain/usecases/sync_p
|
|
|
|
|
|
|
|
|
|
class ProblemListController extends GetxController { |
|
|
|
|
final GetAllProblemsUsecase getAllProblemsUsecase; |
|
|
|
|
final GetEnterprisesUsecase getEnterprisesUsecase; |
|
|
|
|
final SyncProblemsUsecase syncProblemsUsecase; |
|
|
|
|
final ProblemResolveConflictUsecase problemResolveConflictUsecase; |
|
|
|
|
|
|
|
|
|
@ -22,13 +25,21 @@ class ProblemListController extends GetxController {
|
|
|
|
|
required this.getAllProblemsUsecase, |
|
|
|
|
required this.syncProblemsUsecase, |
|
|
|
|
required this.problemResolveConflictUsecase, |
|
|
|
|
required this.getEnterprisesUsecase, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
final problemList = <ProblemListItemEntity>[].obs; |
|
|
|
|
final isLoading = false.obs; |
|
|
|
|
final error = ''.obs; // 用于显示错误信息 |
|
|
|
|
final isSyncing = false.obs; |
|
|
|
|
|
|
|
|
|
final nameController = TextEditingController(); |
|
|
|
|
// 显示或隐藏 AppBar 和筛选区域的状态 |
|
|
|
|
final showAppBar = true; |
|
|
|
|
final showFilterSection = true; |
|
|
|
|
|
|
|
|
|
final enterpriseList = <Enterprise>[].obs; |
|
|
|
|
// 筛选条件 |
|
|
|
|
final selectedEnterprise = Rx<Enterprise?>(null); |
|
|
|
|
final selectedStatus = Rx<ProblemUploadStatus?>(null); |
|
|
|
|
final selectedBound = Rx<ProblemBindStatus?>(null); |
|
|
|
|
final startDate = Rx<DateTime?>(null); |
|
|
|
|
@ -49,20 +60,34 @@ class ProblemListController extends GetxController {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
void onInit() { |
|
|
|
|
Future<void> onInit() async { |
|
|
|
|
// 页面初始化时,启动完整的“同步-再加载”流程 |
|
|
|
|
// loadAndSyncEnterprises(); |
|
|
|
|
await _fetchEnterprises(); |
|
|
|
|
search(); |
|
|
|
|
super.onInit(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
void onClose() { |
|
|
|
|
nameController.dispose(); |
|
|
|
|
expansibleController.dispose(); |
|
|
|
|
super.onClose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 4. 私有方法: 获取数据的核心逻辑 |
|
|
|
|
Future<void> _fetchEnterprises() async { |
|
|
|
|
try { |
|
|
|
|
isLoading(true); |
|
|
|
|
error(''); // 重置错误信息 |
|
|
|
|
final result = await getEnterprisesUsecase(); // 调用UseCase |
|
|
|
|
enterpriseList.assignAll(result); // 更新列表 |
|
|
|
|
} catch (e) { |
|
|
|
|
error.value = '加载企业列表失败: $e'; // 捕获并设置错误信息 |
|
|
|
|
} finally { |
|
|
|
|
isLoading(false); // 无论成功或失败,最后都停止加载 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// --- 实现基类中定义的方法 --- |
|
|
|
|
// 核心流程方法 |
|
|
|
|
Future<void> loadAndSyncProblems() async { |
|
|
|
|
@ -178,7 +203,7 @@ class ProblemListController extends GetxController {
|
|
|
|
|
isLoading.value = true; |
|
|
|
|
try { |
|
|
|
|
final ProblemFilterParams params = ProblemFilterParams( |
|
|
|
|
enterpriseName: nameController.value.text, |
|
|
|
|
enterpriseId: selectedEnterprise.value?.id, |
|
|
|
|
startTime: startDate.value, |
|
|
|
|
endTime: endDate.value, |
|
|
|
|
isUploaded: isUploaded, |
|
|
|
|
@ -193,8 +218,18 @@ class ProblemListController extends GetxController {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 设置筛选条件 |
|
|
|
|
void setFilters(Enterprise enterprise) { |
|
|
|
|
selectedEnterprise.value = enterprise; |
|
|
|
|
selectedBound.value = null; |
|
|
|
|
selectedStatus.value = null; |
|
|
|
|
startDate.value = null; |
|
|
|
|
endDate.value = null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 清除筛选条件 |
|
|
|
|
void clearFilters() { |
|
|
|
|
nameController.clear(); |
|
|
|
|
selectedEnterprise.value = null; |
|
|
|
|
selectedBound.value = null; |
|
|
|
|
selectedStatus.value = null; |
|
|
|
|
startDate.value = null; |
|
|
|
|
|