瀏覽代碼

Merge branch 'dev' of http://git.wmzhubo.com/guadoutech/YYHome into dev

glglove 6 天之前
父節點
當前提交
9e109ba294
共有 52 個文件被更改,包括 2455 次插入62 次删除
  1. 1 1
      packages/cpt_facility/lib/modules/facility/active/item_facility_active.dart
  2. 2 2
      packages/cpt_facility/lib/modules/facility/deposit/facility_deposit_screen.dart
  3. 1 1
      packages/cpt_facility/lib/modules/facility/deposit/item_facility_deposit.dart
  4. 5 5
      packages/cpt_facility/lib/modules/facility/facility_page.dart
  5. 1 1
      packages/cpt_facility/lib/modules/facility/history/item_facility_history.dart
  6. 57 0
      packages/cpt_payment/lib/modules/payment/condo/active/condo_active_screen.dart
  7. 31 0
      packages/cpt_payment/lib/modules/payment/condo/active/condo_active_state.dart
  8. 130 0
      packages/cpt_payment/lib/modules/payment/condo/active/condo_active_view_model.dart
  9. 27 0
      packages/cpt_payment/lib/modules/payment/condo/active/condo_active_view_model.g.dart
  10. 135 0
      packages/cpt_payment/lib/modules/payment/condo/active/item_condo_active.dart
  11. 54 0
      packages/cpt_payment/lib/modules/payment/condo/history/condo_history_screen.dart
  12. 31 0
      packages/cpt_payment/lib/modules/payment/condo/history/condo_history_state.dart
  13. 130 0
      packages/cpt_payment/lib/modules/payment/condo/history/condo_history_view_model.dart
  14. 27 0
      packages/cpt_payment/lib/modules/payment/condo/history/condo_history_view_model.g.dart
  15. 136 0
      packages/cpt_payment/lib/modules/payment/condo/history/item_condo_active.dart
  16. 146 0
      packages/cpt_payment/lib/modules/payment/condo/history/item_condo_history.dart
  17. 56 0
      packages/cpt_payment/lib/modules/payment/condo/payment/condo_payment_screen.dart
  18. 31 0
      packages/cpt_payment/lib/modules/payment/condo/payment/condo_payment_state.dart
  19. 130 0
      packages/cpt_payment/lib/modules/payment/condo/payment/condo_payment_view_model.dart
  20. 27 0
      packages/cpt_payment/lib/modules/payment/condo/payment/condo_payment_view_model.g.dart
  21. 56 0
      packages/cpt_payment/lib/modules/payment/condo/payment/item_condo_payment.dart
  22. 205 0
      packages/cpt_payment/lib/modules/payment/info/info_screen.dart
  23. 86 0
      packages/cpt_payment/lib/modules/payment/manage/item_manage.dart
  24. 87 0
      packages/cpt_payment/lib/modules/payment/manage/manage_screen.dart
  25. 31 0
      packages/cpt_payment/lib/modules/payment/manage/manage_state.dart
  26. 169 0
      packages/cpt_payment/lib/modules/payment/manage/manage_view_model.dart
  27. 26 0
      packages/cpt_payment/lib/modules/payment/manage/manage_view_model.g.dart
  28. 0 44
      packages/cpt_payment/lib/modules/payment/page/payment_page.dart
  29. 209 0
      packages/cpt_payment/lib/modules/payment/payment_page.dart
  30. 0 0
      packages/cpt_payment/lib/modules/payment/payment_view_model.dart
  31. 0 0
      packages/cpt_payment/lib/modules/payment/payment_view_model.g.dart
  32. 2 1
      packages/cpt_payment/lib/router/component/payment_component_service.dart
  33. 20 6
      packages/cpt_payment/lib/router/page/payment_page_router.dart
  34. 101 1
      packages/cpt_payment/lib/router/page/payment_page_router.gr.dart
  35. 二進制
      packages/cs_resources/assets/payment/condo_icon.webp
  36. 二進制
      packages/cs_resources/assets/payment/info_business.webp
  37. 二進制
      packages/cs_resources/assets/payment/info_card_group.webp
  38. 二進制
      packages/cs_resources/assets/payment/info_cash_back.webp
  39. 二進制
      packages/cs_resources/assets/payment/info_icon.webp
  40. 二進制
      packages/cs_resources/assets/payment/info_rewards.webp
  41. 二進制
      packages/cs_resources/assets/payment/info_top_image.webp
  42. 二進制
      packages/cs_resources/assets/payment/manage_icon.webp
  43. 二進制
      packages/cs_resources/assets/payment/title_question_icon.webp
  44. 9 0
      packages/cs_resources/lib/generated/assets.dart
  45. 30 0
      packages/cs_resources/lib/generated/intl/messages_en.dart
  46. 22 0
      packages/cs_resources/lib/generated/intl/messages_zh_CN.dart
  47. 22 0
      packages/cs_resources/lib/generated/intl/messages_zh_HK.dart
  48. 170 0
      packages/cs_resources/lib/generated/l10n.dart
  49. 17 0
      packages/cs_resources/lib/l10n/intl_en.arb
  50. 17 0
      packages/cs_resources/lib/l10n/intl_zh_CN.arb
  51. 17 0
      packages/cs_resources/lib/l10n/intl_zh_HK.arb
  52. 1 0
      packages/cs_resources/pubspec.yaml

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

@@ -20,7 +20,7 @@ class FacilityActiveItem extends StatelessWidget {
     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),
