import 'package:domain/entity/home_module.dart'; import 'package:domain/entity/response/hotel_info_entity.dart'; import 'package:domain/repository/auth_repository.dart'; import 'package:get/get.dart'; import 'package:plugin_basic/constants/app_constant.dart'; import 'package:plugin_basic/service/app_config_service.dart'; import 'package:plugin_basic/service/user_service.dart'; import 'package:plugin_platform/engine/toast/toast_engine.dart'; import 'package:router/componentRouter/component_router_service.dart'; import 'package:shared/utils/event_bus.dart'; import 'package:widgets/load_state_layout.dart'; import 'package:widgets/widget_export.dart'; import '../job/job_list/job_list_page.dart'; import '../labour/labour_request_list/labour_request_list_page.dart'; import '../labour/labour_review_list/labour_review_page.dart'; import '../labour/labour_template_list/labour_template_list_page.dart'; import 'main_state.dart'; class MainController extends GetxController { final AuthRepository _authRepository = Get.find(); final MainState state = MainState(); 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: false, ); // Refresh 刷新事件 Future onRefresh() async { fetchHomeData(); } // 重试请求 Future retryRequest() async { _needShowPlaceholder = true; fetchHomeData(); } /// 获取首页的数据 void fetchHomeData() async { if (_needShowPlaceholder) { changeLoadingState(LoadState.State_Loading); } //获取到数据 var result = await _authRepository.fetchHotelInfo(country: ConfigService.to.selectCountry.value); //处理数据 if (result.isSuccess) { final hotelInfo = result.data; if (hotelInfo != null) { UserService.to.hotelInfo.value = hotelInfo; _handleList(hotelInfo.menus); } else { ToastEngine.show(result.errorMsg ?? "Network Load Error".tr); } } else { ToastEngine.show(result.errorMsg ?? "Network Load Error".tr); } //停止刷新 refreshController.finishRefresh(); //最后赋值 _needShowPlaceholder = false; } // 处理数据与展示的逻辑 void _handleList(List? list) { if (list != null && list.isNotEmpty) { //有数据,判断是刷新还是加载更多的数据 state.datas.clear(); //如果是管理员登录,根据Key筛选需要展示的模块 for (var hotelInfo in list) { if (hotelInfo.key != null) { state.datas.addAll(_filterModulesByKey(hotelInfo.route!)); } } //更新状态 changeLoadingState(LoadState.State_Success); } else { //展示无数据的布局 state.datas.clear(); changeLoadingState(LoadState.State_Empty); } } List _filterModulesByKey(String key) { return state.modules.where((module) => module.key == key).toList(); } @override void onReady() async { super.onReady(); fetchHomeData(); registerEventBus(); } @override void onClose() { unregisterEventBus(); super.onClose(); } /// 跳转到指定的模块中去 void gotoModulePage(HomeModule module) { switch (module.key) { case 'er/lab-req': ToastEngine.show("ER 的 Labour Request"); break; case 'er/jobs': ToastEngine.show("ER 的 Job List"); break; case 'oa/lab-req': LabourRequestListPage.startInstance(); break; case 'oa/jobs': JobListPage.startInstance(); break; case 'oa/lab-req/review': LabourReviewPage.startInstance(); break; case 'template': LabourTemplateListPage.startInstance(); break; } } /// 跳转到设置页面 void gotoSettingPage() { ComponentRouterServices.authService.startSettingPage(); } // EventBus 的事件接收 Subscription? subscribe; void registerEventBus() { subscribe = bus.on(AppConstant.eventMainRefresh, (arg) { refreshController.callRefresh(); }); } void unregisterEventBus() { bus.off(AppConstant.eventMainRefresh, subscribe); } }