4 Комити bc18818557 ... 0c0ce0ba33

Аутор SHA1 Порука Датум
  liukai 0c0ce0ba33 Merge remote-tracking branch 'origin/dev' into dev пре 1 недеља
  liukai 7c4a5de683 facility 的列表详情 пре 1 недеља
  liukai f1bd8c0ffa Facility的首页一级页面 пре 1 недеља
  liukai a7eb00e316 我的房产的删除弹窗与页面完善 пре 1 недеља
70 измењених фајлова са 2674 додато и 85 уклоњено
  1. 5 0
      packages/cpt_auth/lib/router/component/auth_component_service.dart
  2. 308 0
      packages/cpt_facility/lib/modules/detail/facility_detail_page.dart
  3. 3 0
      packages/cpt_facility/lib/modules/detail/facility_detail_state.dart
  4. 13 0
      packages/cpt_facility/lib/modules/detail/facility_detail_view_model.dart
  5. 27 0
      packages/cpt_facility/lib/modules/detail/facility_detail_view_model.g.dart
  6. 57 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_screen.dart
  7. 31 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_state.dart
  8. 130 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_view_model.dart
  9. 27 0
      packages/cpt_facility/lib/modules/facility/active/facility_active_view_model.g.dart
  10. 136 0
      packages/cpt_facility/lib/modules/facility/active/item_facility_active.dart
  11. 55 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_screen.dart
  12. 31 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_state.dart
  13. 130 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_view_model.dart
  14. 27 0
      packages/cpt_facility/lib/modules/facility/book/facility_book_view_model.g.dart
  15. 48 0
      packages/cpt_facility/lib/modules/facility/book/item_facility_book.dart
  16. 147 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_screen.dart
  17. 31 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_state.dart
  18. 125 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_view_model.dart
  19. 27 0
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_view_model.g.dart
  20. 55 0
      packages/cpt_facility/lib/modules/facility/deposit/item_facility_deposit.dart
  21. 156 0
      packages/cpt_facility/lib/modules/facility/facility_page.dart
  22. 0 0
      packages/cpt_facility/lib/modules/facility/facility_view_model.dart
  23. 0 0
      packages/cpt_facility/lib/modules/facility/facility_view_model.g.dart
  24. 56 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_screen.dart
  25. 31 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_state.dart
  26. 130 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_view_model.dart
  27. 27 0
      packages/cpt_facility/lib/modules/facility/history/facility_history_view_model.g.dart
  28. 148 0
      packages/cpt_facility/lib/modules/facility/history/item_facility_history.dart
  29. 0 34
      packages/cpt_facility/lib/modules/facility/page/facility_page.dart
  30. 1 1
      packages/cpt_facility/lib/router/component/facility_component_service.dart
  31. 19 5
      packages/cpt_facility/lib/router/page/facility_page_router.dart
  32. 101 1
      packages/cpt_facility/lib/router/page/facility_page_router.gr.dart
  33. 0 1
      packages/cpt_main/lib/modules/home/latest_news/latest_news_page.dart
  34. 133 0
      packages/cpt_profile/lib/modules/my_estate/dialog/remove_account_dialog.dart
  35. 3 0
      packages/cpt_profile/lib/modules/my_estate/item_estate.dart
  36. 56 30
      packages/cpt_profile/lib/modules/my_estate/my_estate_page.dart
  37. 11 0
      packages/cpt_profile/lib/modules/my_estate/my_estate_view_model.dart
  38. BIN
      packages/cs_resources/assets/base_service/radio_checked.webp
  39. BIN
      packages/cs_resources/assets/base_service/radio_uncheck.webp
  40. BIN
      packages/cs_resources/assets/facility/active_icon.webp
  41. BIN
      packages/cs_resources/assets/facility/add_card_american.webp
  42. BIN
      packages/cs_resources/assets/facility/add_card_master.webp
  43. BIN
      packages/cs_resources/assets/facility/add_card_name.webp
  44. BIN
      packages/cs_resources/assets/facility/add_card_num.webp
  45. BIN
      packages/cs_resources/assets/facility/add_card_visa.webp
  46. BIN
      packages/cs_resources/assets/facility/book_icon.webp
  47. BIN
      packages/cs_resources/assets/facility/calendar_icon.webp
  48. BIN
      packages/cs_resources/assets/facility/confirm_date_icon.webp
  49. BIN
      packages/cs_resources/assets/facility/confirm_deposit_icon.webp
  50. BIN
      packages/cs_resources/assets/facility/confirm_ecard_icon.webp
  51. BIN
      packages/cs_resources/assets/facility/confirm_facility_icon.webp
  52. BIN
      packages/cs_resources/assets/facility/confirm_payment_icon.webp
  53. BIN
      packages/cs_resources/assets/facility/deposit_icon.webp
  54. BIN
      packages/cs_resources/assets/facility/history_icon.webp
  55. BIN
      packages/cs_resources/assets/facility/payment_success_icon.webp
  56. BIN
      packages/cs_resources/assets/facility/question_icon.webp
  57. BIN
      packages/cs_resources/assets/facility/title_location_icon.webp
  58. BIN
      packages/cs_resources/assets/profile/remove_account_img.webp
  59. 19 0
      packages/cs_resources/lib/generated/assets.dart
  60. 35 4
      packages/cs_resources/lib/generated/intl/messages_en.dart
  61. 29 4
      packages/cs_resources/lib/generated/intl/messages_zh_CN.dart
  62. 29 4
      packages/cs_resources/lib/generated/intl/messages_zh_HK.dart
  63. 210 0
      packages/cs_resources/lib/generated/l10n.dart
  64. 21 0
      packages/cs_resources/lib/l10n/intl_en.arb
  65. 21 0
      packages/cs_resources/lib/l10n/intl_zh_CN.arb
  66. 21 0
      packages/cs_resources/lib/l10n/intl_zh_HK.arb
  67. 1 0
      packages/cs_resources/pubspec.yaml
  68. 1 0
      packages/cs_router/lib/componentRouter/auth_service.dart
  69. 1 0
      packages/cs_router/lib/path/router_path.dart
  70. 1 1
      packages/cs_widgets/lib/shatter/custom_radio_check.dart