+      padding: const EdgeInsets.only(left: 20, right: 15, top: 18, bottom: 23),
       decoration: BoxDecoration(
         color: context.appColors.whiteBG,
         borderRadius: BorderRadius.circular(6.0), // 圆角

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

@@ -103,8 +103,8 @@ class FacilityDepositScreen extends HookConsumerWidget {
               ),
               child: MyTextView(
                 "\$ 200.00",
-                fontSize: 30,
-                isFontBold: true,
+                fontSize: 29,
+                fontWeight: FontWeight.w600,
                 textAlign: TextAlign.center,
                 textColor: context.appColors.textBlack,
               ),

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

@@ -27,7 +27,7 @@ class FacilityDepositItem extends StatelessWidget {
         children: [
           MyTextView(
             "Function Room Orange Room",
-            fontSize: 16.5,
+            fontSize: 16,
             textColor: context.appColors.textPrimary,
             isFontMedium: true,
           ),

+ 5 - 5
packages/cpt_facility/lib/modules/facility/facility_page.dart

@@ -55,7 +55,7 @@ class FacilityPage extends HookConsumerWidget {
                 child: Row(
                   mainAxisAlignment: MainAxisAlignment.spaceAround,
                   children: [
-                    _buildFeedbackCategory(
+                    _buildCategory(
                       context,
                       Assets.facilityBookIcon,
                       48.5,
@@ -67,7 +67,7 @@ class FacilityPage extends HookConsumerWidget {
                         tabsRouter.setActiveIndex(0);
                       },
                     ),
-                    _buildFeedbackCategory(
+                    _buildCategory(
                       context,
                       Assets.facilityActiveIcon,
                       39,
@@ -79,7 +79,7 @@ class FacilityPage extends HookConsumerWidget {
                         tabsRouter.setActiveIndex(1);
                       },
                     ),
-                    _buildFeedbackCategory(
+                    _buildCategory(
                       context,
                       Assets.facilityDepositIcon,
                       35.5,
@@ -91,7 +91,7 @@ class FacilityPage extends HookConsumerWidget {
                         tabsRouter.setActiveIndex(2);
                       },
                     ),
-                    _buildFeedbackCategory(
+                    _buildCategory(
                       context,
                       Assets.mainLatestPublish,
                       47.5,
@@ -117,7 +117,7 @@ class FacilityPage extends HookConsumerWidget {
   }
 
   //顶部的Tab布局
-  Widget _buildFeedbackCategory(BuildContext context, String iconPath, double iconWidth, double iconHeight, String title, bool isSelected) {
+  Widget _buildCategory(BuildContext context, String iconPath, double iconWidth, double iconHeight, String title, bool isSelected) {
     return Column(
       mainAxisAlignment: MainAxisAlignment.center,
       crossAxisAlignment: CrossAxisAlignment.center,

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

@@ -20,7 +20,7 @@ class FacilityHistoryItem extends StatelessWidget {
     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),
+      padding: const EdgeInsets.only(left: 20, right: 15, top: 18, bottom: 23),
       decoration: BoxDecoration(
         color: context.appColors.whiteBG,
         borderRadius: BorderRadius.circular(6.0), // 圆角

+ 57 - 0
packages/cpt_payment/lib/modules/payment/condo/active/condo_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: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 'condo_active_view_model.dart';
+import 'item_condo_active.dart';
+
+@RoutePage()
+class CondoActiveScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(condoActiveViewModelProvider.notifier);
+    final state = ref.watch(condoActiveViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Container(
+      padding: const EdgeInsets.only(top: 60),
+      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 CondoActiveItem(index: index, item: state.datas[index]).onTap(() {
+
+                    });
+                  },
+                  childCount: state.datas.length,
+                ))
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+}

+ 31 - 0
packages/cpt_payment/lib/modules/payment/condo/active/condo_active_state.dart

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

+ 130 - 0
packages/cpt_payment/lib/modules/payment/condo/active/condo_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 'condo_active_state.dart';
+
+part 'condo_active_view_model.g.dart';
+
+@riverpod
+class CondoActiveViewModel extends _$CondoActiveViewModel {
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,  //允许刷新
+    controlFinishLoad: true,   //允许加载
+  );
+
+  @override
+  CondoActiveState build() {
+    return CondoActiveState(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_payment/lib/modules/payment/condo/active/condo_active_view_model.g.dart

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

+ 135 - 0
packages/cpt_payment/lib/modules/payment/condo/active/item_condo_active.dart

@@ -0,0 +1,135 @@
+
+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';
+
+///  Condo的Active的Item
+class CondoActiveItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const CondoActiveItem({
+    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: 23),
+      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: Row(
+        mainAxisSize: MainAxisSize.max,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //设施
+              MyTextView(
+                "Lift Padding",
+                fontSize: 16,
+                maxLines: 3,
+                textColor: context.appColors.textBlack,
+                isFontMedium: 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,
+              )
+            ],
+          )
+        ],
+      ),
+    );
+  }
+}

+ 54 - 0
packages/cpt_payment/lib/modules/payment/condo/history/condo_history_screen.dart

@@ -0,0 +1,54 @@
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'condo_history_view_model.dart';
+import 'item_condo_history.dart';
+
+@RoutePage()
+class CondoHistoryScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(condoHistoryViewModelProvider.notifier);
+    final state = ref.watch(condoHistoryViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Container(
+      padding: const EdgeInsets.only(top: 60),
+      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 CondoHistoryItem(index: index, item: state.datas[index]).onTap(() {});
+              },
+              childCount: state.datas.length,
+            ))
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+}

+ 31 - 0
packages/cpt_payment/lib/modules/payment/condo/history/condo_history_state.dart

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

+ 130 - 0
packages/cpt_payment/lib/modules/payment/condo/history/condo_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 'condo_history_state.dart';
+
+part 'condo_history_view_model.g.dart';
+
+@riverpod
+class CondoHistoryViewModel extends _$CondoHistoryViewModel {
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,  //允许刷新
+    controlFinishLoad: true,   //允许加载
+  );
+
+  @override
+  CondoHistoryState build() {
+    return CondoHistoryState(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_payment/lib/modules/payment/condo/history/condo_history_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'condo_history_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$condoHistoryViewModelHash() =>
+    r'7ab487088e11c7906117e903b6fcda88f4b5558c';
+
+/// See also [CondoHistoryViewModel].
+@ProviderFor(CondoHistoryViewModel)
+final condoHistoryViewModelProvider = AutoDisposeNotifierProvider<
+    CondoHistoryViewModel, CondoHistoryState>.internal(
+  CondoHistoryViewModel.new,
+  name: r'condoHistoryViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$condoHistoryViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$CondoHistoryViewModel = AutoDisposeNotifier<CondoHistoryState>;
+// 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_payment/lib/modules/payment/condo/history/item_condo_active.dart

@@ -0,0 +1,136 @@
+
+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';
+
+///  Condo的Active的Item
+class CondoActiveItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const CondoActiveItem({
+    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(
+                "Lift Padding",
+                fontSize: 16,
+                maxLines: 3,
+                textColor: context.appColors.textBlack,
+                isFontMedium: true,
+              ),
+
+              //分类
+              MyTextView(
+                "Booked by YONGLIANG WU",
+                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,
+              )
+            ],
+          )
+        ],
+      ),
+    );
+  }
+}

+ 146 - 0
packages/cpt_payment/lib/modules/payment/condo/history/item_condo_history.dart

@@ -0,0 +1,146 @@
+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';
+
+///  Condo的History的Item
+class CondoHistoryItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const CondoHistoryItem({
+    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: 23),
+      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: 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(
+                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,
+              )
+            ],
+          )
+        ],
+      ),
+    );
+  }
+}

+ 56 - 0
packages/cpt_payment/lib/modules/payment/condo/payment/condo_payment_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: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 'condo_payment_view_model.dart';
+import 'item_condo_payment.dart';
+
+@RoutePage()
+class CondoPaymentScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(condoPaymentViewModelProvider.notifier);
+    final state = ref.watch(condoPaymentViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Container(
+      padding: const EdgeInsets.only(top: 60),
+      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 CondoPaymentItem(index: index, item: state.datas[index]).onTap(() {
+
+                    });
+                  },
+                  childCount: state.datas.length,
+                ))
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+}

+ 31 - 0
packages/cpt_payment/lib/modules/payment/condo/payment/condo_payment_state.dart

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

+ 130 - 0
packages/cpt_payment/lib/modules/payment/condo/payment/condo_payment_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 'condo_payment_state.dart';
+
+part 'condo_payment_view_model.g.dart';
+
+@riverpod
+class CondoPaymentViewModel extends _$CondoPaymentViewModel{
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true,  //允许刷新
+    controlFinishLoad: true,   //允许加载
+  );
+
+  @override
+  CondoPaymentState build() {
+    return CondoPaymentState(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_payment/lib/modules/payment/condo/payment/condo_payment_view_model.g.dart

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

+ 56 - 0
packages/cpt_payment/lib/modules/payment/condo/payment/item_condo_payment.dart

@@ -0,0 +1,56 @@
+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';
+
+/// Condo Active 的 Item 布局
+class CondoPaymentItem extends StatelessWidget {
+  final int index;
+  final String item;
+
+  const CondoPaymentItem({
+    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), // 圆角
+        boxShadow: [
+          BoxShadow(
+            color: const Color(0xFFB8BFD9).withOpacity(0.3), // 阴影颜色
+            offset: const Offset(0, 3), // 阴影的偏移量
+            blurRadius: 8.0, // 模糊半径
+            spreadRadius: 3.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",
+            height: 33,
+          ),
+
+          MyTextView(
+            "Function Room",
+            marginLeft: 17,
+            fontSize: 16,
+            textColor: context.appColors.textBlack,
+            isFontMedium: true,
+          ).expanded(),
+        ],
+      ),
+    );
+  }
+}

+ 205 - 0
packages/cpt_payment/lib/modules/payment/info/info_screen.dart

