Browse Source

update service 支付相关

glglove 1 week ago
parent
commit
057f8de995
61 changed files with 1189 additions and 607 deletions
  1. 10 2
      packages/cpt_community/lib/modules/community/community_page.dart
  2. 3 3
      packages/cpt_community/lib/modules/garage/for_rent/for_rent_vm.dart
  3. 3 3
      packages/cpt_community/lib/modules/garage/for_sale/for_sale_vm.dart
  4. 1 1
      packages/cpt_community/lib/modules/garage/garagesale_post/garagesale_post_page.dart
  5. 2 1
      packages/cpt_services/lib/components/chooseAirConditionTitle.dart
  6. 3 2
      packages/cpt_services/lib/components/chooseHouseCleanContent.dart
  7. 2 2
      packages/cpt_services/lib/components/chooseVisitTimeContent.dart
  8. 1 1
      packages/cpt_services/lib/components/status_card_item.dart
  9. 86 52
      packages/cpt_services/lib/constants_services.dart
  10. 12 13
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_page.dart
  11. 5 0
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_state.dart
  12. 75 10
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.dart
  13. 1 1
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.g.dart
  14. 1 3
      packages/cpt_services/lib/modules/services/history/history_page.dart
  15. 5 5
      packages/cpt_services/lib/modules/services/history/history_vm.dart
  16. 1 1
      packages/cpt_services/lib/modules/services/history/history_vm.g.dart
  17. 10 7
      packages/cpt_services/lib/modules/services/homeService/home_service_page.dart
  18. 9 1
      packages/cpt_services/lib/modules/services/homeService/home_service_state.dart
  19. 59 13
      packages/cpt_services/lib/modules/services/homeService/home_service_vm.dart
  20. 1 1
      packages/cpt_services/lib/modules/services/homeService/home_service_vm.g.dart
  21. 2 1
      packages/cpt_services/lib/modules/services/homeService/service_card_item.dart
  22. 7 4
      packages/cpt_services/lib/modules/services/inProgress/in_progress_page.dart
  23. 7 5
      packages/cpt_services/lib/modules/services/inProgress/in_progress_vm.dart
  24. 1 1
      packages/cpt_services/lib/modules/services/inProgress/in_progress_vm.g.dart
  25. 1 0
      packages/cpt_services/lib/modules/services/repair/repair_page.dart
  26. 8 3
      packages/cpt_services/lib/modules/services/repair/repair_vm.dart
  27. 2 2
      packages/cpt_services/lib/modules/services/repair_history/history_page.dart
  28. 2 7
      packages/cpt_services/lib/modules/services/repair_history/history_vm.dart
  29. 1 1
      packages/cpt_services/lib/modules/services/repair_history/history_vm.g.dart
  30. 11 9
      packages/cpt_services/lib/modules/services/repair_homeService/home_service_page.dart
  31. 8 1
      packages/cpt_services/lib/modules/services/repair_homeService/home_service_state.dart
  32. 67 37
      packages/cpt_services/lib/modules/services/repair_homeService/home_service_vm.dart
  33. 1 1
      packages/cpt_services/lib/modules/services/repair_homeService/home_service_vm.g.dart
  34. 2 2
      packages/cpt_services/lib/modules/services/repair_inProgress/in_progress_page.dart
  35. 2 8
      packages/cpt_services/lib/modules/services/repair_inProgress/in_progress_vm.dart
  36. 1 1
      packages/cpt_services/lib/modules/services/repair_inProgress/in_progress_vm.g.dart
  37. 134 52
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.dart
  38. 1 1
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.g.dart
  39. 55 45
      packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_page.dart
  40. 12 3
      packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_state.dart
  41. 34 27
      packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_vm.dart
  42. 1 1
      packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_vm.g.dart
  43. 1 1
      packages/cpt_services/lib/modules/services/service_repair_detail/service_repair_detail_vm.g.dart
  44. 1 1
      packages/cpt_services/lib/modules/services/services_main_vm.dart
  45. 2 2
      packages/cpt_services/lib/modules/services/services_vm.dart
  46. 8 3
      packages/cpt_services/lib/respository/services_respository.dart
  47. 50 14
      packages/cpt_services/lib/router/page/services_page_router.gr.dart
  48. 1 1
      packages/cs_domain/lib/entity/paid_service_pay_success_info_entity.dart
  49. 203 176
      packages/cs_domain/lib/entity/service_order_detail_entity.dart
  50. 13 4
      packages/cs_domain/lib/generated/json/base/json_convert_content.dart
  51. 18 9
      packages/cs_domain/lib/generated/json/comm_payment_detail_entity.g.dart
  52. 9 4
      packages/cs_domain/lib/generated/json/paid_service_pay_success_info_entity.g.dart
  53. 14 7
      packages/cs_domain/lib/generated/json/payment_page_entity.g.dart
  54. 110 42
      packages/cs_domain/lib/generated/json/service_order_detail_entity.g.dart
  55. 9 1
      packages/cs_resources/lib/generated/intl/messages_en.dart
  56. 11 1
      packages/cs_resources/lib/generated/intl/messages_zh_CN.dart
  57. 11 1
      packages/cs_resources/lib/generated/intl/messages_zh_HK.dart
  58. 53 3
      packages/cs_resources/lib/generated/l10n.dart
  59. 7 1
      packages/cs_resources/lib/l10n/intl_en.arb
  60. 9 1
      packages/cs_resources/lib/l10n/intl_zh_CN.arb
  61. 9 1
      packages/cs_resources/lib/l10n/intl_zh_HK.arb

+ 10 - 2
packages/cpt_community/lib/modules/community/community_page.dart

