liukai 1 неделя назад
Родитель
Сommit
f1bd8c0ffa
58 измененных файлов с 1932 добавлено и 55 удалено
  1. 54 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_screen.dart
  2. 31 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_state.dart
  3. 130 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_view_model.dart
  4. 27 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_view_model.g.dart
  5. 136 0
      packages/cpt_facility/lib/modules/facility/active/item_facility_active.dart
  6. 55 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_screen.dart
  7. 31 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_state.dart
  8. 130 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_view_model.dart
  9. 27 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_view_model.g.dart
  10. 48 0
      packages/cpt_facility/lib/modules/facility/book/item_facility_book.dart
  11. 145 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_screen.dart
  12. 31 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_state.dart
  13. 125 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_view_model.dart
  14. 27 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_view_model.g.dart
  15. 55 0
      packages/cpt_facility/lib/modules/facility/deposit/item_facility_deposit.dart
  16. 156 0
      packages/cpt_facility/lib/modules/facility/facility_page.dart
  17. 0 0
      packages/cpt_facility/lib/modules/facility/facility_view_model.dart
  18. 0 0
      packages/cpt_facility/lib/modules/facility/facility_view_model.g.dart
  19. 53 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_screen.dart
  20. 31 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_state.dart
  21. 130 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_view_model.dart
  22. 27 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_view_model.g.dart
  23. 148 0
      packages/cpt_facility/lib/modules/facility/history/item_facility_history.dart
  24. 0 34
      packages/cpt_facility/lib/modules/facility/page/facility_page.dart
  25. 1 1
      packages/cpt_facility/lib/router/component/facility_component_service.dart
  26. 17 5
      packages/cpt_facility/lib/router/page/facility_page_router.dart
  27. 81 1
      packages/cpt_facility/lib/router/page/facility_page_router.gr.dart
  28. 0 1
      packages/cpt_main/lib/modules/home/latest_news/latest_news_page.dart
  29. BIN
      packages/cs_resources/assets/base_service/radio_checked.webp
  30. BIN
      packages/cs_resources/assets/base_service/radio_uncheck.webp
  31. BIN
      packages/cs_resources/assets/facility/active_icon.webp
  32. BIN
      packages/cs_resources/assets/facility/add_card_american.webp
  33. BIN
      packages/cs_resources/assets/facility/add_card_master.webp
  34. BIN
      packages/cs_resources/assets/facility/add_card_name.webp
  35. BIN
      packages/cs_resources/assets/facility/add_card_num.webp
  36. BIN
      packages/cs_resources/assets/facility/add_card_visa.webp
  37. BIN
      packages/cs_resources/assets/facility/book_icon.webp
  38. BIN
      packages/cs_resources/assets/facility/calendar_icon.webp
  39. BIN
      packages/cs_resources/assets/facility/confirm_date_icon.webp
  40. BIN
      packages/cs_resources/assets/facility/confirm_deposit_icon.webp
  41. BIN
      packages/cs_resources/assets/facility/confirm_ecard_icon.webp
  42. BIN
      packages/cs_resources/assets/facility/confirm_facility_icon.webp
  43. BIN
      packages/cs_resources/assets/facility/confirm_payment_icon.webp
  44. BIN
      packages/cs_resources/assets/facility/deposit_icon.webp
  45. BIN
      packages/cs_resources/assets/facility/history_icon.webp
  46. BIN
      packages/cs_resources/assets/facility/payment_success_icon.webp
  47. BIN
      packages/cs_resources/assets/facility/question_icon.webp
  48. BIN
      packages/cs_resources/assets/facility/title_location_icon.webp
  49. 18 0
      packages/cs_resources/lib/generated/assets.dart
  50. 22 4
      packages/cs_resources/lib/generated/intl/messages_en.dart
  51. 19 4
      packages/cs_resources/lib/generated/intl/messages_zh_CN.dart
  52. 19 4
      packages/cs_resources/lib/generated/intl/messages_zh_HK.dart
  53. 120 0
      packages/cs_resources/lib/generated/l10n.dart
  54. 12 0
      packages/cs_resources/lib/l10n/intl_en.arb
  55. 12 0
      packages/cs_resources/lib/l10n/intl_zh_CN.arb
  56. 12 0
      packages/cs_resources/lib/l10n/intl_zh_HK.arb
  57. 1 0
      packages/cs_resources/pubspec.yaml
  58. 1 1
      packages/cs_widgets/lib/shatter/custom_radio_check.dart

+ 54 - 0
packages/cpt_facility/lib/modules/facility/active/facility_active_screen.dart

@@ -0,0 +1,54 @@
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'facility_active_view_model.dart';
+import 'item_facility_active.dart';
+
+
+@RoutePage()
+class FacilityActiveScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(facilityActiveViewModelProvider.notifier);
+    final state = ref.watch(facilityActiveViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Container(
+      width: double.infinity,
+      height: double.infinity,
+      child: EasyRefresh(
+        controller: viewModel.refreshController,
+        onRefresh: viewModel.onRefresh,
+        onLoad: viewModel.loadMore,
+        child: LoadStateLayout(
+          state: state.loadingState,
+          errorMessage: state.errorMessage,
+          errorRetry: () {
+            viewModel.retryRequest();
+          },
+          successSliverWidget: [
+            SliverList(
+                delegate: SliverChildBuilderDelegate(
+                      (context, index) {
+                    return FacilityActiveItem(index: index, item: state.datas[index]);
+                  },
+                  childCount: state.datas.length,
+                ))
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+}

+ 31 - 0
packages/cpt_facility/lib/modules/facility/active/facility_active_state.dart

@@ -0,0 +1,31 @@
+import 'package:widgets/load_state_layout.dart';
+
+class FacilityActiveState {
+
+  //页面 LoadView 状态的展示
+  LoadState loadingState;
+  String? errorMessage;
+
+  List<String> datas; //页面列表数据
+
+  // ===================================  Begin  ↓  ===================================
+
+  FacilityActiveState({
+    this.loadingState = LoadState.State_Loading,
+    this.errorMessage,
+    required this.datas,
+  });
+
+  FacilityActiveState copyWith({
+    LoadState? loadingState,
+    String? errorMessage,
+    bool? needShowPlaceholder,
+    List<String>? datas,
+  }) {
+    return FacilityActiveState(
+      errorMessage: errorMessage ?? this.errorMessage,
+      loadingState: loadingState ?? this.loadingState,
+      datas: datas ?? this.datas,
+    );
+  }
+}

+ 130 - 0
packages/cpt_facility/lib/modules/facility/active/facility_active_view_model.dart

@@ -0,0 +1,130 @@
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'facility_active_state.dart';
+
+part 'facility_active_view_model.g.dart';
+
+@riverpod
+class FacilityActiveViewModel extends _$FacilityActiveViewModel {
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,  //允许刷新
+    controlFinishLoad: true,   //允许加载
+  );
+
+  @override
+  FacilityActiveState build() {
+    return FacilityActiveState(datas: []);
+  }
+
+  //刷新页面状态
+  void changeLoadingState(LoadState loadState, String? errorMsg) {
+    state = state.copyWith(loadingState: loadState, errorMessage: errorMsg);
+  }
+
+  // Refresh 刷新事件
+  Future onRefresh() async {
+    _curPage = 1;
+    fetchList();
+  }
+
+  // Refresh 加载事件
+  Future loadMore() async {
+    _curPage++;
+    fetchList();
+  }
+
+  // 重试请求
+  Future retryRequest() async {
+    _curPage = 1;
+    _needShowPlaceholder = true;
+    fetchList();
+  }
+
+  /// 获取服务器数据
+  Future fetchList() async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading, null);
+    }
+
+    // 获取 Applied 列表
+    // var listResult = await _jobRepository.fetchJobAppliedList(
+    //   state.jobId,
+    //   state.selectedStatusId,
+    //   state.keyword,
+    //   curPage: _curPage,
+    //   cancelToken: cancelToken,
+    // );
+    //
+    // // 处理数据
+    // if (listResult.isSuccess) {
+    //   handleList(listResult.data?.rows);
+    // } else {
+    //   errorMessage = listResult.errorMsg;
+    //   changeLoadingState(LoadState.State_Error);
+    // }
+
+
+    await Future.delayed(const Duration(milliseconds: 1500));
+
+    final List<String> list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
+
+    if (_curPage == 1) {
+      //刷新的方式
+      state = state.copyWith(datas: list);
+      refreshController.finishRefresh();
+
+      //更新展示的状态
+      changeLoadingState(LoadState.State_Success, null);
+    } else {
+      //加载更多
+      final allList = state.datas;
+      allList.addAll(list);
+      state.datas.addAll(list);
+
+      refreshController.finishLoad();
+
+      state = state.copyWith(datas: allList);
+    }
+
+    // 最后赋值
+    _needShowPlaceholder = false;
+  }
+
+// 处理数据与展示的逻辑
+// void handleList(List<JobAppliedListSGRows>? 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);
+//     }
+//   }
+// }
+}

