4 Commity bc18818557 ... 0c0ce0ba33

Autor SHA1 Správa Dátum
  liukai 0c0ce0ba33 Merge remote-tracking branch 'origin/dev' into dev 10 mesiacov pred
  liukai 7c4a5de683 facility 的列表详情 10 mesiacov pred
  liukai f1bd8c0ffa Facility的首页一级页面 10 mesiacov pred
  liukai a7eb00e316 我的房产的删除弹窗与页面完善 10 mesiacov pred
70 zmenil súbory, kde vykonal 2674 pridanie a 85 odobranie
  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,