@@ -0,0 +1,205 @@
+import 'package:auto_route/auto_route.dart';
+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: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/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/widget_export.dart';
+
+@RoutePage()
+class InfoScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    return SingleChildScrollView(
+      scrollDirection: Axis.vertical,
+      physics: const BouncingScrollPhysics(),
+      child: Container(
+        width: double.infinity,
+        child: Column(
+          mainAxisSize: MainAxisSize.max,
+          crossAxisAlignment: CrossAxisAlignment.center,
+          children: [
+            MyTextView(
+              S.current.pay_fees_with,
+              fontSize: 19,
+              marginTop: 23,
+              marginBottom: 11,
+              isFontMedium: true,
+              textColor: context.appColors.textBlack,
+            ),
+            Stack(
+              children: [
+                const MyAssetImage(Assets.paymentInfoTopImage, width: double.infinity),
+                SizedBox(
+                  width: double.infinity,
+                  child: Column(
+                    children: [
+                      RichText(
+                        text: TextSpan(
+                          style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500, color: context.appColors.textPrimary),
+                          children: <TextSpan>[
+                            const TextSpan(
+                              text: "YY Home",
+                            ),
+                            TextSpan(
+                              text: " Pay",
+                              style: TextStyle(color: context.appColors.textBlack),
+                            ),
+                          ],
+                        ),
+                      ),
+                      MyTextView(
+                        S.current.convert_large_recurring_payments_to,
+                        fontSize: 15,
+                        marginTop: 12,
+                        marginBottom: 17,
+                        isFontMedium: true,
+                        textColor: context.appColors.textBlack,
+                      ),
+                      MyTextView(
+                        S.current.rewards,
+                        fontSize: 15,
+                        isFontMedium: true,
+                        cornerRadius: 3,
+                        paddingLeft: 10,
+                        paddingRight: 10,
+                        paddingTop: 6,
+                        marginBottom: 35,
+                        paddingBottom: 6,
+                        backgroundColor: context.appColors.btnBgDefault,
+                        textColor: Colors.white,
+                      ),
+
+                      //银行卡组
+                      const MyAssetImage(
+                        Assets.paymentInfoCardGroup,
+                        width: 246,
+                        height: 62,
+                      ),
+                    ],
+                  ),
+                )
+              ],
+            ),
+            RichText(
+              text: TextSpan(
+                style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500, color: context.appColors.textPrimary),
+                children: <TextSpan>[
+                  const TextSpan(
+                    text: "YY Home",
+                  ),
+                  TextSpan(
+                    text: " Pay",
+                    style: TextStyle(color: context.appColors.textBlack),
+                  ),
+                ],
+              ),
+            ).marginOnly(top: 23, bottom: 13),
+
+            //文本1
+            MyTextView(
+              S.current.info_desc1,
+              fontSize: 15,
+              marginBottom: 17,
+              marginLeft: 25,
+              marginRight: 25,
+              textAlign: TextAlign.center,
+              isFontMedium: true,
+              textColor: context.appColors.textBlack,
+            ),
+
+            //文本2
+            MyTextView(
+              S.current.info_desc2,
+              fontSize: 15,
+              marginBottom: 30,
+              marginLeft: 25,
+              marginRight: 25,
+              textAlign: TextAlign.center,
+              isFontMedium: true,
+              textColor: context.appColors.textPrimary,
+            ),
+
+            //图标1
+            const MyAssetImage(
+              Assets.paymentInfoCashBack,
+              width: 53.5,
+              height: 55,
+            ),
+
+            //文本3
+            MyTextView(
+              S.current.info_desc3,
+              fontSize: 15,
+              marginTop: 31,
+              marginBottom: 31,
+              marginLeft: 25,
+              marginRight: 25,
+              textAlign: TextAlign.center,
+              isFontMedium: true,
+              textColor: context.appColors.textBlack,
+            ),
+
+            //图标2
+            const MyAssetImage(
+              Assets.paymentInfoRewards,
+              width: 49,
+              height: 53.5,
+            ),
+
+            //文本4
+            MyTextView(
+              S.current.info_desc4,
+              fontSize: 15,
+              marginTop: 31,
+              marginBottom: 31,
+              marginLeft: 25,
+              marginRight: 25,
+              textAlign: TextAlign.center,
+              isFontMedium: true,
+              textColor: context.appColors.textBlack,
+            ),
+
+            //图标3
+            const MyAssetImage(
+              Assets.paymentInfoBusiness,
+              width: 55.5,
+              height: 55.5,
+            ),
+
+            //文本5
+            MyTextView(
+              S.current.info_desc5,
+              fontSize: 15,
+              marginTop: 31,
+              marginLeft: 25,
+              marginRight: 25,
+              textAlign: TextAlign.center,
+              isFontMedium: true,
+              textColor: context.appColors.textBlack,
+            ),
+
+            //文本5
+            MyTextView(
+              S.current.info_desc6,
+              fontSize: 15,
+              marginTop: 25,
+              marginBottom: 30,
+              marginLeft: 25,
+              marginRight: 25,
+              textAlign: TextAlign.center,
+              isFontMedium: true,
+              textColor: context.appColors.textBlack,
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+}

+ 86 - 0
packages/cpt_payment/lib/modules/payment/manage/item_manage.dart

@@ -0,0 +1,86 @@
+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';
+
+///  Condo的Manage的Item
+class ManageItem extends StatelessWidget {
+  final int index;
+  final bool item;
+  final VoidCallback deleteAction;
+
+  const ManageItem({
+    required this.index,
+    required this.item,
+    required this.deleteAction,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      margin: const EdgeInsets.only(top: 1),
+      color: context.appColors.whiteBG,
+      width: double.infinity,
+      padding: const EdgeInsets.only(left: 20, right: 23, top: 20, bottom: 20),
+      child: Row(
+        mainAxisSize: MainAxisSize.max,
+        crossAxisAlignment: CrossAxisAlignment.center,
+        children: [
+          //选中
+          MyAssetImage(
+            item ? Assets.baseServiceRadioChecked : Assets.baseServiceRadioUncheck,
+            width: 25,
+            height: 25,
+          ),
+
+          MyAssetImage(
+            Assets.facilityAddCardMaster,
+            height: 38,
+          ).marginOnly(left: 9, right: 9),
+
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              MyTextView(
+                "Wu Bing Bing's Card",
+                textColor: context.appColors.textBlack,
+                fontSize: 13.5,
+                isFontRegular: true,
+              ),
+              MyTextView(
+                "Ending 9423",
+                textColor: context.appColors.textBlack,
+                fontSize: 13.5,
+                isFontRegular: true,
+              ),
+              MyTextView(
+                item ? S.current.primary_card : S.current.set_primary_card,
+                textColor: context.appColors.textPrimary,
+                fontSize: 12,
+                marginTop: 3,
+                fontWeight: FontWeight.w600,
+              ),
+            ],
+          ).expanded(),
+
+          MyTextView(
+            S.current.delete,
+            textColor: Colors.white,
+            backgroundColor: context.appColors.orangeBG,
+            cornerRadius: 7,
+            marginLeft: 9,
+            paddingTop: 9,
+            onClick: deleteAction,
+            marginTop: 15,
+            paddingBottom: 9,
+            textAlign: TextAlign.center,
+            boxWidth: 60,
+          )
+        ],
+      ),
+    );
+  }
+}

+ 87 - 0
packages/cpt_payment/lib/modules/payment/manage/manage_screen.dart

@@ -0,0 +1,87 @@
+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:shared/utils/log_utils.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 'item_manage.dart';
+import 'manage_view_model.dart';
+
+@RoutePage()
+class ManageScreen extends HookConsumerWidget {
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(manageViewModelProvider.notifier);
+    final state = ref.watch(manageViewModelProvider);
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      Future.microtask(() => viewModel.fetchList());
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return 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();
+          },
+          successSliverWidget: [
+            //添加新卡
+            SliverToBoxAdapter(
+              child: MyTextView(
+                S.current.add_new_card,
+                fontSize: 16,
+                textAlign: TextAlign.center,
+                marginLeft: 22.5,
+                marginTop: 14,
+                marginBottom: 15,
+                marginRight: 22.5,
+                cornerRadius: 5,
+                paddingTop: 12,
+                paddingBottom: 12,
+                onClick: viewModel.gotoAddCardPage,
+                borderWidth: 1,
+                borderColor: context.appColors.textPrimary,
+                isFontMedium: true,
+                textColor: context.appColors.textPrimary,
+              ),
+            ),
+
+            //列表
+            SliverList(
+                delegate: SliverChildBuilderDelegate(
+              (context, index) {
+                return ManageItem(
+                  index: index,
+                  item: state.datas[index],
+                  deleteAction: () {
+                    viewModel.showDeleteDialog(index);
+                  },
+                ).onTap(() {
+                  viewModel.setAsPrimary(index);
+                });
+              },
+              childCount: state.datas.length,
+            ))
+          ],
+        ),
+      ).marginOnly(top: 5, bottom: 5),
+    );
+  }
+}