+ 27 - 0
packages/cpt_facility/lib/modules/facility/active/facility_active_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'facility_active_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$facilityActiveViewModelHash() =>
+    r'57bc96b84547eef379f700777115155343b5cb78';
+
+/// See also [FacilityActiveViewModel].
+@ProviderFor(FacilityActiveViewModel)
+final facilityActiveViewModelProvider = AutoDisposeNotifierProvider<
+    FacilityActiveViewModel, FacilityActiveState>.internal(
+  FacilityActiveViewModel.new,
+  name: r'facilityActiveViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$facilityActiveViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$FacilityActiveViewModel = AutoDisposeNotifier<FacilityActiveState>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 136 - 0
packages/cpt_facility/lib/modules/facility/active/item_facility_active.dart

@@ -0,0 +1,136 @@
+import 'package:cpt_facility/modules/facility/active/facility_active_screen.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_text_view.dart';
+
+///  设施的Active的Item
+class FacilityActiveItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const FacilityActiveItem({
+    required this.index,
+    required this.item,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: double.infinity,
+      margin: const EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5),
+      padding: const EdgeInsets.only(left: 20, right: 15, top: 18, bottom: 25),
+      decoration: BoxDecoration(
+        color: context.appColors.whiteBG,
+        borderRadius: BorderRadius.circular(6.0), // 圆角
+      ),
+      child: Row(
+        mainAxisSize: MainAxisSize.max,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //设施
+              MyTextView(
+                "Kids party room",
+                fontSize: 16,
+                maxLines: 3,
+                textColor: context.appColors.textBlack,
+                isFontMedium: true,
+              ),
+
+              //分类
+              MyTextView(
+                "Blue room",
+                fontSize: 14,
+                marginTop: 3,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //预订人
+              MyTextView(
+                S.current.booked_by_someone("Wu Bing Bing"),
+                fontSize: 14,
+                marginTop: 3,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //日期
+              MyTextView(
+                "Tue,24 Oct 2023",
+                fontSize: 14,
+                marginTop: 16,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //时间
+              MyTextView(
+                "05:00 PM-10:00 PM",
+                fontSize: 14,
+                marginBottom: 7,
+                marginTop: 3,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //标签
+              Row(
+                children: [
+                  MyTextView(
+                    "Fee Paid",
+                    textColor: context.appColors.textPrimary,
+                    fontSize: 13,
+                    isFontRegular: true,
+                    backgroundColor: context.appColors.lightPurpleBg,
+                    cornerRadius: 3,
+                    paddingLeft: 7,
+                    marginRight: 6,
+                    paddingRight: 7,
+                    paddingTop: 3,
+                    paddingBottom: 3,
+                  ),
+                  MyTextView(
+                    "Deposit",
+                    textColor: context.appColors.textPrimary,
+                    fontSize: 13,
+                    isFontRegular: true,
+                    backgroundColor: context.appColors.lightPurpleBg,
+                    cornerRadius: 3,
+                    paddingLeft: 7,
+                    marginRight: 6,
+                    paddingRight: 7,
+                    paddingTop: 3,
+                    paddingBottom: 3,
+                  )
+                ],
+              )
+            ],
+          ).expanded(),
+          Column(
+            mainAxisSize: MainAxisSize.min,
+            mainAxisAlignment:MainAxisAlignment.start,
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //查看按钮
+              MyTextView(
+                S.current.view,
+                textColor: Colors.white,
+                backgroundColor: context.appColors.btnBgDefault,
+                cornerRadius: 7,
+                paddingTop: 9,
+                paddingBottom: 9,
+                textAlign: TextAlign.center,
+                boxWidth: 60,
+              )
+            ],
+          )
+        ],
+      ),
+    );
+  }
+}

+ 55 - 0
packages/cpt_facility/lib/modules/facility/book/facility_book_screen.dart

@@ -0,0 +1,55 @@
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'facility_book_view_model.dart';
+import 'item_facility_book.dart';
+
+
+@RoutePage()
+class FacilityBookScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(facilityBookViewModelProvider.notifier);
+    final state = ref.watch(facilityBookViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Container(
+      width: double.infinity,
+      height: double.infinity,
+      child: EasyRefresh(
+        controller: viewModel.refreshController,
+        onRefresh: viewModel.onRefresh,
+        onLoad: viewModel.loadMore,
+        child: LoadStateLayout(
+          state: state.loadingState,
+          errorMessage: state.errorMessage,
+          errorRetry: () {
+            viewModel.retryRequest();
+          },
+          successSliverWidget: [
+            SliverList(
+                delegate: SliverChildBuilderDelegate(
+                      (context, index) {
+                    return FacilityBookItem(index: index, item: state.datas[index]);
+                  },
+                  childCount: state.datas.length,
+                ))
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+}

+ 31 - 0
packages/cpt_facility/lib/modules/facility/book/facility_book_state.dart

@@ -0,0 +1,31 @@
+import 'package:widgets/load_state_layout.dart';
+
+class FacilityBookState {
+
+  //页面 LoadView 状态的展示
+  LoadState loadingState;
+  String? errorMessage;
+
+  List<String> datas; //页面列表数据
+
+  // ===================================  Begin  ↓  ===================================
+
+  FacilityBookState({
+    this.loadingState = LoadState.State_Loading,
+    this.errorMessage,
+    required this.datas,
+  });
+
+  FacilityBookState copyWith({
+    LoadState? loadingState,
+    String? errorMessage,
+    bool? needShowPlaceholder,
+    List<String>? datas,
+  }) {
+    return FacilityBookState(
+      errorMessage: errorMessage ?? this.errorMessage,
+      loadingState: loadingState ?? this.loadingState,
+      datas: datas ?? this.datas,
+    );
+  }
+}

+ 130 - 0
packages/cpt_facility/lib/modules/facility/book/facility_book_view_model.dart

@@ -0,0 +1,130 @@
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'facility_book_state.dart';
+
+part 'facility_book_view_model.g.dart';
+
+@riverpod
+class FacilityBookViewModel extends _$FacilityBookViewModel {
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,  //允许刷新
+    controlFinishLoad: true,   //允许加载
+  );
+
+  @override
+  FacilityBookState build() {
+    return FacilityBookState(datas: []);
+  }
+
+  //刷新页面状态
+  void changeLoadingState(LoadState loadState, String? errorMsg) {
+    state = state.copyWith(loadingState: loadState, errorMessage: errorMsg);
+  }
+
+  // Refresh 刷新事件
+  Future onRefresh() async {
+    _curPage = 1;
+    fetchList();
+  }
+
+  // Refresh 加载事件
+  Future loadMore() async {
+    _curPage++;
+    fetchList();
+  }
+
+  // 重试请求
+  Future retryRequest() async {
+    _curPage = 1;
+    _needShowPlaceholder = true;
+    fetchList();
+  }
+
+  /// 获取服务器数据
+  Future fetchList() async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading, null);
+    }
+
+    // 获取 Applied 列表
+    // var listResult = await _jobRepository.fetchJobAppliedList(
+    //   state.jobId,
+    //   state.selectedStatusId,
+    //   state.keyword,
+    //   curPage: _curPage,
+    //   cancelToken: cancelToken,
+    // );
+    //
+    // // 处理数据
+    // if (listResult.isSuccess) {
+    //   handleList(listResult.data?.rows);
+    // } else {
+    //   errorMessage = listResult.errorMsg;
+    //   changeLoadingState(LoadState.State_Error);
+    // }
+
+
+    await Future.delayed(const Duration(milliseconds: 1500));
+
+    final List<String> list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
+
+    if (_curPage == 1) {
+      //刷新的方式
+      state = state.copyWith(datas: list);
+      refreshController.finishRefresh();
+
+      //更新展示的状态
+      changeLoadingState(LoadState.State_Success, null);
+    } else {
+      //加载更多
+      final allList = state.datas;
+      allList.addAll(list);
+      state.datas.addAll(list);
+
+      refreshController.finishLoad();
+
+      state = state.copyWith(datas: allList);
+    }
+
+    // 最后赋值
+    _needShowPlaceholder = false;
+  }
+
+// 处理数据与展示的逻辑
+// void handleList(List<JobAppliedListSGRows>? 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);
+//     }
+//   }
+// }
+}