+ 5 - 0
packages/cpt_auth/lib/router/component/auth_component_service.dart

@@ -25,4 +25,9 @@ class AuthComponentService extends AuthService {
   void startResetPasswordPage() {
     SelectEstatePage.startInstance();
   }
+
+  @override
+  void startSelectEstatePage() {
+    SelectEstatePage.startInstance();
+  }
 }

+ 308 - 0
packages/cpt_facility/lib/modules/detail/facility_detail_page.dart

@@ -0,0 +1,308 @@
+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_detail_view_model.dart';
+
+@RoutePage()
+class FacilityDetailPage extends HookConsumerWidget {
+  const FacilityDetailPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(const FacilityDetailPageRoute());
+    } else {
+      appRouter.push(const FacilityDetailPageRoute());
+    }
+  }
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.watch(facilityDetailViewModelProvider.notifier);
+    final state = ref.watch(facilityDetailViewModelProvider);
+
+    return Scaffold(
+      appBar: MyAppBar.appBar(context, "Kids party room", backgroundColor: context.appColors.whiteBG),
+      backgroundColor: context.appColors.backgroundDark,
+      body: SingleChildScrollView(
+        scrollDirection: Axis.vertical,
+        physics: const BouncingScrollPhysics(),
+        child: Column(
+          mainAxisSize: MainAxisSize.max,
+          crossAxisAlignment: CrossAxisAlignment.center,
+          children: [
+            //顶部的信息展示
+            _buildHeaderWidget(context, ref),
+
+            //预定
+            _buildDetailItem(
+              context,
+              ref,
+              S.current.book,
+              Assets.facilityConfirmDateIcon,
+              28.5,
+              29,
+              "Tue,24 Oct 2023",
+              null,
+              "05:00 PM-10:00 PM",
+              null,
+            ),
+
+            //设施
+            _buildDetailItem(
+              context,
+              ref,
+              S.current.facility,
+              Assets.facilityConfirmFacilityIcon,
+              25.0,
+              30.5,
+              "Kids party room",
+              null,
+              "Blue room",
+              null,
+            ),
+
+            //付款
+            _buildDetailItem(
+              context,
+              ref,
+              S.current.payment,
+              Assets.facilityConfirmPaymentIcon,
+              27.0,
+              22.0,
+              "Booking Fee",
+              "10.80",
+              S.current.total,
+              "\$10.80",
+            ),
+
+            // 押金
+            _buildDetailItem(
+              context,
+              ref,
+              S.current.deposit,
+              Assets.facilityConfirmDepositIcon,
+              28.0,
+              26.5,
+              "On Hold",
+              "\$100.00",
+              null,
+              null,
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildHeaderWidget(BuildContext context, WidgetRef ref) {
+    return Container(
+      width: double.infinity,
+      color: context.appColors.whiteBG,
+      margin: const EdgeInsets.only(bottom: 7.5),
+      child: Column(
+        children: [
+          //成功图片
+          const MyAssetImage(
+            Assets.facilityPaymentSuccessIcon,
+            width: 54,
+            height: 54,
+          ).marginOnly(top: 11, bottom: 13),
+
+          //支付成功
+          MyTextView(
+            S.current.booking_successful,
+            fontSize: 18,
+            marginBottom: 3,
+            isFontMedium: true,
+            textColor: context.appColors.textPrimary,
+          ),
+          MyTextView(
+            S.current.have_fun,
+            fontSize: 18,
+            marginBottom: 19,
+            isFontMedium: true,
+            textColor: context.appColors.textPrimary,
+          ),
+
+          //支付金额
+          MyTextView(
+            S.current.fee_paid,
+            fontSize: 15,
+            isFontRegular: true,
+            textColor: context.appColors.textBlack,
+          ),
+          MyTextView(
+            "\$10.80",
+            fontSize: 15,
+            isFontRegular: true,
+            textColor: context.appColors.textPrimary,
+          ),
+
+          //付款类型与时间
+          Row(
+            mainAxisSize: MainAxisSize.min,
+            children: [
+              MyTextView(
+                "Master card ending",
+                fontSize: 15,
+                isFontRegular: true,
+                textColor: context.appColors.textBlack,
+              ),
+              MyTextView(
+                "9423",
+                fontSize: 15,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+            ],
+          ).marginOnly(top: 12),
+
+          Row(
+            mainAxisSize: MainAxisSize.min,
+            children: [
+              MyTextView(
+                S.current.paid_on,
+                fontSize: 15,
+                isFontRegular: true,
+                textColor: context.appColors.textBlack,
+              ),
+              MyTextView(
+                "24 Oct 2023 at 02:19 PM",
+                fontSize: 15,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+            ],
+          ).marginOnly(top: 5),
+
+          Divider(height: 0.5, color: context.appColors.dividerDefault).marginOnly(top: 14, bottom: 14),
+
+          //押金
+          MyTextView(
+            S.current.deposit_released_caps,
+            fontSize: 15,
+            isFontRegular: true,
+            textColor: context.appColors.textBlack,
+          ),
+          MyTextView(
+            "\$100.00",
+            fontSize: 15,
+            marginTop: 5,
+            isFontRegular: true,
+            textColor: context.appColors.textPrimary,
+          ),
+
+          const SizedBox(height: 23),
+        ],
+      ),
+    );
+  }
+
+  //Item的列表
+  Widget _buildDetailItem(
+    BuildContext context,
+    WidgetRef ref,
+    String title,
+    String iconPath,
+    double iconWidth,
+    double iconHeight,
+    String line1Txt,
+    String? line1Content,
+    String? line2Txt,
+    String? line2Content,
+  ) {
+    return Container(
+      width: double.infinity,
+      height: 92.5,
+      padding: const EdgeInsets.only(left: 20, right: 20),
+      margin: const EdgeInsets.only(left: 15, right: 15, top: 7.5, bottom: 7.5),
+      decoration: BoxDecoration(
+        color: context.appColors.whiteBG,
+        borderRadius: BorderRadius.circular(6.0), // 圆角
+        boxShadow: [
+          BoxShadow(
+            color: const Color(0xFFB8BFD9).withOpacity(0.3), // 阴影颜色
+            offset: const Offset(0, 3), // 阴影的偏移量
+            blurRadius: 8.0, // 模糊半径
+            spreadRadius: 3.0, // 扩散半径
+          ),
+        ],
+      ),
+      child: Center(
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          mainAxisSize: MainAxisSize.min,
+          children: [
+            MyTextView(
+              title,
+              textColor: context.appColors.textBlack,
+              fontSize: 16,
+              marginBottom: 7,
+              isFontMedium: true,
+            ),
+            Row(
+              mainAxisSize: MainAxisSize.max,
+              children: [
+                MyAssetImage(
+                  iconPath,
+                  width: iconWidth,
+                  height: iconHeight,
+                ).marginOnly(right: 15),
+                Column(
+                  mainAxisSize: MainAxisSize.min,
+                  children: [
+                    Row(
+                      children: [
+                        MyTextView(
+                          line1Txt,
+                          textColor: context.appColors.textBlack,
+                          fontSize: 14,
+                          isFontRegular: true,
+                        ).expanded(),
+                        MyTextView(
+                          line1Content ?? "",
+                          textColor: context.appColors.textBlack,
+                          fontSize: 14,
+                          isFontRegular: true,
+                        ),
+                      ],
+                    ),
+                    Visibility(
+                      visible: line2Txt != null,
+                      child: Row(
+                        children: [
+                          MyTextView(
+                            line2Txt ?? "",
+                            textColor: context.appColors.textBlack,
+                            fontSize: 14,
+                            isFontRegular: true,
+                          ).expanded(),
+                          MyTextView(
+                            line2Content ?? "",
+                            textColor: context.appColors.textBlack,
+                            fontSize: 14,
+                            isFontRegular: true,
+                          ),
+                        ],
+                      ).marginOnly(top: 6),
+                    ),
+                  ],
+                ).expanded(),
+              ],
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+}

+ 3 - 0
packages/cpt_facility/lib/modules/detail/facility_detail_state.dart

@@ -0,0 +1,3 @@
+class FacilityDetailState{
+
+}

+ 13 - 0
packages/cpt_facility/lib/modules/detail/facility_detail_view_model.dart

@@ -0,0 +1,13 @@
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+
+import 'facility_detail_state.dart';
+
+part 'facility_detail_view_model.g.dart';
+
+@riverpod
+class FacilityDetailViewModel extends _$FacilityDetailViewModel{
+  @override
+  FacilityDetailState build() {
+    return FacilityDetailState();
+  }
+}

+ 27 - 0
packages/cpt_facility/lib/modules/detail/facility_detail_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'facility_detail_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$facilityDetailViewModelHash() =>
+    r'fc7e226b3c796f8790a9715a13656c06d1b98b20';
+
+/// See also [FacilityDetailViewModel].
+@ProviderFor(FacilityDetailViewModel)
+final facilityDetailViewModelProvider = AutoDisposeNotifierProvider<
+    FacilityDetailViewModel, FacilityDetailState>.internal(
+  FacilityDetailViewModel.new,
+  name: r'facilityDetailViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$facilityDetailViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$FacilityDetailViewModel = AutoDisposeNotifier<FacilityDetailState>;
+// 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

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

@@ -0,0 +1,57 @@
+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 '../../detail/facility_detail_page.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]).onTap((){
+                      FacilityDetailPage.startInstance(context: context);
+                    });
+                  },
+                  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(),
+        ],
+      ),
+    );
+  }
+}

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

@@ -0,0 +1,147 @@
+import 'package:auto_route/auto_route.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 '../../detail/facility_detail_page.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]).onTap((){
+                  FacilityDetailPage.startInstance(context: context);
+                });
+              },
+              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: const EdgeInsets.all(26),
+              decoration:  BoxDecoration(
+                color: context.appColors.whiteSecondBG,
+                borderRadius: const BorderRadius.only(
+                  bottomLeft: Radius.circular(5),
+                  bottomRight: Radius.circular(5),
+                ),
+              ),
+              child: MyTextView(
+                "\$ 200.00",
+                fontSize: 30,
+                isFontBold: true,
+                textAlign: TextAlign.center,
+                textColor: context.appColors.textBlack,
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  //底部的说明文本脚布局
+  _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'2b35e0ffd671d3ab67217b51dc076475f7e2a00a';
+
+/// 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


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

@@ -0,0 +1,56 @@
+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 '../../detail/facility_detail_page.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]).onTap((){
+                      FacilityDetailPage.startInstance(context: context);
+                    });
+                  },
+                  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';
 

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

