// controllers/visitor_controller.dart import 'package:easy_refresh/easy_refresh.dart'; import 'package:get/get.dart'; import '../../model/home/marriage_data.dart'; import '../../network/user_api.dart'; class VisitorController extends GetxController { // 访客列表 var visitors = [].obs; // Refresh controllers final EasyRefreshController refreshController = EasyRefreshController( controlFinishRefresh: true, controlFinishLoad: true, ); // 分页参数 var currentPage = 1.obs; final int pageSize = 15; var hasMore = true.obs; var isLoading = false.obs; late final UserApi _userApi; @override void onInit() { super.onInit(); _userApi = Get.find(); loadInitialData(); } // 加载初始数据 void loadInitialData() async { isLoading.value = true; final result = await _fetchVisitorData(pageNum: currentPage.value); visitors.assignAll(result['records']); isLoading.value = false; final int current = result['current'] ?? 1; final int total = result['pages'] ?? 1; hasMore.value = current < total; } // 下拉刷新 void onRefresh() async { hasMore.value = true; final result = await _fetchVisitorData(pageNum: currentPage.value); visitors.clear(); visitors.addAll(result['records']); final int current = result['current'] ?? 1; final int total = result['pages'] ?? 1; hasMore.value = current < total; refreshController.finishRefresh(); refreshController.resetFooter(); } // 上拉加载更多 void onLoadMore() async { print('onLoadMore'); if (!hasMore.value) { return; } final result = await _fetchVisitorData(pageNum: currentPage.value + 1); currentPage.value++; final int current = result['current'] as int; final int total = result['pages'] as int; hasMore.value = current < total; visitors.addAll(result['records']); if (hasMore.value) { refreshController.finishLoad(IndicatorResult.success); } else { refreshController.finishLoad(IndicatorResult.noMore); } } // 删除访客 void deleteVisitor(String visitorId) { // visitors.removeWhere((visitor) => visitor.id == visitorId); Get.snackbar('成功', '已删除访客记录'); } // 获取今日访客数量 int get todayVisitorsCount { return visitors.length; } // 获取在线访客数量 int get onlineVisitorsCount { return visitors.length; } Future> _fetchVisitorData({required int pageNum}) async { try { print('_fetchVisitorData - pageNum: $pageNum, pageSize: $pageSize'); // 调用API获取数据 var response = await _userApi.getVisitorList( pageNum: pageNum, pageSize: pageSize, ); if (response.data.isSuccess) { final paginatedData = response.data.data; // 检查data是否为空 if (paginatedData == null) { return { 'records': [], 'current': pageNum, 'pages': 1, 'total': 0, 'size': pageSize, }; } // data 是 PaginatedResponse,直接使用其属性 // records 中的每个项是 dynamic,需要转换为 MarriageData final records = paginatedData.records .map((item) => MarriageData.fromJson(item as Map)) .toList(); return { 'records': records, 'current': paginatedData.current, 'pages': paginatedData.pages, 'total': paginatedData.total, 'size': paginatedData.size, }; } else { // 响应失败,抛出异常 throw Exception(response.data.message); } } catch (e) { // 向上抛出异常,让调用方处理 rethrow; } } @override void onClose() { refreshController.dispose(); super.onClose(); } }