+ 27 - 0
packages/cpt_facility/lib/modules/facility/book/facility_book_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'facility_book_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$facilityBookViewModelHash() =>
+    r'a2eda52600285b2e37b66f90bff7c2402bb40cdc';
+
+/// See also [FacilityBookViewModel].
+@ProviderFor(FacilityBookViewModel)
+final facilityBookViewModelProvider = AutoDisposeNotifierProvider<
+    FacilityBookViewModel, FacilityBookState>.internal(
+  FacilityBookViewModel.new,
+  name: r'facilityBookViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$facilityBookViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$FacilityBookViewModel = AutoDisposeNotifier<FacilityBookState>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 48 - 0
packages/cpt_facility/lib/modules/facility/book/item_facility_book.dart

@@ -0,0 +1,48 @@
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+///  设施的Book的Item
+class FacilityBookItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const FacilityBookItem({
+    required this.index,
+    required this.item,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: double.infinity,
+      height: 80,
+      margin: const EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5),
+      padding: const EdgeInsets.symmetric(horizontal: 20),
+      decoration: BoxDecoration(
+        color: context.appColors.whiteBG,
+        borderRadius: BorderRadius.circular(6.0), // 圆角
+      ),
+      child: Row(
+        mainAxisSize: MainAxisSize.max,
+        crossAxisAlignment: CrossAxisAlignment.center,
+        children: [
+          MyLoadImage(
+            "https://img0.baidu.com/it/u=2679587808,2501833998&fm=253&fmt=auto&app=120&f=JPEG?w=372&h=400",
+            width: 38.5,
+          ),
+
+          MyTextView(
+            "Function Room",
+            marginLeft: 17,
+            fontSize: 16,
+            textColor: context.appColors.textBlack,
+            isFontMedium: true,
+          ).expanded(),
+        ],
+      ),
+    );
+  }
+}

+ 145 - 0
packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_screen.dart