@@ -3,8 +3,12 @@ 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';
+import '../../modules/detail/facility_detail_page.dart';
 
 part 'facility_page_router.gr.dart';
 
@@ -15,7 +19,17 @@ 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'),
+          ],
+        ),
+        CustomRoute(page: FacilityDetailPageRoute.page, path: RouterPath.facilityDetail, transitionsBuilder: applySlideTransition)
+      ];
 }

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

@@ -15,16 +15,116 @@ 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(),
+      );
+    },
+    FacilityDetailPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: const FacilityDetailPage(),
+      );
+    },
+    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
+/// [FacilityDetailPage]
+class FacilityDetailPageRoute extends PageRouteInfo<void> {
+  const FacilityDetailPageRoute({List<PageRouteInfo>? children})
+      : super(
+          FacilityDetailPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'FacilityDetailPageRoute';
+
+  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,

+ 133 - 0
packages/cpt_profile/lib/modules/my_estate/dialog/remove_account_dialog.dart

@@ -0,0 +1,133 @@
+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:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/widget_export.dart';
+
+class RemoveAccountDialog extends StatelessWidget {
+  VoidCallback confirmAction;
+
+  RemoveAccountDialog({
+    required this.confirmAction,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.center,
+      mainAxisAlignment: MainAxisAlignment.center,
+      children: [
+        Container(
+          width: double.infinity,
+          height: 55,
+          decoration: BoxDecoration(
+            color: context.appColors.btnBgDefault,
+            borderRadius: const BorderRadius.only(
+              topRight: Radius.circular(15),
+              topLeft: Radius.circular(15),
+            ),
+          ),
+          child: Row(
+            children: [
+              const SizedBox(width: 45),
+              MyTextView(
+                S.current.remove_account,
+                fontSize: 18,
+                textAlign: TextAlign.center,
+                isFontMedium: true,
+                textColor: Colors.white,
+              ).expanded(),
+              const MyAssetImage(
+                Assets.baseServiceDialogDeleteIcon,
+                width: 25,
+                height: 25.5,
+              ).onTap(() {
+                onCancel();
+              }, padding: 10)
+            ],
+          ),
+        ),
+        Container(
+          width: double.infinity,
+          padding: const EdgeInsets.only(top: 22),
+          decoration: BoxDecoration(
+            color: context.appColors.whiteSecondBG,
+            borderRadius: const BorderRadius.only(
+              bottomLeft: Radius.circular(15),
+              bottomRight: Radius.circular(15),
+            ),
+          ),
+          child: Column(
+            children: [
+              const MyAssetImage(Assets.profileRemoveAccountImg, width: 272, height: 180),
+
+              MyTextView(
+                S.current.remove_account_tips,
+                textAlign: TextAlign.center,
+                textColor: context.appColors.textBlack,
+                marginTop: 24,
+                paddingLeft: 30,
+                paddingRight: 30,
+                fontSize: 17,
+                isFontMedium: true,
+              ),
+
+              Row(
+                children: [
+                  const SizedBox(width: 18),
+                  Expanded(
+                      flex: 1,
+                      child: InkWell(
+                        onTap: () {
+                          onCancel();
+                        },
+                        child: MyTextView(
+                          S.current.no,
+                          fontSize: 16,
+                          isFontMedium: true,
+                          paddingTop: 13,
+                          marginRight: 15,
+                          paddingBottom: 13,
+                          textAlign: TextAlign.center,
+                          textColor: Colors.white,
+                          backgroundColor: context.appColors.orangeBG,
+                          cornerRadius: 7,
+                        ),
+                      )),
+                  Expanded(
+                      flex: 1,
+                      child: InkWell(
+                        onTap: () async {
+                          onCancel();
+                          confirmAction();
+                        },
+                        child: MyTextView(
+                          S.current.yes,
+                          fontSize: 16,
+                          paddingTop: 13,
+                          paddingBottom: 13,
+                          isFontMedium: true,
+                          textAlign: TextAlign.center,
+                          textColor: Colors.white,
+                          backgroundColor: context.appColors.btnBgDefault,
+                          cornerRadius: 7,
+                        ),
+                      )),
+                  const SizedBox(width: 18),
+                ],
+              ).marginOnly(bottom: 30, top: 28),
+            ],
+          ),
+        ),
+      ],
+    ).constrained(width: 340);
+  }
+
+//取消弹框
+  void onCancel() async {
+    SmartDialog.dismiss();
+  }
+}

+ 3 - 0
packages/cpt_profile/lib/modules/my_estate/item_estate.dart

@@ -8,10 +8,12 @@ import 'package:widgets/my_text_view.dart';
 class EstateItem extends StatelessWidget {
   final int childIndex;  //组内的索引
   final String item;
+  final VoidCallback deleteAction;
 
   const EstateItem({
     required this.childIndex,
     required this.item,
+    required this.deleteAction,
   });
 
   @override
@@ -53,6 +55,7 @@ class EstateItem extends StatelessWidget {
                         S.current.remove,
                         marginRight: 15,
                         fontSize: 16,
+                        onClick: deleteAction,
                         isFontMedium: true,
                         textColor: context.appColors.deleteRed,
                       ),

+ 56 - 30
packages/cpt_profile/lib/modules/my_estate/my_estate_page.dart

@@ -1,12 +1,16 @@
+import 'package:cpt_profile/modules/change_mobile/change_mobile_page.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:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:router/componentRouter/component_service_manager.dart';
 import 'package:router/ext/auto_router_extensions.dart';
+import 'package:widgets/ext/ex_widget.dart';
 import 'package:widgets/load_state_layout.dart';
 import 'package:widgets/my_appbar.dart';
+import 'package:widgets/my_button.dart';
 import 'package:widgets/widget_export.dart';
 import '../../router/page/profile_page_router.dart';
 import 'item_estate.dart';
@@ -46,45 +50,67 @@ class MyEstatePage extends HookConsumerWidget {
         backgroundColor: context.appColors.whiteBG,
       ),
       backgroundColor: context.appColors.backgroundDark,
-      body: SizedBox(
-        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();
+      body: Column(
+        mainAxisSize: MainAxisSize.max,
+        children: [
+          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 StickyHeader(
+                      header: EstateItemHeader(state.datas[index].groupId),
+                      content: Column(
+                        children: _buildGroup(state.datas[index].groupDatas!, index,viewModel),
+                      ),
+                    );
+                  },
+                  childCount: state.datas.length,
+                ))
+              ],
+            ),
+          ).expanded(),
+          MyButton(
+            onPressed: () {
+              ComponentServiceManager().authService.startSelectEstatePage();
             },
-            successSliverWidget: [
-              SliverList(
-                  delegate: SliverChildBuilderDelegate(
-                (context, index) {
-                  return StickyHeader(
-                    header: EstateItemHeader(state.datas[index].groupId),
-                    content: Column(
-                      children: _buildGroup(state.datas[index].groupDatas!, index),
-                    ),
-                  );
-                },
-                childCount: state.datas.length,
-              ))
-            ],
-          ),
-        ),
+            text: S.current.add,
+            textColor: Colors.white,
+            backgroundColor: context.appColors.btnBgDefault,
+            fontWeight: FontWeight.w500,
+            type: ClickType.throttle,
+            fontSize: 16,
+            minHeight: 50,
+            radius: 0,
+          )
+        ],
       ),
     );
   }
 
   //当前组内的子数据