+ 31 - 0
packages/cpt_payment/lib/modules/payment/manage/manage_state.dart

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

+ 169 - 0
packages/cpt_payment/lib/modules/payment/manage/manage_view_model.dart

@@ -0,0 +1,169 @@
+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:shared/utils/log_utils.dart';
+import 'package:widgets/dialog/app_default_dialog.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'manage_state.dart';
+
+part 'manage_view_model.g.dart';
+
+@riverpod
+class ManageViewModel extends _$ManageViewModel {
+  var _curPage = 1; //请求参数当前的页面
+  var _needShowPlaceholder = true; //是否展示LoadingView
+
+  // Refresh 控制器
+  final EasyRefreshController refreshController = EasyRefreshController(
+    controlFinishRefresh: true, //允许刷新
+    controlFinishLoad: true, //允许加载
+  );
+
+  @override
+  ManageState build() {
+    return ManageState(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<bool> list = [true, false, false, false];
+
+    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);
+//     }
+//   }
+// }
+
+  //设置为主卡
+  void setAsPrimary(int index) {
+    bool isPrimary = state.datas[index];
+
+    if (!isPrimary) {
+      // 创建数据列表的副本
+      List<bool> newDataList = List.from(state.datas);
+
+      //先全部设置为 false
+      for (int i = 0; i < newDataList.length; i++) {
+        newDataList[i] = false;
+      }
+
+      //再把当前索引设置为 true
+      newDataList[index] = true;
+
+      state = state.copyWith(datas: newDataList);
+    }
+  }
+
+  // 删除提示弹窗
+  void showDeleteDialog(int index) {
+    DialogEngine.show(
+        widget: AppDefaultDialog(
+      message: "Are you sure you want to delete this Card?",
+      confirmAction: () {
+        ToastEngine.show("点击了确定");
+      },
+    ));
+  }
+
+  //去添加新卡的页面
+  void gotoAddCardPage() {
+
+  }
+
+}

+ 26 - 0
packages/cpt_payment/lib/modules/payment/manage/manage_view_model.g.dart

@@ -0,0 +1,26 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'manage_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$manageViewModelHash() => r'9e6b2c00e4ed57279830e8738a899e01543b4783';
+
+/// See also [ManageViewModel].
+@ProviderFor(ManageViewModel)
+final manageViewModelProvider =
+    AutoDisposeNotifierProvider<ManageViewModel, ManageState>.internal(
+  ManageViewModel.new,
+  name: r'manageViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$manageViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$ManageViewModel = AutoDisposeNotifier<ManageState>;
+// 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

+ 0 - 44
packages/cpt_payment/lib/modules/payment/page/payment_page.dart

@@ -1,44 +0,0 @@
-import 'package:cs_resources/theme/theme_config.dart';
-import 'package:flutter/material.dart';
-import 'package:auto_route/auto_route.dart';
-import 'package:flutter/services.dart';
-import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:router/ext/auto_router_extensions.dart';
-import 'package:widgets/my_appbar.dart';
-
-import '../../../router/page/payment_page_router.dart';
-import '../../payment/vm/payment_view_model.dart';
-
-@RoutePage()
-class PaymentPage extends HookConsumerWidget {
-  const PaymentPage({Key? key}) : super(key: key);
-
-  //启动当前页面
-  static void startInstance({BuildContext? context}) {
-    if (context != null) {
-      context.router.push(const PaymentPageRoute());
-    } else {
-      appRouter.push(const PaymentPageRoute());
-    }
-  }
-
-  @override
-  Widget build(BuildContext context, WidgetRef ref) {
-    final _viewModel = ref.read(paymentViewModelProvider.notifier);
-    return Scaffold(
-      // appBar: MyAppBar.appBar(context, "Payment", systemUiOverlayStyle: ThemeConfig.systemUiOverlayStyleLightThemeBlack),
-      appBar: MyAppBar.searchAppBar(context, systemUiOverlayStyle: ThemeConfig.systemUiOverlayStyleLightThemeBlack),
-      body: Container(
-        width: double.infinity,
-        child: Column(
-          crossAxisAlignment: CrossAxisAlignment.center,
-          children: [
-            MyAppBar.titleBar(context, "Test Title"),
-            Text("支付的主页面"),
-            MyAppBar.searchTitleBar(context),
-          ],
-        ),
-      ),
-    );
-  }
-}

+ 209 - 0
packages/cpt_payment/lib/modules/payment/payment_page.dart

@@ -0,0 +1,209 @@
+import 'package:cpt_payment/modules/payment/payment_view_model.dart';
+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:cs_resources/theme/theme_config.dart';
+import 'package:flutter/material.dart';
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:router/ext/auto_router_extensions.dart';
+import 'package:shared/utils/log_utils.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/payment_page_router.dart';
+
+@RoutePage()
+class PaymentPage extends HookConsumerWidget {
+  const PaymentPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(const PaymentPageRoute());
+    } else {
+      appRouter.push(const PaymentPageRoute());
+    }
+  }
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.watch(paymentViewModelProvider.notifier);
+    int selectedInnerIndex = 1; // 1-3索引记录当前的值
+
+    return Scaffold(
+      appBar: MyAppBar.appBar(
+        context,
+        S.current.payment,
+        backgroundColor: context.appColors.whiteBG,
+      ),
+      backgroundColor: context.appColors.backgroundDark,
+      body: AutoTabsRouter.pageView(
+        routes: const [
+          InfoPageRoute(),
+          CondoPaymentPageRoute(),
+          CondoActivePageRoute(),
+          CondoHistoryPageRoute(),
+          ManagePageRoute(),
+        ],
+        builder: (context, child, pageController) {
+          final tabsRouter = AutoTabsRouter.of(context);
+
+          pageController.addListener(() {
+            //监听赋值内部的选中索引
+            if (tabsRouter.activeIndex >= 1 && tabsRouter.activeIndex <= 3) {
+              selectedInnerIndex = tabsRouter.activeIndex;
+            }
+          });
+
+          return Column(
+            children: [
+              Container(
+                color: context.appColors.whiteBG,
+                height: 120,
+                child: Row(
+                  mainAxisAlignment: MainAxisAlignment.spaceAround,
+                  children: [
+                    _buildTopCategory(
+                      context,
+                      Assets.paymentInfoIcon,
+                      34,
+                      41,
+                      "Info",
+                      tabsRouter.activeIndex == 0,
+                    ).onTap(
+                      () {
+                        tabsRouter.setActiveIndex(0);
+                      },
+                    ),
+                    _buildTopCategory(
+                      context,
+                      Assets.paymentCondoIcon,
+                      48,
+                      43,
+                      "Condo",
+                      tabsRouter.activeIndex == 1 || tabsRouter.activeIndex == 2 || tabsRouter.activeIndex == 3,
+                    ).onTap(
+                      () {
+                        tabsRouter.setActiveIndex(selectedInnerIndex);
+                      },
+                    ),
+                    _buildTopCategory(
+                      context,
+                      Assets.paymentManageIcon,
+                      52,
+                      46.5,
+                      "Manage",
+                      tabsRouter.activeIndex == 4,
+                    ).onTap(
+                      () {
+                        tabsRouter.setActiveIndex(4);
+                      },
+                    ),
+                  ],
+                ),
+              ),
+              Expanded(
+                child: Stack(
+                  children: [
+                    //真正页面
+                    child,
+
+                    //顶部的子Tab
+                    Visibility(
+                      visible: tabsRouter.activeIndex >= 1 && tabsRouter.activeIndex <= 3,
+                      child: Row(
+                        mainAxisAlignment: MainAxisAlignment.spaceAround,
+                        children: [
+                          _buildInnerTab(
+                            context,
+                            S.current.payment,
+                            tabsRouter.activeIndex == 1,
+                          ).onTap(() {
+                            tabsRouter.setActiveIndex(1);
+                          }),
+                          _buildInnerTab(
+                            context,
+                            S.current.facility_active,
+                            tabsRouter.activeIndex == 2,
+                          ).onTap(() {
+                            tabsRouter.setActiveIndex(2);
+                          }),
+                          _buildInnerTab(
+                            context,
+                            S.current.history,
+                            tabsRouter.activeIndex == 3,
+                          ).onTap(() {
+                            tabsRouter.setActiveIndex(3);
+                          }),
+                        ],
+                      ).marginOnly(top: 14, bottom: 17),
+                    ),
+                  ],
+                ),
+              ),
+            ],
+          );
+        },
+      ),
+    );
+  }
+
+  //顶部的Tab布局
+  Widget _buildTopCategory(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,
+        ),
+      ],
+    );
+  }
+
+  //内部的Tab布局
+  Widget _buildInnerTab(BuildContext context, String title, bool isSelected) {
+    return MyTextView(
+      title,
+      fontSize: 16,
+      isFontMedium: true,
+      textColor: isSelected ? Colors.white : context.appColors.tabTextUnSelectedDefault,
+      backgroundColor: isSelected ? context.appColors.btnBgDefault : Colors.transparent,
+      cornerRadius: 16.5,
+      paddingLeft: 20,
+      paddingRight: 20,
+      paddingTop: 8,
+      paddingBottom: 8,
+    );
+  }
+}