@@ -0,0 +1,145 @@
+import 'package:auto_route/auto_route.dart';
+import 'package:cpt_facility/modules/facility/active/item_facility_active.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'facility_deposit_view_model.dart';
+import 'item_facility_deposit.dart';
+
+@RoutePage()
+class FacilityDepositScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(facilityDepositViewModelProvider.notifier);
+    final state = ref.watch(facilityDepositViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return SizedBox(
+      width: double.infinity,
+      height: double.infinity,
+      child: EasyRefresh(
+        controller: viewModel.refreshController,
+        onRefresh: viewModel.onRefresh,
+        child: LoadStateLayout(
+          state: state.loadingState,
+          errorMessage: state.errorMessage,
+          errorRetry: () {
+            viewModel.retryRequest();
+          },
+          successSliverWidget: [
+            // 头布局
+            _buildHeaderWidget(context, ref),
+
+            // 列表
+            SliverList(
+                delegate: SliverChildBuilderDelegate(
+              (context, index) {
+                return FacilityDepositItem(index: index, item: state.datas[index]);
+              },
+              childCount: state.datas.length,
+            )),
+
+            //脚布局
+            _buildFootWidget(context, ref),
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+
+  //头布局
+  _buildHeaderWidget(BuildContext context, WidgetRef ref) {
+    return SliverToBoxAdapter(
+      child: Container(
+        width: double.infinity,
+        margin: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 5),
+        child: Column(
+          children: [
+            // 上半部分
+            Container(
+              width: double.infinity,
+              padding: const EdgeInsets.all(16),
+              decoration: BoxDecoration(
+                color: context.appColors.btnBgDefault,
+                borderRadius: const BorderRadius.only(
+                  topLeft: Radius.circular(5),
+                  topRight: Radius.circular(5),
+                ),
+              ),
+              child: MyTextView(
+                S.current.deposit_amount,
+                fontSize: 18,
+                textAlign: TextAlign.center,
+                isFontMedium: true,
+                textColor: Colors.white,
+              ),
+            ),
+            // 下半部分
+            Container(
+              width: double.infinity,
+              padding: EdgeInsets.all(26),
+              decoration: const BoxDecoration(
+                color: Colors.white,
+                borderRadius: BorderRadius.only(
+                  bottomLeft: Radius.circular(5),
+                  bottomRight: Radius.circular(5),
+                ),
+              ),
+              child: MyTextView(
+                "\$ 200.00",
+                fontSize: 30,
+                isFontBold: true,
+                textAlign: TextAlign.center,
+                textColor: Colors.black,
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  //底部的说明文本脚布局
+  _buildFootWidget(BuildContext context, WidgetRef ref) {
+    return SliverToBoxAdapter(
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          MyTextView(
+            S.current.deposit_desc,
+            fontSize: 20,
+            marginTop: 14,
+            marginRight: 15,
+            marginLeft: 20,
+            isFontMedium: true,
+            textColor: context.appColors.textBlack,
+          ),
+          MyTextView(
+            S.current.deposit_desc_txt,
+            marginTop: 14,
+            marginBottom: 14,
+            marginRight: 15,
+            marginLeft: 20,
+            fontSize: 15,
+            isFontRegular: true,
+            textColor: context.appColors.textBlack,
+          ),
+        ],
+      ),
+    );
+  }
+}

+ 31 - 0
packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_state.dart

@@ -0,0 +1,31 @@
+import 'package:widgets/load_state_layout.dart';
+
+class FacilityDepositState {
+
+  //页面 LoadView 状态的展示
+  LoadState loadingState;
+  String? errorMessage;
+
+  List<String> datas; //页面列表数据
+
+  // ===================================  Begin  ↓  ===================================
+
+  FacilityDepositState({
+    this.loadingState = LoadState.State_Loading,
+    this.errorMessage,
+    required this.datas,
+  });
+
+  FacilityDepositState copyWith({
+    LoadState? loadingState,
+    String? errorMessage,
+    bool? needShowPlaceholder,
+    List<String>? datas,
+  }) {
+    return FacilityDepositState(
+      errorMessage: errorMessage ?? this.errorMessage,
+      loadingState: loadingState ?? this.loadingState,
+      datas: datas ?? this.datas,
+    );
+  }
+}

+ 125 - 0
packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_view_model.dart

@@ -0,0 +1,125 @@
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'facility_deposit_state.dart';
+
+part 'facility_deposit_view_model.g.dart';
+
+@riverpod
+class FacilityDepositViewModel extends _$FacilityDepositViewModel {
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,  //允许刷新
+    controlFinishLoad: false,   //不允许加载
+  );
+
+  @override
+  FacilityDepositState build() {
+    final state = FacilityDepositState(datas: []);
+    return state;
+  }
+
+  //刷新页面状态
+  void changeLoadingState(LoadState loadState, String? errorMsg) {
+    state = state.copyWith(loadingState: loadState, errorMessage: errorMsg);
+  }
+
+  // Refresh 刷新事件
+  Future onRefresh() async {
+    _curPage = 1;
+    fetchList();
+  }
+
+  // 重试请求
+  Future retryRequest() async {
+    _curPage = 1;
+    _needShowPlaceholder = true;
+    fetchList();
+  }
+
+  /// 获取服务器数据
+  Future fetchList() async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading, null);
+    }
+
+    // 获取 Applied 列表
+    // var listResult = await _jobRepository.fetchJobAppliedList(
+    //   state.jobId,
+    //   state.selectedStatusId,
+    //   state.keyword,
+    //   curPage: _curPage,
+    //   cancelToken: cancelToken,
+    // );
+    //
+    // // 处理数据
+    // if (listResult.isSuccess) {
+    //   handleList(listResult.data?.rows);
+    // } else {
+    //   errorMessage = listResult.errorMsg;
+    //   changeLoadingState(LoadState.State_Error);
+    // }
+
+
+    await Future.delayed(const Duration(milliseconds: 1500));
+
+    final List<String> list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
+
+    if (_curPage == 1) {
+      //刷新的方式
+      state = state.copyWith(datas: list);
+      refreshController.finishRefresh();
+
+      //更新展示的状态
+      changeLoadingState(LoadState.State_Success, null);
+    } else {
+      //加载更多
+      final allList = state.datas;
+      allList.addAll(list);
+      state.datas.addAll(list);
+
+      refreshController.finishLoad();
+
+      state = state.copyWith(datas: allList);
+    }
+
+    // 最后赋值
+    _needShowPlaceholder = false;
+  }
+
+// 处理数据与展示的逻辑
+// void handleList(List<JobAppliedListSGRows>? 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);
+//     }
+//   }
+// }
+}

+ 27 - 0
packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'facility_deposit_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$facilityDepositViewModelHash() =>
+    r'a42d79590553d917d84803608f4eae75b1b08740';
+
+/// See also [FacilityDepositViewModel].
+@ProviderFor(FacilityDepositViewModel)
+final facilityDepositViewModelProvider = AutoDisposeNotifierProvider<
+    FacilityDepositViewModel, FacilityDepositState>.internal(
+  FacilityDepositViewModel.new,
+  name: r'facilityDepositViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$facilityDepositViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$FacilityDepositViewModel = AutoDisposeNotifier<FacilityDepositState>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 55 - 0
packages/cpt_facility/lib/modules/facility/deposit/item_facility_deposit.dart

@@ -0,0 +1,55 @@
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+///  设施的Deposit的Item
+class FacilityDepositItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const FacilityDepositItem({
+    required this.index,
+    required this.item,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: double.infinity,
+      color: context.appColors.whiteBG,
+      margin: const EdgeInsets.only(top: 5),
+      padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 23),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          MyTextView(
+            "Function Room Orange Room",
+            fontSize: 16.5,
+            textColor: context.appColors.textPrimary,
+            isFontMedium: true,
+          ),
+          Row(
+            children: [
+              MyTextView(
+                S.current.deposit_hold,
+                fontSize: 14.5,
+                textColor: context.appColors.textBlack,
+                isFontMedium: true,
+              ),
+              const Spacer(),
+              MyTextView(
+                "\$100.00",
+                fontSize: 14.5,
+                textColor: context.appColors.textBlack,
+                isFontMedium: true,
+              ),
+            ],
+          ).marginOnly(top: 10),
+        ],
+      ).expanded(),
+    );
+  }
+}

+ 156 - 0
packages/cpt_facility/lib/modules/facility/facility_page.dart

@@ -0,0 +1,156 @@
+import 'package:cs_resources/generated/assets.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:auto_route/auto_route.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:router/ext/auto_router_extensions.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+import '../../router/page/facility_page_router.dart';
+import 'facility_view_model.dart';
+
+@RoutePage()
+class FacilityPage extends HookConsumerWidget {
+  const FacilityPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(const FacilityPageRoute());
+    } else {
+      appRouter.push(const FacilityPageRoute());
+    }
+  }
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(facilityViewModelProvider.notifier);
+
+    return Scaffold(
+      appBar: MyAppBar.appBar(
+        context,
+        S.current.facility,
+        backgroundColor: context.appColors.whiteBG,
+      ),
+      backgroundColor: context.appColors.backgroundDark,
+      body: AutoTabsRouter.pageView(
+        routes: const [
+          FacilityBookPageRoute(),
+          FacilityActivePageRoute(),
+          FacilityDepositPageRoute(),
+          FacilityHistoryPageRoute(),
+        ],
+        builder: (context, child, pageController) {
+          final tabsRouter = AutoTabsRouter.of(context);
+
+          return Column(
+            children: [
+              Container(
+                color: context.appColors.whiteBG,
+                height: 120,
+                child: Row(
+                  mainAxisAlignment: MainAxisAlignment.spaceAround,
+                  children: [
+                    _buildFeedbackCategory(
+                      context,
+                      Assets.facilityBookIcon,
+                      48.5,
+                      40,
+                      S.current.book,
+                      tabsRouter.activeIndex == 0,
+                    ).onTap(
+                      () {
+                        tabsRouter.setActiveIndex(0);
+                      },
+                    ),
+                    _buildFeedbackCategory(
+                      context,
+                      Assets.facilityActiveIcon,
+                      39,
+                      47.5,
+                      S.current.facility_active,
+                      tabsRouter.activeIndex == 1,
+                    ).onTap(
+                      () {
+                        tabsRouter.setActiveIndex(1);
+                      },
+                    ),
+                    _buildFeedbackCategory(
+                      context,
+                      Assets.facilityDepositIcon,
+                      35.5,
+                      41.5,
+                      S.current.deposit,
+                      tabsRouter.activeIndex == 2,
+                    ).onTap(
+                      () {
+                        tabsRouter.setActiveIndex(2);
+                      },
+                    ),
+                    _buildFeedbackCategory(
+                      context,
+                      Assets.mainLatestPublish,
+                      47.5,
+                      45,
+                      S.current.history,
+                      tabsRouter.activeIndex == 3,
+                    ).onTap(
+                      () {
+                        tabsRouter.setActiveIndex(3);
+                      },
+                    ),
+                  ],
+                ),
+              ),
+              Expanded(
+                child: child,
+              ),
+            ],
+          );
+        },
+      ),
+    );
+  }
+
+  //顶部的Tab布局
+  Widget _buildFeedbackCategory(BuildContext context, String iconPath, double iconWidth, double iconHeight, String title, bool isSelected) {
+    return Column(
+      mainAxisAlignment: MainAxisAlignment.center,
+      crossAxisAlignment: CrossAxisAlignment.center,
+      children: <Widget>[
+        Container(
+          width: 70,
+          height: 70,
+          decoration: BoxDecoration(
+            color: context.appColors.lightBlueBg, // 设置圆形背景颜色
+            shape: BoxShape.circle, // 设置为圆形
+            boxShadow: isSelected
+                ? [
+                    BoxShadow(
+                      color: context.appColors.tabLightBlueShadow, // 设置阴影颜色
+                      blurRadius: 5, // 设置模糊半径
+                      spreadRadius: 0.05, // 控制阴影扩散
+                      offset: const Offset(0, 4), // 设置阴影偏移量
+                    ),
+                  ]
+                : [], // 未选中时无阴影,
+          ),
+          child: Center(
+            child: MyAssetImage(iconPath, width: iconWidth, height: iconHeight),
+          ),
+        ),
+        const SizedBox(height: 7),
+        MyTextView(
+          title,
+          fontSize: 15,
+          isFontMedium: true,
+          textColor: isSelected ? context.appColors.tabTextSelectedDefault : context.appColors.tabTextUnSelectedDefault,
+        ),
+      ],
+    );
+  }
+}

packages/cpt_facility/lib/modules/facility/vm/facility_view_model.dart → packages/cpt_facility/lib/modules/facility/facility_view_model.dart


packages/cpt_facility/lib/modules/facility/vm/facility_view_model.g.dart → packages/cpt_facility/lib/modules/facility/facility_view_model.g.dart


+ 53 - 0
packages/cpt_facility/lib/modules/facility/history/facility_history_screen.dart