-  List<Widget> _buildGroup(List<String> list, int index) {
+  List<Widget> _buildGroup(List<String> list, int index, MyEstateViewModel viewModel) {
     return list
         .asMap()
         .map((childIndex, item) {
-          return MapEntry(childIndex, EstateItem(item: item, childIndex: childIndex));
+          return MapEntry(
+              childIndex,
+              EstateItem(
+                item: item,
+                childIndex: childIndex,
+                deleteAction: () {
+                  viewModel.showRemoveEstateDialog();
+                },
+              ));
         })
         .values
         .toList();

+ 11 - 0
packages/cpt_profile/lib/modules/my_estate/my_estate_view_model.dart

@@ -1,4 +1,7 @@
+import 'package:cpt_profile/modules/my_estate/dialog/remove_account_dialog.dart';
 import 'package:cpt_profile/modules/my_estate/estate_group_data.dart';
+import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 import 'package:widgets/load_state_layout.dart';
 import 'package:widgets/widget_export.dart';
@@ -147,5 +150,13 @@ class MyEstateViewModel extends _$MyEstateViewModel {
 //   }
 // }
 
+  /// 展示移除账号的提示弹窗
+  void showRemoveEstateDialog() {
+    DialogEngine.show(widget: RemoveAccountDialog(
+      confirmAction: () {
+        ToastEngine.show("确定去删除");
+      },
+    ));
+  }
 
 }

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


BIN
packages/cs_resources/assets/profile/remove_account_img.webp


+ 19 - 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';
@@ -108,6 +126,7 @@ class Assets {
   static const String profileEditProfileAvatarBottom = 'assets/profile/edit_profile_avatar_bottom.webp';
   static const String profileEditProfileAvatarDefault = 'assets/profile/edit_profile_avatar_default.webp';
   static const String profileEditXuLine = 'assets/profile/edit_xu_line.webp';
+  static const String profileRemoveAccountImg = 'assets/profile/remove_account_img.webp';
   static const String propertyAdvicePic = 'assets/property/advice_pic.webp';
   static const String propertyApproval = 'assets/property/approval.webp';
   static const String propertyCollection = 'assets/property/collection.webp';

+ 35 - 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,15 @@ 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,
+        "booking_fee": MessageLookupByLibrary.simpleMessage("Booking Fee"),
+        "booking_successful":
+            MessageLookupByLibrary.simpleMessage("BOOKING SUCCESSFUL"),
         "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 +68,19 @@ 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"),
+        "deposit_released_caps":
+            MessageLookupByLibrary.simpleMessage("DEPOSIT RELEASED"),
         "describe_your_feedback":
             MessageLookupByLibrary.simpleMessage("Describe Your FeedBack"),
         "did_not_receive":
@@ -75,6 +95,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"),
@@ -94,6 +116,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "get_code": MessageLookupByLibrary.simpleMessage("Get Code"),
         "get_started":
             MessageLookupByLibrary.simpleMessage("let\'s get started"),
+        "have_fun": MessageLookupByLibrary.simpleMessage("Have Fun!"),
         "history": MessageLookupByLibrary.simpleMessage("History"),
         "home": MessageLookupByLibrary.simpleMessage("Home"),
         "household": MessageLookupByLibrary.simpleMessage("Household"),
@@ -130,6 +153,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "nric_fin": MessageLookupByLibrary.simpleMessage("NRIC/FIN"),
         "old_mobile_phone":
             MessageLookupByLibrary.simpleMessage("Old Mobile Phone"),
+        "on_hold": MessageLookupByLibrary.simpleMessage("On Hold"),
         "or": MessageLookupByLibrary.simpleMessage("or"),
         "other": MessageLookupByLibrary.simpleMessage("Other"),
         "owner": MessageLookupByLibrary.simpleMessage("Owner"),
@@ -145,6 +169,7 @@ class MessageLookup extends MessageLookupByLibrary {
             "I am the shareholder of the company that owns the unit"),
         "owners_desc5": MessageLookupByLibrary.simpleMessage(
             "The Management will verify your application accordingly"),
+        "paid_on": MessageLookupByLibrary.simpleMessage("paid on"),
         "password": MessageLookupByLibrary.simpleMessage("Password"),
         "password_format":
             MessageLookupByLibrary.simpleMessage("8 Digits Alphanumeric"),
@@ -163,6 +188,10 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Published Successfully"),
         "rate_us": MessageLookupByLibrary.simpleMessage("Rate Us"),
         "remove": MessageLookupByLibrary.simpleMessage("Remove"),
+        "remove_account":
+            MessageLookupByLibrary.simpleMessage("Remove Account"),
+        "remove_account_tips": MessageLookupByLibrary.simpleMessage(
+            "Are you sure you want to remove your account?"),
         "resend_code": MessageLookupByLibrary.simpleMessage("Resend Code"),
         "reset_password":
             MessageLookupByLibrary.simpleMessage("Reset Password"),
@@ -196,6 +225,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "terms_of_service":
             MessageLookupByLibrary.simpleMessage("Terms of Service"),
         "title": MessageLookupByLibrary.simpleMessage("Title"),
+        "total": MessageLookupByLibrary.simpleMessage("Total"),
         "tries_left": MessageLookupByLibrary.simpleMessage("Tries Left"),
         "type_here": MessageLookupByLibrary.simpleMessage("Type Here"),
         "unit_number": MessageLookupByLibrary.simpleMessage("Unit Number"),
@@ -217,6 +247,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(
@@ -226,7 +257,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":

+ 29 - 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,13 @@ 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,
+        "booking_fee": MessageLookupByLibrary.simpleMessage("预定费用"),
+        "booking_successful": MessageLookupByLibrary.simpleMessage("预定成功"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
-        "characters": m0,
+        "characters": m1,
         "choose_category": MessageLookupByLibrary.simpleMessage("选择类型"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
@@ -53,6 +59,15 @@ 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("押金已退还"),
+        "deposit_released_caps": MessageLookupByLibrary.simpleMessage("押金已退还"),
         "describe_your_feedback":
             MessageLookupByLibrary.simpleMessage("描述您的反馈"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
@@ -65,6 +80,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("帮助我们保持您的房产美丽"),
@@ -79,6 +96,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "full_name": MessageLookupByLibrary.simpleMessage("全名"),
         "get_code": MessageLookupByLibrary.simpleMessage("获取验证码"),
         "get_started": MessageLookupByLibrary.simpleMessage("让我们开始吧"),
+        "have_fun": MessageLookupByLibrary.simpleMessage("祝您愉快!"),
         "history": MessageLookupByLibrary.simpleMessage("历史记录"),
         "home": MessageLookupByLibrary.simpleMessage("首页"),
         "household": MessageLookupByLibrary.simpleMessage("家庭"),
@@ -109,6 +127,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "notification": MessageLookupByLibrary.simpleMessage("通知"),
         "nric_fin": MessageLookupByLibrary.simpleMessage("身份证/签证"),
         "old_mobile_phone": MessageLookupByLibrary.simpleMessage("旧的手机号码"),
+        "on_hold": MessageLookupByLibrary.simpleMessage("持有"),
         "or": MessageLookupByLibrary.simpleMessage("或者"),
         "other": MessageLookupByLibrary.simpleMessage("其他"),
         "owner": MessageLookupByLibrary.simpleMessage("业主"),
@@ -119,6 +138,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "owners_desc3": MessageLookupByLibrary.simpleMessage("我和名字的主人住在同一个家庭"),
         "owners_desc4": MessageLookupByLibrary.simpleMessage("我是拥有该单元的公司的股东"),
         "owners_desc5": MessageLookupByLibrary.simpleMessage("管理员将相应地验证您的申请"),
+        "paid_on": MessageLookupByLibrary.simpleMessage("付款时间"),
         "password": MessageLookupByLibrary.simpleMessage("密码"),
         "password_format": MessageLookupByLibrary.simpleMessage("8位数字或字母"),
         "payment": MessageLookupByLibrary.simpleMessage("支付"),
@@ -133,6 +153,9 @@ class MessageLookup extends MessageLookupByLibrary {
         "published_successfully": MessageLookupByLibrary.simpleMessage("发布成功"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "remove": MessageLookupByLibrary.simpleMessage("移除"),
+        "remove_account": MessageLookupByLibrary.simpleMessage("移除账号"),
+        "remove_account_tips":
+            MessageLookupByLibrary.simpleMessage("你确定要移除你的账号吗?"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "rewards": MessageLookupByLibrary.simpleMessage("奖励"),
@@ -159,6 +182,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
         "title": MessageLookupByLibrary.simpleMessage("标题"),
+        "total": MessageLookupByLibrary.simpleMessage("共计"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
         "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
         "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
@@ -176,6 +200,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(
@@ -184,7 +209,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("是"),

+ 29 - 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,13 @@ 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,
+        "booking_fee": MessageLookupByLibrary.simpleMessage("预定费用"),
+        "booking_successful": MessageLookupByLibrary.simpleMessage("预定成功"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
-        "characters": m0,
+        "characters": m1,
         "choose_category": MessageLookupByLibrary.simpleMessage("选择类型"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
@@ -53,6 +59,15 @@ 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("押金已退还"),
+        "deposit_released_caps": MessageLookupByLibrary.simpleMessage("押金已退还"),
         "describe_your_feedback":
             MessageLookupByLibrary.simpleMessage("描述您的反馈"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
@@ -65,6 +80,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("帮助我们保持您的房产美丽"),
@@ -79,6 +96,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "full_name": MessageLookupByLibrary.simpleMessage("全名"),
         "get_code": MessageLookupByLibrary.simpleMessage("获取验证码"),
         "get_started": MessageLookupByLibrary.simpleMessage("让我们开始吧"),
+        "have_fun": MessageLookupByLibrary.simpleMessage("祝您愉快!"),
         "history": MessageLookupByLibrary.simpleMessage("历史记录"),
         "home": MessageLookupByLibrary.simpleMessage("首页"),
         "household": MessageLookupByLibrary.simpleMessage("家庭"),
@@ -109,8 +127,10 @@ class MessageLookup extends MessageLookupByLibrary {
         "notification": MessageLookupByLibrary.simpleMessage("通知"),
         "nric_fin": MessageLookupByLibrary.simpleMessage("身份证/签证"),
         "old_mobile_phone": MessageLookupByLibrary.simpleMessage("旧的手机号码"),
+        "on_hold": MessageLookupByLibrary.simpleMessage("持有"),
         "or": MessageLookupByLibrary.simpleMessage("或者"),
         "other": MessageLookupByLibrary.simpleMessage("其他"),
+        "paid_on": MessageLookupByLibrary.simpleMessage("付款时间"),
         "password": MessageLookupByLibrary.simpleMessage("密码"),
         "password_format": MessageLookupByLibrary.simpleMessage("8位数字或字母"),
         "payment": MessageLookupByLibrary.simpleMessage("支付"),
@@ -125,6 +145,9 @@ class MessageLookup extends MessageLookupByLibrary {
         "published_successfully": MessageLookupByLibrary.simpleMessage("发布成功"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "remove": MessageLookupByLibrary.simpleMessage("移除"),
+        "remove_account": MessageLookupByLibrary.simpleMessage("移除账号"),
+        "remove_account_tips":
+            MessageLookupByLibrary.simpleMessage("你确定要移除你的账号吗?"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "rewards": MessageLookupByLibrary.simpleMessage("獎勵"),
@@ -146,6 +169,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
         "title": MessageLookupByLibrary.simpleMessage("标题"),
+        "total": MessageLookupByLibrary.simpleMessage("共计"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
         "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
         "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
@@ -163,6 +187,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(
@@ -171,7 +196,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":

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

@@ -1470,6 +1470,216 @@ class S {
     );
   }
 
+  /// `Remove Account`
+  String get remove_account {
+    return Intl.message(
+      'Remove Account',
+      name: 'remove_account',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Are you sure you want to remove your account?`
+  String get remove_account_tips {
+    return Intl.message(
+      'Are you sure you want to remove your account?',
+      name: 'remove_account_tips',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `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: [],
+    );
+  }
+
+  /// `BOOKING SUCCESSFUL`
+  String get booking_successful {
+    return Intl.message(
+      'BOOKING SUCCESSFUL',
+      name: 'booking_successful',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Have Fun!`
+  String get have_fun {
+    return Intl.message(
+      'Have Fun!',
+      name: 'have_fun',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `paid on`
+  String get paid_on {
+    return Intl.message(
+      'paid on',
+      name: 'paid_on',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `DEPOSIT RELEASED`
+  String get deposit_released_caps {
+    return Intl.message(
+      'DEPOSIT RELEASED',
+      name: 'deposit_released_caps',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Booking Fee`
+  String get booking_fee {
+    return Intl.message(
+      'Booking Fee',
+      name: 'booking_fee',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `On Hold`
+  String get on_hold {
+    return Intl.message(
+      'On Hold',
+      name: 'on_hold',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Total`
+  String get total {
+    return Intl.message(
+      'Total',
+      name: 'total',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Other`
   String get other {
     return Intl.message(

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

@@ -141,5 +141,26 @@
   "remove": "Remove",
   "add": "Add",
   "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",
+  "booking_successful": "BOOKING SUCCESSFUL",
+  "have_fun": "Have Fun!",
+  "paid_on": "paid on",
+  "deposit_released_caps": "DEPOSIT RELEASED",
+  "booking_fee": "Booking Fee",
+  "on_hold": "On Hold",
+  "total": "Total",
   "other": "Other"
 }

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

@@ -141,5 +141,26 @@
   "remove": "移除",
   "add": "添加",
   "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": "押金已退还",
+  "booking_successful": "预定成功",
+  "have_fun": "祝您愉快!",
+  "paid_on": "付款时间",
+  "deposit_released_caps": "押金已退还",
+  "booking_fee": "预定费用",
+  "on_hold": "持有",
+  "total": "共计",
   "other": "其他"
 }

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

@@ -127,5 +127,26 @@
   "remove": "移除",
   "add": "添加",
   "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": "押金已退还",
+  "booking_successful": "预定成功",
+  "have_fun": "祝您愉快!",
+  "paid_on": "付款时间",
+  "deposit_released_caps": "押金已退还",
+  "booking_fee": "预定费用",
+  "on_hold": "持有",
+  "total": "共计",
   "other": "其他"
 }

+ 1 - 0
packages/cs_resources/pubspec.yaml

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

+ 1 - 0
packages/cs_router/lib/componentRouter/auth_service.dart

@@ -7,4 +7,5 @@ abstract class AuthService {
 
   void startResetPasswordPage();
 
+  void startSelectEstatePage();
 }

+ 1 - 0
packages/cs_router/lib/path/router_path.dart

@@ -51,6 +51,7 @@ class RouterPath {
 
   //设施
   static const facility = '/facility';
+  static const facilityDetail = '/facility/detail';
 
   //表单
   static const form = '/form';

+ 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,