@@ -351,6 +351,15 @@ class CommunityPage extends HookConsumerWidget with WidgetsBindingObserver {
 
       Widget _buildGarageSalePost(BuildContext context, WidgetRef ref, vm, state){
         final userConfig = UserConfigService.getState(ref: ref);
+        String title = S.current.sell_item;
+        if(state.currentCategoryIdx == 1 ){
+          // grage  sale
+          if(state.currentPageViewIdx == 3){
+            title = S.current.sell_item;
+          }else if(state.currentPageViewIdx == 4){
+            title = S.current.rent_item;
+          }
+        }
         return Container(
           height: 65.5,
           width: double.infinity,
@@ -367,8 +376,7 @@ class CommunityPage extends HookConsumerWidget with WidgetsBindingObserver {
               ),
               Expanded(
                 child: MyTextView(
-                  S.current.sell_item,
-                  // S.current.rent_item,
+                  title,
                   textColor: DarkThemeUtil.multiColors(context, context.appColors.textBlack, darkColor: Colors.white),
                   fontSize: 15,
                   marginLeft: 15,

+ 3 - 3
packages/cpt_community/lib/modules/garage/for_rent/for_rent_vm.dart

@@ -26,9 +26,9 @@ class ForrentVm extends _$ForrentVm {
   int _count = 0; // 总条数
 
   Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+    'category_id': '',
+    'keyword': '',
+    'is_liked': '',
   };
 
   // Refresh 控制器

+ 3 - 3
packages/cpt_community/lib/modules/garage/for_sale/for_sale_vm.dart

@@ -28,9 +28,9 @@ class ForsaleVm extends _$ForsaleVm {
   int _count = 0; // 总条数
 
   Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+    'category_id': '',
+    'keyword': '',
+    'is_liked': '',
   };
 
   // Refresh 控制器

+ 1 - 1
packages/cpt_community/lib/modules/garage/garagesale_post/garagesale_post_page.dart

@@ -59,7 +59,7 @@ class GaragesalePostPage extends HookConsumerWidget {
         (type==1 || type==2) ? S.current.post_new_item : S.current.edit,
         backgroundColor: context.appColors.backgroundWhite,
       ),
-      backgroundColor: DarkThemeUtil.multiColors(context, ColorUtils.string2Color("#F2F3F6"), darkColor: Colors.black),
+      backgroundColor: DarkThemeUtil.multiColors(context, ColorUtils.string2Color("#ffffff"), darkColor: Colors.black),
       body: Column(
           children: [
             Expanded(

+ 2 - 1
packages/cpt_services/lib/components/chooseAirConditionTitle.dart

@@ -1,4 +1,5 @@
 
+import 'package:cpt_services/constants_services.dart';
 import 'package:cpt_services/modules/services/service_clean_detail/service_clean_detail_vm.dart';
 import 'package:cs_resources/generated/l10n.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
@@ -59,7 +60,7 @@ class ChooseAirConditionTitle extends HookConsumerWidget {
                   // maxLines: 5,
                 ),
                 MyTextView(
-                  "\$${totalPrice.value}",
+                  "${servicesConstants.dollarUnit}${totalPrice.value}",
                   textColor: context.appColors.textPrimary,
                   textAlign: TextAlign.left,
                   isFontMedium: true,

+ 3 - 2
packages/cpt_services/lib/components/chooseHouseCleanContent.dart

@@ -1,5 +1,6 @@
 
 import 'package:cpt_services/components/status_card_item.dart';
+import 'package:cpt_services/constants_services.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:domain/entity/paid_service_detail_entity.dart';
 import 'package:flutter/material.dart';
@@ -78,7 +79,7 @@ class ChooseHouseCleanContent extends HookConsumerWidget {
     return Container(
       padding: const EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10),
       margin: const EdgeInsets.only(left: 15, right: 15, top: 0, bottom: 0),
-      color: context.appColors.whiteBG,
+      color: DarkThemeUtil.multiColors(context, ColorUtils.string2Color("#F8F8F8"), darkColor: context.appColors.whiteBG),
       child: Column(
         children: [
           Row(
@@ -117,7 +118,7 @@ class ChooseHouseCleanContent extends HookConsumerWidget {
               //   fontWeight: FontWeight.w500,
               // )
               MyButton(
-                text: '\$$price',
+                text: '${servicesConstants.dollarUnit}$price',
                 onPressed: (){
                   if(!isDisable){
                     vm.handlerChangeItemChecked(context, index);

+ 2 - 2
packages/cpt_services/lib/components/chooseVisitTimeContent.dart

@@ -153,9 +153,9 @@ class ChooseVisitTimeContent extends HookConsumerWidget {
                     }
                   },
                   text: '$timeText',
-                  padding: const EdgeInsets.only(left: 5, right: 5, top: 5, bottom: 5),
+                  padding: const EdgeInsets.only(left: 5, right: 5, top: 0, bottom: 0),
                   textColor: itemIsChecked ?context.appColors.textPrimary: context.appColors.textDarkGray999,
-                  backgroundColor: DarkThemeUtil.multiColors(context, context.appColors.disEnableGray, darkColor: itemIsChecked? AppColorsTheme.colorPrimary:Colors.black),
+                  backgroundColor: DarkThemeUtil.multiColors(context, itemIsChecked ?ColorUtils.string2Color("#D7F6FF") : context.appColors.disEnableGray, darkColor: itemIsChecked? AppColorsTheme.colorPrimary:Colors.black),
                   enable: enable.value,
                   disabledBackgroundColor: context.appColors.disEnableGray,
                   disabledTextColor: context.appColors.textWhite,

+ 1 - 1
packages/cpt_services/lib/components/status_card_item.dart

@@ -105,7 +105,7 @@ class StausCardItem extends HookConsumerWidget {
                     ),
                     // 公司名称
                     MyTextView(
-                      '\$${item?.orderProducts[0].totalAmount ?? "-"}',
+                      '${servicesConstants.dollarUnit}${item?.orderProducts[0].totalAmount ?? "-"}',
                       fontSize: 17,
                       maxLines: 1,
                       isFontBold: true,

+ 86 - 52
packages/cpt_services/lib/constants_services.dart

@@ -1,6 +1,17 @@
 import 'package:cs_resources/generated/l10n.dart';
 
+import 'modules/services/homeService/home_service_vm.dart';
+
+
 class servicesConstants {
+  static const String dollarUnit = "\$";
+   // homesevice  sortBy options
+  static Map<String, String> sortByOptionsMap = {
+    S.current.most_likes: SortByType.likes_count.name,
+    S.current.most_bookmarked: SortByType.orders_count.name,
+    S.current.view_at_most: SortByType.clicks_count.name,
+  };
+
    static Map<String, Map<String, dynamic>> servicesType = {
      "houseCleaning": {
        "text": S.current.house_cleaning,
@@ -21,88 +32,111 @@ class servicesConstants {
 
    static Map<String, dynamic> servicesStatus = {
      "0": {
-       "text": S.current.pending,
-       "type": "pending",
+       "text": S.current.wait_paid,
+       "type": "Wait Paid",
        'code': 0,
      },
      "1": {
-       "text": S.current.in_progress,
-       "type": "inProgress",
+       "text": S.current.wait_service,
+       "type": "Wait Service",
        'code': 1,
      },
      "2": {
        "text": S.current.completed,
-       "type": "completed",
+       "type": "Completed",
        'code': 2,
      },
      "3": {
        "text": S.current.canceled,
-       "type": "canceled",
+       "type": "Canceled",
        'code': 3,
      }
   };
 
-   static Map<int, List<Map<String, dynamic>>> servicesStatusActionBtnList = {
-     // pending, inProgress, completed, canceled
-     servicesStatus['0']['code']: [
+   static Map<String, List<Map<String, dynamic>>> servicesStatusActionBtnList = {
+     // 0 waitPaid, 1 waitService, 2 completed, 3 canceled
+     '0': [
        actionBtn['0'],
-       actionBtn['1'],
        actionBtn['2'],
+       actionBtn['3'],
      ],
-     servicesStatus['1']['code']: [
-       actionBtn['0'],
+     '1': [
        actionBtn['1'],
        actionBtn['2'],
-     ],
-     servicesStatus['2']['code']: [
        actionBtn['3'],
+     ],
+     '2': [
        actionBtn['4'],
+       actionBtn['5'],
      ],
-     servicesStatus['3']['code']: [
-       actionBtn['3'],
+     '3': [
+       actionBtn['4'],
      ]
    };
 
-  static Map<String, dynamic> actionBtn = {
+   static Map<String, dynamic> actionBtn = {
+       "0": {
+         "text": S.current.proceed_with_payment,
+         "type": "proceedWidthPayment",
+         'code': 0,
+         'btnColor': '#FFFE6C00',
+         'btnWidth': 65.0,
+         'btnHeight': 35.0,
+       },
+       "1": {
+         "text": S.current.cancel,
+         "type": "cancel",
+         'code': 1,
+         'btnColor': '#FFFE6C00',
+         'btnWidth': 65.0,
+         'btnHeight': 35.0,
+       },
+       "2": {
+         "text": S.current.contact_merchant,
+         "type": "contactMerchant",
+         'code': 2,
+         'btnColor': '#FF01B5EB',
+         'btnWidth': 115.0,
+         'btnHeight': 35.0,
+       },
+      "3": {
+        "text": S.current.contact_service_personnel,
+        "type": "contactServicePersonnel",
+        'code': 3,
+        'btnColor': '#FF01CA48',
+        'btnWidth': 115.0,
+        'btnHeight': 35.0,
+      },
+      "4": {
+        "text": S.current.delete,
+        "type": "delete",
+        'code': 4,
+        'btnColor': '#FFFE4066',
+        'btnWidth': 98.0,
+        'btnHeight': 30.0,
+      },
+      "5": {
+        "text": S.current.evaluate,
+        "type": "evaluate",
+        'code': 5,
+        'btnColor': '#FF01B5EB',
+        'btnWidth': 98.0,
+        'btnHeight': 30.0,
+      }
+    };
+
+
+   //  咨询 类的 状态
+   static Map<String, dynamic> servicesInquiryStatus = {
      "0": {
-       "text": S.current.cancel,
-       "type": "cancel",
+       "text": S.current.in_progress,
+       "type": "inProgress",
        'code': 0,
-       'btnColor': '#FFFE6C00',
-       'btnWidth': 65.0,
-       'btnHeight': 35.0,
      },
      "1": {
-       "text": S.current.contact_merchant,
-       "type": "contactMerchant",
+       "text": S.current.completed,
+       "type": "completed",
        'code': 1,
-       'btnColor': '#FF01B5EB',
-       'btnWidth': 115.0,
-       'btnHeight': 35.0,
      },
-    "2": {
-      "text": S.current.contact_service_personnel,
-      "type": "contactServicePersonnel",
-      'code': 2,
-      'btnColor': '#FF01CA48',
-      'btnWidth': 115.0,
-      'btnHeight': 35.0,
-    },
-    "3": {
-      "text": S.current.delete,
-      "type": "delete",
-      'code': 3,
-      'btnColor': '#FFFE4066',
-      'btnWidth': 98.0,
-      'btnHeight': 30.0,
-    },
-    "4": {
-      "text": S.current.evaluate,
-      "type": "evaluate",
-      'code': 4,
-      'btnColor': '#FF01B5EB',
-      'btnWidth': 98.0,
-      'btnHeight': 30.0,
-    }
-  };
+   };
 }

+ 12 - 13
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_page.dart

@@ -38,35 +38,34 @@ import '../../../components/status_card_item.dart';
 class CleanOrderDetailPage extends HookConsumerWidget {
   final int id; // 订单id
   final String cleanServiceType; // 订单类型
-  final int serviesStatusCode; // 订单状态
 
   const CleanOrderDetailPage({
     Key? key,
     @PathParam('id') required this.id,
     @PathParam('cleanServiceType') required this.cleanServiceType,
-    @PathParam('serviesStatusCode') required this.serviesStatusCode,
   }) : super(key: key);
 
   //启动当前页面
-  static void startInstance({BuildContext? context, required int id, required String cleanServiceType, required int serviesStatusCode}) {
+  static void startInstance({BuildContext? context, required int id, required String cleanServiceType }) {
     if (context != null) {
-      context.router.push(CleanOrderDetailPageRoute(id: id, cleanServiceType: cleanServiceType, serviesStatusCode: serviesStatusCode));
+      context.router.push(CleanOrderDetailPageRoute(id: id, cleanServiceType: cleanServiceType,));
     } else {
-      appRouter.push(CleanOrderDetailPageRoute(id: id, cleanServiceType: cleanServiceType, serviesStatusCode: serviesStatusCode));
+      appRouter.push(CleanOrderDetailPageRoute(id: id, cleanServiceType: cleanServiceType,));
     }
   }
 
+
   @override
   Widget build(BuildContext context, WidgetRef ref) {
     final vm = ref.read(cleanOrderDetailVmProvider.notifier);
     final state = ref.watch(cleanOrderDetailVmProvider);
     // final appConfigState = ref.watch(appConfigServiceProvider)
 
-    List<Map<String, dynamic>> actionBtnList = servicesConstants.servicesStatusActionBtnList[serviesStatusCode]!;
-    Log.d("actionBtnList   $actionBtnList");
+    // List<Map<String, dynamic>> actionBtnList = servicesConstants.servicesStatusActionBtnList[serviesStatusCode]!;
+    // Log.d("actionBtnList   $actionBtnList");
 
     useEffect(() {
-      vm.setInitPageData(id: id, cleanServiceType: cleanServiceType, serviceStatusCode: serviesStatusCode);
+      vm.setInitPageData(id: id, cleanServiceType: cleanServiceType,);
       // 组件挂载时执行 - 执行接口请求
       Future.microtask(() => vm.fetchOrderDetailData(id));
       return () {
@@ -109,7 +108,7 @@ class CleanOrderDetailPage extends HookConsumerWidget {
                   Visibility(
                     visible: state.loadingState == LoadState.State_Success,
                     child:
-                        state.datas != null ? _buildActionSection(context, state, vm, ref, id, cleanServiceType, serviesStatusCode, actionBtnList) : Container(),
+                    (state.datas != null && state.actionBtnList !=null && state.actionBtnList!.length>0) ? _buildActionSection(context, state, vm, ref, id, cleanServiceType,  state.actionBtnList??[]) : Container(),
                   )
                 ],
               ),
@@ -215,7 +214,7 @@ class CleanOrderDetailPage extends HookConsumerWidget {
                 crossAxisAlignment: CrossAxisAlignment.center,
                 children: [
                   AnimatedRatingStars(
-                    initialRating: state.datas?.orderService?.evaluationsAvgScore ?? 0.0,
+                    initialRating: (state.datas?.orderService?.evaluationsAvgScore ?? 0.0).toDouble(),
                     onChanged: (rating) {},
                     readOnly: true,
                     displayRatingValue: true,
@@ -403,7 +402,7 @@ class CleanOrderDetailPage extends HookConsumerWidget {
               // )
               Container(
                 child: MyButton(
-                  text: '\$${item.totalAmount??""}',
+                  text: '${servicesConstants.dollarUnit}${item.totalAmount??""}',
                   onPressed: null,
                   minWidth: 80,
                   minHeight: 40,
@@ -442,7 +441,7 @@ class CleanOrderDetailPage extends HookConsumerWidget {
           textColor: context.appColors.textBlack,
         ),
         MyTextView(
-          '\$${state.datas?.totalAmount ?? 0}',
+          '${servicesConstants.dollarUnit}${state.datas?.totalAmount ?? 0}',
           fontSize: 15,
           textColor: context.appColors.textBlack,
           isFontBold: true,
@@ -646,7 +645,7 @@ class CleanOrderDetailPage extends HookConsumerWidget {
 
   // 底部操作区域
   Widget _buildActionSection(
-      BuildContext context, state, vm, WidgetRef ref, int id, String cleanServiceType, int serviesStatusCode, List<Map<String, dynamic>> actionBtnList) {
+      BuildContext context, state, vm, WidgetRef ref, int id, String cleanServiceType,List<Map<String, dynamic>> actionBtnList) {
     return LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) {
       final maxHeight = constraints.maxHeight;
       final minHeight = constraints.minHeight;

+ 5 - 0
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_state.dart

@@ -7,6 +7,7 @@ class CleanOrderDetailState {
   LoadState loadingState;
   String? errorMessage;
   double? totalPrice;
+  List<Map <String, dynamic>>? actionBtnList;
 
   ServiceOrderDetailEntity? datas;
 
@@ -15,10 +16,12 @@ class CleanOrderDetailState {
   Map<String, Map<String, dynamic>>? cancelFormData;
 
 
+
   CleanOrderDetailState({
     this.loadingState = LoadState.State_Loading,
     String? errorMessage,
     double? totalPrice,
+    this.actionBtnList,
     this.cancelReason,
     Map<String, Map<String, dynamic>>? cancelFormData,
     this.datas,
@@ -36,6 +39,7 @@ class CleanOrderDetailState {
     LoadState? loadingState,
     String? errorMessage,
     double? totalPrice,
+    List<Map<String, dynamic>>? actionBtnList,
     String? cancelReason,
     Map<String, Map<String, dynamic>>? cancelFormData,
     ServiceOrderDetailEntity? datas,
@@ -44,6 +48,7 @@ class CleanOrderDetailState {
       loadingState: loadingState ?? this.loadingState,
       errorMessage: errorMessage ?? this.errorMessage,
       totalPrice: totalPrice ?? this.totalPrice,
+      actionBtnList: actionBtnList ?? this.actionBtnList,
       cancelReason: cancelReason ?? this.cancelReason,
       cancelFormData: cancelFormData ?? this.cancelFormData,
       datas: datas ?? this.datas,

+ 75 - 10
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.dart

@@ -3,6 +3,7 @@ import 'package:cpt_services/components/chooseHouseCleanContent_vm.dart';
 import 'package:cpt_services/components/chooseVisitTimeContent.dart';
 import 'package:cpt_services/components/chooseVisitTimeContent_vm.dart';
 import 'package:cpt_services/components/chooseVisitTimeTitle.dart';
+import 'package:cpt_services/modules/services/service_order_confirm/service_order_confirm_vm.dart';
 import 'package:cs_resources/generated/assets.dart';
 import 'package:cs_resources/generated/l10n.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
@@ -37,6 +38,7 @@ import '../../../respository/services_respository.dart';
 import '../../../router/page/services_page_router.dart';
 import '../clean_order_cancel_success/clean_order_cancel_success_page.dart';
 import '../service_evaluate_create/service_evaluate_create_page.dart';
+import '../service_pay_success/service_pay_success_page.dart';
 import 'cancelOrderDialogContent.dart';
 import 'clean_order_detail_state.dart';
 
@@ -49,7 +51,7 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
 
   late int _detailId;
   late String _cleanServiceType;
-  late int _detailServiceStatusCode;
+  late String _orderId;
 
   // Refresh 控制器
   final EasyRefreshController refreshController = EasyRefreshController(
@@ -82,10 +84,9 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
     state = state.copyWith(loadingState: loadState, errorMessage: errorMsg);
   }
 
-  setInitPageData({required int id, required String cleanServiceType, required int serviceStatusCode}) {
+  setInitPageData({required int id, required String cleanServiceType,}) {
     _detailId = id;
     _cleanServiceType = cleanServiceType;
-    _detailServiceStatusCode = serviceStatusCode;
   }
 
   // 初始化页面数据
@@ -104,6 +105,15 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
   }
 
   void _callPhone(String? phone) {
+    if(phone == null || phone.isEmpty){
+      // appRouter.pushAndPopUntil(
+      //   ServicePaySuccessPageRoute(id: _detailId!, cleanServiceType: _cleanServiceType),
+      //   predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
+      //     return route.settings.name != 'CleanOrderDetailPageRoute';
+      //   });
+
+      return ToastEngine.show("Phone is null");
+    }
     PermissionEngine().requestCallPhonePermission(() async {
       final Uri launchUri = Uri(scheme: 'tel', path: phone);
       if (await canLaunchUrl(launchUri)) {
@@ -116,16 +126,34 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
 
   handlerClickActionBtn(BuildContext context, Map<String, dynamic> actionBtn) {
     final actionBtnCode = actionBtn['code']!.toString();
+    final vm = ref.read(serviceOrderConfirmVmProvider.notifier);
     switch (actionBtnCode) {
       case '0':
-        // Cancel
-        handlerCancelOrder(context);
+        // proceedWidthPayment
+        vm.handlerExcutePay(true, orderId: _orderId, scallback: (String? orderId, String? orderDetailId){
+          Log.d("成功");
+          int orderid_int = int.parse(orderDetailId!);
+          // 跳入 支付成功页面
+          // ServicePaySuccessPage.startInstance();
+          appRouter.pushAndPopUntil(
+              ServicePaySuccessPageRoute(id: orderid_int, cleanServiceType: _cleanServiceType),
+              predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
+            return route.settings.name != 'CleanOrderDetailPageRoute';
+          });
+        }, fcallback: (String? orderId, String? orderDetailId){
+          Log.d("失败");
+        });
         break;
       case '1':
+      // cancel
+        handlerCancelOrder(context);
+        break;
+      case '2':
         // Contact Merchant
+      Log.d(state.datas?.merchant?.contactPhone);
         _callPhone(state.datas?.merchant?.contactPhone);
         break;
-      case '2':
+      case '3':
         // Contact Service Personnel
         if (Utils.isNotEmpty(state.datas?.staff?.phone)) {
           _callPhone(state.datas?.staff?.phone);
@@ -133,11 +161,11 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
           ToastEngine.show("Currently, no staffs have been assigned");
         }
         break;
-      case '3':
+      case '4':
         // Delete
         handlerDeleteOrder(context);
         break;
-      case '4':
+      case '5':
         // Evaluate 去评价
         ServiceEvaluateCreatePage.startInstance(
           id: _detailId,
@@ -223,6 +251,7 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
     state = state.copyWith(cancelReason: cancelReason);
   }
 
+  // 取消订单
   submitCancelOrder(BuildContext context) async {
     Log.d("cancelReason: ${state.cancelReason}");
 
@@ -251,7 +280,7 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
     state = state.copyWith(cancelReason: "", cancelFormData: state.cancelFormData);
   }
 
-  //获取详情数据
+  //获取订单详情数据
   fetchOrderDetailData(int id) async {
     if (_needShowPlaceholder) {
       changeLoadingState(LoadState.State_Loading, null);
@@ -260,10 +289,46 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
     final result = await servicesRespositoryInstance.fetchPaidServiceCleanOrderDetail(id: id.toString(), cancelToken: cancelToken);
 
     if (result.isSuccess) {
-      state = state.copyWith(datas: result.data);
+      List<Map<String, dynamic>>? actionBtnList = handlerGetActionBtnList(orderStatus: result.data?.orderStatus, cancelStatus: result.data?.cancelStatus);
+      Log.d("当前页面的 actionBtnList: $actionBtnList");
+      _orderId = result.data?.order!.id.toString()??"";
+      state = state.copyWith(datas: result.data, actionBtnList: actionBtnList);
       changeLoadingState(LoadState.State_Success, null);
     } else {
       changeLoadingState(LoadState.State_Error, result.errorMsg ?? "UnKnow Error");
     }
   }
+
+  // 获取 当前页面对应 操作按钮
+  List<Map<String, dynamic>>? handlerGetActionBtnList({int? orderStatus, String? cancelStatus}){
+    //orderStatus 订单状态(0=待支付,1=已支付待服务,2=已服务完结)
+    // cancelStatus 取消状态(0=未取消,1=自己主动取消,2=商家取消,3=平台取消)
+    String? serviceStatus;
+    switch (cancelStatus) {
+      case '0':
+        // 未取消
+        if(orderStatus != null){
+          serviceStatus = orderStatus!.toString();
+        }
+        break;
+      case '1':
+      // 自己主动取消
+        serviceStatus = '3';
+        break;
+      case '2':
+      // 商家取消
+        serviceStatus = '3';
+        break;
+      case '3':
+        //平台取消
+        serviceStatus = '3';
+        break;
+      default:
+        break;
+    }
+    Log.d("当前页面最终的 serviceStatus: $serviceStatus");
+    if(serviceStatus != null){
+      return servicesConstants.servicesStatusActionBtnList[serviceStatus];
+    }
+  }
 }

+ 1 - 1
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.g.dart

@@ -7,7 +7,7 @@ part of 'clean_order_detail_vm.dart';
 // **************************************************************************
 
 String _$cleanOrderDetailVmHash() =>
-    r'4d097e6e4a597cc6e047ae2f78afc9792e5ce513';
+    r'cd603d5ac397edf6c20c776ff708a10f79fe675b';
 
 /// See also [CleanOrderDetailVm].
 @ProviderFor(CleanOrderDetailVm)

+ 1 - 3
packages/cpt_services/lib/modules/services/history/history_page.dart

@@ -97,13 +97,11 @@ class HistoryPage extends HookConsumerWidget {
                         state.list[index],
                         vm,
                         cleanServiceType,
-                        serviceStatusCode,
                       ).onTap(() {
                         vm.gotoCleanOrderDetailPage(
                           context,
                           state.list[index].id != null ? int.tryParse(state.list[index].id!) ?? 0 : 0,
                           cleanServiceType,
-                          serviceStatusCode,
                         );
                       });
                     },
@@ -116,7 +114,7 @@ class HistoryPage extends HookConsumerWidget {
     );
   }
 
-  Widget _buildHistoryItem(BuildContext context, WidgetRef ref, GarageSaleHistoryList item, vm, String cleanServiceType, int serviceStatusCode) {
+  Widget _buildHistoryItem(BuildContext context, WidgetRef ref, GarageSaleHistoryList item, vm, String cleanServiceType) {
     return Container(
       margin: const EdgeInsets.only(top: 10),
       width: double.infinity,

+ 5 - 5
packages/cpt_services/lib/modules/services/history/history_vm.dart

@@ -29,9 +29,7 @@ class HistoryVm extends _$HistoryVm with DioCancelableMixin {
   int _count = 0; // 总条数
 
   Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+    'keyword': '',
   };
 
   // Refresh 控制器
@@ -120,7 +118,9 @@ class HistoryVm extends _$HistoryVm with DioCancelableMixin {
     // 获取列表
     var listResult = await servicesRespositoryInstance.fetchPaidServiceOrderList(
       type: "history",
+      keyword: _queryParams['keyword']??'',
       curPage: _page,
+      limit: _limit,
       cancelToken: cancelToken,
     );
 
@@ -197,7 +197,7 @@ class HistoryVm extends _$HistoryVm with DioCancelableMixin {
   }
 
   //  去详情页面
-  gotoCleanOrderDetailPage(BuildContext context, int id, String cleanServiceType, int serviesStatusCode) {
-    CleanOrderDetailPage.startInstance(id: id, cleanServiceType: cleanServiceType, serviesStatusCode: serviesStatusCode);
+  gotoCleanOrderDetailPage(BuildContext context, int id, String cleanServiceType,) {
+    CleanOrderDetailPage.startInstance(id: id, cleanServiceType: cleanServiceType,);
   }
 }

+ 1 - 1
packages/cpt_services/lib/modules/services/history/history_vm.g.dart

@@ -6,7 +6,7 @@ part of 'history_vm.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$historyVmHash() => r'e27a0b2491a494df57ba02b193bb7ad6ca384b54';
+String _$historyVmHash() => r'72563ddbff9726bd22c3a4ab010b1b58d23bd06d';
 
 /// See also [HistoryVm].
 @ProviderFor(HistoryVm)

+ 10 - 7
packages/cpt_services/lib/modules/services/homeService/home_service_page.dart

@@ -184,7 +184,10 @@ class HomeServicePage extends HookConsumerWidget {
                 fontSize: 15,
                 isFontRegular: true,
                 textAlign: TextAlign.center,
-              ),
+              ).onTap((){
+                Log.d("点击了sort");
+                vm.handlerClickDescSort(context, state.sort);
+              }),
               Wrap(
                 crossAxisAlignment: WrapCrossAlignment.center,
                 children: [
@@ -209,13 +212,13 @@ class HomeServicePage extends HookConsumerWidget {
                     ],
                   ),
                 ],
-              ),
+              ).onTap((){
+                Log.d("点击了sortBy");
+                vm.handlerClickSortByIcon(context);
+                expandSortIcon.value = !expandSortIcon.value;
+              }),
             ],
-          ).onTap((){
-            Log.d("点击了sort");
-            vm.handlerClickSortIcon(context);
-            expandSortIcon.value = !expandSortIcon.value;
-          }),
+          ),
 
           // 排序
           const MyAssetImage(

+ 9 - 1
packages/cpt_services/lib/modules/services/homeService/home_service_state.dart

@@ -1,6 +1,9 @@
 import 'package:domain/entity/paid_service_entity.dart';
 import 'package:widgets/load_state_layout.dart';
 
+import '../../../constants_services.dart';
+import 'home_service_vm.dart';
+
 class HomeServiceState {
   //页面 LoadView 状态的展示
   LoadState loadingState;
@@ -8,8 +11,10 @@ class HomeServiceState {
 
   String? keyword;
   bool? isLiked;
+
+  String sort = defaultSortType.name;
   // contact type 类型选项
-  final List<String> sortByOptionsList = ["Most Likes", "Most bookmarked", "View at Most"];
+  final List<String> sortByOptionsList = servicesConstants.sortByOptionsMap.keys.toList();
   String? sortBySelectedOption;
 
   List<PaidServiceList> activeCateGoryList;
@@ -21,6 +26,7 @@ class HomeServiceState {
     String? errorMessage,
     this.keyword,
     this.isLiked,
+    required this.sort,
     this.sortBySelectedOption ,
     this.activeCateGoryList = const [],
     required this.list,
@@ -31,6 +37,7 @@ class HomeServiceState {
     String? errorMessage,
     String? keyword,
     bool? isLiked,
+    String? sort,
     String? sortBySelectedOption,
     List<PaidServiceList>? activeCateGoryList,
     List<PaidServiceList>? list,
@@ -40,6 +47,7 @@ class HomeServiceState {
       errorMessage: errorMessage ?? this.errorMessage,
       keyword: keyword ?? this.keyword,
       isLiked: isLiked ?? this.isLiked,
+      sort: sort ?? this.sort,
       sortBySelectedOption: sortBySelectedOption ?? this.sortBySelectedOption,
       activeCateGoryList: activeCateGoryList ?? this.activeCateGoryList,
       list: list ?? this.list,

+ 59 - 13
packages/cpt_services/lib/modules/services/homeService/home_service_vm.dart

@@ -22,11 +22,26 @@ import 'package:widgets/widget_export.dart';
 import '../../../constants_services.dart';
 import '../../../respository/services_respository.dart';
 import '../../../router/page/services_page_router.dart';
+import '../services_main_vm.dart';
 import '../services_vm.dart';
 import 'home_service_state.dart';
 
 part 'home_service_vm.g.dart';
 
+enum SortByType {
+  likes_count,
+  orders_count,
+  clicks_count,
+}
+
+enum SortType {
+  desc,
+  asc,
+}
+
+const SortType defaultSortType = SortType.desc;
+const SortByType defaultSortByType = SortByType.clicks_count;
+
 @riverpod
 class HomeServiceVm extends _$HomeServiceVm {
   late ServicesRespository servicesRespositoryInstance;
@@ -39,10 +54,13 @@ class HomeServiceVm extends _$HomeServiceVm {
   bool _isSingleSelect = true;
   List<Map<String, dynamic>> _currentSelectedCategory = [];
 
-  Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+
+  final Map<String, dynamic> _queryParams = {
+    'category_id': '',
+    'keyword': '',
+    'sort': defaultSortType.name, // 排序(desc=降序,asc=升序)
+    'sort_by': defaultSortByType.name, // 排序(likes_count=点赞量,orders_count=下单量,clicks_count=点击量)
+    'is_liked': '',
   };
 
   // Refresh 控制器
@@ -53,6 +71,7 @@ class HomeServiceVm extends _$HomeServiceVm {
 
   HomeServiceState initState() {
     return HomeServiceState(
+        sort: defaultSortType.name,
         list: []
     );
   }
@@ -173,13 +192,15 @@ class HomeServiceVm extends _$HomeServiceVm {
     // ];
     // handlerResultData(true, list:list);
 
+    Log.d("-----55555-------$_queryParams");
+
     try {
       //请求网络
       Map<String, dynamic>  params = {
-        "sort": null, // 排序(desc=降序,asc=升序)
-        "sort_by": null,  // 排序(likes_count=点赞量,orders_count=下单量,clicks_count=点击量)
-        "category_id": _queryParams['category_id'],
-        "keyword": _queryParams['keyword'],
+        "sort": _queryParams['sort']?? SortType.desc.name, // 排序(desc=降序,asc=升序)
+        "sort_by": _queryParams['sort_by']?? SortByType.clicks_count.name,  // 排序(likes_count=点赞量,orders_count=下单量,clicks_count=点击量)
+        "category_id": _queryParams['category_id']??'',
+        "keyword": _queryParams['keyword']??'',
         "page": _page,
         "limit": _limit,
       };
@@ -320,9 +341,13 @@ class HomeServiceVm extends _$HomeServiceVm {
         Log.d("取StorageCategoryList 缓存: $StorageCategoryList ");
         serviceCategoryList = StorageCategoryList;
       } else {
-        final paidServiceLayoutVm = ref.watch(servicesVmProvider.notifier);
+        // final paidServiceLayoutVm = ref.watch(servicesVmProvider.notifier);
+        // Map<String, dynamic> params = {
+        //   'parent_id': paidServiceLayoutVm?.state.parentCategoryId,
+        // };
+        final serviceMainVm = ref.read(serviceMainVmProvider.notifier);
         Map<String, dynamic> params = {
-          'parent_id': paidServiceLayoutVm?.state.parentCategoryId,
+          'parent_id': serviceMainVm?.state.curId,
         };
         final result = await servicesRespositoryInstance.fetchServiceCateGoryList(params);
         if (result.isSuccess) {
@@ -397,16 +422,20 @@ class HomeServiceVm extends _$HomeServiceVm {
           isShowCancelBtn:false,
           confirmAction: (){
             // 点击了确定
-            Log.d("----点击了确定按钮");
+            Log.d("----点击了确定按钮  _isSingleSelect:$_isSingleSelect    _currentSelectedCategory: $_currentSelectedCategory");
             int? categoryId;
             if(_isSingleSelect){
               if(_currentSelectedCategory.length > 0){
                 categoryId = _currentSelectedCategory[0]['id'];
+                _queryParams['categoryId'] = categoryId;
+              }else {
+                // 一个都没有选
+                _queryParams['categoryId'] = '';
               }
             }
 
             setCurrentQueryParams({
-              "category_id": _queryParams?['categoryId'],
+              "category_id": _queryParams?['categoryId']??'',
             });
             directRefresh();
           },
@@ -460,8 +489,21 @@ class HomeServiceVm extends _$HomeServiceVm {
     return _queryParams;
   }
 
+  handlerClickDescSort(BuildContext context, String sort) {
+    String sortStr = defaultSortType.name;
+    if(sort == SortType.desc.name){
+      sortStr = SortType.asc.name;
+    }else {
+      sortStr = SortType.desc.name;
+    }
+    // 遍历 servicesConstants.sortByOptionsList  找到
+    _queryParams['sort'] = sortStr;
+    state = state.copyWith(sort: sortStr);
+    // 调用list 接口
+    directRefresh();
+  }
   // 点击 sort icon
-  handlerClickSortIcon(BuildContext context) async{
+  handlerClickSortByIcon(BuildContext context) async{
     // await  SmartDialog.showAttach(
     //   targetContext: context,
     //   alignment: Alignment.bottomCenter,
@@ -487,6 +529,10 @@ class HomeServiceVm extends _$HomeServiceVm {
       items: state.sortByOptionsList,
       initialSelectIndex: 0,
       onPickerChanged: (_, index) {
+        Log.d("----7777--${state.sortByOptionsList?[index]}-----");
+        String sortByStr = state.sortByOptionsList?[index]??'';
+        // 遍历 servicesConstants.sortByOptionsList  找到
+        _queryParams['sort_by'] = servicesConstants.sortByOptionsMap[sortByStr]??'';
         state = state.copyWith(sortBySelectedOption: state.sortByOptionsList?[index]);
         // 调用list 接口
         directRefresh();

+ 1 - 1
packages/cpt_services/lib/modules/services/homeService/home_service_vm.g.dart

@@ -6,7 +6,7 @@ part of 'home_service_vm.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$homeServiceVmHash() => r'5fbefc1a636113fd7813b1adfdcfa4d75dc6c88e';
+String _$homeServiceVmHash() => r'3354661f7b1d9c59da1d3b8aa2f7e1b10653af17';
 
 /// See also [HomeServiceVm].
 @ProviderFor(HomeServiceVm)

+ 2 - 1
packages/cpt_services/lib/modules/services/homeService/service_card_item.dart

@@ -1,3 +1,4 @@
+import 'package:cpt_services/constants_services.dart';
 import 'package:cs_resources/generated/assets.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:domain/entity/paid_service_entity.dart';
@@ -108,7 +109,7 @@ class HomeServiceCard extends StatelessWidget {
                         isFontMedium: true,
                       ),
                       MyTextView(
-                        '\$${card_price}',
+                        '${servicesConstants.dollarUnit}$card_price',
                         maxLines: 1,
                         isTextEllipsis: true,
                         textAlign: TextAlign.start,

+ 7 - 4
packages/cpt_services/lib/modules/services/inProgress/in_progress_page.dart

@@ -47,7 +47,8 @@ class InProgressPage extends HookConsumerWidget {
     // final appConfigState = ref.watch(appConfigServiceProvider)
 
     String cleanServiceType = servicesConstants.servicesType['houseCleaning']?['code'];
-    int serviceStatusCode = servicesConstants.servicesStatus['1']?['code'];
+
+
 
     useEffect(() {
       // 组件挂载时执行 - 执行接口请求
@@ -91,12 +92,14 @@ class InProgressPage extends HookConsumerWidget {
                 SliverList(
                   delegate: SliverChildBuilderDelegate(
                     (context, index) {
-                      return _buildInProgressItem(context, ref, state.list[index], vm,  cleanServiceType, serviceStatusCode).onTap(() {
+                      return _buildInProgressItem(context, ref, state.list[index], vm,  cleanServiceType).onTap(() {
+                        List<GarageSaleHistoryList> serviceStatusTypeList = state.list as List<GarageSaleHistoryList> ?? [];
+                        String serviceStatusCode = serviceStatusTypeList[index].orderStatus??'';
+
                         vm.gotoCleanOrderDetailPage(
                           context,
                           state.list[index].id != null ? int.tryParse(state.list[index].id!) ?? 0 : 0,
                           cleanServiceType,
-                          serviceStatusCode,
                         );
                       });
                     },
@@ -109,7 +112,7 @@ class InProgressPage extends HookConsumerWidget {
     );
   }
 
-  Widget _buildInProgressItem(BuildContext context, WidgetRef ref, GarageSaleHistoryList item, vm, String cleanServiceType, int serviceStatusCode) {
+  Widget _buildInProgressItem(BuildContext context, WidgetRef ref, GarageSaleHistoryList item, vm, String cleanServiceType) {
     return Container(
       margin: const EdgeInsets.only(top: 10),
       width: double.infinity,

+ 7 - 5
packages/cpt_services/lib/modules/services/inProgress/in_progress_vm.dart

@@ -29,9 +29,9 @@ class InProgressVm extends _$InProgressVm with DioCancelableMixin {
   int _count = 0; // 总条数
 
   Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+    'category_id': '',
+    'keyword': '',
+    'is_liked': '',
   };
 
   // Refresh 控制器
@@ -119,7 +119,9 @@ class InProgressVm extends _$InProgressVm with DioCancelableMixin {
     // 获取列表
     var listResult = await servicesRespositoryInstance.fetchPaidServiceOrderList(
       type: "in_progress",
+      keyword: _queryParams['keyword']??'',
       curPage: _page,
+      limit: _limit,
       cancelToken: cancelToken,
     );
 
@@ -196,7 +198,7 @@ class InProgressVm extends _$InProgressVm with DioCancelableMixin {
   }
 
   //  去详情页面
-  gotoCleanOrderDetailPage(BuildContext context, int id, String cleanServiceType, int serviesStatusCode) {
-    CleanOrderDetailPage.startInstance(id: id, cleanServiceType: cleanServiceType, serviesStatusCode: serviesStatusCode);
+  gotoCleanOrderDetailPage(BuildContext context, int id, String cleanServiceType) {
+    CleanOrderDetailPage.startInstance(id: id, cleanServiceType: cleanServiceType);
   }
 }

+ 1 - 1
packages/cpt_services/lib/modules/services/inProgress/in_progress_vm.g.dart

@@ -6,7 +6,7 @@ part of 'in_progress_vm.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$inProgressVmHash() => r'90feaa9478c9575831a324bcd841a3617f6b745c';
+String _$inProgressVmHash() => r'b6d243602097ecb400181806d636acb1d6bff151';
 
 /// See also [InProgressVm].
 @ProviderFor(InProgressVm)

+ 1 - 0
packages/cpt_services/lib/modules/services/repair/repair_page.dart

@@ -92,6 +92,7 @@ class RepairPage extends HookConsumerWidget with WidgetsBindingObserver {
     final currentPageIdx = tabsRouterKey.currentState?.controller?.activeIndex ?? 0;
 
     useEffect(() {
+      Log.d("4343   $parentCategoryId");
       // 监听窗口
       WidgetsBinding.instance.addObserver(this);
     }, []);

+ 8 - 3
packages/cpt_services/lib/modules/services/repair/repair_vm.dart

@@ -1,4 +1,5 @@
 
+import 'package:cpt_services/modules/services/repair_homeService/home_service_vm.dart';
 import 'package:cs_resources/generated/assets.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:flutter/cupertino.dart';
@@ -15,6 +16,8 @@ import 'package:widgets/dialog/app_custom_dialog.dart';
 import 'package:widgets/my_checkbox_group.dart';
 
 import '../../../respository/services_respository.dart';
+import '../repair_history/history_vm.dart';
+import '../repair_inProgress/in_progress_vm.dart';
 import 'repair_page.dart';
 import 'repair_pageview_idx_data.dart';
 import 'repair_state.dart';
@@ -47,8 +50,8 @@ class RepairVm extends _$RepairVm {
     List<MapEntry<int, String>> repairEntriesList = RepairPageviewIdxData.values.entries.toList();
     repairEntriesList.asMap().forEach((index, value) {
       _queryParams[index] = {
-        'keyword': null,
-        'is_liked': null,
+        'keyword': '',
+        'is_liked': '',
         'page_view_idx': index,
         'page_view_name': value,
       };
@@ -85,9 +88,11 @@ class RepairVm extends _$RepairVm {
       RepairPageviewIdxData.values.forEach((key, value) {
         switch(key){
           case 0:
+            providerMap[key] = ref.read(repairHomeServiceVmProvider.notifier);
           case 1:
+            providerMap[key] = ref.read(repairInProgressVmProvider.notifier);
           case 2:
-          // providerMap[key] = ref.read(forrentVmProvider.notifier);
+            providerMap[key] = ref.read(repairHistoryVmProvider.notifier);
         }
       });
     });

+ 2 - 2
packages/cpt_services/lib/modules/services/repair_history/history_page.dart

@@ -46,8 +46,8 @@ class RepairHistoryPage extends HookConsumerWidget {
     final state = ref.watch(repairHistoryVmProvider);
     // final appConfigState = ref.watch(appConfigServiceProvider)
 
-    String cleanServiceType = servicesConstants.servicesType['houseCleaning']?['code'];
-    int serviceStatusCode = servicesConstants.servicesStatus['2']?['code'];
+    String cleanServiceType = servicesConstants.servicesType['repairAirConditioner']?['code'];
+    int serviceStatusCode = servicesConstants.servicesInquiryStatus['1']?['code'];
 
 
     useEffect(() {

+ 2 - 7
packages/cpt_services/lib/modules/services/repair_history/history_vm.dart

@@ -28,9 +28,7 @@ class RepairHistoryVm extends _$RepairHistoryVm with DioCancelableMixin {
   int _count = 0; // 总条数
 
   Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+    'keyword': '',
   };
 
   // Refresh 控制器
@@ -117,6 +115,7 @@ class RepairHistoryVm extends _$RepairHistoryVm with DioCancelableMixin {
     var listResult =
         await servicesRespositoryInstance.fetchRepairServiceOrderList(
       status: 1,
+      keyword: _queryParams['keyword']??"",
       curPage: _page,
       cancelToken: cancelToken,
     );
@@ -175,8 +174,4 @@ class RepairHistoryVm extends _$RepairHistoryVm with DioCancelableMixin {
     return _queryParams;
   }
 
-  // 去详情页面
-  gotoCleanOrderDetailPage(BuildContext context, int id, String cleanServiceType, int serviesStatusCode){
-    CleanOrderDetailPage.startInstance(id: id, cleanServiceType: cleanServiceType, serviesStatusCode: serviesStatusCode);
-  }
 }

+ 1 - 1
packages/cpt_services/lib/modules/services/repair_history/history_vm.g.dart

@@ -6,7 +6,7 @@ part of 'history_vm.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$repairHistoryVmHash() => r'0de804caabed7fa85241a0c1493e12d989883847';
+String _$repairHistoryVmHash() => r'4f446658790ff8fe7f495d16f66c7fec0853163b';
 
 /// See also [RepairHistoryVm].
 @ProviderFor(RepairHistoryVm)

+ 11 - 9
packages/cpt_services/lib/modules/services/repair_homeService/home_service_page.dart

@@ -186,14 +186,17 @@ class RepairHomeServicePage extends HookConsumerWidget {
                 fontSize: 15,
                 isFontRegular: true,
                 textAlign: TextAlign.center,
-              ),
+              ).onTap((){
+                Log.d("点击了sort");
+                vm.handlerClickDescSort(context, state.sort);
+              }),
               Wrap(
                 crossAxisAlignment: WrapCrossAlignment.center,
                 children: [
                   Row(
                     children: [
                       sortTitle != null? MyTextView(
-                        "${sortTitle}",
+                        sortTitle,
                         fontSize: 13,
                         isFontRegular: true,
                         textAlign: TextAlign.center,
@@ -211,7 +214,11 @@ class RepairHomeServicePage extends HookConsumerWidget {
                     ],
                   ),
                 ],
-              ),
+              ).onTap((){
+                Log.d("点击了sortBy");
+                vm.handlerClickSortByIcon(context);
+                expandSortIcon.value = !expandSortIcon.value;
+              }),
             ],
           ),
 
@@ -225,12 +232,7 @@ class RepairHomeServicePage extends HookConsumerWidget {
             vm.handlerClickFilterIcon(context);
           }),
         ]
-      ).onTap((){
-        Log.d("点击了sort");
-        vm.handlerClickSortIcon(context);
-        expandSortIcon.value = !expandSortIcon.value;
-
-      }),
+      ),
     );
   }
 

+ 8 - 1
packages/cpt_services/lib/modules/services/repair_homeService/home_service_state.dart

@@ -1,6 +1,9 @@
 import 'package:domain/entity/repair_service_entity.dart';
 import 'package:widgets/load_state_layout.dart';
 
+import '../../../constants_services.dart';
+import '../homeService/home_service_vm.dart';
+
 class RepairHomeServiceState {
   //页面 LoadView 状态的展示
   LoadState loadingState;
@@ -8,8 +11,9 @@ class RepairHomeServiceState {
 
   String? keyword;
   bool? isLiked;
+  String sort = defaultSortType.name;
   // contact type 类型选项
-  final List<String> sortByOptionsList = ["Most Likes", "Most bookmarked", "View at Most"];
+  final List<String> sortByOptionsList = servicesConstants.sortByOptionsMap.keys.toList();
   String? sortBySelectedOption;
 
   List<Map<String, dynamic>> activeCateGoryList;
@@ -21,6 +25,7 @@ class RepairHomeServiceState {
     String? errorMessage,
     this.keyword,
     this.isLiked,
+    required this.sort,
     this.sortBySelectedOption ,
     this.activeCateGoryList = const [],
     required this.list,
@@ -31,6 +36,7 @@ class RepairHomeServiceState {
     String? errorMessage,
     String? keyword,
     bool? isLiked,
+    String? sort,
     String? sortBySelectedOption,
     List<Map<String, dynamic>>? activeCateGoryList,
     List<RepairServiceList>? list,
@@ -40,6 +46,7 @@ class RepairHomeServiceState {
       errorMessage: errorMessage ?? this.errorMessage,
       keyword: keyword ?? this.keyword,
       isLiked: isLiked ?? this.isLiked,
+      sort: sort ?? this.sort,
       sortBySelectedOption: sortBySelectedOption ?? this.sortBySelectedOption,
       activeCateGoryList: activeCateGoryList ?? this.activeCateGoryList,
       list: list ?? this.list,

+ 67 - 37
packages/cpt_services/lib/modules/services/repair_homeService/home_service_vm.dart

@@ -1,9 +1,12 @@
 
+import 'package:cpt_services/modules/services/services_main_vm.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:domain/entity/repair_service_entity.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
+import 'package:plugin_basic/constants/app_constant.dart';
 import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
+import 'package:plugin_platform/engine/sp/sp_util.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 import 'package:router/ext/auto_router_extensions.dart';
@@ -17,6 +20,8 @@ import 'package:widgets/widget_export.dart';
 import '../../../constants_services.dart';
 import '../../../respository/services_respository.dart';
 import '../../../router/page/services_page_router.dart';
+import '../homeService/home_service_vm.dart';
+import '../services_vm.dart';
 import 'home_service_state.dart';
 
 part 'home_service_vm.g.dart';
@@ -34,9 +39,9 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
   List<Map<String, dynamic>> _currentSelectedCategory = [];
 
   Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+    'category_id': '',
+    'keyword': '',
+    'is_liked': '',
   };
 
   // Refresh 控制器
@@ -47,6 +52,7 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
 
   RepairHomeServiceState initState() {
     return RepairHomeServiceState(
+        sort: defaultSortType.name,
         list: []
     );
   }
@@ -167,10 +173,10 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
     try {
       //请求网络
       Map<String, dynamic>  params = {
-        "sort": null, // 排序(desc=降序,asc=升序)
-        "sort_by": null,  // 排序(likes_count=点赞量,orders_count=下单量,clicks_count=点击量)
-        "category_id": _queryParams['category_id'],
-        "keyword": _queryParams['keyword'],
+        "sort": _queryParams['sort']?? SortType.desc.name, // 排序(desc=降序,asc=升序)
+        "sort_by": _queryParams['sort_by']?? SortByType.clicks_count.name,  // 排序(likes_count=点赞量,orders_count=下单量,clicks_count=点击量)
+        "category_id": _queryParams['category_id']??'',
+        "keyword": _queryParams['keyword']??'',
         "page": _page,
         "limit": _limit,
       };
@@ -298,33 +304,36 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
     ];
 
     // 获取分类列表
-    // try {
-    //   // 加入有缓存 就取缓存
-    //   List<Map<String, dynamic>>? StorageCategoryList = SPUtil.getObjectList(
-    //       AppConstant.storageGarageCategoryList)?.cast<Map<String, dynamic>>();
-    //
-    //   if (StorageCategoryList != null && StorageCategoryList.isNotEmpty) {
-    //     Log.d("取StorageCategoryList 缓存: $StorageCategoryList ");
-    //     serviceCategoryList = StorageCategoryList;
-    //   } else {
-    //     Map<String, dynamic> params = {};
-    //     final result = await commonGarageRespositoryInstance
-    //         .fetchGarageCateGoryList(params);
-    //     if (result.isSuccess) {
-    //       final listJson = result.getListJson();
-    //       // 将 listJson 转换为 List<Map<String, dynamic>>
-    //       serviceCategoryList = (listJson as List?)
-    //           ?.map((item) => item as Map<String, dynamic>)
-    //           .toList() ?? [];
-    //       // 将 serviceCategoryList 存入缓存
-    //       Log.d("设置StorageCategoryList 缓存");
-    //       SPUtil.putObjectList(
-    //           AppConstant.storageGarageCategoryList, serviceCategoryList);
-    //     }
-    //   }
-    // } catch(error){
-    //
-    // }
+    try {
+      // 加入有缓存 就取缓存
+      List<Map<String, dynamic>>? StorageCategoryList = SPUtil.getObjectList(
+          AppConstant.storageRepairServiceCategoryList)?.cast<Map<String, dynamic>>();
+
+      if (StorageCategoryList != null && StorageCategoryList.isNotEmpty) {
+        Log.d("取StorageCategoryList 缓存: $StorageCategoryList ");
+        serviceCategoryList = StorageCategoryList;
+      } else {
+        final serviceMainVm = ref.read(serviceMainVmProvider.notifier);
+        Map<String, dynamic> params = {
+          'parent_id': serviceMainVm?.state.curId,
+        };
+        final result = await servicesRespositoryInstance.fetchServiceCateGoryList(params);
+        if (result.isSuccess) {
+
+          final listJson = result.getListJson();
+          // 将 listJson 转换为 List<Map<String, dynamic>>
+          serviceCategoryList = (listJson as List?)
+              ?.map((item) => item as Map<String, dynamic>)
+              .toList() ?? [];
+          // 将 serviceCategoryList 存入缓存
+          Log.d("设置StorageCategoryList 缓存");
+          SPUtil.putObjectList(
+              AppConstant.storageRepairServiceCategoryList, serviceCategoryList);
+        }
+      }
+    } catch(error){
+      Log.d("获取分类列表失败: $error");
+    }
     return serviceCategoryList;
   }
 
@@ -381,16 +390,20 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
           isShowCancelBtn:false,
           confirmAction: (){
             // 点击了确定
-            Log.d("----点击了确定按钮");
+            Log.d("----点击了确定按钮  _isSingleSelect:$_isSingleSelect    _currentSelectedCategory: $_currentSelectedCategory");
             int? categoryId;
             if(_isSingleSelect){
               if(_currentSelectedCategory.length > 0){
                 categoryId = _currentSelectedCategory[0]['id'];
+                _queryParams['categoryId'] = categoryId;
+              }else {
+                // 一个都没有选
+                _queryParams['categoryId'] = '';
               }
             }
 
             setCurrentQueryParams({
-              "category_id": _queryParams?['categoryId'],
+              "category_id": _queryParams?['categoryId']??'',
             });
             directRefresh();
           },
@@ -444,8 +457,21 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
     return _queryParams;
   }
 
+  handlerClickDescSort(BuildContext context, String sort) {
+    String sortStr = defaultSortType.name;
+    if(sort == SortType.desc.name){
+      sortStr = SortType.asc.name;
+    }else {
+      sortStr = SortType.desc.name;
+    }
+    // 遍历 servicesConstants.sortByOptionsList  找到
+    _queryParams['sort'] = sortStr;
+    state = state.copyWith(sort: sortStr);
+    // 调用list 接口
+    directRefresh();
+  }
   // 点击 sort icon
-  handlerClickSortIcon(BuildContext context) async{
+  handlerClickSortByIcon(BuildContext context) async{
     // await  SmartDialog.showAttach(
     //   targetContext: context,
     //   alignment: Alignment.bottomCenter,
@@ -471,6 +497,10 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
       items: state.sortByOptionsList,
       initialSelectIndex: 0,
       onPickerChanged: (_, index) {
+        Log.d("----7777--${state.sortByOptionsList?[index]}-----");
+        String sortByStr = state.sortByOptionsList?[index]??'';
+        // 遍历 servicesConstants.sortByOptionsList  找到
+        _queryParams['sort_by'] = servicesConstants.sortByOptionsMap[sortByStr]??'';
         state = state.copyWith(sortBySelectedOption: state.sortByOptionsList?[index]);
         // 调用list 接口
         directRefresh();

+ 1 - 1
packages/cpt_services/lib/modules/services/repair_homeService/home_service_vm.g.dart

@@ -7,7 +7,7 @@ part of 'home_service_vm.dart';
 // **************************************************************************
 
 String _$repairHomeServiceVmHash() =>
-    r'd80c22edbf6ac292d571c1fe4bf8a7d92d74a174';
+    r'fee96cce9ac5690002bac74f4c7a586123072148';
 
 /// See also [RepairHomeServiceVm].
 @ProviderFor(RepairHomeServiceVm)

+ 2 - 2
packages/cpt_services/lib/modules/services/repair_inProgress/in_progress_page.dart

@@ -49,8 +49,8 @@ class RepairInProgressPage extends HookConsumerWidget {
     final state = ref.watch(repairInProgressVmProvider);
     // final appConfigState = ref.watch(appConfigServiceProvider)
 
-    String cleanServiceType = servicesConstants.servicesType['houseCleaning']?['code'];
-    int serviceStatusCode = servicesConstants.servicesStatus['1']?['code'];
+    String cleanServiceType = servicesConstants.servicesType['repairAirConditioner']?['code'];
+    int serviceStatusCode = servicesConstants.servicesInquiryStatus['0']?['code'];
 
     useEffect(() {
       // 组件挂载时执行 - 执行接口请求

+ 2 - 8
packages/cpt_services/lib/modules/services/repair_inProgress/in_progress_vm.dart

@@ -28,9 +28,7 @@ class RepairInProgressVm extends _$RepairInProgressVm with DioCancelableMixin {
   int _count = 0; // 总条数
 
   Map<String, dynamic> _queryParams = {
-    'category_id': null,
-    'keyword': null,
-    'is_liked': null,
+    'keyword': '',
   };
 
   // Refresh 控制器
@@ -115,6 +113,7 @@ class RepairInProgressVm extends _$RepairInProgressVm with DioCancelableMixin {
     // 获取列表
     var listResult =
         await servicesRespositoryInstance.fetchRepairServiceOrderList(
+          keyword: _queryParams['keyword']??"",
       status: 0,
       curPage: _page,
       cancelToken: cancelToken,
@@ -173,9 +172,4 @@ class RepairInProgressVm extends _$RepairInProgressVm with DioCancelableMixin {
     }
     return _queryParams;
   }
-
-  //  去详情页面
-  gotoCleanOrderDetailPage(BuildContext context, int id, String cleanServiceType, int serviesStatusCode){
-    CleanOrderDetailPage.startInstance(id: id, cleanServiceType: cleanServiceType, serviesStatusCode: serviesStatusCode);
-  }
 }

+ 1 - 1
packages/cpt_services/lib/modules/services/repair_inProgress/in_progress_vm.g.dart

@@ -7,7 +7,7 @@ part of 'in_progress_vm.dart';
 // **************************************************************************
 
 String _$repairInProgressVmHash() =>
-    r'4b35fb3bccf222443a31ea4c465d9f437db0166d';
+    r'39270b72bf2746b82c53984616c6f17cee672b75';
 
 /// See also [RepairInProgressVm].
 @ProviderFor(RepairInProgressVm)

+ 134 - 52
packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.dart

@@ -14,8 +14,10 @@ import 'package:domain/entity/paid_service_pay_success_info_entity.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
+import 'package:plugin_platform/engine/loading/loading_engine.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:router/componentRouter/component_service_manager.dart';
 import 'package:router/ext/auto_router_extensions.dart';
 import 'package:shared/utils/ext_dart.dart';
 import 'package:shared/utils/log_utils.dart';
@@ -31,6 +33,7 @@ import '../../../components/chooseVisitTimeBottomFooter.dart';
 import '../../../constants_services.dart';
 import '../../../respository/services_respository.dart';
 import '../../../router/page/services_page_router.dart';
+import '../clean_order_detail/clean_order_detail_page.dart';
 import '../service_clean_detail/service_clean_detail_vm.dart';
 import '../service_pay_success/service_pay_success_page.dart';
 import 'service_order_confirm_state.dart';
@@ -312,58 +315,6 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
     };
   }
 
-  // 去支付
-  handlerClickPayNow(BuildContext context, {int? id, String? cleanServiceType}) async{
-    // ToastEngine.show("Pay Now");
-    if(state.visitTime == null || state.visitTime!.isEmpty){
-      // 预约时间没有
-      ToastEngine.show("Please select the visit time");
-      return;
-    }
-    try {
-      Map<String, dynamic> params = {
-        "planned_service_at": state.visitTime,
-        "notes": getRemarkInfo(),
-      };
-      // params 添加 product 参数
-      Map<String, dynamic> resultParams = handlerSubmitParams();
-      // 数组参数扁平
-      List<Map<String, dynamic>> products = resultParams['products'].cast<Map<String, dynamic>>();
-      String productsKey = 'products';
-      List<String> keys = ['id', 'quantity'];
-
-      Map<String, dynamic> flattenedProducts = handlerFlattenArrayParams(products, productsKey, keys);
-      // 合并参数
-      params.addAll(flattenedProducts);
-      Log.d("最终的参数params:  $params");
-
-      final result = await servicesRespositoryInstance.fetchPaidServiceBook(params);
-      if(result.isSuccess){
-        state = state.copyWith(paidServicePaySuccessInfo: result.data as PaidServicePaySuccessInfoEntity);
-        // 成功后 去支付成功页面
-        // ServicePaySuccessPage.startInstance();
-        // context.appRouter.pushAndPopUntil(const ServicePaySuccessPageRoute(), predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
-        //   // Log.d("888 ${route.settings}");
-        //   return route.settings.name != 'ServiceOrderConfirmPageRoute';
-        // });
-      } else {
-        String errorMessage = result.errorMsg!;
-        // changeLoadingState(LoadState.State_Error, errorMessage);
-        ToastEngine.show(result.errorMsg ?? "Network Load Error");
-      }
-
-
-      // context.appRouter.pushAndPopUntil(const ServicePaySuccessPageRoute(), predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
-      //   // Log.d("888 ${route.settings}");
-      //   return route.settings.name != 'ServiceOrderConfirmPageRoute';
-      // });
-
-    } catch (e) {
-      ToastEngine.show("Error: $e");
-    }
-
-  }
-
   Map<String, dynamic> handlerFlattenArrayParams(List<Map<String, dynamic>> products, String productsKey, List<String> keys) {
     Map<String, dynamic> flattened = {};
     for (int i = 0; i < products.length; i++) {
@@ -446,4 +397,135 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
         datas: serviceDetailVm?.state.datas!
     );
   }
+
+  // 点击去支付按钮
+  handlerClickPayNow(BuildContext context, {int? id, String? cleanServiceType}) async{
+    // ToastEngine.show("Pay Now");
+    if(state.visitTime == null || state.visitTime!.isEmpty){
+      // 预约时间没有
+      ToastEngine.show("Please select the visit time");
+      return;
+    }
+    try {
+      handlerExcutePay(
+        false,
+        asyncGetOrderIdFn: () async{
+            Map<String, dynamic> params = {
+              "planned_service_at": state.visitTime,
+              "notes": getRemarkInfo(),
+            };
+            // params 添加 product 参数
+            Map<String, dynamic> resultParams = handlerSubmitParams();
+            // 数组参数扁平
+            List<Map<String, dynamic>> products = resultParams['products'].cast<Map<String, dynamic>>();
+            String productsKey = 'products';
+            List<String> keys = ['id', 'quantity'];
+
+            Map<String, dynamic> flattenedProducts = handlerFlattenArrayParams(products, productsKey, keys);
+            // 合并参数
+            params.addAll(flattenedProducts);
+            Log.d("最终的参数params:  $params");
+            String? orderDetailId;
+            final result = await servicesRespositoryInstance.fetchPaidServiceBook(params);
+            if(result.isSuccess){
+            } else {
+              String errorMessage = result.errorMsg!;
+              // changeLoadingState(LoadState.State_Error, errorMessage);
+              ToastEngine.show(errorMessage ?? "Network Load Error");
+            }
+            PaidServicePaySuccessInfoEntity paidServicePaySuccessInfo = result.data as PaidServicePaySuccessInfoEntity;
+            orderDetailId = paidServicePaySuccessInfo?.id;
+            int? orderId_int = paidServicePaySuccessInfo?.order?.id??null;
+            String? orderId = orderId_int !=null? orderId_int.toString(): '';
+            Log.d("当前生成的订单ID:$orderId");
+            Log.d("当前订单的详情ID:$orderDetailId");
+            return {
+              'orderId': orderId,
+              'orderDetailId': orderDetailId,
+            };
+        },
+        orderId: '',
+        scallback: (String? orderId, String? orderDetailId){
+          int orderId_int = int.parse(orderId!);
+          // 成功后 去支付成功页面
+          // ServicePaySuccessPage.startInstance();
+          context.appRouter.pushAndPopUntil(
+              ServicePaySuccessPageRoute(id: orderId_int, cleanServiceType: _cleanServiceType!),
+              predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
+            // Log.d("888 ${route.settings}");
+            return route.settings.name != 'ServiceOrderConfirmPageRoute';
+          });
+        },
+        fcallback: (String? orderId, String? orderDetailId){
+          // ToastEngine.show("Pay Failed");
+          int? orderDetailId_int;
+          String cleanServiceType = _cleanServiceType!;
+          // 待支付状态
+          if(orderDetailId != null){
+            orderDetailId_int = int.parse(orderDetailId!);
+          }
+          // 使用时判断是否为空
+          if (orderDetailId_int == null) {
+            ToastEngine.show("Order Detail ID is invalid");
+            return;
+          }
+          //如果失败需要关闭当前页面,并且跳转到 该订单的详情页
+          context.appRouter.pushAndPopUntil(
+              CleanOrderDetailPageRoute(
+                id: orderDetailId_int,
+                cleanServiceType: cleanServiceType!,
+              ),
+              predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
+                // Log.d("888 ${route.settings}");
+                return route.settings.name != 'ServiceOrderConfirmPageRoute';
+              }
+          );
+        },
+      );
+    } catch (e) {
+      // ToastEngine.show("Error: $e");
+      Log.d("支付error, $e");
+    }
+  }
+
+  // 调起支付组件进行支付流程
+  void handlerExcutePay(bool hasOrderId, {Future<Map<String, dynamic>> Function()? asyncGetOrderIdFn, String? orderId,Function? scallback, Function? fcallback}) async {
+    //支付流程 Loading 开始
+    LoadingEngine.show();
+    String finnalOrderId = '';
+    String? orderDetailId;
+
+    if(!hasOrderId){
+      if(asyncGetOrderIdFn != null){
+        // 异步获取订单号
+      final result = await asyncGetOrderIdFn();
+      if (result is Map<String, dynamic>) {
+        // final {'orderId': String? finnalOrderId, 'orderDetailId': String? orderDetailId} = result;
+        finnalOrderId = result['orderId'];
+        orderDetailId = result['orderDetailId'];
+      } else {
+        // 处理错误情况
+        Log.d("获取订单号asyncGetOrderIdFn 返回值不是 Map<String, dynamic>");
+      }
+    }
+    }else {
+      finnalOrderId = orderId!;
+    }
+
+    Log.d("当前支付的订单ID:$finnalOrderId");
+    if(finnalOrderId.isEmpty){
+      ToastEngine.show("Order ID is Empty");
+      return;
+    }
+    //调用支付服务
+    bool success = await ComponentServiceManager().paymentService.executePayment(orderId: finnalOrderId);
+    //支付流程 Loading 结束
+    LoadingEngine.dismiss();
+    //如果支付成功,走下一步流程
+    if (success) {
+      scallback?.call(finnalOrderId, orderDetailId, );
+    } else {
+      fcallback?.call(finnalOrderId, orderDetailId, );
+    }
+  }
 }

+ 1 - 1
packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.g.dart

@@ -7,7 +7,7 @@ part of 'service_order_confirm_vm.dart';
 // **************************************************************************
 
 String _$serviceOrderConfirmVmHash() =>
-    r'ffb82d32c89ebf7a6b89c818ef99f78ea9b52194';
+    r'4a9e3507833437d4a27db3db0cae2f2ee71c6e3f';
 
 /// See also [ServiceOrderConfirmVm].
 @ProviderFor(ServiceOrderConfirmVm)

+ 55 - 45
packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_page.dart

@@ -29,16 +29,21 @@ import '../../../components/status_card_item.dart';
 
 @RoutePage()
 class ServicePaySuccessPage extends HookConsumerWidget {
+  final int id; // 订单id
+  final String cleanServiceType; // 订单类型
   const ServicePaySuccessPage({
     Key? key,
+    @PathParam('id') required this.id,
+    @PathParam('cleanServiceType') required this.cleanServiceType,
   }) : super(key: key);
 
+
   //启动当前页面
-  static void startInstance({BuildContext? context,}) {
+  static void startInstance({BuildContext? context, required int id, required String cleanServiceType }) {
     if (context != null) {
-      context.router.push(ServicePaySuccessPageRoute());
+      context.router.push(ServicePaySuccessPageRoute(id: id, cleanServiceType: cleanServiceType,));
     } else {
-      appRouter.push(ServicePaySuccessPageRoute());
+      appRouter.push(ServicePaySuccessPageRoute(id: id, cleanServiceType: cleanServiceType,));
     }
   }
 
@@ -51,8 +56,9 @@ class ServicePaySuccessPage extends HookConsumerWidget {
 
 
     useEffect(() {
+      vm.setInitPageData(id: id, cleanServiceType: cleanServiceType);
       // 组件挂载时执行 - 执行接口请求
-      Future.microtask(() => vm.initPageData());
+      Future.microtask(() => vm.fetchOrderDetailData(id));
       return () {
         // 组件卸载时执行
       };
@@ -79,7 +85,7 @@ class ServicePaySuccessPage extends HookConsumerWidget {
               state: state.loadingState,
               errorMessage: state.errorMessage,
               errorRetry: () {
-                vm.retryRequest();
+                vm.retryRequest(id);
               },
               successSliverWidget: [
                 SliverList(
@@ -129,7 +135,7 @@ class ServicePaySuccessPage extends HookConsumerWidget {
             isFontRegular: true,
           ),
           MyTextView(
-            "\$200.00",
+            "${servicesConstants.dollarUnit}${state.datas?.totalAmount??0.0}",
             fontSize: 15,
             textColor: context.appColors.textPrimary,
             textAlign: TextAlign.center,
@@ -137,26 +143,28 @@ class ServicePaySuccessPage extends HookConsumerWidget {
             marginTop: 5,
           ),
           SizedBox(height: 12),
-          Row(
-            mainAxisAlignment: MainAxisAlignment.center,
-            crossAxisAlignment: CrossAxisAlignment.center,
-            children: [
-              MyTextView(
-                "Master card ending",
-                fontSize: 15,
-                textColor: context.appColors.textBlack,
-                textAlign: TextAlign.center,
-                isFontRegular: true,
-              ),
-              MyTextView(
-                "9423",
-                fontSize: 15,
-                isFontMedium: true,
-                marginLeft: 5,
-              )
-            ]
-          ),
+          // 卡号
+          // Row(
+          //   mainAxisAlignment: MainAxisAlignment.center,
+          //   crossAxisAlignment: CrossAxisAlignment.center,
+          //   children: [
+          //     MyTextView(
+          //       "Master card ending",
+          //       fontSize: 15,
+          //       textColor: context.appColors.textBlack,
+          //       textAlign: TextAlign.center,
+          //       isFontRegular: true,
+          //     ),
+          //     MyTextView(
+          //       "9423",
+          //       fontSize: 15,
+          //       isFontMedium: true,
+          //       marginLeft: 5,
+          //     )
+          //   ]
+          // ),
           const SizedBox(height: 5),
+          // 付款时间
           Row(
             mainAxisAlignment: MainAxisAlignment.center,
             crossAxisAlignment: CrossAxisAlignment.center,
@@ -169,7 +177,7 @@ class ServicePaySuccessPage extends HookConsumerWidget {
                 isFontRegular: true,
               ),
               MyTextView(
-                "24 Oct 2023 at 02:19 PM",
+                "${state.datas?.paidAt}",
                 fontSize: 15,
                 textColor: context.appColors.textBlack,
                 textAlign: TextAlign.center,
@@ -211,6 +219,7 @@ class ServicePaySuccessPage extends HookConsumerWidget {
     );
   }
 
+  // 到访时间
   Widget _buildCardVisitTime(BuildContext context, ServicePaySuccessState state, WidgetRef ref,) {
     return Container(
       width: double.infinity,
@@ -256,18 +265,18 @@ class ServicePaySuccessPage extends HookConsumerWidget {
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
                   MyTextView(
-                    'Tue,24 Oct 2024',
+                    '${state.datas?.orderProducts?.first?.plannedServiceAt}',
                     fontSize: 14,
                     textColor: context.appColors.textBlack,
                     isFontRegular: true,
                   ),
-                  MyTextView(
-                    '05:00 PM',
-                    fontSize: 14,
-                    textColor: context.appColors.textBlack,
-                    isFontRegular: true,
-                    marginTop: 5,
-                  )
+                  // MyTextView(
+                  //   '05:00 PM',
+                  //   fontSize: 14,
+                  //   textColor: context.appColors.textBlack,
+                  //   isFontRegular: true,
+                  //   marginTop: 5,
+                  // )
                 ]
               )
             ],
@@ -322,7 +331,7 @@ class ServicePaySuccessPage extends HookConsumerWidget {
                       crossAxisAlignment: CrossAxisAlignment.start,
                       children: [
                         MyTextView(
-                          'House Cleaning Services',
+                          '$cleanServiceType',
                           fontSize: 14,
                           textColor: context.appColors.textBlack,
                           isFontRegular: true,
@@ -381,18 +390,19 @@ class ServicePaySuccessPage extends HookConsumerWidget {
                       crossAxisAlignment: CrossAxisAlignment.start,
                       children: [
                         MyTextView(
-                          '705 Qiming Huijin Building',
+                          '${state.datas?.estateUnit?.address}',
                           fontSize: 14,
                           textColor: context.appColors.textBlack,
                           isFontRegular: true,
                         ),
-                        MyTextView(
-                          'Sundy  +6588991122',
-                          fontSize: 14,
-                          textColor: context.appColors.textBlack,
-                          isFontRegular: true,
-                          marginTop: 5,
-                        )
+                        if (state.datas?.staff?.name != null && state.datas?.staff?.phone != null)
+                          MyTextView(
+                            '${state.datas?.staff?.name}  ${state.datas?.staff?.phone}',
+                            fontSize: 14,
+                            textColor: context.appColors.textBlack,
+                            isFontRegular: true,
+                            marginTop: 5,
+                          )
                       ]
                   )
                 ],
@@ -452,7 +462,7 @@ class ServicePaySuccessPage extends HookConsumerWidget {
                   crossAxisAlignment: CrossAxisAlignment.start,
                   children: [
                     MyTextView(
-                      'Daily cleaning for 2 hours',
+                      "${state.datas?.orderProducts?.first?.productName ?? ""}",
                       fontSize: 14,
                       textColor: context.appColors.textBlack,
                       isFontRegular: true,
@@ -468,7 +478,7 @@ class ServicePaySuccessPage extends HookConsumerWidget {
                           marginTop: 5,
                         ),
                         MyTextView(
-                          '\$40.00',
+                          '${servicesConstants.dollarUnit}${state.datas?.totalAmount ?? 0.0}',
                           fontSize: 14,
                           textColor: context.appColors.textBlack,
                           isFontRegular: true,

+ 12 - 3
packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_state.dart

@@ -1,26 +1,35 @@
+import 'package:domain/entity/service_order_detail_entity.dart';
 import 'package:widgets/load_state_layout.dart';
 
 class ServicePaySuccessState {
   //页面 LoadView 状态的展示
   LoadState loadingState;
   String? errorMessage;
-  Map<String, dynamic>? datas;
+  double? totalPrice;
+  ServiceOrderDetailEntity? datas;
 
 
   ServicePaySuccessState({
     this.loadingState = LoadState.State_Loading,
     String? errorMessage,
+    double? totalPrice,
+    Map<String, Map<String, dynamic>>? cancelFormData,
     this.datas,
-  });
+  }):totalPrice = totalPrice ?? 0.0;
 
   ServicePaySuccessState copyWith({
     LoadState? loadingState,
     String? errorMessage,
-    Map<String, dynamic>? datas,
+    double? totalPrice,
+    List<Map<String, dynamic>>? actionBtnList,
+    String? cancelReason,
+    Map<String, Map<String, dynamic>>? cancelFormData,
+    ServiceOrderDetailEntity? datas,
   }) {
     return ServicePaySuccessState(
       loadingState: loadingState ?? this.loadingState,
       errorMessage: errorMessage ?? this.errorMessage,
+      totalPrice: totalPrice ?? this.totalPrice,
       datas: datas ?? this.datas,
     );
   }

+ 34 - 27
packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_vm.dart

@@ -2,6 +2,7 @@
 import 'package:cs_resources/generated/assets.dart';
 import 'package:domain/entity/garage_sale_rent_entity.dart';
 import 'package:domain/entity/newsfeed_detail_entity.dart';
+import 'package:domain/entity/paid_service_detail_entity.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -25,6 +26,9 @@ class ServicePaySuccessVm extends _$ServicePaySuccessVm {
   int _count = 0; // 总条数
 
 
+  int? _id;
+  String? _cleanServiceType;
+
   // Refresh 控制器
   final EasyRefreshController refreshController = EasyRefreshController(
     controlFinishRefresh: true,  //允许刷新
@@ -32,13 +36,16 @@ class ServicePaySuccessVm extends _$ServicePaySuccessVm {
   );
 
   ServicePaySuccessState initState() {
-    return ServicePaySuccessState();
+    return ServicePaySuccessState(
+        datas: null,
+    );
   }
 
   @override
   ServicePaySuccessState build(){
     // 引入数据仓库
     // servicesRespositoryInstance = ref.read(commonGarageRespositoryProvider);
+    servicesRespositoryInstance = ref.read(servicesRespositoryProvider);
     final state = initState();
     Log.d("--------------------------build---------------------");
 
@@ -54,15 +61,21 @@ class ServicePaySuccessVm extends _$ServicePaySuccessVm {
     );
   }
 
+  setInitPageData({required int id, required String cleanServiceType}){
+    _id = id;
+    _cleanServiceType = cleanServiceType;
+  }
+
   // 初始化页面数据
-  initPageData() {
+  initPageData(BuildContext context) {
+    Log.d("--------------------------initPageData---------------------");
     changeLoadingState(LoadState.State_Success, null);
-    // onRefresh();
+    // WidgetsBinding.instance.addPostFrameCallback((_){
+    // });
   }
 
   // 上拉加载 更多
   Future loadMore() async {
-    Log.d("----home_service_vm-----loadMore");
     _page++;
     getListData();
   }
@@ -71,40 +84,19 @@ class ServicePaySuccessVm extends _$ServicePaySuccessVm {
   // 下拉刷新
   Future onRefresh() async {
     // 当前pageView 页面正处于显示状态
-    Log.d("----forsale_vm-----onRefresh ");
     // await Future.delayed(const Duration(seconds: 2));
     _page = 1;
     getListData();
   }
 
 
-  // 手动进行刷新
-  Future triggerRefresh() async {
-    Log.d("trggerRefresh");
-    refreshController.callRefresh();
-  }
-
-  // 手动进行刷新
-  Future directRefresh() async {
-    state = state.copyWith(datas:null);
-    // 注意:由于 nestedscrollview 嵌套easyfresh 组件  refreshController.callRefresh() 自动刷新只能滚动顶部但是不会触发下拉刷新,这里调用是 用到了将其滚动到顶部的作用,进而刷新操作主动掉接口
-    // https://github.com/xuelongqy/flutter_easy_refresh/issues/692
-    refreshController.callRefresh();
-    refreshController.resetFooter();
-    _page = 1;
-    _needShowPlaceholder = true;
-    getListData();
-  }
-
-
   // 重试请求
-  Future retryRequest() async {
+  Future retryRequest(int id) async {
     _page = 1;
     _needShowPlaceholder = true;
-    getListData();
+    fetchOrderDetailData(id);
   }
 
-
   // 获取list 列表数据
   Future getListData<T>({bool? isLoadMore}) async {
     if (_needShowPlaceholder) {
@@ -230,4 +222,19 @@ class ServicePaySuccessVm extends _$ServicePaySuccessVm {
       }
     });
   }
+
+  //获取订单详情数据
+  fetchOrderDetailData(int id) async {
+    if (_needShowPlaceholder) {
+      changeLoadingState(LoadState.State_Loading, null);
+    }
+    final result = await servicesRespositoryInstance.fetchPaidServiceCleanOrderDetail(id: id.toString());
+
+    if (result.isSuccess) {
+      state = state.copyWith(datas: result.data );
+      changeLoadingState(LoadState.State_Success, null);
+    } else {
+      changeLoadingState(LoadState.State_Error, result.errorMsg ?? "UnKnow Error");
+    }
+  }
 }

+ 1 - 1
packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_vm.g.dart

@@ -7,7 +7,7 @@ part of 'service_pay_success_vm.dart';
 // **************************************************************************
 
 String _$servicePaySuccessVmHash() =>
-    r'37cd1f2a065e99e6bc860775c976a5c901df1f49';
+    r'b8bb7c85c2289e22c0962e029ac566c6db7573d7';
 
 /// See also [ServicePaySuccessVm].
 @ProviderFor(ServicePaySuccessVm)

+ 1 - 1
packages/cpt_services/lib/modules/services/service_repair_detail/service_repair_detail_vm.g.dart

@@ -7,7 +7,7 @@ part of 'service_repair_detail_vm.dart';
 // **************************************************************************
 
 String _$serviceRepairDetailVmHash() =>
-    r'e8e3f35fdceeb8b45af6ab561896a0c8af00be05';
+    r'51c272e362f9726c6262e3948acae7d0e0773b95';
 
 /// See also [ServiceRepairDetailVm].
 @ProviderFor(ServiceRepairDetailVm)

+ 1 - 1
packages/cpt_services/lib/modules/services/services_main_vm.dart

@@ -126,7 +126,7 @@ class ServiceMainVm extends _$ServiceMainVm {
 
     try {
       Map<String, dynamic> params = {
-        "parent_id": null,
+        "parent_id": '',
       };
       final result = await serviceRespositoryInstance.fetchServiceCateGoryList(params);
       if(result.isSuccess){

+ 2 - 2
packages/cpt_services/lib/modules/services/services_vm.dart

@@ -53,8 +53,8 @@ class ServicesVm extends _$ServicesVm {
     List<MapEntry<int, String>> servicesEntriesList = ServicesPageviewIdxData.values.entries.toList();
     servicesEntriesList.asMap().forEach((index, value) {
       _queryParams[index] = {
-        'keyword': null,
-        'is_liked': null,
+        'keyword': '',
+        'is_liked': '',
         'page_view_idx': index,
         'page_view_name': value,
       };

+ 8 - 3
packages/cpt_services/lib/respository/services_respository.dart

@@ -336,7 +336,7 @@ class ServicesRespository {
       params: params,
       headers: headers,
       method: HttpMethod.POST,
-      isShowLoadingDialog: true,
+      isShowLoadingDialog: false,
       //是否展示默认的Loading弹窗
       networkDebounce: true,
       //是否防抖防止重复请求
@@ -348,7 +348,7 @@ class ServicesRespository {
       final json = result.getDataJson();
       var data = PaidServicePaySuccessInfoEntity.fromJson(json!);
       //重新赋值data或list
-      return result.convert(data: json);
+      return result.convert(data: data);
     } else {
       if (result.errorMsg != null && result.errorMsg!.isNotEmpty) {
         ToastEngine.show("${result.errorMsg}");
@@ -359,14 +359,17 @@ class ServicesRespository {
 
   // 付费服务  订单列表
   Future<HttpResult<GarageSaleHistoryEntity>> fetchPaidServiceOrderList({
+    required String keyword,
     required String type,
+    required int limit,
     required int curPage,
     CancelToken? cancelToken,
   }) async {
     Map<String, String> params = {};
     params['type'] = type;
+    params['keyword'] = keyword;
     params['page'] = curPage.toString();
-    params['limit'] = "10";
+    params['limit'] = limit.toString();
 
     final result = await dioEngine.requestNetResult(
       '/api/v1/user/service/paid-service-order/index',
@@ -598,11 +601,13 @@ class ServicesRespository {
 
   // 维修服务  订单列表
   Future<HttpResult<ServiceInProgressEntity>> fetchRepairServiceOrderList({
+    required String keyword,
     required int status,
     required int curPage,
     CancelToken? cancelToken,
   }) async {
     Map<String, String> params = {};
+    params['keyword'] = keyword;
     params['status'] = status.toString();
     params['page'] = curPage.toString();
     params['limit'] = "10";

+ 50 - 14
packages/cpt_services/lib/router/page/services_page_router.gr.dart

@@ -27,7 +27,6 @@ abstract class _$ServicesPageRouter extends RootStackRouter {
           orElse: () => CleanOrderDetailPageRouteArgs(
                 id: pathParams.getInt('id'),
                 cleanServiceType: pathParams.getString('cleanServiceType'),
-                serviesStatusCode: pathParams.getInt('serviesStatusCode'),
               ));
       return AutoRoutePage<dynamic>(
         routeData: routeData,
@@ -35,7 +34,6 @@ abstract class _$ServicesPageRouter extends RootStackRouter {
           key: args.key,
           id: args.id,
           cleanServiceType: args.cleanServiceType,
-          serviesStatusCode: args.serviesStatusCode,
         ),
       );
     },
@@ -138,9 +136,19 @@ abstract class _$ServicesPageRouter extends RootStackRouter {
       );
     },
     ServicePaySuccessPageRoute.name: (routeData) {
+      final pathParams = routeData.inheritedPathParams;
+      final args = routeData.argsAs<ServicePaySuccessPageRouteArgs>(
+          orElse: () => ServicePaySuccessPageRouteArgs(
+                id: pathParams.getInt('id'),
+                cleanServiceType: pathParams.getString('cleanServiceType'),
+              ));
       return AutoRoutePage<dynamic>(
         routeData: routeData,
-        child: const ServicePaySuccessPage(),
+        child: ServicePaySuccessPage(
+          key: args.key,
+          id: args.id,
+          cleanServiceType: args.cleanServiceType,
+        ),
       );
     },
     ServiceRepairDetailPageRoute.name: (routeData) {
@@ -202,7 +210,6 @@ class CleanOrderDetailPageRoute
     Key? key,
     required int id,
     required String cleanServiceType,
-    required int serviesStatusCode,
     List<PageRouteInfo>? children,
   }) : super(
           CleanOrderDetailPageRoute.name,
@@ -210,12 +217,10 @@ class CleanOrderDetailPageRoute
             key: key,
             id: id,
             cleanServiceType: cleanServiceType,
-            serviesStatusCode: serviesStatusCode,
           ),
           rawPathParams: {
             'id': id,
             'cleanServiceType': cleanServiceType,
-            'serviesStatusCode': serviesStatusCode,
           },
           initialChildren: children,
         );
@@ -231,7 +236,6 @@ class CleanOrderDetailPageRouteArgs {
     this.key,
     required this.id,
     required this.cleanServiceType,
-    required this.serviesStatusCode,
   });
 
   final Key? key;
@@ -240,11 +244,9 @@ class CleanOrderDetailPageRouteArgs {
 
   final String cleanServiceType;
 
-  final int serviesStatusCode;
-
   @override
   String toString() {
-    return 'CleanOrderDetailPageRouteArgs{key: $key, id: $id, cleanServiceType: $cleanServiceType, serviesStatusCode: $serviesStatusCode}';
+    return 'CleanOrderDetailPageRouteArgs{key: $key, id: $id, cleanServiceType: $cleanServiceType}';
   }
 }
 
@@ -576,16 +578,50 @@ class ServiceOrderConfirmPageRouteArgs {
 
 /// generated route for
 /// [ServicePaySuccessPage]
-class ServicePaySuccessPageRoute extends PageRouteInfo<void> {
-  const ServicePaySuccessPageRoute({List<PageRouteInfo>? children})
-      : super(
+class ServicePaySuccessPageRoute
+    extends PageRouteInfo<ServicePaySuccessPageRouteArgs> {
+  ServicePaySuccessPageRoute({
+    Key? key,
+    required int id,
+    required String cleanServiceType,
+    List<PageRouteInfo>? children,
+  }) : super(
           ServicePaySuccessPageRoute.name,
+          args: ServicePaySuccessPageRouteArgs(
+            key: key,
+            id: id,
+            cleanServiceType: cleanServiceType,
+          ),
+          rawPathParams: {
+            'id': id,
+            'cleanServiceType': cleanServiceType,
+          },
           initialChildren: children,
         );
 
   static const String name = 'ServicePaySuccessPageRoute';
 
-  static const PageInfo<void> page = PageInfo<void>(name);
+  static const PageInfo<ServicePaySuccessPageRouteArgs> page =
+      PageInfo<ServicePaySuccessPageRouteArgs>(name);
+}
+
+class ServicePaySuccessPageRouteArgs {
+  const ServicePaySuccessPageRouteArgs({
+    this.key,
+    required this.id,
+    required this.cleanServiceType,
+  });
+
+  final Key? key;
+
+  final int id;
+
+  final String cleanServiceType;
+
+  @override
+  String toString() {
+    return 'ServicePaySuccessPageRouteArgs{key: $key, id: $id, cleanServiceType: $cleanServiceType}';
+  }
 }
 
 /// generated route for

+ 1 - 1
packages/cs_domain/lib/entity/paid_service_pay_success_info_entity.dart

@@ -18,7 +18,7 @@ class PaidServicePaySuccessInfoEntity {
 	PaidServicePaySuccessInfoMerchant? merchant;
 	PaidServicePaySuccessInfoStaff? staff;
 	@JSONField(name: "order_products")
-	PaidServicePaySuccessInfoOrderProducts? orderProducts;
+	List<PaidServicePaySuccessInfoOrderProducts>? orderProducts;
 	PaidServicePaySuccessInfoEstate? estate;
 	@JSONField(name: "estate_unit")
 	PaidServicePaySuccessInfoEstateUnit? estateUnit;

+ 203 - 176
packages/cs_domain/lib/entity/service_order_detail_entity.dart

@@ -1,177 +1,204 @@
-import 'package:domain/generated/json/base/json_field.dart';
-import 'package:domain/generated/json/service_order_detail_entity.g.dart';
-import 'dart:convert';
-export 'package:domain/generated/json/service_order_detail_entity.g.dart';
-
-@JsonSerializable()
-class ServiceOrderDetailEntity {
-	String? id;
-	String? sn;
-	@JSONField(name: "total_amount")
-	String? totalAmount;
-	@JSONField(name: "paid_at")
-	String? paidAt;
-	String? notes;
-	ServiceOrderDetailAccount? account;
-	@JSONField(name: "order_service")
-	ServiceOrderDetailOrderService? orderService;
-	ServiceOrderDetailMerchant? merchant;
-	ServiceOrderDetailStaff? staff;
-	@JSONField(name: "order_products")
-	List<ServiceOrderDetailOrderProducts>? orderProducts = [];
-	ServiceOrderDetailEstate? estate;
-	@JSONField(name: "estate_unit")
-	ServiceOrderDetailEstateUnit? estateUnit;
-
-	ServiceOrderDetailEntity();
-
-	factory ServiceOrderDetailEntity.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailEntityFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailEntityToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}
-
-@JsonSerializable()
-class ServiceOrderDetailAccount {
-	int? id;
-	String? name;
-	String? avatar;
-	String? phone;
-
-	ServiceOrderDetailAccount();
-
-	factory ServiceOrderDetailAccount.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailAccountFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailAccountToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}
-
-@JsonSerializable()
-class ServiceOrderDetailOrderService {
-	int? id;
-	String? name;
-	@JSONField(name: "evaluations_avg_score")
-	double evaluationsAvgScore = 0.0;
-
-	ServiceOrderDetailOrderService();
-
-	factory ServiceOrderDetailOrderService.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailOrderServiceFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailOrderServiceToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}
-
-@JsonSerializable()
-class ServiceOrderDetailMerchant {
-	String? id;
-	String? name;
-	@JSONField(name: "contact_phone")
-	String? contactPhone;
-
-	ServiceOrderDetailMerchant();
-
-	factory ServiceOrderDetailMerchant.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailMerchantFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailMerchantToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}
-
-@JsonSerializable()
-class ServiceOrderDetailStaff {
-	String? id;
-	String? name;
-	String? phone;
-
-	ServiceOrderDetailStaff();
-
-	factory ServiceOrderDetailStaff.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailStaffFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailStaffToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}
-
-@JsonSerializable()
-class ServiceOrderDetailOrderProducts {
-	String? id;
-	@JSONField(name: "product_name")
-	String? productName;
-	@JSONField(name: "product_amount")
-	String? productAmount;
-	@JSONField(name: "urgent_amount")
-	String? urgentAmount;
-	@JSONField(name: "holiday_amount")
-	String? holidayAmount;
-	@JSONField(name: "night_amount")
-	String? nightAmount;
-	int quantity = 0;
-	@JSONField(name: "total_amount")
-	String? totalAmount;
-	@JSONField(name: "planned_service_at")
-	String? plannedServiceAt;
-
-	ServiceOrderDetailOrderProducts();
-
-	factory ServiceOrderDetailOrderProducts.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailOrderProductsFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailOrderProductsToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}
-
-@JsonSerializable()
-class ServiceOrderDetailEstate {
-	String? id;
-	String? name;
-
-	ServiceOrderDetailEstate();
-
-	factory ServiceOrderDetailEstate.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailEstateFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailEstateToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
-}
-
-@JsonSerializable()
-class ServiceOrderDetailEstateUnit {
-	String? id;
-	String? unit;
-	String? address;
-
-	ServiceOrderDetailEstateUnit();
-
-	factory ServiceOrderDetailEstateUnit.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailEstateUnitFromJson(json);
-
-	Map<String, dynamic> toJson() => $ServiceOrderDetailEstateUnitToJson(this);
-
-	@override
-	String toString() {
-		return jsonEncode(this);
-	}
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/service_order_detail_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/service_order_detail_entity.g.dart';
+
+@JsonSerializable()
+class ServiceOrderDetailEntity {
+	String? id;
+	String? sn;
+	@JSONField(name: "total_amount")
+	int? totalAmount;
+	@JSONField(name: "order_status")
+	int? orderStatus;
+	@JSONField(name: "cancel_status")
+	String? cancelStatus;
+	@JSONField(name: "paid_at")
+	String? paidAt;
+	String? notes;
+	ServiceOrderDetailAccount? account;
+	@JSONField(name: "order_service")
+	ServiceOrderDetailOrderService? orderService;
+	ServiceOrderDetailMerchant? merchant;
+	ServiceOrderDetailStaff? staff;
+	@JSONField(name: "order_products")
+	List<ServiceOrderDetailOrderProducts>? orderProducts;
+	ServiceOrderDetailEstate? estate;
+	@JSONField(name: "estate_unit")
+	ServiceOrderDetailEstateUnit? estateUnit;
+	ServiceOrderDetailOrder? order;
+
+	ServiceOrderDetailEntity();
+
+	factory ServiceOrderDetailEntity.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailAccount {
+	String? id;
+	String? name;
+	String? avatar;
+	String? phone;
+
+	ServiceOrderDetailAccount();
+
+	factory ServiceOrderDetailAccount.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailAccountFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailAccountToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailOrderService {
+	String? id;
+	String? name;
+	@JSONField(name: "evaluations_avg_score")
+	int? evaluationsAvgScore;
+
+	ServiceOrderDetailOrderService();
+
+	factory ServiceOrderDetailOrderService.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailOrderServiceFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailOrderServiceToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailMerchant {
+	String? id;
+	String? name;
+	@JSONField(name: "contact_phone")
+	String? contactPhone;
+
+	ServiceOrderDetailMerchant();
+
+	factory ServiceOrderDetailMerchant.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailMerchantFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailMerchantToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailStaff {
+	String? id;
+	String? name;
+	String? phone;
+
+	ServiceOrderDetailStaff();
+
+	factory ServiceOrderDetailStaff.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailStaffFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailStaffToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailOrderProducts {
+	String? id;
+	@JSONField(name: "product_name")
+	String? productName;
+	int? quantity;
+	@JSONField(name: "total_amount")
+	int? totalAmount;
+	@JSONField(name: "planned_service_at")
+	String? plannedServiceAt;
+
+	ServiceOrderDetailOrderProducts();
+
+	factory ServiceOrderDetailOrderProducts.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailOrderProductsFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailOrderProductsToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailEstate {
+	String? id;
+	String? name;
+
+	ServiceOrderDetailEstate();
+
+	factory ServiceOrderDetailEstate.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailEstateFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailEstateToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailEstateUnit {
+	String? id;
+	String? unit;
+	String? address;
+
+	ServiceOrderDetailEstateUnit();
+
+	factory ServiceOrderDetailEstateUnit.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailEstateUnitFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailEstateUnitToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class ServiceOrderDetailOrder {
+	int? id;
+	@JSONField(name: "total_amount")
+	String? totalAmount;
+	@JSONField(name: "order_amount")
+	String? orderAmount;
+	@JSONField(name: "deposit_amount")
+	String? depositAmount;
+	@JSONField(name: "payment_status")
+	int? paymentStatus;
+	@JSONField(name: "paid_at")
+	String? paidAt;
+	@JSONField(name: "refund_status")
+	int? refundStatus;
+	@JSONField(name: "refunded_at")
+	String? refundedAt;
+
+	ServiceOrderDetailOrder();
+
+	factory ServiceOrderDetailOrder.fromJson(Map<String, dynamic> json) => $ServiceOrderDetailOrderFromJson(json);
+
+	Map<String, dynamic> toJson() => $ServiceOrderDetailOrderToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
 }

+ 13 - 4
packages/cs_domain/lib/generated/json/base/json_convert_content.dart

@@ -218,10 +218,12 @@ class JsonConvert {
           CaptchaImgEntity.fromJson(e)).toList() as M;
     }
     if (<CommPaymentDetailEntity>[] is M) {
-      return data.map<CommPaymentDetailEntity>((Map<String, dynamic> e) => CommPaymentDetailEntity.fromJson(e)).toList() as M;
+      return data.map<CommPaymentDetailEntity>((Map<String, dynamic> e) =>
+          CommPaymentDetailEntity.fromJson(e)).toList() as M;
     }
     if (<CommPaymentDetailOrderable>[] is M) {
-      return data.map<CommPaymentDetailOrderable>((Map<String, dynamic> e) => CommPaymentDetailOrderable.fromJson(e)).toList() as M;
+      return data.map<CommPaymentDetailOrderable>((Map<String, dynamic> e) =>
+          CommPaymentDetailOrderable.fromJson(e)).toList() as M;
     }
     if (<FacilityBookEntity>[] is M) {
       return data.map<FacilityBookEntity>((Map<String, dynamic> e) =>
@@ -608,7 +610,8 @@ class JsonConvert {
           PaymentPageList.fromJson(e)).toList() as M;
     }
     if (<OrderableEntity>[] is M) {
-      return data.map<OrderableEntity>((Map<String, dynamic> e) => OrderableEntity.fromJson(e)).toList() as M;
+      return data.map<OrderableEntity>((Map<String, dynamic> e) =>
+          OrderableEntity.fromJson(e)).toList() as M;
     }
     if (<PropertyNewsDetailEntity>[] is M) {
       return data.map<PropertyNewsDetailEntity>((Map<String, dynamic> e) =>
@@ -846,6 +849,10 @@ class JsonConvert {
       return data.map<ServiceOrderDetailEstateUnit>((Map<String, dynamic> e) =>
           ServiceOrderDetailEstateUnit.fromJson(e)).toList() as M;
     }
+    if (<ServiceOrderDetailOrder>[] is M) {
+      return data.map<ServiceOrderDetailOrder>((Map<String, dynamic> e) =>
+          ServiceOrderDetailOrder.fromJson(e)).toList() as M;
+    }
     if (<ServiceRepairDetailEntity>[] is M) {
       return data.map<ServiceRepairDetailEntity>((Map<String, dynamic> e) =>
           ServiceRepairDetailEntity.fromJson(e)).toList() as M;
@@ -926,7 +933,8 @@ class JsonConvertClassCollection {
     (AuthLoginEntity).toString(): AuthLoginEntity.fromJson,
     (CaptchaImgEntity).toString(): CaptchaImgEntity.fromJson,
     (CommPaymentDetailEntity).toString(): CommPaymentDetailEntity.fromJson,
-    (CommPaymentDetailOrderable).toString(): CommPaymentDetailOrderable.fromJson,
+    (CommPaymentDetailOrderable).toString(): CommPaymentDetailOrderable
+        .fromJson,
     (FacilityBookEntity).toString(): FacilityBookEntity.fromJson,
     (FacilityBookFacilityType).toString(): FacilityBookFacilityType.fromJson,
     (FacilityBookFacilities).toString(): FacilityBookFacilities.fromJson,
@@ -1116,6 +1124,7 @@ class JsonConvertClassCollection {
     (ServiceOrderDetailEstate).toString(): ServiceOrderDetailEstate.fromJson,
     (ServiceOrderDetailEstateUnit).toString(): ServiceOrderDetailEstateUnit
         .fromJson,
+    (ServiceOrderDetailOrder).toString(): ServiceOrderDetailOrder.fromJson,
     (ServiceRepairDetailEntity).toString(): ServiceRepairDetailEntity.fromJson,
     (ServiceRepairDetailMerchant).toString(): ServiceRepairDetailMerchant
         .fromJson,

+ 18 - 9
packages/cs_domain/lib/generated/json/comm_payment_detail_entity.g.dart

@@ -3,7 +3,8 @@ import 'package:domain/entity/comm_payment_detail_entity.dart';
 import 'package:domain/entity/id_name_entity.dart';
 
 
-CommPaymentDetailEntity $CommPaymentDetailEntityFromJson(Map<String, dynamic> json) {
+CommPaymentDetailEntity $CommPaymentDetailEntityFromJson(
+    Map<String, dynamic> json) {
   final CommPaymentDetailEntity commPaymentDetailEntity = CommPaymentDetailEntity();
   final String? id = jsonConvert.convert<String>(json['id']);
   if (id != null) {
@@ -25,15 +26,18 @@ CommPaymentDetailEntity $CommPaymentDetailEntityFromJson(Map<String, dynamic> js
   if (orderAmount != null) {
     commPaymentDetailEntity.orderAmount = orderAmount;
   }
-  final String? refundOrderAmount = jsonConvert.convert<String>(json['refund_order_amount']);
+  final String? refundOrderAmount = jsonConvert.convert<String>(
+      json['refund_order_amount']);
   if (refundOrderAmount != null) {
     commPaymentDetailEntity.refundOrderAmount = refundOrderAmount;
   }
-  final String? depositAmount = jsonConvert.convert<String>(json['deposit_amount']);
+  final String? depositAmount = jsonConvert.convert<String>(
+      json['deposit_amount']);
   if (depositAmount != null) {
     commPaymentDetailEntity.depositAmount = depositAmount;
   }
-  final String? refundDepositAmount = jsonConvert.convert<String>(json['refund_deposit_amount']);
+  final String? refundDepositAmount = jsonConvert.convert<String>(
+      json['refund_deposit_amount']);
   if (refundDepositAmount != null) {
     commPaymentDetailEntity.refundDepositAmount = refundDepositAmount;
   }
@@ -57,18 +61,21 @@ CommPaymentDetailEntity $CommPaymentDetailEntityFromJson(Map<String, dynamic> js
   if (createdAt != null) {
     commPaymentDetailEntity.createdAt = createdAt;
   }
-  final IdNameEntity? account = jsonConvert.convert<IdNameEntity>(json['account']);
+  final IdNameEntity? account = jsonConvert.convert<IdNameEntity>(
+      json['account']);
   if (account != null) {
     commPaymentDetailEntity.account = account;
   }
-  final CommPaymentDetailOrderable? orderable = jsonConvert.convert<CommPaymentDetailOrderable>(json['orderable']);
+  final CommPaymentDetailOrderable? orderable = jsonConvert.convert<
+      CommPaymentDetailOrderable>(json['orderable']);
   if (orderable != null) {
     commPaymentDetailEntity.orderable = orderable;
   }
   return commPaymentDetailEntity;
 }
 
-Map<String, dynamic> $CommPaymentDetailEntityToJson(CommPaymentDetailEntity entity) {
+Map<String, dynamic> $CommPaymentDetailEntityToJson(
+    CommPaymentDetailEntity entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['id'] = entity.id;
   data['type'] = entity.type;
@@ -125,7 +132,8 @@ extension CommPaymentDetailEntityExtension on CommPaymentDetailEntity {
   }
 }
 
-CommPaymentDetailOrderable $CommPaymentDetailOrderableFromJson(Map<String, dynamic> json) {
+CommPaymentDetailOrderable $CommPaymentDetailOrderableFromJson(
+    Map<String, dynamic> json) {
   final CommPaymentDetailOrderable commPaymentDetailOrderable = CommPaymentDetailOrderable();
   final int? id = jsonConvert.convert<int>(json['id']);
   if (id != null) {
@@ -134,7 +142,8 @@ CommPaymentDetailOrderable $CommPaymentDetailOrderableFromJson(Map<String, dynam
   return commPaymentDetailOrderable;
 }
 
-Map<String, dynamic> $CommPaymentDetailOrderableToJson(CommPaymentDetailOrderable entity) {
+Map<String, dynamic> $CommPaymentDetailOrderableToJson(
+    CommPaymentDetailOrderable entity) {
   final Map<String, dynamic> data = <String, dynamic>{};
   data['id'] = entity.id;
   return data;

+ 9 - 4
packages/cs_domain/lib/generated/json/paid_service_pay_success_info_entity.g.dart

@@ -44,8 +44,12 @@ PaidServicePaySuccessInfoEntity $PaidServicePaySuccessInfoEntityFromJson(
   if (staff != null) {
     paidServicePaySuccessInfoEntity.staff = staff;
   }
-  final PaidServicePaySuccessInfoOrderProducts? orderProducts = jsonConvert
-      .convert<PaidServicePaySuccessInfoOrderProducts>(json['order_products']);
+  final List<
+      PaidServicePaySuccessInfoOrderProducts>? orderProducts = (json['order_products'] as List<
+      dynamic>?)?.map(
+          (e) =>
+      jsonConvert.convert<PaidServicePaySuccessInfoOrderProducts>(
+          e) as PaidServicePaySuccessInfoOrderProducts).toList();
   if (orderProducts != null) {
     paidServicePaySuccessInfoEntity.orderProducts = orderProducts;
   }
@@ -79,7 +83,8 @@ Map<String, dynamic> $PaidServicePaySuccessInfoEntityToJson(
   data['order_service'] = entity.orderService?.toJson();
   data['merchant'] = entity.merchant?.toJson();
   data['staff'] = entity.staff?.toJson();
-  data['order_products'] = entity.orderProducts?.toJson();
+  data['order_products'] =
+      entity.orderProducts?.map((v) => v.toJson()).toList();
   data['estate'] = entity.estate?.toJson();
   data['estate_unit'] = entity.estateUnit?.toJson();
   data['order'] = entity.order?.toJson();
@@ -97,7 +102,7 @@ extension PaidServicePaySuccessInfoEntityExtension on PaidServicePaySuccessInfoE
     PaidServicePaySuccessInfoOrderService? orderService,
     PaidServicePaySuccessInfoMerchant? merchant,
     PaidServicePaySuccessInfoStaff? staff,
-    PaidServicePaySuccessInfoOrderProducts? orderProducts,
+    List<PaidServicePaySuccessInfoOrderProducts>? orderProducts,
     PaidServicePaySuccessInfoEstate? estate,
     PaidServicePaySuccessInfoEstateUnit? estateUnit,
     PaidServicePaySuccessInfoOrder? order,

+ 14 - 7
packages/cs_domain/lib/generated/json/payment_page_entity.g.dart

@@ -80,15 +80,18 @@ PaymentPageList $PaymentPageListFromJson(Map<String, dynamic> json) {
   if (orderAmount != null) {
     paymentPageList.orderAmount = orderAmount;
   }
-  final String? depositAmount = jsonConvert.convert<String>(json['deposit_amount']);
+  final String? depositAmount = jsonConvert.convert<String>(
+      json['deposit_amount']);
   if (depositAmount != null) {
     paymentPageList.depositAmount = depositAmount;
   }
-  final String? refundOrderAmount = jsonConvert.convert<String>(json['refund_order_amount']);
+  final String? refundOrderAmount = jsonConvert.convert<String>(
+      json['refund_order_amount']);
   if (refundOrderAmount != null) {
     paymentPageList.refundOrderAmount = refundOrderAmount;
   }
-  final String? refundDepositAmount = jsonConvert.convert<String>(json['refund_deposit_amount']);
+  final String? refundDepositAmount = jsonConvert.convert<String>(
+      json['refund_deposit_amount']);
   if (refundDepositAmount != null) {
     paymentPageList.refundDepositAmount = refundDepositAmount;
   }
@@ -112,11 +115,13 @@ PaymentPageList $PaymentPageListFromJson(Map<String, dynamic> json) {
   if (createdAt != null) {
     paymentPageList.createdAt = createdAt;
   }
-  final IdNameEntity? account = jsonConvert.convert<IdNameEntity>(json['account']);
+  final IdNameEntity? account = jsonConvert.convert<IdNameEntity>(
+      json['account']);
   if (account != null) {
     paymentPageList.account = account;
   }
-  final OrderableEntity? orderable = jsonConvert.convert<OrderableEntity>(json['orderable']);
+  final OrderableEntity? orderable = jsonConvert.convert<OrderableEntity>(
+      json['orderable']);
   if (orderable != null) {
     paymentPageList.orderable = orderable;
   }
@@ -190,11 +195,13 @@ OrderableEntity $OrderableEntityFromJson(Map<String, dynamic> json) {
   if (name != null) {
     orderableEntity.name = name;
   }
-  final String? estateOnlineFormId = jsonConvert.convert<String>(json['estate_online_form_id']);
+  final String? estateOnlineFormId = jsonConvert.convert<String>(
+      json['estate_online_form_id']);
   if (estateOnlineFormId != null) {
     orderableEntity.estateOnlineFormId = estateOnlineFormId;
   }
-  final String? onlineFormTypeId = jsonConvert.convert<String>(json['online_form_type_id']);
+  final String? onlineFormTypeId = jsonConvert.convert<String>(
+      json['online_form_type_id']);
   if (onlineFormTypeId != null) {
     orderableEntity.onlineFormTypeId = onlineFormTypeId;
   }

+ 110 - 42
packages/cs_domain/lib/generated/json/service_order_detail_entity.g.dart

@@ -12,10 +12,19 @@ ServiceOrderDetailEntity $ServiceOrderDetailEntityFromJson(
   if (sn != null) {
     serviceOrderDetailEntity.sn = sn;
   }
-  final String? totalAmount = jsonConvert.convert<String>(json['total_amount']);
+  final int? totalAmount = jsonConvert.convert<int>(json['total_amount']);
   if (totalAmount != null) {
     serviceOrderDetailEntity.totalAmount = totalAmount;
   }
+  final int? orderStatus = jsonConvert.convert<int>(json['order_status']);
+  if (orderStatus != null) {
+    serviceOrderDetailEntity.orderStatus = orderStatus;
+  }
+  final String? cancelStatus = jsonConvert.convert<String>(
+      json['cancel_status']);
+  if (cancelStatus != null) {
+    serviceOrderDetailEntity.cancelStatus = cancelStatus;
+  }
   final String? paidAt = jsonConvert.convert<String>(json['paid_at']);
   if (paidAt != null) {
     serviceOrderDetailEntity.paidAt = paidAt;
@@ -63,6 +72,11 @@ ServiceOrderDetailEntity $ServiceOrderDetailEntityFromJson(
   if (estateUnit != null) {
     serviceOrderDetailEntity.estateUnit = estateUnit;
   }
+  final ServiceOrderDetailOrder? order = jsonConvert.convert<
+      ServiceOrderDetailOrder>(json['order']);
+  if (order != null) {
+    serviceOrderDetailEntity.order = order;
+  }
   return serviceOrderDetailEntity;
 }
 
@@ -72,6 +86,8 @@ Map<String, dynamic> $ServiceOrderDetailEntityToJson(
   data['id'] = entity.id;
   data['sn'] = entity.sn;
   data['total_amount'] = entity.totalAmount;
+  data['order_status'] = entity.orderStatus;
+  data['cancel_status'] = entity.cancelStatus;
   data['paid_at'] = entity.paidAt;
   data['notes'] = entity.notes;
   data['account'] = entity.account?.toJson();
@@ -82,6 +98,7 @@ Map<String, dynamic> $ServiceOrderDetailEntityToJson(
       entity.orderProducts?.map((v) => v.toJson()).toList();
   data['estate'] = entity.estate?.toJson();
   data['estate_unit'] = entity.estateUnit?.toJson();
+  data['order'] = entity.order?.toJson();
   return data;
 }
 
@@ -89,7 +106,9 @@ extension ServiceOrderDetailEntityExtension on ServiceOrderDetailEntity {
   ServiceOrderDetailEntity copyWith({
     String? id,
     String? sn,
-    String? totalAmount,
+    int? totalAmount,
+    int? orderStatus,
+    String? cancelStatus,
     String? paidAt,
     String? notes,
     ServiceOrderDetailAccount? account,
@@ -99,11 +118,14 @@ extension ServiceOrderDetailEntityExtension on ServiceOrderDetailEntity {
     List<ServiceOrderDetailOrderProducts>? orderProducts,
     ServiceOrderDetailEstate? estate,
     ServiceOrderDetailEstateUnit? estateUnit,
+    ServiceOrderDetailOrder? order,
   }) {
     return ServiceOrderDetailEntity()
       ..id = id ?? this.id
       ..sn = sn ?? this.sn
       ..totalAmount = totalAmount ?? this.totalAmount
+      ..orderStatus = orderStatus ?? this.orderStatus
+      ..cancelStatus = cancelStatus ?? this.cancelStatus
       ..paidAt = paidAt ?? this.paidAt
       ..notes = notes ?? this.notes
       ..account = account ?? this.account
@@ -112,14 +134,15 @@ extension ServiceOrderDetailEntityExtension on ServiceOrderDetailEntity {
       ..staff = staff ?? this.staff
       ..orderProducts = orderProducts ?? this.orderProducts
       ..estate = estate ?? this.estate
-      ..estateUnit = estateUnit ?? this.estateUnit;
+      ..estateUnit = estateUnit ?? this.estateUnit
+      ..order = order ?? this.order;
   }
 }
 
 ServiceOrderDetailAccount $ServiceOrderDetailAccountFromJson(
     Map<String, dynamic> json) {
   final ServiceOrderDetailAccount serviceOrderDetailAccount = ServiceOrderDetailAccount();
-  final int? id = jsonConvert.convert<int>(json['id']);
+  final String? id = jsonConvert.convert<String>(json['id']);
   if (id != null) {
     serviceOrderDetailAccount.id = id;
   }
@@ -150,7 +173,7 @@ Map<String, dynamic> $ServiceOrderDetailAccountToJson(
 
 extension ServiceOrderDetailAccountExtension on ServiceOrderDetailAccount {
   ServiceOrderDetailAccount copyWith({
-    int? id,
+    String? id,
     String? name,
     String? avatar,
     String? phone,
@@ -166,7 +189,7 @@ extension ServiceOrderDetailAccountExtension on ServiceOrderDetailAccount {
 ServiceOrderDetailOrderService $ServiceOrderDetailOrderServiceFromJson(
     Map<String, dynamic> json) {
   final ServiceOrderDetailOrderService serviceOrderDetailOrderService = ServiceOrderDetailOrderService();
-  final int? id = jsonConvert.convert<int>(json['id']);
+  final String? id = jsonConvert.convert<String>(json['id']);
   if (id != null) {
     serviceOrderDetailOrderService.id = id;
   }
@@ -174,7 +197,7 @@ ServiceOrderDetailOrderService $ServiceOrderDetailOrderServiceFromJson(
   if (name != null) {
     serviceOrderDetailOrderService.name = name;
   }
-  final double? evaluationsAvgScore = jsonConvert.convert<double>(
+  final int? evaluationsAvgScore = jsonConvert.convert<int>(
       json['evaluations_avg_score']);
   if (evaluationsAvgScore != null) {
     serviceOrderDetailOrderService.evaluationsAvgScore = evaluationsAvgScore;
@@ -193,9 +216,9 @@ Map<String, dynamic> $ServiceOrderDetailOrderServiceToJson(
 
 extension ServiceOrderDetailOrderServiceExtension on ServiceOrderDetailOrderService {
   ServiceOrderDetailOrderService copyWith({
-    int? id,
+    String? id,
     String? name,
-    double? evaluationsAvgScore,
+    int? evaluationsAvgScore,
   }) {
     return ServiceOrderDetailOrderService()
       ..id = id ?? this.id
@@ -296,30 +319,11 @@ ServiceOrderDetailOrderProducts $ServiceOrderDetailOrderProductsFromJson(
   if (productName != null) {
     serviceOrderDetailOrderProducts.productName = productName;
   }
-  final String? productAmount = jsonConvert.convert<String>(
-      json['product_amount']);
-  if (productAmount != null) {
-    serviceOrderDetailOrderProducts.productAmount = productAmount;
-  }
-  final String? urgentAmount = jsonConvert.convert<String>(
-      json['urgent_amount']);
-  if (urgentAmount != null) {
-    serviceOrderDetailOrderProducts.urgentAmount = urgentAmount;
-  }
-  final String? holidayAmount = jsonConvert.convert<String>(
-      json['holiday_amount']);
-  if (holidayAmount != null) {
-    serviceOrderDetailOrderProducts.holidayAmount = holidayAmount;
-  }
-  final String? nightAmount = jsonConvert.convert<String>(json['night_amount']);
-  if (nightAmount != null) {
-    serviceOrderDetailOrderProducts.nightAmount = nightAmount;
-  }
   final int? quantity = jsonConvert.convert<int>(json['quantity']);
   if (quantity != null) {
     serviceOrderDetailOrderProducts.quantity = quantity;
   }
-  final String? totalAmount = jsonConvert.convert<String>(json['total_amount']);
+  final int? totalAmount = jsonConvert.convert<int>(json['total_amount']);
   if (totalAmount != null) {
     serviceOrderDetailOrderProducts.totalAmount = totalAmount;
   }
@@ -336,10 +340,6 @@ Map<String, dynamic> $ServiceOrderDetailOrderProductsToJson(
   final Map<String, dynamic> data = <String, dynamic>{};
   data['id'] = entity.id;
   data['product_name'] = entity.productName;
-  data['product_amount'] = entity.productAmount;
-  data['urgent_amount'] = entity.urgentAmount;
-  data['holiday_amount'] = entity.holidayAmount;
-  data['night_amount'] = entity.nightAmount;
   data['quantity'] = entity.quantity;
   data['total_amount'] = entity.totalAmount;
   data['planned_service_at'] = entity.plannedServiceAt;
@@ -350,21 +350,13 @@ extension ServiceOrderDetailOrderProductsExtension on ServiceOrderDetailOrderPro
   ServiceOrderDetailOrderProducts copyWith({
     String? id,
     String? productName,
-    String? productAmount,
-    String? urgentAmount,
-    String? holidayAmount,
-    String? nightAmount,
     int? quantity,
-    String? totalAmount,
+    int? totalAmount,
     String? plannedServiceAt,
   }) {
     return ServiceOrderDetailOrderProducts()
       ..id = id ?? this.id
       ..productName = productName ?? this.productName
-      ..productAmount = productAmount ?? this.productAmount
-      ..urgentAmount = urgentAmount ?? this.urgentAmount
-      ..holidayAmount = holidayAmount ?? this.holidayAmount
-      ..nightAmount = nightAmount ?? this.nightAmount
       ..quantity = quantity ?? this.quantity
       ..totalAmount = totalAmount ?? this.totalAmount
       ..plannedServiceAt = plannedServiceAt ?? this.plannedServiceAt;
@@ -442,4 +434,80 @@ extension ServiceOrderDetailEstateUnitExtension on ServiceOrderDetailEstateUnit
       ..unit = unit ?? this.unit
       ..address = address ?? this.address;
   }
+}
+
+ServiceOrderDetailOrder $ServiceOrderDetailOrderFromJson(
+    Map<String, dynamic> json) {
+  final ServiceOrderDetailOrder serviceOrderDetailOrder = ServiceOrderDetailOrder();
+  final int? id = jsonConvert.convert<int>(json['id']);
+  if (id != null) {
+    serviceOrderDetailOrder.id = id;
+  }
+  final String? totalAmount = jsonConvert.convert<String>(json['total_amount']);
+  if (totalAmount != null) {
+    serviceOrderDetailOrder.totalAmount = totalAmount;
+  }
+  final String? orderAmount = jsonConvert.convert<String>(json['order_amount']);
+  if (orderAmount != null) {
+    serviceOrderDetailOrder.orderAmount = orderAmount;
+  }
+  final String? depositAmount = jsonConvert.convert<String>(
+      json['deposit_amount']);
+  if (depositAmount != null) {
+    serviceOrderDetailOrder.depositAmount = depositAmount;
+  }
+  final int? paymentStatus = jsonConvert.convert<int>(json['payment_status']);
+  if (paymentStatus != null) {
+    serviceOrderDetailOrder.paymentStatus = paymentStatus;
+  }
+  final String? paidAt = jsonConvert.convert<String>(json['paid_at']);
+  if (paidAt != null) {
+    serviceOrderDetailOrder.paidAt = paidAt;
+  }
+  final int? refundStatus = jsonConvert.convert<int>(json['refund_status']);
+  if (refundStatus != null) {
+    serviceOrderDetailOrder.refundStatus = refundStatus;
+  }
+  final String? refundedAt = jsonConvert.convert<String>(json['refunded_at']);
+  if (refundedAt != null) {
+    serviceOrderDetailOrder.refundedAt = refundedAt;
+  }
+  return serviceOrderDetailOrder;
+}
+
+Map<String, dynamic> $ServiceOrderDetailOrderToJson(
+    ServiceOrderDetailOrder entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['id'] = entity.id;
+  data['total_amount'] = entity.totalAmount;
+  data['order_amount'] = entity.orderAmount;
+  data['deposit_amount'] = entity.depositAmount;
+  data['payment_status'] = entity.paymentStatus;
+  data['paid_at'] = entity.paidAt;
+  data['refund_status'] = entity.refundStatus;
+  data['refunded_at'] = entity.refundedAt;
+  return data;
+}
+
+extension ServiceOrderDetailOrderExtension on ServiceOrderDetailOrder {
+  ServiceOrderDetailOrder copyWith({
+    int? id,
+    String? totalAmount,
+    String? orderAmount,
+    String? depositAmount,
+    int? paymentStatus,
+    String? paidAt,
+    int? refundStatus,
+    String? refundedAt,
+  }) {
+    return ServiceOrderDetailOrder()
+      ..id = id ?? this.id
+      ..totalAmount = totalAmount ?? this.totalAmount
+      ..orderAmount = orderAmount ?? this.orderAmount
+      ..depositAmount = depositAmount ?? this.depositAmount
+      ..paymentStatus = paymentStatus ?? this.paymentStatus
+      ..paidAt = paidAt ?? this.paidAt
+      ..refundStatus = refundStatus ?? this.refundStatus
+      ..refundedAt = refundedAt ?? this.refundedAt;
+  }
 }

+ 9 - 1
packages/cs_resources/lib/generated/intl/messages_en.dart

@@ -460,6 +460,8 @@ class MessageLookup extends MessageLookupByLibrary {
     "mobile_number_caps": MessageLookupByLibrary.simpleMessage("MOBILE NUMBER"),
     "mobile_phone": MessageLookupByLibrary.simpleMessage("Mobile Phone"),
     "more_arrow": MessageLookupByLibrary.simpleMessage("More >"),
+    "most_bookmarked": MessageLookupByLibrary.simpleMessage("Most Bookmarked"),
+    "most_likes": MessageLookupByLibrary.simpleMessage("Most Likes"),
     "moving_company": MessageLookupByLibrary.simpleMessage("MOVING COMPANY"),
     "moving_in": MessageLookupByLibrary.simpleMessage("Moving In"),
     "moving_in_msg": MessageLookupByLibrary.simpleMessage(
@@ -513,6 +515,9 @@ class MessageLookup extends MessageLookupByLibrary {
     "on_hold": MessageLookupByLibrary.simpleMessage("On Hold"),
     "open_folder": MessageLookupByLibrary.simpleMessage("Open Folder"),
     "or": MessageLookupByLibrary.simpleMessage("or"),
+    "order_detail_id_is_invalid": MessageLookupByLibrary.simpleMessage(
+      "Order Detail ID is invalid",
+    ),
     "order_details": MessageLookupByLibrary.simpleMessage("Order Details"),
     "order_time": MessageLookupByLibrary.simpleMessage("Order Time"),
     "other": MessageLookupByLibrary.simpleMessage("Other"),
@@ -569,7 +574,6 @@ class MessageLookup extends MessageLookupByLibrary {
     "payment_successful": MessageLookupByLibrary.simpleMessage(
       "Payment Successful",
     ),
-    "pending": MessageLookupByLibrary.simpleMessage("Pending"),
     "per_month": MessageLookupByLibrary.simpleMessage("per month"),
     "person_in_charge": MessageLookupByLibrary.simpleMessage(
       "PERSON IN CHARGE",
@@ -673,6 +677,7 @@ class MessageLookup extends MessageLookupByLibrary {
       "RENOVATION START DATE",
     ),
     "rent": MessageLookupByLibrary.simpleMessage("Rent"),
+    "rent_item": MessageLookupByLibrary.simpleMessage("Rent Item"),
     "replied": MessageLookupByLibrary.simpleMessage("Replied"),
     "resend_code": MessageLookupByLibrary.simpleMessage("Resend Code"),
     "reservation_required": MessageLookupByLibrary.simpleMessage(
@@ -847,6 +852,7 @@ class MessageLookup extends MessageLookupByLibrary {
     "view_application": MessageLookupByLibrary.simpleMessage(
       "View Application",
     ),
+    "view_at_most": MessageLookupByLibrary.simpleMessage("View At Most"),
     "visit_time": MessageLookupByLibrary.simpleMessage("Visit Time"),
     "visitor": MessageLookupByLibrary.simpleMessage("Visitor"),
     "visitor_active": MessageLookupByLibrary.simpleMessage("Active"),
@@ -857,6 +863,8 @@ class MessageLookup extends MessageLookupByLibrary {
     "visitor_registration": MessageLookupByLibrary.simpleMessage(
       "Visitor Registration",
     ),
+    "wait_paid": MessageLookupByLibrary.simpleMessage("Wait Paid"),
+    "wait_service": MessageLookupByLibrary.simpleMessage("Wait Service"),
     "waiting_for_the_administrator": MessageLookupByLibrary.simpleMessage(
       "Waiting for the administrator",
     ),

+ 11 - 1
packages/cs_resources/lib/generated/intl/messages_zh_CN.dart

@@ -78,6 +78,7 @@ class MessageLookup extends MessageLookupByLibrary {
     "address": MessageLookupByLibrary.simpleMessage("地址"),
     "administrator_reply": MessageLookupByLibrary.simpleMessage("管理员回复"),
     "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
+    "air_conditioning_cleaning": MessageLookupByLibrary.simpleMessage("空调清洁"),
     "alert": MessageLookupByLibrary.simpleMessage("提示"),
     "all": MessageLookupByLibrary.simpleMessage("全部"),
     "amount": MessageLookupByLibrary.simpleMessage("金额"),
@@ -263,6 +264,7 @@ class MessageLookup extends MessageLookupByLibrary {
     "home_equity_loans": MessageLookupByLibrary.simpleMessage("房屋净值贷款"),
     "home_services": MessageLookupByLibrary.simpleMessage("家庭服务"),
     "hottest": MessageLookupByLibrary.simpleMessage("最热门"),
+    "house_cleaning": MessageLookupByLibrary.simpleMessage("房屋清洁"),
     "household": MessageLookupByLibrary.simpleMessage("家庭"),
     "household_members": MessageLookupByLibrary.simpleMessage("家庭成员"),
     "how_do_i_earn_points": MessageLookupByLibrary.simpleMessage("我如何赚取积分?"),
@@ -322,6 +324,8 @@ class MessageLookup extends MessageLookupByLibrary {
     "mobile_number_caps": MessageLookupByLibrary.simpleMessage("手机号码"),
     "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
     "more_arrow": MessageLookupByLibrary.simpleMessage("更多 >"),
+    "most_bookmarked": MessageLookupByLibrary.simpleMessage("下单量"),
+    "most_likes": MessageLookupByLibrary.simpleMessage("点赞量"),
     "moving_company": MessageLookupByLibrary.simpleMessage("搬家公司"),
     "moving_in": MessageLookupByLibrary.simpleMessage("搬入"),
     "moving_in_msg": MessageLookupByLibrary.simpleMessage(
@@ -361,6 +365,9 @@ class MessageLookup extends MessageLookupByLibrary {
     "on_hold": MessageLookupByLibrary.simpleMessage("持有"),
     "open_folder": MessageLookupByLibrary.simpleMessage("打开文件夹"),
     "or": MessageLookupByLibrary.simpleMessage("或者"),
+    "order_detail_id_is_invalid": MessageLookupByLibrary.simpleMessage(
+      "订单详情ID无效",
+    ),
     "order_time": MessageLookupByLibrary.simpleMessage("下单时间"),
     "other": MessageLookupByLibrary.simpleMessage("其他"),
     "other_offering": MessageLookupByLibrary.simpleMessage("查看其他机构的报价:"),
@@ -390,7 +397,6 @@ class MessageLookup extends MessageLookupByLibrary {
     "payment": MessageLookupByLibrary.simpleMessage("支付"),
     "payment_details": MessageLookupByLibrary.simpleMessage("支付详情"),
     "payment_successful": MessageLookupByLibrary.simpleMessage("付款成功"),
-    "pending": MessageLookupByLibrary.simpleMessage("待确定"),
     "per_month": MessageLookupByLibrary.simpleMessage("每月"),
     "person_in_charge": MessageLookupByLibrary.simpleMessage("负责人"),
     "pet_pavilion": MessageLookupByLibrary.simpleMessage("宠物亭"),
@@ -468,6 +474,7 @@ class MessageLookup extends MessageLookupByLibrary {
     ),
     "renovation_start_date": MessageLookupByLibrary.simpleMessage("装修开始日期"),
     "rent": MessageLookupByLibrary.simpleMessage("出租"),
+    "rent_item": MessageLookupByLibrary.simpleMessage("出租商品"),
     "replied": MessageLookupByLibrary.simpleMessage("已回复"),
     "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
     "reservation_required": MessageLookupByLibrary.simpleMessage("需要预约"),
@@ -586,6 +593,7 @@ class MessageLookup extends MessageLookupByLibrary {
     "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
     "view": MessageLookupByLibrary.simpleMessage("查看"),
     "view_application": MessageLookupByLibrary.simpleMessage("查看记录"),
+    "view_at_most": MessageLookupByLibrary.simpleMessage("点击量"),
     "visit_time": MessageLookupByLibrary.simpleMessage("到访时间"),
     "visitor": MessageLookupByLibrary.simpleMessage("访客"),
     "visitor_active": MessageLookupByLibrary.simpleMessage("可用的"),
@@ -594,6 +602,8 @@ class MessageLookup extends MessageLookupByLibrary {
     ),
     "visitor_now": MessageLookupByLibrary.simpleMessage("当前的"),
     "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
+    "wait_paid": MessageLookupByLibrary.simpleMessage("待支付"),
+    "wait_service": MessageLookupByLibrary.simpleMessage("待服务"),
     "waiting_for_the_administrator": MessageLookupByLibrary.simpleMessage(
       "等待管理员回复",
     ),

+ 11 - 1
packages/cs_resources/lib/generated/intl/messages_zh_HK.dart

@@ -78,6 +78,7 @@ class MessageLookup extends MessageLookupByLibrary {
     "address": MessageLookupByLibrary.simpleMessage("地址"),
     "administrator_reply": MessageLookupByLibrary.simpleMessage("管理员回复"),
     "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
+    "air_conditioning_cleaning": MessageLookupByLibrary.simpleMessage("空调清洁"),
     "alert": MessageLookupByLibrary.simpleMessage("提示"),
     "all": MessageLookupByLibrary.simpleMessage("全部"),
     "amount": MessageLookupByLibrary.simpleMessage("金额"),
@@ -263,6 +264,7 @@ class MessageLookup extends MessageLookupByLibrary {
     "home_equity_loans": MessageLookupByLibrary.simpleMessage("房屋净值贷款"),
     "home_services": MessageLookupByLibrary.simpleMessage("家庭服务"),
     "hottest": MessageLookupByLibrary.simpleMessage("最热门"),
+    "house_cleaning": MessageLookupByLibrary.simpleMessage("房屋清洁"),
     "household": MessageLookupByLibrary.simpleMessage("家庭"),
     "household_members": MessageLookupByLibrary.simpleMessage("家庭成员"),
     "how_do_i_earn_points": MessageLookupByLibrary.simpleMessage("我如何赚取积分?"),
@@ -322,6 +324,8 @@ class MessageLookup extends MessageLookupByLibrary {
     "mobile_number_caps": MessageLookupByLibrary.simpleMessage("手机号码"),
     "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
     "more_arrow": MessageLookupByLibrary.simpleMessage("更多 >"),
+    "most_bookmarked": MessageLookupByLibrary.simpleMessage("下单量"),
+    "most_likes": MessageLookupByLibrary.simpleMessage("点赞量"),
     "moving_company": MessageLookupByLibrary.simpleMessage("搬家公司"),
     "moving_in": MessageLookupByLibrary.simpleMessage("搬入"),
     "moving_in_msg": MessageLookupByLibrary.simpleMessage(
@@ -361,6 +365,9 @@ class MessageLookup extends MessageLookupByLibrary {
     "on_hold": MessageLookupByLibrary.simpleMessage("持有"),
     "open_folder": MessageLookupByLibrary.simpleMessage("打开文件夹"),
     "or": MessageLookupByLibrary.simpleMessage("或者"),
+    "order_detail_id_is_invalid": MessageLookupByLibrary.simpleMessage(
+      "订单详情ID无效",
+    ),
     "order_time": MessageLookupByLibrary.simpleMessage("下单时间"),
     "other": MessageLookupByLibrary.simpleMessage("其他"),
     "other_offering": MessageLookupByLibrary.simpleMessage("查看其他机构的报价:"),
@@ -381,7 +388,6 @@ class MessageLookup extends MessageLookupByLibrary {
     "payment": MessageLookupByLibrary.simpleMessage("支付"),
     "payment_details": MessageLookupByLibrary.simpleMessage("支付详情"),
     "payment_successful": MessageLookupByLibrary.simpleMessage("付款成功"),
-    "pending": MessageLookupByLibrary.simpleMessage("待确定"),
     "per_month": MessageLookupByLibrary.simpleMessage("每月"),
     "person_in_charge": MessageLookupByLibrary.simpleMessage("负责人"),
     "pet_pavilion": MessageLookupByLibrary.simpleMessage("宠物亭"),
@@ -459,6 +465,7 @@ class MessageLookup extends MessageLookupByLibrary {
     ),
     "renovation_start_date": MessageLookupByLibrary.simpleMessage("装修开始日期"),
     "rent": MessageLookupByLibrary.simpleMessage("出租"),
+    "rent_item": MessageLookupByLibrary.simpleMessage("出租商品"),
     "replied": MessageLookupByLibrary.simpleMessage("已回复"),
     "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
     "reservation_required": MessageLookupByLibrary.simpleMessage("需要预约"),
@@ -572,6 +579,7 @@ class MessageLookup extends MessageLookupByLibrary {
     "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
     "view": MessageLookupByLibrary.simpleMessage("查看"),
     "view_application": MessageLookupByLibrary.simpleMessage("查看记录"),
+    "view_at_most": MessageLookupByLibrary.simpleMessage("点击量"),
     "visit_time": MessageLookupByLibrary.simpleMessage("到访时间"),
     "visitor": MessageLookupByLibrary.simpleMessage("访客"),
     "visitor_active": MessageLookupByLibrary.simpleMessage("可用的"),
@@ -580,6 +588,8 @@ class MessageLookup extends MessageLookupByLibrary {
     ),
     "visitor_now": MessageLookupByLibrary.simpleMessage("当前的"),
     "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
+    "wait_paid": MessageLookupByLibrary.simpleMessage("待支付"),
+    "wait_service": MessageLookupByLibrary.simpleMessage("待服务"),
     "waiting_for_the_administrator": MessageLookupByLibrary.simpleMessage(
       "等待管理员回复",
     ),

+ 53 - 3
packages/cs_resources/lib/generated/l10n.dart

@@ -3025,6 +3025,11 @@ class S {
     return Intl.message('Sell Item', name: 'sell_item', desc: '', args: []);
   }
 
+  /// `Rent Item`
+  String get rent_item {
+    return Intl.message('Rent Item', name: 'rent_item', desc: '', args: []);
+  }
+
   /// `Followed`
   String get followed {
     return Intl.message('Followed', name: 'followed', desc: '', args: []);
@@ -3130,6 +3135,31 @@ class S {
     return Intl.message('Description', name: 'description', desc: '', args: []);
   }
 
+  /// `Most Likes`
+  String get most_likes {
+    return Intl.message('Most Likes', name: 'most_likes', desc: '', args: []);
+  }
+
+  /// `Most Bookmarked`
+  String get most_bookmarked {
+    return Intl.message(
+      'Most Bookmarked',
+      name: 'most_bookmarked',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `View At Most`
+  String get view_at_most {
+    return Intl.message(
+      'View At Most',
+      name: 'view_at_most',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `House Cleaning`
   String get house_cleaning {
     return Intl.message(
@@ -3150,9 +3180,29 @@ class S {
     );
   }
 
-  /// `Pending`
-  String get pending {
-    return Intl.message('Pending', name: 'pending', desc: '', args: []);
+  /// `Order Detail ID is invalid`
+  String get order_detail_id_is_invalid {
+    return Intl.message(
+      'Order Detail ID is invalid',
+      name: 'order_detail_id_is_invalid',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Wait Paid`
+  String get wait_paid {
+    return Intl.message('Wait Paid', name: 'wait_paid', desc: '', args: []);
+  }
+
+  /// `Wait Service`
+  String get wait_service {
+    return Intl.message(
+      'Wait Service',
+      name: 'wait_service',
+      desc: '',
+      args: [],
+    );
   }
 
   /// `Completed`

+ 7 - 1
packages/cs_resources/lib/l10n/intl_en.arb

@@ -367,6 +367,7 @@
   "for_rent": "For Rent",
   "what_on_your_mind": "What’s on your mind?",
   "sell_item": "Sell Item",
+    "rent_item": "Rent Item",
   "followed": "Followed",
   "to_follow": "+Follow",
   "like_count": "Like ({count})",
@@ -382,9 +383,14 @@
   "contact_information": "Contact Information",
   "price": "Price",
   "description": "Description",
+    "most_likes":  "Most Likes",
+    "most_bookmarked": "Most Bookmarked",
+    "view_at_most": "View At Most",
   "house_cleaning": "House Cleaning",
   "air_conditioning_cleaning": "Air Conditioning Cleaning",
-  "pending": "Pending",
+  "order_detail_id_is_invalid": "Order Detail ID is invalid",
+  "wait_paid": "Wait Paid",
+  "wait_service": "Wait Service",
   "completed": "Completed",
   "canceled": "Canceled",
   "contact_merchant": "Contact Merchant",

+ 9 - 1
packages/cs_resources/lib/l10n/intl_zh_CN.arb

@@ -366,6 +366,7 @@
   "for_rent": "出租",
   "what_on_your_mind": "你在想什么?",
   "sell_item": "出售商品",
+  "rent_item": "出租商品",
   "followed": "已关注",
   "to_follow": "+关注",
   "like_count": "点赞 ({count})",
@@ -381,7 +382,14 @@
   "contact_information": "联系信息",
   "price": "价格",
   "description": "详情描述",
-  "pending": "待确定",
+    "most_likes":  "点赞量",
+    "most_bookmarked": "下单量",
+    "view_at_most": "点击量",
+   "house_cleaning": "房屋清洁",
+   "air_conditioning_cleaning": "空调清洁",
+  "order_detail_id_is_invalid": "订单详情ID无效",
+  "wait_paid": "待支付",
+  "wait_service": "待服务",
   "completed": "已完成",
   "canceled": "已取消",
   "contact_merchant": "联系商家",

+ 9 - 1
packages/cs_resources/lib/l10n/intl_zh_HK.arb

@@ -352,6 +352,7 @@
   "for_rent": "出租",
   "what_on_your_mind": "你在想什么?",
   "sell_item": "出售商品",
+    "rent_item": "出租商品",
   "followed": "已关注",
   "to_follow": "+关注",
   "like_count": "点赞 ({count})",
@@ -367,7 +368,14 @@
   "contact_information": "联系信息",
   "price": "价格",
   "description": "详情描述",
-  "pending": "待确定",
+  "most_likes":  "点赞量",
+  "most_bookmarked": "下单量",
+  "view_at_most": "点击量",
+  "house_cleaning": "房屋清洁",
+  "air_conditioning_cleaning": "空调清洁",
+  "order_detail_id_is_invalid": "订单详情ID无效",
+  "wait_paid": "待支付",
+  "wait_service": "待服务",
   "completed": "已完成",
   "canceled": "已取消",
   "contact_merchant": "联系商家",