@@ -0,0 +1,53 @@
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+import 'facility_history_view_model.dart';
+import 'item_facility_history.dart';
+
+
+@RoutePage()
+class FacilityHistoryScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(facilityHistoryViewModelProvider.notifier);
+    final state = ref.watch(facilityHistoryViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Container(
+      width: double.infinity,
+      height: double.infinity,
+      child: EasyRefresh(
+        controller: viewModel.refreshController,
+        onRefresh: viewModel.onRefresh,
+        onLoad: viewModel.loadMore,
+        child: LoadStateLayout(
+          state: state.loadingState,
+          errorMessage: state.errorMessage,
+          errorRetry: () {
+            viewModel.retryRequest();
+          },
+          successSliverWidget: [
+            SliverList(
+                delegate: SliverChildBuilderDelegate(
+                      (context, index) {
+                    return FacilityHistoryItem(index: index, item: state.datas[index]);
+                  },
+                  childCount: state.datas.length,
+                ))
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+}

+ 31 - 0
packages/cpt_facility/lib/modules/facility/history/facility_history_state.dart

@@ -0,0 +1,31 @@
+import 'package:widgets/load_state_layout.dart';
+
+class FacilityHistoryState {
+
+  //页面 LoadView 状态的展示
+  LoadState loadingState;
+  String? errorMessage;
+
+  List<String> datas; //页面列表数据
+
+  // ===================================  Begin  ↓  ===================================
+
+  FacilityHistoryState({
+    this.loadingState = LoadState.State_Loading,
+    this.errorMessage,
+    required this.datas,
+  });
+
+  FacilityHistoryState copyWith({
+    LoadState? loadingState,
+    String? errorMessage,
+    bool? needShowPlaceholder,
+    List<String>? datas,
+  }) {
+    return FacilityHistoryState(
+      errorMessage: errorMessage ?? this.errorMessage,
+      loadingState: loadingState ?? this.loadingState,
+      datas: datas ?? this.datas,
+    );
+  }
+}

+ 130 - 0
packages/cpt_facility/lib/modules/facility/history/facility_history_view_model.dart

@@ -0,0 +1,130 @@
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'facility_history_state.dart';
+
+part 'facility_history_view_model.g.dart';
+
+@riverpod
+class FacilityHistoryViewModel extends _$FacilityHistoryViewModel {
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,  //允许刷新
+    controlFinishLoad: true,   //允许加载
+  );
+
+  @override
+  FacilityHistoryState build() {
+    return FacilityHistoryState(datas: []);
+  }
+
+  //刷新页面状态
+  void changeLoadingState(LoadState loadState, String? errorMsg) {
+    state = state.copyWith(loadingState: loadState, errorMessage: errorMsg);
+  }
+
+  // Refresh 刷新事件
+  Future onRefresh() async {
+    _curPage = 1;
+    fetchList();
+  }
+
+  // Refresh 加载事件
+  Future loadMore() async {
+    _curPage++;
+    fetchList();
+  }
+
+  // 重试请求
+  Future retryRequest() async {
+    _curPage = 1;
+    _needShowPlaceholder = true;
+    fetchList();
+  }
+
+  /// 获取服务器数据
+  Future fetchList() async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading, null);
+    }
+
+    // 获取 Applied 列表
+    // var listResult = await _jobRepository.fetchJobAppliedList(
+    //   state.jobId,
+    //   state.selectedStatusId,
+    //   state.keyword,
+    //   curPage: _curPage,
+    //   cancelToken: cancelToken,
+    // );
+    //
+    // // 处理数据
+    // if (listResult.isSuccess) {
+    //   handleList(listResult.data?.rows);
+    // } else {
+    //   errorMessage = listResult.errorMsg;
+    //   changeLoadingState(LoadState.State_Error);
+    // }
+
+
+    await Future.delayed(const Duration(milliseconds: 1500));
+
+    final List<String> list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
+
+    if (_curPage == 1) {
+      //刷新的方式
+      state = state.copyWith(datas: list);
+      refreshController.finishRefresh();
+
+      //更新展示的状态
+      changeLoadingState(LoadState.State_Success, null);
+    } else {
+      //加载更多
+      final allList = state.datas;
+      allList.addAll(list);
+      state.datas.addAll(list);
+
+      refreshController.finishLoad();
+
+      state = state.copyWith(datas: allList);
+    }
+
+    // 最后赋值
+    _needShowPlaceholder = false;
+  }
+
+// 处理数据与展示的逻辑
+// void handleList(List<JobAppliedListSGRows>? 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);
+//     }
+//   }
+// }
+}

+ 27 - 0
packages/cpt_facility/lib/modules/facility/history/facility_history_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'facility_history_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$facilityHistoryViewModelHash() =>
+    r'2565bb75a59c1a94a8c39d5d5985a9e9422b50f0';
+
+/// See also [FacilityHistoryViewModel].
+@ProviderFor(FacilityHistoryViewModel)
+final facilityHistoryViewModelProvider = AutoDisposeNotifierProvider<
+    FacilityHistoryViewModel, FacilityHistoryState>.internal(
+  FacilityHistoryViewModel.new,
+  name: r'facilityHistoryViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$facilityHistoryViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$FacilityHistoryViewModel = AutoDisposeNotifier<FacilityHistoryState>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 148 - 0
packages/cpt_facility/lib/modules/facility/history/item_facility_history.dart

@@ -0,0 +1,148 @@
+import 'package:cpt_facility/modules/facility/active/facility_active_screen.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_text_view.dart';
+
+///  设施的History的Item
+class FacilityHistoryItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const FacilityHistoryItem({
+    required this.index,
+    required this.item,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: double.infinity,
+      margin: const EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5),
+      padding: const EdgeInsets.only(left: 20, right: 15, top: 18, bottom: 25),
+      decoration: BoxDecoration(
+        color: context.appColors.whiteBG,
+        borderRadius: BorderRadius.circular(6.0), // 圆角
+      ),
+      child: Row(
+        mainAxisSize: MainAxisSize.max,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //设施
+              MyTextView(
+                "Kids party room",
+                fontSize: 16,
+                maxLines: 3,
+                textColor: context.appColors.textBlack,
+                isFontMedium: true,
+              ),
+
+              //分类
+              MyTextView(
+                "Blue room",
+                fontSize: 14,
+                marginTop: 3,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //预订人
+              MyTextView(
+                S.current.booked_by_someone("Wu Bing Bing"),
+                fontSize: 14,
+                marginTop: 3,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //日期
+              MyTextView(
+                "Tue,24 Oct 2023",
+                fontSize: 14,
+                marginTop: 16,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //时间
+              MyTextView(
+                "05:00 PM-10:00 PM",
+                fontSize: 14,
+                marginBottom: 7,
+                marginTop: 3,
+                textColor: context.appColors.textBlack,
+                isFontRegular: true,
+              ),
+
+              //标签
+              Row(
+                children: [
+                  MyTextView(
+                    "Fee Paid",
+                    textColor: context.appColors.textPrimary,
+                    fontSize: 13,
+                    isFontRegular: true,
+                    backgroundColor: context.appColors.lightPurpleBg,
+                    cornerRadius: 3,
+                    paddingLeft: 7,
+                    marginRight: 6,
+                    paddingRight: 7,
+                    paddingTop: 3,
+                    paddingBottom: 3,
+                  ),
+                  MyTextView(
+                    "Deposit Released",
+                    textColor: context.appColors.textPrimary,
+                    fontSize: 13,
+                    isFontRegular: true,
+                    backgroundColor: context.appColors.lightPurpleBg,
+                    cornerRadius: 3,
+                    paddingLeft: 7,
+                    marginRight: 6,
+                    paddingRight: 7,
+                    paddingTop: 3,
+                    paddingBottom: 3,
+                  )
+                ],
+              )
+            ],
+          ).expanded(),
+          Column(
+            mainAxisSize: MainAxisSize.min,
+            mainAxisAlignment:MainAxisAlignment.start,
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //查看按钮
+              MyTextView(
+                S.current.view,
+                textColor: Colors.white,
+                backgroundColor: context.appColors.btnBgDefault,
+                cornerRadius: 7,
+                paddingTop: 9,
+                paddingBottom: 9,
+                textAlign: TextAlign.center,
+                boxWidth: 60,
+              ),
+
+              MyTextView(
+                S.current.delete,
+                textColor: Colors.white,
+                backgroundColor: context.appColors.orangeBG,
+                cornerRadius: 7,
+                paddingTop: 9,
+                marginTop: 15,
+                paddingBottom: 9,
+                textAlign: TextAlign.center,
+                boxWidth: 60,
+              )
+            ],
+          )
+        ],
+      ),
+    );
+  }
+}