packages/cpt_payment/lib/modules/payment/vm/payment_view_model.dart → packages/cpt_payment/lib/modules/payment/payment_view_model.dart


packages/cpt_payment/lib/modules/payment/vm/payment_view_model.g.dart → packages/cpt_payment/lib/modules/payment/payment_view_model.g.dart


+ 2 - 1
packages/cpt_payment/lib/router/component/payment_component_service.dart

@@ -7,7 +7,8 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 
-import '../../modules/payment/page/payment_page.dart';
+import '../../modules/payment/payment_page.dart';
+
 
 part 'payment_component_service.g.dart';
 

+ 20 - 6
packages/cpt_payment/lib/router/page/payment_page_router.dart

@@ -3,19 +3,33 @@ import 'package:flutter/material.dart';
 import 'package:router/ext/auto_router_extensions.dart';
 import 'package:router/path/router_path.dart';
 
-import '../../modules/payment/page/payment_page.dart';
-
+import '../../modules/payment/payment_page.dart';
+import '../../modules/payment/info/info_screen.dart';
+import '../../modules/payment/manage/manage_screen.dart';
+import '../../modules/payment/condo/active/condo_active_screen.dart';
+import '../../modules/payment/condo/history/condo_history_screen.dart';
+import '../../modules/payment/condo/payment/condo_payment_screen.dart';
 
 part 'payment_page_router.gr.dart';
 
 /*\
- * Property 模块的路由
+ * Payment 模块的路由
  */
 @AutoRouterConfig(replaceInRouteName: 'Page|Screen,PageRoute')
 class PaymentPageRouter extends _$PaymentPageRouter {
   @override
   List<AutoRoute> get routes => [
-
-    CustomRoute(page: PaymentPageRoute.page, path: RouterPath.payment, transitionsBuilder: applySlideTransition),
-  ];
+        CustomRoute(
+          page: PaymentPageRoute.page,
+          path: RouterPath.payment,
+          transitionsBuilder: applySlideTransition,
+          children: [
+            AutoRoute(page: InfoPageRoute.page, path: 'info'),
+            AutoRoute(page: CondoPaymentPageRoute.page, path: 'payment'),
+            AutoRoute(page: CondoActivePageRoute.page, path: 'active'),
+            AutoRoute(page: CondoHistoryPageRoute.page, path: 'history'),
+            AutoRoute(page: ManagePageRoute.page, path: 'manage'),
+          ],
+        ),
+      ];
 }

+ 101 - 1
packages/cpt_payment/lib/router/page/payment_page_router.gr.dart

@@ -15,16 +15,116 @@ abstract class _$PaymentPageRouter extends RootStackRouter {
 
   @override
   final Map<String, PageFactory> pagesMap = {
+    CondoActivePageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: CondoActiveScreen(),
+      );
+    },
+    CondoHistoryPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: CondoHistoryScreen(),
+      );
+    },
+    CondoPaymentPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: CondoPaymentScreen(),
+      );
+    },
+    InfoPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: InfoScreen(),
+      );
+    },
+    ManagePageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: ManageScreen(),
+      );
+    },
     PaymentPageRoute.name: (routeData) {
       return AutoRoutePage<dynamic>(
         routeData: routeData,
         child: const PaymentPage(),
       );
-    }
+    },
   };
 }
 
 /// generated route for