+ 0 - 34
packages/cpt_facility/lib/modules/facility/page/facility_page.dart

@@ -1,34 +0,0 @@
-
-import 'package:flutter/material.dart';
-import 'package:auto_route/auto_route.dart';
-import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:router/ext/auto_router_extensions.dart';
-
-import '../../../router/page/facility_page_router.dart';
-import '../../facility/vm/facility_view_model.dart';
-
-@RoutePage()
-class FacilityPage extends HookConsumerWidget {
-  const FacilityPage({Key? key}) : super(key: key);
-
-  //启动当前页面
-  static void startInstance({BuildContext? context}) {
-    if (context != null) {
-      context.router.push(const FacilityPageRoute());
-    } else {
-      appRouter.push(const FacilityPageRoute());
-    }
-  }
-
-  @override
-  Widget build(BuildContext context, WidgetRef ref) {
-    final _viewModel = ref.read(facilityViewModelProvider.notifier);
-
-    return Scaffold(
-      appBar: AppBar(title: Text("设施")),
-      body: Center(
-        child: Text("设施的主页面"),
-      ),
-    );
-  }
-}

+ 1 - 1
packages/cpt_facility/lib/router/component/facility_component_service.dart

@@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 
-import '../../modules/facility/page/facility_page.dart';
+import '../../modules/facility/facility_page.dart';
 
 part 'facility_component_service.g.dart';
 

+ 17 - 5
packages/cpt_facility/lib/router/page/facility_page_router.dart

@@ -3,8 +3,11 @@ import 'package:flutter/material.dart';
 import 'package:router/ext/auto_router_extensions.dart';
 import 'package:router/path/router_path.dart';
 
-import '../../modules/facility/page/facility_page.dart';
-
+import '../../modules/facility/facility_page.dart';
+import '../../modules/facility/active/facility_active_screen.dart';
+import '../../modules/facility/book/facility_book_screen.dart';
+import '../../modules/facility/deposit/facility_deposit_screen.dart';
+import '../../modules/facility/history/facility_history_screen.dart';
 
 part 'facility_page_router.gr.dart';
 
@@ -15,7 +18,16 @@ part 'facility_page_router.gr.dart';
 class FacilityPageRouter extends _$FacilityPageRouter {
   @override
   List<AutoRoute> get routes => [
-
-    CustomRoute(page: FacilityPageRoute.page, path: RouterPath.facility, transitionsBuilder: applySlideTransition),
-  ];
+        CustomRoute(
+          page: FacilityPageRoute.page,
+          path: RouterPath.facility,
+          transitionsBuilder: applySlideTransition,
+          children: [
+            AutoRoute(page: FacilityBookPageRoute.page, path: 'book'),
+            AutoRoute(page: FacilityActivePageRoute.page, path: 'active'),
+            AutoRoute(page: FacilityDepositPageRoute.page, path: 'deposit'),
+            AutoRoute(page: FacilityHistoryPageRoute.page, path: 'history'),
+          ],
+        ),
+      ];
 }

+ 81 - 1
packages/cpt_facility/lib/router/page/facility_page_router.gr.dart

@@ -15,16 +15,96 @@ abstract class _$FacilityPageRouter extends RootStackRouter {
 
   @override
   final Map<String, PageFactory> pagesMap = {
+    FacilityActivePageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: FacilityActiveScreen(),
+      );
+    },
+    FacilityBookPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: FacilityBookScreen(),
+      );
+    },
+    FacilityDepositPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: FacilityDepositScreen(),
+      );
+    },
+    FacilityHistoryPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: FacilityHistoryScreen(),
+      );
+    },
     FacilityPageRoute.name: (routeData) {
       return AutoRoutePage<dynamic>(
         routeData: routeData,
         child: const FacilityPage(),
       );
-    }
+    },
   };
 }
 
 /// generated route for
+/// [FacilityActiveScreen]
+class FacilityActivePageRoute extends PageRouteInfo<void> {
+  const FacilityActivePageRoute({List<PageRouteInfo>? children})
+      : super(
+          FacilityActivePageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'FacilityActivePageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
+/// [FacilityBookScreen]
+class FacilityBookPageRoute extends PageRouteInfo<void> {
+  const FacilityBookPageRoute({List<PageRouteInfo>? children})
+      : super(
+          FacilityBookPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'FacilityBookPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
+/// [FacilityDepositScreen]
+class FacilityDepositPageRoute extends PageRouteInfo<void> {
+  const FacilityDepositPageRoute({List<PageRouteInfo>? children})
+      : super(
+          FacilityDepositPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'FacilityDepositPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
+/// [FacilityHistoryScreen]
+class FacilityHistoryPageRoute extends PageRouteInfo<void> {
+  const FacilityHistoryPageRoute({List<PageRouteInfo>? children})
+      : super(
+          FacilityHistoryPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'FacilityHistoryPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
 /// [FacilityPage]
 class FacilityPageRoute extends PageRouteInfo<void> {
   const FacilityPageRoute({List<PageRouteInfo>? children})

+ 0 - 1
packages/cpt_main/lib/modules/home/latest_news/latest_news_page.dart

@@ -29,7 +29,6 @@ class LatestNewsPage extends StatelessWidget {
       appBar: MyAppBar.appBar(
         context,
         S.current.latest_news,
-        showBackButton: false,
         backgroundColor: context.appColors.whiteBG,
       ),
       backgroundColor: context.appColors.backgroundDark,

BIN
packages/cs_resources/assets/base_service/radio_checked.webp


BIN
packages/cs_resources/assets/base_service/radio_uncheck.webp


BIN
packages/cs_resources/assets/facility/active_icon.webp


BIN
packages/cs_resources/assets/facility/add_card_american.webp


BIN
packages/cs_resources/assets/facility/add_card_master.webp


BIN
packages/cs_resources/assets/facility/add_card_name.webp


BIN
packages/cs_resources/assets/facility/add_card_num.webp


BIN
packages/cs_resources/assets/facility/add_card_visa.webp


BIN
packages/cs_resources/assets/facility/book_icon.webp


BIN
packages/cs_resources/assets/facility/calendar_icon.webp


BIN
packages/cs_resources/assets/facility/confirm_date_icon.webp


BIN
packages/cs_resources/assets/facility/confirm_deposit_icon.webp


BIN
packages/cs_resources/assets/facility/confirm_ecard_icon.webp


BIN
packages/cs_resources/assets/facility/confirm_facility_icon.webp


BIN
packages/cs_resources/assets/facility/confirm_payment_icon.webp


BIN
packages/cs_resources/assets/facility/deposit_icon.webp


BIN
packages/cs_resources/assets/facility/history_icon.webp


BIN
packages/cs_resources/assets/facility/payment_success_icon.webp


BIN
packages/cs_resources/assets/facility/question_icon.webp


BIN
packages/cs_resources/assets/facility/title_location_icon.webp


+ 18 - 0
packages/cs_resources/lib/generated/assets.dart

@@ -48,6 +48,24 @@ class Assets {
   static const String communityLikeActive = 'assets/community/like_active.webp';
   static const String communityNesFeed = 'assets/community/nes_feed.webp';
   static const String communityShare = 'assets/community/share.webp';
+  static const String facilityActiveIcon = 'assets/facility/active_icon.webp';
+  static const String facilityAddCardAmerican = 'assets/facility/add_card_american.webp';
+  static const String facilityAddCardMaster = 'assets/facility/add_card_master.webp';
+  static const String facilityAddCardName = 'assets/facility/add_card_name.webp';
+  static const String facilityAddCardNum = 'assets/facility/add_card_num.webp';
+  static const String facilityAddCardVisa = 'assets/facility/add_card_visa.webp';
+  static const String facilityBookIcon = 'assets/facility/book_icon.webp';
+  static const String facilityCalendarIcon = 'assets/facility/calendar_icon.webp';
+  static const String facilityConfirmDateIcon = 'assets/facility/confirm_date_icon.webp';
+  static const String facilityConfirmDepositIcon = 'assets/facility/confirm_deposit_icon.webp';
+  static const String facilityConfirmEcardIcon = 'assets/facility/confirm_ecard_icon.webp';
+  static const String facilityConfirmFacilityIcon = 'assets/facility/confirm_facility_icon.webp';
+  static const String facilityConfirmPaymentIcon = 'assets/facility/confirm_payment_icon.webp';
+  static const String facilityDepositIcon = 'assets/facility/deposit_icon.webp';
+  static const String facilityHistoryIcon = 'assets/facility/history_icon.webp';
+  static const String facilityPaymentSuccessIcon = 'assets/facility/payment_success_icon.webp';
+  static const String facilityQuestionIcon = 'assets/facility/question_icon.webp';
+  static const String facilityTitleLocationIcon = 'assets/facility/title_location_icon.webp';
   static const String mainAccountDeactivationImg = 'assets/main/account_deactivation_img.webp';
   static const String mainFeedbackHistory = 'assets/main/feedback_history.webp';
   static const String mainFeedbackInProgress = 'assets/main/feedback_in_progress.webp';

+ 22 - 4
packages/cs_resources/lib/generated/intl/messages_en.dart

@@ -20,9 +20,11 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
 class MessageLookup extends MessageLookupByLibrary {
   String get localeName => 'en';
 
-  static String m0(count) => "${count} Characters";
+  static String m0(name) => "Booked by ${name}";
 
-  static String m1(name) => "Welcome ${name}";
+  static String m1(count) => "${count} Characters";
+
+  static String m2(name) => "Welcome ${name}";
 
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@@ -45,10 +47,12 @@ class MessageLookup extends MessageLookupByLibrary {
             "123 Example Road #08-08 Country 123456"),
         "block_example_desc": MessageLookupByLibrary.simpleMessage(
             "123 is the block number #08-08 is the unit number"),
+        "book": MessageLookupByLibrary.simpleMessage("Book"),
+        "booked_by_someone": m0,
         "cancel": MessageLookupByLibrary.simpleMessage("Cancel"),
         "change_mobile_phone":
             MessageLookupByLibrary.simpleMessage("Change Mobile Phone"),
-        "characters": m0,
+        "characters": m1,
         "choose_category":
             MessageLookupByLibrary.simpleMessage("Choose a Category"),
         "community": MessageLookupByLibrary.simpleMessage("Community"),
@@ -61,6 +65,17 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Create New FeedBack"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("Create New YY Home Account"),
+        "delete": MessageLookupByLibrary.simpleMessage("Delete"),
+        "deposit": MessageLookupByLibrary.simpleMessage("Deposit"),
+        "deposit_amount":
+            MessageLookupByLibrary.simpleMessage("Deposit Amount"),
+        "deposit_desc":
+            MessageLookupByLibrary.simpleMessage("Deposit Description:"),
+        "deposit_desc_txt": MessageLookupByLibrary.simpleMessage(
+            "Deposit is a part of enjoying community services, and it will be automatically issued to your corresponding bank card after enjoying the services. Please check carefully"),
+        "deposit_hold": MessageLookupByLibrary.simpleMessage("Deposit Hold"),
+        "deposit_released":
+            MessageLookupByLibrary.simpleMessage("Deposit Released"),
         "describe_your_feedback":
             MessageLookupByLibrary.simpleMessage("Describe Your FeedBack"),
         "did_not_receive":
@@ -75,6 +90,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "estate_or_building_name":
             MessageLookupByLibrary.simpleMessage("Estate or Building Name?"),
         "facility": MessageLookupByLibrary.simpleMessage("Facility"),
+        "facility_active": MessageLookupByLibrary.simpleMessage("Active"),
+        "fee_paid": MessageLookupByLibrary.simpleMessage("Fee Paid"),
         "feedback": MessageLookupByLibrary.simpleMessage("FeedBack"),
         "feedback_details":
             MessageLookupByLibrary.simpleMessage("FeedBack Details"),
@@ -221,6 +238,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "verification_code":
             MessageLookupByLibrary.simpleMessage("Verification Code"),
         "version_no": MessageLookupByLibrary.simpleMessage("Version No."),
+        "view": MessageLookupByLibrary.simpleMessage("View"),
         "visitor": MessageLookupByLibrary.simpleMessage("Visitor"),
         "visitor_active": MessageLookupByLibrary.simpleMessage("Active"),
         "visitor_msg": MessageLookupByLibrary.simpleMessage(
@@ -230,7 +248,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Visitor Registration"),
         "waiting_for_the_administrator": MessageLookupByLibrary.simpleMessage(
             "Waiting for the administrator"),
-        "welcome_name": m1,
+        "welcome_name": m2,
         "who_are_owners":
             MessageLookupByLibrary.simpleMessage("Who are owners?"),
         "who_are_tenants":

+ 19 - 4
packages/cs_resources/lib/generated/intl/messages_zh_CN.dart

@@ -20,9 +20,11 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
 class MessageLookup extends MessageLookupByLibrary {
   String get localeName => 'zh_CN';
 
-  static String m0(count) => "${count} 字符";
+  static String m0(name) => "${name} 已预定";
 
-  static String m1(name) => "欢迎你 ${name}";
+  static String m1(count) => "${count} 字符";
+
+  static String m2(name) => "欢迎你 ${name}";
 
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@@ -42,9 +44,11 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("123 示例路 #08-08 国家 123456"),
         "block_example_desc":
             MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
+        "book": MessageLookupByLibrary.simpleMessage("预定"),
+        "booked_by_someone": m0,
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
-        "characters": m0,
+        "characters": m1,
         "choose_category": MessageLookupByLibrary.simpleMessage("选择类型"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
@@ -53,6 +57,14 @@ class MessageLookup extends MessageLookupByLibrary {
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
+        "delete": MessageLookupByLibrary.simpleMessage("删除"),
+        "deposit": MessageLookupByLibrary.simpleMessage("押金"),
+        "deposit_amount": MessageLookupByLibrary.simpleMessage("押金总金额"),
+        "deposit_desc": MessageLookupByLibrary.simpleMessage("押金详情描述:"),
+        "deposit_desc_txt": MessageLookupByLibrary.simpleMessage(
+            "押金是使用社区服务的一部分,在使用服务后,它将自动发放到您相应的银行卡上。请仔细检查"),
+        "deposit_hold": MessageLookupByLibrary.simpleMessage("当前押金"),
+        "deposit_released": MessageLookupByLibrary.simpleMessage("押金已退还"),
         "describe_your_feedback":
             MessageLookupByLibrary.simpleMessage("描述您的反馈"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
@@ -65,6 +77,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "estate_or_building_name":
             MessageLookupByLibrary.simpleMessage("房产或建筑名称?"),
         "facility": MessageLookupByLibrary.simpleMessage("设施"),
+        "facility_active": MessageLookupByLibrary.simpleMessage("可用"),
+        "fee_paid": MessageLookupByLibrary.simpleMessage("已支付"),
         "feedback": MessageLookupByLibrary.simpleMessage("反馈"),
         "feedback_details": MessageLookupByLibrary.simpleMessage("反馈详情"),
         "feedback_msg_1": MessageLookupByLibrary.simpleMessage("帮助我们保持您的房产美丽"),
@@ -179,6 +193,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "upload_pictures": MessageLookupByLibrary.simpleMessage("上传图片"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
+        "view": MessageLookupByLibrary.simpleMessage("查看"),
         "visitor": MessageLookupByLibrary.simpleMessage("访客"),
         "visitor_active": MessageLookupByLibrary.simpleMessage("可用的"),
         "visitor_msg": MessageLookupByLibrary.simpleMessage(
@@ -187,7 +202,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
         "waiting_for_the_administrator":
             MessageLookupByLibrary.simpleMessage("等待管理员回复"),
-        "welcome_name": m1,
+        "welcome_name": m2,
         "who_are_owners": MessageLookupByLibrary.simpleMessage("怎样才算业主?"),
         "who_are_tenants": MessageLookupByLibrary.simpleMessage("怎样才算租户?"),
         "yes": MessageLookupByLibrary.simpleMessage("是"),

+ 19 - 4
packages/cs_resources/lib/generated/intl/messages_zh_HK.dart

@@ -20,9 +20,11 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
 class MessageLookup extends MessageLookupByLibrary {
   String get localeName => 'zh_HK';
 
-  static String m0(count) => "${count} 字符";
+  static String m0(name) => "${name} 已预定";
 
-  static String m1(name) => "欢迎你 ${name}";
+  static String m1(count) => "${count} 字符";
+
+  static String m2(name) => "欢迎你 ${name}";
 
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@@ -42,9 +44,11 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("123 示例路 #08-08 国家 123456"),
         "block_example_desc":
             MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
+        "book": MessageLookupByLibrary.simpleMessage("预定"),
+        "booked_by_someone": m0,
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
-        "characters": m0,
+        "characters": m1,
         "choose_category": MessageLookupByLibrary.simpleMessage("选择类型"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
@@ -53,6 +57,14 @@ class MessageLookup extends MessageLookupByLibrary {
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
+        "delete": MessageLookupByLibrary.simpleMessage("删除"),
+        "deposit": MessageLookupByLibrary.simpleMessage("押金"),
+        "deposit_amount": MessageLookupByLibrary.simpleMessage("押金总金额"),
+        "deposit_desc": MessageLookupByLibrary.simpleMessage("押金详情描述:"),
+        "deposit_desc_txt": MessageLookupByLibrary.simpleMessage(
+            "押金是使用社区服务的一部分,在使用服务后,它将自动发放到您相应的银行卡上。请仔细检查"),
+        "deposit_hold": MessageLookupByLibrary.simpleMessage("当前押金"),
+        "deposit_released": MessageLookupByLibrary.simpleMessage("押金已退还"),
         "describe_your_feedback":
             MessageLookupByLibrary.simpleMessage("描述您的反馈"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
@@ -65,6 +77,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "estate_or_building_name":
             MessageLookupByLibrary.simpleMessage("房产或建筑名称?"),
         "facility": MessageLookupByLibrary.simpleMessage("設施"),
+        "facility_active": MessageLookupByLibrary.simpleMessage("可用"),
+        "fee_paid": MessageLookupByLibrary.simpleMessage("已支付"),
         "feedback": MessageLookupByLibrary.simpleMessage("反馈"),
         "feedback_details": MessageLookupByLibrary.simpleMessage("反馈详情"),
         "feedback_msg_1": MessageLookupByLibrary.simpleMessage("帮助我们保持您的房产美丽"),
@@ -166,6 +180,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "upload_pictures": MessageLookupByLibrary.simpleMessage("上传图片"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
+        "view": MessageLookupByLibrary.simpleMessage("查看"),
         "visitor": MessageLookupByLibrary.simpleMessage("访客"),
         "visitor_active": MessageLookupByLibrary.simpleMessage("可用的"),
         "visitor_msg": MessageLookupByLibrary.simpleMessage(
@@ -174,7 +189,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
         "waiting_for_the_administrator":
             MessageLookupByLibrary.simpleMessage("等待管理员回复"),
-        "welcome_name": m1,
+        "welcome_name": m2,
         "yes": MessageLookupByLibrary.simpleMessage("是"),
         "you_have": MessageLookupByLibrary.simpleMessage("你还有"),
         "your_roles_responsibilities":

+ 120 - 0
packages/cs_resources/lib/generated/l10n.dart

@@ -1490,6 +1490,126 @@ class S {
     );
   }
 
+  /// `Book`
+  String get book {
+    return Intl.message(
+      'Book',
+      name: 'book',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Active`
+  String get facility_active {
+    return Intl.message(
+      'Active',
+      name: 'facility_active',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Deposit`
+  String get deposit {
+    return Intl.message(
+      'Deposit',
+      name: 'deposit',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `View`
+  String get view {
+    return Intl.message(
+      'View',
+      name: 'view',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Fee Paid`
+  String get fee_paid {
+    return Intl.message(
+      'Fee Paid',
+      name: 'fee_paid',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Booked by {name}`
+  String booked_by_someone(Object name) {
+    return Intl.message(
+      'Booked by $name',
+      name: 'booked_by_someone',
+      desc: '',
+      args: [name],
+    );
+  }
+
+  /// `Deposit Amount`
+  String get deposit_amount {
+    return Intl.message(
+      'Deposit Amount',
+      name: 'deposit_amount',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Deposit Hold`
+  String get deposit_hold {
+    return Intl.message(
+      'Deposit Hold',
+      name: 'deposit_hold',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Deposit Description:`
+  String get deposit_desc {
+    return Intl.message(
+      'Deposit Description:',
+      name: 'deposit_desc',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Deposit is a part of enjoying community services, and it will be automatically issued to your corresponding bank card after enjoying the services. Please check carefully`
+  String get deposit_desc_txt {
+    return Intl.message(
+      'Deposit is a part of enjoying community services, and it will be automatically issued to your corresponding bank card after enjoying the services. Please check carefully',
+      name: 'deposit_desc_txt',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Delete`
+  String get delete {
+    return Intl.message(
+      'Delete',
+      name: 'delete',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Deposit Released`
+  String get deposit_released {
+    return Intl.message(
+      'Deposit Released',
+      name: 'deposit_released',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Other`
   String get other {
     return Intl.message(

+ 12 - 0
packages/cs_resources/lib/l10n/intl_en.arb

@@ -143,5 +143,17 @@
   "household_members": "Household Members",
   "remove_account": "Remove Account",
   "remove_account_tips": "Are you sure you want to remove your account?",
+  "book": "Book",
+  "facility_active": "Active",
+  "deposit": "Deposit",
+  "view": "View",
+  "fee_paid": "Fee Paid",
+  "booked_by_someone": "Booked by {name}",
+  "deposit_amount": "Deposit Amount",
+  "deposit_hold": "Deposit Hold",
+  "deposit_desc": "Deposit Description:",
+  "deposit_desc_txt": "Deposit is a part of enjoying community services, and it will be automatically issued to your corresponding bank card after enjoying the services. Please check carefully",
+  "delete": "Delete",
+  "deposit_released": "Deposit Released",
   "other": "Other"
 }

+ 12 - 0
packages/cs_resources/lib/l10n/intl_zh_CN.arb

@@ -143,5 +143,17 @@
   "household_members": "家庭成员",
   "remove_account": "移除账号",
   "remove_account_tips": "你确定要移除你的账号吗?",
+  "book": "预定",
+  "facility_active": "可用",
+  "deposit": "押金",
+  "view": "查看",
+  "fee_paid": "已支付",
+  "booked_by_someone": "{name} 已预定",
+  "deposit_amount": "押金总金额",
+  "deposit_hold": "当前押金",
+  "deposit_desc": "押金详情描述:",
+  "deposit_desc_txt": "押金是使用社区服务的一部分,在使用服务后,它将自动发放到您相应的银行卡上。请仔细检查",
+  "delete": "删除",
+  "deposit_released": "押金已退还",
   "other": "其他"
 }

+ 12 - 0
packages/cs_resources/lib/l10n/intl_zh_HK.arb

@@ -129,5 +129,17 @@
   "household_members": "家庭成员",
   "remove_account": "移除账号",
   "remove_account_tips": "你确定要移除你的账号吗?",
+  "book": "预定",
+  "facility_active": "可用",
+  "deposit": "押金",
+  "view": "查看",
+  "fee_paid": "已支付",
+  "booked_by_someone": "{name} 已预定",
+  "deposit_amount": "押金总金额",
+  "deposit_hold": "当前押金",
+  "deposit_desc": "押金详情描述:",
+  "deposit_desc_txt": "押金是使用社区服务的一部分,在使用服务后,它将自动发放到您相应的银行卡上。请仔细检查",
+  "delete": "删除",
+  "deposit_released": "押金已退还",
   "other": "其他"
 }

+ 1 - 0
packages/cs_resources/pubspec.yaml

@@ -32,6 +32,7 @@ flutter:
     - assets/community/
     - assets/main/
     - assets/profile/
+    - assets/facility/
 
 
 flutter_intl:

+ 1 - 1
packages/cs_widgets/lib/shatter/custom_radio_check.dart

@@ -87,7 +87,7 @@ class _CustomRadioCheckState extends State<CustomRadioCheck> {
     return Row(
       mainAxisSize: MainAxisSize.min,
       children: <Widget>[
-        MyAssetImage(path, width: 22, height: 22),
+        MyAssetImage(path, width: 25, height: 25),
         const SizedBox(width: 10),
         MyTextView(
           text,