+/// [CondoActiveScreen]
+class CondoActivePageRoute extends PageRouteInfo<void> {
+  const CondoActivePageRoute({List<PageRouteInfo>? children})
+      : super(
+          CondoActivePageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'CondoActivePageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
+/// [CondoHistoryScreen]
+class CondoHistoryPageRoute extends PageRouteInfo<void> {
+  const CondoHistoryPageRoute({List<PageRouteInfo>? children})
+      : super(
+          CondoHistoryPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'CondoHistoryPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
+/// [CondoPaymentScreen]
+class CondoPaymentPageRoute extends PageRouteInfo<void> {
+  const CondoPaymentPageRoute({List<PageRouteInfo>? children})
+      : super(
+          CondoPaymentPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'CondoPaymentPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
+/// [InfoScreen]
+class InfoPageRoute extends PageRouteInfo<void> {
+  const InfoPageRoute({List<PageRouteInfo>? children})
+      : super(
+          InfoPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'InfoPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
+/// [ManageScreen]
+class ManagePageRoute extends PageRouteInfo<void> {
+  const ManagePageRoute({List<PageRouteInfo>? children})
+      : super(
+          ManagePageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'ManagePageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
 /// [PaymentPage]
 class PaymentPageRoute extends PageRouteInfo<void> {
   const PaymentPageRoute({List<PageRouteInfo>? children})

二進制
packages/cs_resources/assets/payment/condo_icon.webp


二進制
packages/cs_resources/assets/payment/info_business.webp


二進制
packages/cs_resources/assets/payment/info_card_group.webp


二進制
packages/cs_resources/assets/payment/info_cash_back.webp


二進制
packages/cs_resources/assets/payment/info_icon.webp


二進制
packages/cs_resources/assets/payment/info_rewards.webp


二進制
packages/cs_resources/assets/payment/info_top_image.webp


二進制
packages/cs_resources/assets/payment/manage_icon.webp


二進制
packages/cs_resources/assets/payment/title_question_icon.webp


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

@@ -122,6 +122,15 @@ class Assets {
   static const String noticeBoardAnnouncementIcon = 'assets/notice_board/announcement_icon.png';
   static const String noticeBoardDocumentsIcon = 'assets/notice_board/documents_icon.png';
   static const String noticeBoardEventIcon = 'assets/notice_board/event_icon.png';
+  static const String paymentCondoIcon = 'assets/payment/condo_icon.webp';
+  static const String paymentInfoBusiness = 'assets/payment/info_business.webp';
+  static const String paymentInfoCardGroup = 'assets/payment/info_card_group.webp';
+  static const String paymentInfoCashBack = 'assets/payment/info_cash_back.webp';
+  static const String paymentInfoIcon = 'assets/payment/info_icon.webp';
+  static const String paymentInfoRewards = 'assets/payment/info_rewards.webp';
+  static const String paymentInfoTopImage = 'assets/payment/info_top_image.webp';
+  static const String paymentManageIcon = 'assets/payment/manage_icon.webp';
+  static const String paymentTitleQuestionIcon = 'assets/payment/title_question_icon.webp';
   static const String profileEditDialogDelete = 'assets/profile/edit_dialog_delete.webp';
   static const String profileEditDialogUpload = 'assets/profile/edit_dialog_upload.webp';
   static const String profileEditProfileAdd = 'assets/profile/edit_profile_add.webp';

+ 30 - 0
packages/cs_resources/lib/generated/intl/messages_en.dart

@@ -38,6 +38,8 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Account Deactivation"),
         "active": MessageLookupByLibrary.simpleMessage("ACTIVE"),
         "add": MessageLookupByLibrary.simpleMessage("Add"),
+        "add_card": MessageLookupByLibrary.simpleMessage("Add Card"),
+        "add_new_card": MessageLookupByLibrary.simpleMessage("Add New Card"),
         "administrator_reply":
             MessageLookupByLibrary.simpleMessage("Administrator Reply"),
         "agree_to": MessageLookupByLibrary.simpleMessage("Agree to"),
@@ -57,6 +59,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("BOOKING SUCCESSFUL"),
         "cancel": MessageLookupByLibrary.simpleMessage("Cancel"),
         "card_caps": MessageLookupByLibrary.simpleMessage("CARD"),
+        "card_number": MessageLookupByLibrary.simpleMessage("Card Number"),
         "change": MessageLookupByLibrary.simpleMessage("Change"),
         "change_mobile_phone":
             MessageLookupByLibrary.simpleMessage("Change Mobile Phone"),
@@ -69,10 +72,15 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Confirm New Password"),
         "confirm_password":
             MessageLookupByLibrary.simpleMessage("Confirm Password"),
+        "convert_large_recurring_payments_to":
+            MessageLookupByLibrary.simpleMessage(
+                "Convert large recurring payments to"),
         "create_new_feedback":
             MessageLookupByLibrary.simpleMessage("Create New FeedBack"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("Create New YY Home Account"),
+        "credit_debit_card":
+            MessageLookupByLibrary.simpleMessage("Credit or debit card"),
         "delete": MessageLookupByLibrary.simpleMessage("Delete"),
         "deposit": MessageLookupByLibrary.simpleMessage("Deposit"),
         "deposit_amount":
@@ -130,6 +138,18 @@ class MessageLookup extends MessageLookupByLibrary {
         "in_progress": MessageLookupByLibrary.simpleMessage("In Progress"),
         "inactive": MessageLookupByLibrary.simpleMessage("INACTIVE"),
         "info": MessageLookupByLibrary.simpleMessage("Info"),
+        "info_desc1": MessageLookupByLibrary.simpleMessage(
+            "Convert your recurring expenses into valuable miles, rewards and cashback today!"),
+        "info_desc2": MessageLookupByLibrary.simpleMessage(
+            "Fly business class for 60% less!"),
+        "info_desc3": MessageLookupByLibrary.simpleMessage(
+            "Sundy pays MCST fees with her credit card to help her accumulate a yearly expenditure of \$62,000. Everything adds up!"),
+        "info_desc4": MessageLookupByLibrary.simpleMessage(
+            "Her credit card rewards her 1.5 miles* for every dollar spent, earning her 93,000 miles."),
+        "info_desc5": MessageLookupByLibrary.simpleMessage(
+            "Sundy is able to fly business class to Tokyo worth \$4,000 at only \$1,488 in YY Home Pay processing fees That is more than 60% in savings!"),
+        "info_desc6": MessageLookupByLibrary.simpleMessage(
+            "please check your credit card rewardsfor more information"),
         "internal": MessageLookupByLibrary.simpleMessage("Internal"),
         "introduction_to_info_pack":
             MessageLookupByLibrary.simpleMessage("Introduction to info-pack"),
@@ -147,12 +167,15 @@ class MessageLookup extends MessageLookupByLibrary {
         "me": MessageLookupByLibrary.simpleMessage("Me"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("Mobile Phone"),
         "my_post": MessageLookupByLibrary.simpleMessage("My Posts"),
+        "name_on_card": MessageLookupByLibrary.simpleMessage("Name on Card"),
         "new_mobile_phone":
             MessageLookupByLibrary.simpleMessage("New Mobile Phone"),
         "new_password": MessageLookupByLibrary.simpleMessage("New Password"),
         "next": MessageLookupByLibrary.simpleMessage("Next"),
         "no": MessageLookupByLibrary.simpleMessage("No"),
         "notes": MessageLookupByLibrary.simpleMessage("Notes"),
+        "notes_to_recipient":
+            MessageLookupByLibrary.simpleMessage("Notes to Recipient"),
         "notice_board": MessageLookupByLibrary.simpleMessage("Notice Board"),
         "notification": MessageLookupByLibrary.simpleMessage("Notification"),
         "nric_fin": MessageLookupByLibrary.simpleMessage("NRIC/FIN"),
@@ -178,8 +201,13 @@ class MessageLookup extends MessageLookupByLibrary {
         "password": MessageLookupByLibrary.simpleMessage("Password"),
         "password_format":
             MessageLookupByLibrary.simpleMessage("8 Digits Alphanumeric"),
+        "pay_fees_with":
+            MessageLookupByLibrary.simpleMessage("Pay MCST fees with"),
         "payment": MessageLookupByLibrary.simpleMessage("Payment"),
+        "payment_details":
+            MessageLookupByLibrary.simpleMessage("Payment Details"),
         "phone_email": MessageLookupByLibrary.simpleMessage("Phone/Email"),
+        "primary_card": MessageLookupByLibrary.simpleMessage("Primary Card"),
         "privacy_policy":
             MessageLookupByLibrary.simpleMessage("Privacy Policy"),
         "proceed_with_payment":
@@ -207,6 +235,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "send_feedback": MessageLookupByLibrary.simpleMessage("Send FeedBack"),
         "sent": MessageLookupByLibrary.simpleMessage("Sent"),
         "service": MessageLookupByLibrary.simpleMessage("Service"),
+        "set_primary_card":
+            MessageLookupByLibrary.simpleMessage("Set as Primary Card"),
         "settings": MessageLookupByLibrary.simpleMessage("Settings"),
         "sign_up_success_txt1": MessageLookupByLibrary.simpleMessage(
             "You have successfully created an YY Home account"),

+ 22 - 0
packages/cs_resources/lib/generated/intl/messages_zh_CN.dart

@@ -36,6 +36,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "account_deactivation": MessageLookupByLibrary.simpleMessage("删除账号"),
         "active": MessageLookupByLibrary.simpleMessage("可用"),
         "add": MessageLookupByLibrary.simpleMessage("添加"),
+        "add_card": MessageLookupByLibrary.simpleMessage("添加银行卡"),
+        "add_new_card": MessageLookupByLibrary.simpleMessage("添加新卡"),
         "administrator_reply": MessageLookupByLibrary.simpleMessage("管理员回复"),
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
         "alert": MessageLookupByLibrary.simpleMessage("提示"),
@@ -52,6 +54,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "booking_successful": MessageLookupByLibrary.simpleMessage("预定成功"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "card_caps": MessageLookupByLibrary.simpleMessage("信用卡"),
+        "card_number": MessageLookupByLibrary.simpleMessage("银行卡号"),
         "change": MessageLookupByLibrary.simpleMessage("更换"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
         "characters": m1,
@@ -60,9 +63,12 @@ class MessageLookup extends MessageLookupByLibrary {
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
+        "convert_large_recurring_payments_to":
+            MessageLookupByLibrary.simpleMessage("将大额的经常性消费转换为"),
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
+        "credit_debit_card": MessageLookupByLibrary.simpleMessage("信用卡或借记卡"),
         "delete": MessageLookupByLibrary.simpleMessage("删除"),
         "deposit": MessageLookupByLibrary.simpleMessage("押金"),
         "deposit_amount": MessageLookupByLibrary.simpleMessage("押金总金额"),
@@ -108,6 +114,16 @@ class MessageLookup extends MessageLookupByLibrary {
         "in_progress": MessageLookupByLibrary.simpleMessage("处理中"),
         "inactive": MessageLookupByLibrary.simpleMessage("不可用"),
         "info": MessageLookupByLibrary.simpleMessage("咨询"),
+        "info_desc1": MessageLookupByLibrary.simpleMessage(
+            "立即将您的经常性消费转换为有价值的里程、奖励和现金返还!"),
+        "info_desc2": MessageLookupByLibrary.simpleMessage("商务舱便宜60%!"),
+        "info_desc3": MessageLookupByLibrary.simpleMessage(
+            "Sundy用信用卡支付MCST费用,以帮助她积累62000美元的年度支出。一切加起来!"),
+        "info_desc4": MessageLookupByLibrary.simpleMessage(
+            "她的信用卡每消费一美元就奖励她1.5英里*,为她赚取93000英里。"),
+        "info_desc5": MessageLookupByLibrary.simpleMessage(
+            "Sundy能够乘坐价值4000美元的商务舱前往东京,只需支付1488美元的YY Home Pay处理费,节省了60%以上!"),
+        "info_desc6": MessageLookupByLibrary.simpleMessage("请查看您的信用卡奖励以获取更多信息"),
         "internal": MessageLookupByLibrary.simpleMessage("内部"),
         "introduction_to_info_pack":
             MessageLookupByLibrary.simpleMessage("信息介绍"),
@@ -122,11 +138,13 @@ class MessageLookup extends MessageLookupByLibrary {
         "me": MessageLookupByLibrary.simpleMessage("我的"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
         "my_post": MessageLookupByLibrary.simpleMessage("我的发布"),
+        "name_on_card": MessageLookupByLibrary.simpleMessage("银行卡姓名"),
         "new_mobile_phone": MessageLookupByLibrary.simpleMessage("新的手机号码"),
         "new_password": MessageLookupByLibrary.simpleMessage("新密码"),
         "next": MessageLookupByLibrary.simpleMessage("下一步"),
         "no": MessageLookupByLibrary.simpleMessage("否"),
         "notes": MessageLookupByLibrary.simpleMessage("备注"),
+        "notes_to_recipient": MessageLookupByLibrary.simpleMessage("收款人通知"),
         "notice_board": MessageLookupByLibrary.simpleMessage("消息板"),
         "notification": MessageLookupByLibrary.simpleMessage("通知"),
         "nric_fin": MessageLookupByLibrary.simpleMessage("身份证/签证"),
@@ -145,8 +163,11 @@ class MessageLookup extends MessageLookupByLibrary {
         "paid_on": MessageLookupByLibrary.simpleMessage("付款时间"),
         "password": MessageLookupByLibrary.simpleMessage("密码"),
         "password_format": MessageLookupByLibrary.simpleMessage("8位数字或字母"),
+        "pay_fees_with": MessageLookupByLibrary.simpleMessage("支付MCST费用"),
         "payment": MessageLookupByLibrary.simpleMessage("支付"),
+        "payment_details": MessageLookupByLibrary.simpleMessage("支付详情"),
         "phone_email": MessageLookupByLibrary.simpleMessage("电话或邮箱"),
+        "primary_card": MessageLookupByLibrary.simpleMessage("主卡"),
         "privacy_policy": MessageLookupByLibrary.simpleMessage("隐私协议"),
         "proceed_with_payment": MessageLookupByLibrary.simpleMessage("继续付款"),
         "property": MessageLookupByLibrary.simpleMessage("房产"),
@@ -168,6 +189,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "send_feedback": MessageLookupByLibrary.simpleMessage("发送反馈"),
         "sent": MessageLookupByLibrary.simpleMessage("发送"),
         "service": MessageLookupByLibrary.simpleMessage("服务"),
+        "set_primary_card": MessageLookupByLibrary.simpleMessage("设为主卡"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
         "sign_up_success_txt1":
             MessageLookupByLibrary.simpleMessage("您已成功创建 YYHome 的帐户"),

+ 22 - 0
packages/cs_resources/lib/generated/intl/messages_zh_HK.dart

@@ -36,6 +36,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "account_deactivation": MessageLookupByLibrary.simpleMessage("删除账号"),
         "active": MessageLookupByLibrary.simpleMessage("可用"),
         "add": MessageLookupByLibrary.simpleMessage("添加"),
+        "add_card": MessageLookupByLibrary.simpleMessage("添加银行卡"),
+        "add_new_card": MessageLookupByLibrary.simpleMessage("添加新卡"),
         "administrator_reply": MessageLookupByLibrary.simpleMessage("管理员回复"),
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
         "alert": MessageLookupByLibrary.simpleMessage("提示"),
@@ -52,6 +54,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "booking_successful": MessageLookupByLibrary.simpleMessage("预定成功"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "card_caps": MessageLookupByLibrary.simpleMessage("信用卡"),
+        "card_number": MessageLookupByLibrary.simpleMessage("银行卡号"),
         "change": MessageLookupByLibrary.simpleMessage("更换"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
         "characters": m1,
@@ -60,9 +63,12 @@ class MessageLookup extends MessageLookupByLibrary {
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
+        "convert_large_recurring_payments_to":
+            MessageLookupByLibrary.simpleMessage("将大额的经常性消费转换为"),
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
+        "credit_debit_card": MessageLookupByLibrary.simpleMessage("信用卡或借记卡"),
         "delete": MessageLookupByLibrary.simpleMessage("删除"),
         "deposit": MessageLookupByLibrary.simpleMessage("押金"),
         "deposit_amount": MessageLookupByLibrary.simpleMessage("押金总金额"),
@@ -108,6 +114,16 @@ class MessageLookup extends MessageLookupByLibrary {
         "in_progress": MessageLookupByLibrary.simpleMessage("处理中"),
         "inactive": MessageLookupByLibrary.simpleMessage("不可用"),
         "info": MessageLookupByLibrary.simpleMessage("咨询"),
+        "info_desc1": MessageLookupByLibrary.simpleMessage(
+            "立即将您的经常性消费转换为有价值的里程、奖励和现金返还!"),
+        "info_desc2": MessageLookupByLibrary.simpleMessage("商务舱便宜60%!"),
+        "info_desc3": MessageLookupByLibrary.simpleMessage(
+            "Sundy用信用卡支付MCST费用,以帮助她积累62000美元的年度支出。一切加起来!"),
+        "info_desc4": MessageLookupByLibrary.simpleMessage(
+            "她的信用卡每消费一美元就奖励她1.5英里*,为她赚取93000英里。"),
+        "info_desc5": MessageLookupByLibrary.simpleMessage(
+            "Sundy能够乘坐价值4000美元的商务舱前往东京,只需支付1488美元的YY Home Pay处理费,节省了60%以上!"),
+        "info_desc6": MessageLookupByLibrary.simpleMessage("请查看您的信用卡奖励以获取更多信息"),
         "internal": MessageLookupByLibrary.simpleMessage("内部"),
         "introduction_to_info_pack":
             MessageLookupByLibrary.simpleMessage("信息介绍"),
@@ -122,11 +138,13 @@ class MessageLookup extends MessageLookupByLibrary {
         "me": MessageLookupByLibrary.simpleMessage("我的"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
         "my_post": MessageLookupByLibrary.simpleMessage("我的发布"),
+        "name_on_card": MessageLookupByLibrary.simpleMessage("银行卡姓名"),
         "new_mobile_phone": MessageLookupByLibrary.simpleMessage("新的手机号码"),
         "new_password": MessageLookupByLibrary.simpleMessage("新密码"),
         "next": MessageLookupByLibrary.simpleMessage("下一步"),
         "no": MessageLookupByLibrary.simpleMessage("否"),
         "notes": MessageLookupByLibrary.simpleMessage("备注"),
+        "notes_to_recipient": MessageLookupByLibrary.simpleMessage("收款人通知"),
         "notice_board": MessageLookupByLibrary.simpleMessage("通知板"),
         "notification": MessageLookupByLibrary.simpleMessage("通知"),
         "nric_fin": MessageLookupByLibrary.simpleMessage("身份证/签证"),
@@ -137,8 +155,11 @@ class MessageLookup extends MessageLookupByLibrary {
         "paid_on": MessageLookupByLibrary.simpleMessage("付款时间"),
         "password": MessageLookupByLibrary.simpleMessage("密码"),
         "password_format": MessageLookupByLibrary.simpleMessage("8位数字或字母"),
+        "pay_fees_with": MessageLookupByLibrary.simpleMessage("支付MCST费用"),
         "payment": MessageLookupByLibrary.simpleMessage("支付"),
+        "payment_details": MessageLookupByLibrary.simpleMessage("支付详情"),
         "phone_email": MessageLookupByLibrary.simpleMessage("电话或邮箱"),
+        "primary_card": MessageLookupByLibrary.simpleMessage("主卡"),
         "privacy_policy": MessageLookupByLibrary.simpleMessage("隐私协议"),
         "proceed_with_payment": MessageLookupByLibrary.simpleMessage("继续付款"),
         "property": MessageLookupByLibrary.simpleMessage("房产"),
@@ -160,6 +181,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "send_feedback": MessageLookupByLibrary.simpleMessage("发送反馈"),
         "sent": MessageLookupByLibrary.simpleMessage("发送"),
         "service": MessageLookupByLibrary.simpleMessage("服务"),
+        "set_primary_card": MessageLookupByLibrary.simpleMessage("设为主卡"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
         "sign_up_success_txt1":
             MessageLookupByLibrary.simpleMessage("您已成功创建 YYHome 的帐户"),

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

@@ -1720,6 +1720,176 @@ class S {
     );
   }
 
+  /// `Pay MCST fees with`
+  String get pay_fees_with {
+    return Intl.message(
+      'Pay MCST fees with',
+      name: 'pay_fees_with',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Convert large recurring payments to`
+  String get convert_large_recurring_payments_to {
+    return Intl.message(
+      'Convert large recurring payments to',
+      name: 'convert_large_recurring_payments_to',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Convert your recurring expenses into valuable miles, rewards and cashback today!`
+  String get info_desc1 {
+    return Intl.message(
+      'Convert your recurring expenses into valuable miles, rewards and cashback today!',
+      name: 'info_desc1',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Fly business class for 60% less!`
+  String get info_desc2 {
+    return Intl.message(
+      'Fly business class for 60% less!',
+      name: 'info_desc2',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Sundy pays MCST fees with her credit card to help her accumulate a yearly expenditure of $62,000. Everything adds up!`
+  String get info_desc3 {
+    return Intl.message(
+      'Sundy pays MCST fees with her credit card to help her accumulate a yearly expenditure of \$62,000. Everything adds up!',
+      name: 'info_desc3',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Her credit card rewards her 1.5 miles* for every dollar spent, earning her 93,000 miles.`
+  String get info_desc4 {
+    return Intl.message(
+      'Her credit card rewards her 1.5 miles* for every dollar spent, earning her 93,000 miles.',
+      name: 'info_desc4',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Sundy is able to fly business class to Tokyo worth $4,000 at only $1,488 in YY Home Pay processing fees That is more than 60% in savings!`
+  String get info_desc5 {
+    return Intl.message(
+      'Sundy is able to fly business class to Tokyo worth \$4,000 at only \$1,488 in YY Home Pay processing fees That is more than 60% in savings!',
+      name: 'info_desc5',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `please check your credit card rewardsfor more information`
+  String get info_desc6 {
+    return Intl.message(
+      'please check your credit card rewardsfor more information',
+      name: 'info_desc6',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Add New Card`
+  String get add_new_card {
+    return Intl.message(
+      'Add New Card',
+      name: 'add_new_card',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Primary Card`
+  String get primary_card {
+    return Intl.message(
+      'Primary Card',
+      name: 'primary_card',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Set as Primary Card`
+  String get set_primary_card {
+    return Intl.message(
+      'Set as Primary Card',
+      name: 'set_primary_card',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Add Card`
+  String get add_card {
+    return Intl.message(
+      'Add Card',
+      name: 'add_card',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Credit or debit card`
+  String get credit_debit_card {
+    return Intl.message(
+      'Credit or debit card',
+      name: 'credit_debit_card',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Name on Card`
+  String get name_on_card {
+    return Intl.message(
+      'Name on Card',
+      name: 'name_on_card',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Card Number`
+  String get card_number {
+    return Intl.message(
+      'Card Number',
+      name: 'card_number',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Payment Details`
+  String get payment_details {
+    return Intl.message(
+      'Payment Details',
+      name: 'payment_details',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Notes to Recipient`
+  String get notes_to_recipient {
+    return Intl.message(
+      'Notes to Recipient',
+      name: 'notes_to_recipient',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Other`
   String get other {
     return Intl.message(

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

@@ -166,5 +166,22 @@
   "card_caps": "CARD",
   "change": "Change",
   "proceed_with_payment": "Proceed With Payment",
+  "pay_fees_with": "Pay MCST fees with",
+  "convert_large_recurring_payments_to": "Convert large recurring payments to",
+  "info_desc1": "Convert your recurring expenses into valuable miles, rewards and cashback today!",
+  "info_desc2": "Fly business class for 60% less!",
+  "info_desc3": "Sundy pays MCST fees with her credit card to help her accumulate a yearly expenditure of $62,000. Everything adds up!",
+  "info_desc4": "Her credit card rewards her 1.5 miles* for every dollar spent, earning her 93,000 miles.",
+  "info_desc5": "Sundy is able to fly business class to Tokyo worth $4,000 at only $1,488 in YY Home Pay processing fees That is more than 60% in savings!",
+  "info_desc6": "please check your credit card rewardsfor more information",
+  "add_new_card": "Add New Card",
+  "primary_card": "Primary Card",
+  "set_primary_card": "Set as Primary Card",
+  "add_card": "Add Card",
+  "credit_debit_card": "Credit or debit card",
+  "name_on_card": "Name on Card",
+  "card_number": "Card Number",
+  "payment_details": "Payment Details",
+  "notes_to_recipient": "Notes to Recipient",
   "other": "Other"
 }

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

@@ -166,5 +166,22 @@
   "card_caps": "信用卡",
   "change": "更换",
   "proceed_with_payment": "继续付款",
+  "pay_fees_with": "支付MCST费用",
+  "convert_large_recurring_payments_to": "将大额的经常性消费转换为",
+  "info_desc1": "立即将您的经常性消费转换为有价值的里程、奖励和现金返还!",
+  "info_desc2": "商务舱便宜60%!",
+  "info_desc3": "Sundy用信用卡支付MCST费用,以帮助她积累62000美元的年度支出。一切加起来!",
+  "info_desc4": "她的信用卡每消费一美元就奖励她1.5英里*,为她赚取93000英里。",
+  "info_desc5": "Sundy能够乘坐价值4000美元的商务舱前往东京,只需支付1488美元的YY Home Pay处理费,节省了60%以上!",
+  "info_desc6": "请查看您的信用卡奖励以获取更多信息",
+  "add_new_card": "添加新卡",
+  "primary_card": "主卡",
+  "set_primary_card": "设为主卡",
+  "add_card": "添加银行卡",
+  "credit_debit_card": "信用卡或借记卡",
+  "name_on_card": "银行卡姓名",
+  "card_number": "银行卡号",
+  "payment_details": "支付详情",
+  "notes_to_recipient": "收款人通知",
   "other": "其他"
 }

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

@@ -152,5 +152,22 @@
   "card_caps": "信用卡",
   "change": "更换",
   "proceed_with_payment": "继续付款",
+  "pay_fees_with": "支付MCST费用",
+  "convert_large_recurring_payments_to": "将大额的经常性消费转换为",
+  "info_desc1": "立即将您的经常性消费转换为有价值的里程、奖励和现金返还!",
+  "info_desc2": "商务舱便宜60%!",
+  "info_desc3": "Sundy用信用卡支付MCST费用,以帮助她积累62000美元的年度支出。一切加起来!",
+  "info_desc4": "她的信用卡每消费一美元就奖励她1.5英里*,为她赚取93000英里。",
+  "info_desc5": "Sundy能够乘坐价值4000美元的商务舱前往东京,只需支付1488美元的YY Home Pay处理费,节省了60%以上!",
+  "info_desc6": "请查看您的信用卡奖励以获取更多信息",
+  "add_new_card": "添加新卡",
+  "primary_card": "主卡",
+  "set_primary_card": "设为主卡",
+  "add_card": "添加银行卡",
+  "credit_debit_card": "信用卡或借记卡",
+  "name_on_card": "银行卡姓名",
+  "card_number": "银行卡号",
+  "payment_details": "支付详情",
+  "notes_to_recipient": "收款人通知",
   "other": "其他"
 }

+ 1 - 0
packages/cs_resources/pubspec.yaml

@@ -34,6 +34,7 @@ flutter:
     - assets/profile/
     - assets/facility/
     - assets/service/
+    - assets/payment/
 
 
 flutter_intl: