glglove 2 months ago
parent
commit
4619409279
30 changed files with 796 additions and 403 deletions
  1. 22 16
      packages/cpt_services/lib/components/status_card_item.dart
  2. 4 6
      packages/cpt_services/lib/components/status_card_item_vm.dart
  3. 1 1
      packages/cpt_services/lib/components/status_card_item_vm.g.dart
  4. 8 8
      packages/cpt_services/lib/constants_services.dart
  5. 101 0
      packages/cpt_services/lib/modules/services/clean_order_cancel_success/clean_order_cancel_success_page.dart
  6. 125 0
      packages/cpt_services/lib/modules/services/clean_order_detail/cancelOrderDialogContent.dart
  7. 143 156
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_page.dart
  8. 19 15
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_state.dart
  9. 114 98
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.dart
  10. 1 1
      packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.g.dart
  11. 23 9
      packages/cpt_services/lib/modules/services/history/history_page.dart
  12. 3 3
      packages/cpt_services/lib/modules/services/history/history_vm.dart
  13. 1 1
      packages/cpt_services/lib/modules/services/history/history_vm.g.dart
  14. 21 7
      packages/cpt_services/lib/modules/services/inProgress/in_progress_page.dart
  15. 3 2
      packages/cpt_services/lib/modules/services/inProgress/in_progress_vm.dart
  16. 1 1
      packages/cpt_services/lib/modules/services/inProgress/in_progress_vm.g.dart
  17. 1 1
      packages/cpt_services/lib/modules/services/repair/repair_vm.g.dart
  18. 5 1
      packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_vm.dart
  19. 1 1
      packages/cpt_services/lib/modules/services/service_evaluate_create/service_evaluate_create_vm.dart
  20. 3 7
      packages/cpt_services/lib/modules/services/service_evaluate_create_success/evaluate_create_success_page.dart
  21. 0 1
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_page.dart
  22. 7 1
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.dart
  23. 109 15
      packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_page.dart
  24. 2 1
      packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_vm.dart
  25. 7 2
      packages/cpt_services/lib/router/page/services_page_router.dart
  26. 44 42
      packages/cpt_services/lib/router/page/services_page_router.gr.dart
  27. BIN
      packages/cs_resources/assets/service/telphone.webp
  28. 1 0
      packages/cs_resources/lib/generated/assets.dart
  29. 1 0
      packages/cs_router/lib/path/router_path.dart
  30. 25 7
      packages/cs_widgets/lib/dialog/dialog_content_wrap.dart

+ 22 - 16
packages/cpt_services/lib/components/status_card_item.dart

@@ -15,22 +15,20 @@ import 'package:widgets/my_text_view.dart';
 import '../constants_services.dart';
 
 class StausCardItem extends HookConsumerWidget {
-  Map<String, dynamic>? serviceType = servicesConstants.servicesType['houseCleaning'];
-  Map<String, dynamic> serviceStatus = servicesConstants.servicesStatus['pending'];
   int serviceId;
+  int serviceTypeCode;
+  int serviceStatusCode;
   Map<String, dynamic> itemObj;
   double? cardHeight ;
-  final Function()? onTap;
-  final Function(dynamic)? onClickColleciotn;
+  final Function(dynamic)? onClickCard;
 
   StausCardItem({
     Key? key,
     required this.serviceId,
-    required this.serviceType,
-    required this.serviceStatus,
+    required this.serviceTypeCode,
+    required this.serviceStatusCode,
     required this.itemObj,
-    this.onTap,
-    this.onClickColleciotn,
+    this.onClickCard,
     cardHeight,
   }): super(key: key) {
     this.cardHeight = cardHeight ?? 180.0;
@@ -46,13 +44,17 @@ class StausCardItem extends HookConsumerWidget {
     final totalPrice = itemObj.getValue("totalPrice", '40');
     final visit_time = itemObj.getValue("visit_time", '14 0ct 2024 15:00');
     final order_time = itemObj.getValue("order_time", '13 0ct 2024 12:00');
-    final status_text = itemObj.getValue("status_text", 'In Progress');
 
-    List<Map<String, dynamic>>? actionBtnList = servicesConstants.servicesStatusActionBtnList[serviceStatus['code']];
-    Log.d("actionBtnList   $actionBtnList");
+    Log.d("serviceStatusCode $serviceStatusCode");
+    String status_text = servicesConstants.servicesStatus['$serviceStatusCode']['text'];
+
+    // final status_text = itemObj.getValue("status_text", "");
+
+    List<Map<String, dynamic>>? actionBtnList = servicesConstants.servicesStatusActionBtnList[serviceStatusCode];
+    // Log.d("actionBtnList   $actionBtnList");
 
     useEffect((){
-      vm.setInitData(context, serviceId, serviceType!, serviceStatus);
+      vm.setInitData(context, serviceId, serviceTypeCode, serviceStatusCode);
       return () {
       };
     },[]);
@@ -60,7 +62,7 @@ class StausCardItem extends HookConsumerWidget {
       width: double.infinity,
       height: cardHeight!,
       child: Padding(
-        padding: const EdgeInsets.all(18.0),
+        padding: const EdgeInsets.only(left: 18.0, right: 18.0, top: 22.0, bottom: 22.0),
         child: Column(
           crossAxisAlignment: CrossAxisAlignment.start,
           children: [
@@ -68,6 +70,7 @@ class StausCardItem extends HookConsumerWidget {
               child: Column(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
+                  // 标题 和状态
                   Row(
                     mainAxisAlignment: MainAxisAlignment.spaceBetween,
                     children: [
@@ -101,6 +104,7 @@ class StausCardItem extends HookConsumerWidget {
                     textAlign: TextAlign.left,
                     marginTop: 6,
                   ),
+                  // 价格
                   Row(
                     mainAxisAlignment: MainAxisAlignment.spaceBetween,
                     children: [
@@ -124,6 +128,7 @@ class StausCardItem extends HookConsumerWidget {
                     ],
                   ),
                   SizedBox(height: 7.5,),
+                  // visit time
                   Row(
                     mainAxisAlignment: MainAxisAlignment.spaceBetween,
                     children: [
@@ -145,6 +150,7 @@ class StausCardItem extends HookConsumerWidget {
                     ],
                   ),
                   SizedBox(height: 7.5,),
+                  // order time
                   Row(
                     mainAxisAlignment: MainAxisAlignment.spaceBetween,
                     children: [
@@ -168,10 +174,10 @@ class StausCardItem extends HookConsumerWidget {
                 ],
               )
             ),
-            Container(
-              margin: EdgeInsets.only(top: 15),
+            // Container(
+              // margin: EdgeInsets.only(top: 15),
               // child: _buildActionSection(context,actionBtnList!, vm, ref),
-            ),
+            // ),
           ],
         ),
       ),

+ 4 - 6
packages/cpt_services/lib/components/status_card_item_vm.dart

@@ -18,9 +18,8 @@ class StatusCardItemVm extends _$StatusCardItemVm {
   late ServicesRespository serviceRespositoryInstance;
 
   late int _serviceId;
-  late Map<String, dynamic> _serviceType;
-  late Map<String, dynamic> _serviceStatus;
   late int _serviceTypeCode;
+  late int _serviceStatusCode;
 
 
   initState(){
@@ -45,11 +44,10 @@ class StatusCardItemVm extends _$StatusCardItemVm {
   //   );
   // }
 
-  setInitData(BuildContext context,int serviceId, Map<String, dynamic> serviceType, Map<String, dynamic> serviceStatus){
+  setInitData(BuildContext context,int serviceId, int serviceTypeCode, int serviceStatusCode){
     _serviceId = serviceId;
-    _serviceType = serviceType;
-    _serviceStatus = serviceStatus;
-    _serviceTypeCode = serviceType['code']!;
+    _serviceTypeCode = serviceTypeCode;
+    _serviceStatusCode = serviceStatusCode;
   }
 
   handlerClickActionBtn(BuildContext context, Map<String, dynamic> actionBtn){

+ 1 - 1
packages/cpt_services/lib/components/status_card_item_vm.g.dart

@@ -6,7 +6,7 @@ part of 'status_card_item_vm.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$statusCardItemVmHash() => r'1704fd1a95aa66871db51abe5e88651fe23c5ae3';
+String _$statusCardItemVmHash() => r'41c489c1bdf10cb0588de229c4d4bf2b5440d204';
 
 /// See also [StatusCardItemVm].
 @ProviderFor(StatusCardItemVm)

+ 8 - 8
packages/cpt_services/lib/constants_services.dart

@@ -18,22 +18,22 @@ class servicesConstants {
   };
 
    static Map<String, dynamic> servicesStatus = {
-     "pending": {
+     "0": {
        "text": "Pending",
        "type": "pending",
        'code': 0,
      },
-     "inProgress": {
+     "1": {
        "text": "In Progress",
        "type": "inProgress",
        'code': 1,
      },
-     "completed": {
+     "2": {
        "text": "completed",
        "type": "completed",
        'code': 2,
      },
-     "canceled": {
+     "3": {
        "text": "canceled",
        "type": "canceled",
        'code': 3,
@@ -42,21 +42,21 @@ class servicesConstants {
 
    static Map<int, List<Map<String, dynamic>>> servicesStatusActionBtnList = {
      // pending, inProgress, completed, canceled
-     servicesStatus['pending']['code']: [
+     servicesStatus['0']['code']: [
        actionBtn['0'],
        actionBtn['1'],
        actionBtn['2'],
      ],
-     servicesStatus['inProgress']['code']: [
+     servicesStatus['1']['code']: [
        actionBtn['0'],
        actionBtn['1'],
        actionBtn['2'],
      ],
-     servicesStatus['completed']['code']: [
+     servicesStatus['2']['code']: [
        actionBtn['3'],
        actionBtn['4'],
      ],
-     servicesStatus['canceled']['code']: [
+     servicesStatus['3']['code']: [
        actionBtn['3'],
      ]
    };

+ 101 - 0
packages/cpt_services/lib/modules/services/clean_order_cancel_success/clean_order_cancel_success_page.dart

@@ -0,0 +1,101 @@
+import 'package:cs_resources/generated/assets.dart';
+import 'package:domain/entity/garage_sale_rent_entity.dart';
+import 'package:flutter/material.dart';
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter/rendering.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:plugin_basic/provider/app_config/app_config_service.dart';
+import 'package:router/componentRouter/component_service_manager.dart';
+import 'package:router/ext/auto_router_extensions.dart';
+import 'package:shared/utils/color_utils.dart';
+import 'package:shared/utils/ext_dart.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:shared/utils/screen_util.dart';
+import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:widgets/widget_export.dart';
+
+import '../../../router/page/services_page_router.dart';
+import '../homeService/home_service_page.dart';
+
+@RoutePage()
+class CleanOrderCancelSuccessPage extends HookConsumerWidget {
+  const CleanOrderCancelSuccessPage({
+    Key? key,
+  }) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(const CleanOrderCancelSuccessPageRoute());
+    } else {
+      appRouter.push(const CleanOrderCancelSuccessPageRoute());
+    }
+  }
+
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    // final appConfigState = ref.watch(appConfigServiceProvider)
+
+
+    useEffect(() {
+      // 组件挂载时执行 - 执行接口请求
+      // Future.microtask(() => vm.initPageData());
+      return () {
+        // 组件卸载时执行
+        // Log.d("CleanOrderCancelSuccess_page 组件卸载时执行");
+      };
+    }, []);
+
+    return Scaffold(
+        appBar: MyAppBar.appBar(
+          context,
+          "Cancellation of Order",
+          backgroundColor: context.appColors.whiteBG,
+        ),
+        backgroundColor: ColorUtils.string2Color("#F2F3F6"),
+        body: Center(
+          child: Container(
+            margin: const EdgeInsets.only(top: 50),
+            child: Column(
+              mainAxisAlignment: MainAxisAlignment.start,
+              crossAxisAlignment: CrossAxisAlignment.center,
+              children: [
+                MyTextView(
+                  "The cancellation order has been submitted and we will confirm it as soon as possible. Thank you for your support.",
+                  fontSize: 15,
+                  isFontRegular: true,
+                  boxWidth: 270,
+                  textAlign: TextAlign.center,
+                  textColor: ColorUtils.string2Color('#333333'),
+                  marginTop: 17,
+                  marginBottom: 50,
+                ),
+                MyButton(
+                  text: "Back Home",
+                  onPressed: (){
+                    // 回到首页
+                    ComponentServiceManager().mainService.startMainPage();
+                  },
+                  fontSize: 15,
+                  fontWeight: FontWeight.w500,
+                  textColor: context.appColors.textWhite,
+                  backgroundColor: context.appColors.textPrimary,
+                  minHeight: 45,
+                  minWidth: 310,
+                )
+              ],
+            ),
+          ),
+        )
+    );
+  }
+
+}

+ 125 - 0
packages/cpt_services/lib/modules/services/clean_order_detail/cancelOrderDialogContent.dart

@@ -0,0 +1,125 @@
+import 'dart:math';
+
+import 'package:auto_route/src/route/page_route_info.dart';
+import 'package:cpt_services/components/chooseVisitTimeBottomFooter.dart';
+import 'package:cpt_services/modules/services/clean_order_detail/clean_order_detail_vm.dart';
+import 'package:cs_resources/generated/assets.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/widgets.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:shared/utils/color_utils.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+class CancelOrderDialogContent extends HookConsumerWidget {
+  const CancelOrderDialogContent({
+    Key? key,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final vm = ref.read(cleanOrderDetailVmProvider.notifier);
+
+    return SizedBox(
+      width: double.infinity,
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.start,
+        children: [
+          MyTextView(
+            "Reason for canceling the order:",
+            fontSize: 17,
+            isFontBold: true,
+          ),
+          Container(
+            height: 175,
+            child: _buildTextAreaLayout(context, vm, ref, 'reason'),
+          ),
+          Row(
+            mainAxisAlignment: MainAxisAlignment.start,
+            children: [
+              MyTextView(
+                "Please contact the service provider for confirmation before canceling the order.",
+                isFontRegular: true,
+                fontSize: 15,
+                maxLines: 9999,
+                boxWidth: 300,
+              ).expanded(),
+              const MyAssetImage(
+                Assets.serviceTelphone,
+                width: 36.5,
+                height: 30,
+              ),
+            ],
+          ),
+        ],
+      ),
+    );
+  }
+
+
+  /// 多行输入框
+  Widget _buildTextAreaLayout(BuildContext context, CleanOrderDetailVm vm, WidgetRef ref,String key){
+    final state = ref.watch(cleanOrderDetailVmProvider);
+    final noteCount = useState(0);
+    return Stack(
+        children: [
+          Container(
+            color: ColorUtils.string2Color("#F2F3F6"),
+            margin: const EdgeInsets.only(top: 15, bottom: 28.5),
+            padding: const EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10),
+            child: TextField(
+              cursorColor: context.appColors.authFiledText,
+              cursorWidth: 1.5,
+              autofocus: false,
+              enabled: true,
+              maxLines: null,
+              focusNode: state.cancelFormData![key]!['focusNode'],
+              controller: state.cancelFormData![key]!['controller'],
+              decoration: InputDecoration(
+                isDense: true,
+                isCollapsed: true,
+                border: InputBorder.none,
+                hintText: state.cancelFormData![key]!['hintText'],
+                hintStyle: TextStyle(
+                  color: context.appColors.authFiledHint,
+                  fontSize: 16.0,
+                  fontWeight: FontWeight.w400,
+                ),
+              ),
+              style: TextStyle(
+                color: context.appColors.authFiledText,
+                fontSize: 16.0,
+                fontWeight: FontWeight.w400,
+              ),
+              textInputAction: TextInputAction.done,
+              onSubmitted: (value) {
+                FocusScope.of(context).unfocus();
+              },
+              expands: true,
+              onChanged: (text) {
+                // 当文本改变时,更新字符数量
+                noteCount.value = text.length;
+                final cleanOrderDetailVm = ref.read(cleanOrderDetailVmProvider.notifier);
+                cleanOrderDetailVm.changeCancelFormData(context, text);
+              },
+            ),
+          ),
+          // Positioned(
+          //   bottom: 0.0,
+          //   right: 0.0,
+          //   child: Text(
+          //     S.current.characters(noteCount.value),
+          //     style: TextStyle(
+          //       color: context.appColors.textBlack,
+          //       fontSize: 15.0,
+          //     ),
+          //   ),
+          // ),
+        ]
+    );
+  }
+}

+ 143 - 156
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_page.dart

@@ -34,20 +34,22 @@ import '../../../components/status_card_item.dart';
 
 @RoutePage()
 class CleanOrderDetailPage extends HookConsumerWidget {
-  final int id;
-  final int serviceTypeCode;
+  final int id; // 订单id
+  final int serviceTypeCode;  // 订单类型
+  final int serviesStatusCode; // 订单状态
   const CleanOrderDetailPage({
     Key? key,
-    required this.id,
-    required this.serviceTypeCode,
+    @PathParam('id') required this.id,
+    @PathParam('serviceTypeCode') required this.serviceTypeCode,
+    @PathParam('serviesStatusCode') required this.serviesStatusCode,
   }) : super(key: key);
 
   //启动当前页面
-  static void startInstance({BuildContext? context, required int id, required int serviceTypeCode}) {
+  static void startInstance({BuildContext? context, required int id, required int serviceTypeCode, required int serviesStatusCode}) {
     if (context != null) {
-      context.router.push(CleanOrderDetailPageRoute(id: id, serviceTypeCode: serviceTypeCode));
+      context.router.push(CleanOrderDetailPageRoute(id: id, serviceTypeCode: serviceTypeCode, serviesStatusCode: serviesStatusCode));
     } else {
-      appRouter.push(CleanOrderDetailPageRoute(id:id, serviceTypeCode: serviceTypeCode));
+      appRouter.push(CleanOrderDetailPageRoute(id:id, serviceTypeCode: serviceTypeCode, serviesStatusCode: serviesStatusCode));
     }
   }
 
@@ -58,10 +60,11 @@ class CleanOrderDetailPage extends HookConsumerWidget {
     final state = ref.watch(cleanOrderDetailVmProvider);
     // final appConfigState = ref.watch(appConfigServiceProvider)
 
-    final totalPrice = ref.watch(cleanOrderDetailVmProvider.select((state) => state.totalPrice));
+    List<Map<String, dynamic>> actionBtnList = servicesConstants.servicesStatusActionBtnList[serviesStatusCode]!;
+    Log.d("actionBtnList   $actionBtnList");
 
     useEffect(() {
-      vm.setInitPageData(id: id, serviceTypeCode: serviceTypeCode);
+      vm.setInitPageData(id: id, serviceTypeCode: serviceTypeCode, serviceStatusCode: serviesStatusCode);
       // 组件挂载时执行 - 执行接口请求
       Future.microtask(() => vm.initPageData());
       return () {
@@ -72,7 +75,7 @@ class CleanOrderDetailPage extends HookConsumerWidget {
     return Scaffold(
       appBar: MyAppBar.appBar(
         context,
-        "Confirm Order",
+        "Order Details",
         backgroundColor: context.appColors.whiteBG,
       ),
       backgroundColor: ColorUtils.string2Color("#F2F3F6"),
@@ -94,11 +97,16 @@ class CleanOrderDetailPage extends HookConsumerWidget {
               },
               successWidget: Column(
                 children: [
-                  Expanded(child: _buildBody(state, vm, context,ref)),
+                  Expanded(
+                    child: Padding(
+                      padding: const EdgeInsets.only(bottom: 10),
+                      child: _buildBody(state, vm, context,ref),
+                    ),
+                  ),
                   // 底部联系信息
                   Visibility(
                     visible: state.loadingState == LoadState.State_Success,
-                    child: state.datas !=null ? _buildBottomSection(state, vm,ref, context, id, serviceTypeCode, totalPrice): Container(),
+                    child: state.datas !=null ? _buildActionSection(context, state, vm, ref, id, serviceTypeCode,serviesStatusCode, actionBtnList): Container(),
                   )
 
                 ],
@@ -138,24 +146,30 @@ class CleanOrderDetailPage extends HookConsumerWidget {
             padding: const EdgeInsets.only(left: 10, right: 10, top: 18.5, bottom: 18.5),
             child: _buildOrderService(state, vm, context),
           ),
-          // 订单 上门时间
+          // total amount
           Container(
             color: context.appColors.whiteBG,
             width: double.infinity,
             margin: const EdgeInsets.only(left: 0, right: 0, top: 5, bottom: 0),
             padding: const EdgeInsets.only(left: 10, right: 10, top: 18.5, bottom: 18.5),
-            child: _buildOrderVisitTime(state, vm, context).onTap((){
-              vm.handlerClickVisitTime(context);
-            }),
+            child: _buildOrderTotalAmount(state, vm, context),
           ),
-          // 订单 card 信息
+          // 订单 上门时间
           Container(
             color: context.appColors.whiteBG,
             width: double.infinity,
             margin: const EdgeInsets.only(left: 0, right: 0, top: 5, bottom: 0),
             padding: const EdgeInsets.only(left: 10, right: 10, top: 18.5, bottom: 18.5),
-            child: _buildOrderPayCardInfo(state, vm, context),
+            child: _buildOrderVisitTime(state, vm, context),
           ),
+          // 订单 card 信息
+          // Container(
+          //   color: context.appColors.whiteBG,
+          //   width: double.infinity,
+          //   margin: const EdgeInsets.only(left: 0, right: 0, top: 5, bottom: 0),
+          //   padding: const EdgeInsets.only(left: 10, right: 10, top: 18.5, bottom: 18.5),
+          //   child: _buildOrderPayCardInfo(state, vm, context),
+          // ),
 
           // 订单备注
           Container(
@@ -166,13 +180,13 @@ class CleanOrderDetailPage extends HookConsumerWidget {
             child: _buildOrderRemark(state, vm, context, ref),
           ),
           // 订单 rules
-          Container(
-            color: context.appColors.whiteBG,
-            width: double.infinity,
-            margin: const EdgeInsets.only(left: 0, right: 0, top: 5, bottom: 0),
-            padding: const EdgeInsets.only(left: 10, right: 10, top: 18.5, bottom: 18.5),
-            child: _buildOrderRules(state, vm, context),
-          ),
+          // Container(
+          //   color: context.appColors.whiteBG,
+          //   width: double.infinity,
+          //   margin: const EdgeInsets.only(left: 0, right: 0, top: 5, bottom: 0),
+          //   padding: const EdgeInsets.only(left: 10, right: 10, top: 18.5, bottom: 18.5),
+          //   child: _buildOrderRules(state, vm, context),
+          // ),
         ],
       ),
     );
@@ -326,12 +340,50 @@ class CleanOrderDetailPage extends HookConsumerWidget {
     );
   }
 
+  Widget _buildOrderTotalAmount(CleanOrderDetailState state, CleanOrderDetailVm vm, BuildContext context) {
+    return Column(
+      children: [
+        Row(
+          mainAxisAlignment: MainAxisAlignment.start,
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            const MyAssetImage(
+              Assets.serviceMoneyIcon,
+              width: 15,
+              height: 17.5,
+            ),
+            const SizedBox(
+             width: 10,
+            ),
+            MyTextView(
+              'Total Amount',
+              fontSize: 17,
+              isFontBold: true,
+              textColor: context.appColors.textBlack,
+            ),
+
+            MyTextView(
+              '\$200',
+              fontSize: 15,
+              textColor: context.appColors.textBlack,
+              isFontBold: true,
+              textAlign: TextAlign.end,
+              marginRight: 17,
+            ).expanded(),
+          ]
+        )
+      ]
+    );
+  }
+
   Widget _buildOrderVisitTime(CleanOrderDetailState state, CleanOrderDetailVm vm, BuildContext context) {
     return Row(
       mainAxisSize: MainAxisSize.max,
       mainAxisAlignment: MainAxisAlignment.spaceBetween,
+      crossAxisAlignment: CrossAxisAlignment.center,
       children: [
         Row(
+          crossAxisAlignment: CrossAxisAlignment.center,
           children: [
             const MyAssetImage(
               Assets.serviceTimeIcon,
@@ -346,7 +398,6 @@ class CleanOrderDetailPage extends HookConsumerWidget {
               fontSize: 17,
               isFontBold: true,
               textColor: context.appColors.textBlack,
-              marginBottom: 5,
             ),
           ],
         ),
@@ -363,12 +414,12 @@ class CleanOrderDetailPage extends HookConsumerWidget {
                 textAlign: TextAlign.end,
                 marginRight: 17,
               ),
-              // 右箭头 icon
-              const MyAssetImage(
-                Assets.serviceRightIcon,
-                width: 17.5,
-                height: 17.5,
-              ),
+              // // 右箭头 icon
+              // const MyAssetImage(
+              //   Assets.serviceRightIcon,
+              //   width: 17.5,
+              //   height: 17.5,
+              // ),
             ],
           ),
         ),
@@ -459,83 +510,31 @@ class CleanOrderDetailPage extends HookConsumerWidget {
         Container(
           margin: const EdgeInsets.only(left:10, right:10,top: 0),
           width: double.infinity,
-          height: 200,
           padding: const EdgeInsets.all(15),
           decoration: BoxDecoration(
-              color: ColorUtils.string2Color("#F2F3F6"),
+              color: ColorUtils.string2Color("#F8F8F8"),
               borderRadius: BorderRadius.circular(5),
-              boxShadow: [
-                BoxShadow(
-                  color: Colors.grey.withOpacity(0.2),
-                  spreadRadius:1,
-                  blurRadius: 2,
-                  offset: const Offset(0.5, 0.5), // changes position of shadow
-                ),
-              ]
+              // boxShadow: [
+              //   BoxShadow(
+              //     color: Colors.grey.withOpacity(0.2),
+              //     spreadRadius:1,
+              //     blurRadius: 2,
+              //     offset: const Offset(0.5, 0.5), // changes position of shadow
+              //   ),
+              // ]
+          ),
+          child: MyTextView(
+            'Hope to arrive as soon as possible',
+            fontSize: 16,
+            isFontRegular: true,
+            textColor: context.appColors.textBlack,
+            marginBottom: 15,
           ),
-          child: _buildTextAreaLayout(context, vm, ref, 'remark',),
         ),
       ],
     );
   }
 
-  /// 多行输入框
-  Widget _buildTextAreaLayout(BuildContext context, CleanOrderDetailVm vm, WidgetRef ref,String key){
-    final state = ref.watch(cleanOrderDetailVmProvider);
-    final noteCount = useState(0);
-    return Stack(
-        children: [
-          Container(
-            child: TextField(
-              cursorColor: context.appColors.authFiledText,
-              cursorWidth: 1.5,
-              autofocus: false,
-              enabled: true,
-              maxLines: null,
-              focusNode: state.remarkInfo[key]!['focusNode'],
-              controller: state.remarkInfo[key]!['controller'],
-              decoration: InputDecoration(
-                isDense: true,
-                isCollapsed: true,
-                border: InputBorder.none,
-                hintText: state.remarkInfo[key]!['hintText'],
-                hintStyle: TextStyle(
-                  color: context.appColors.authFiledHint,
-                  fontSize: 16.0,
-                  fontWeight: FontWeight.w400,
-                ),
-              ),
-              style: TextStyle(
-                color: context.appColors.authFiledText,
-                fontSize: 16.0,
-                fontWeight: FontWeight.w400,
-              ),
-              textInputAction: TextInputAction.done,
-              onSubmitted: (value) {
-                FocusScope.of(context).unfocus();
-              },
-              expands: true,
-              onChanged: (text) {
-                // 当文本改变时,更新字符数量
-                noteCount.value = text.length;
-              },
-            ),
-          ),
-          // Positioned(
-          //   bottom: 0.0,
-          //   right: 0.0,
-          //   child: Text(
-          //     S.current.characters(noteCount.value),
-          //     style: TextStyle(
-          //       color: context.appColors.textBlack,
-          //       fontSize: 15.0,
-          //     ),
-          //   ),
-          // ),
-        ]
-    );
-  }
-
 
   Widget _buildOrderRules(CleanOrderDetailState state, CleanOrderDetailVm vm, BuildContext context) {
     return Column(
@@ -570,63 +569,51 @@ class CleanOrderDetailPage extends HookConsumerWidget {
   }
 
   // 底部操作区域
-  Widget _buildBottomSection(CleanOrderDetailState state, CleanOrderDetailVm vm,WidgetRef ref, BuildContext context, int id, int serviceTypeCode, totalPrice) {
-    return Container(
-      height: 50,
-      width: double.infinity,
-      child: Row(
-        mainAxisAlignment: MainAxisAlignment.center,
-        mainAxisSize: MainAxisSize.max,
-        children: [
-          Container(
-            width: 122,
+  Widget _buildActionSection(BuildContext context,state, vm ,WidgetRef ref, int id, int serviceTypeCode, int serviesStatusCode, List<Map<String, dynamic>> actionBtnList) {
+    return LayoutBuilder(
+        builder: (BuildContext context, BoxConstraints constraints) {
+          final maxHeight = constraints.maxHeight;
+          final minHeight = constraints.minHeight;
+          final maxWidth = constraints.maxWidth;
+          // Log.d("---maxHeight-----$maxHeight-- $minHeight  $maxWidth--");
+          return Container(
+            height: 71.5,
+            color: context.appColors.whiteBG,
+            width: maxWidth,
+            padding: const EdgeInsets.only(left: 10, right: 10),
             child: Row(
-              mainAxisAlignment: MainAxisAlignment.center,
-              crossAxisAlignment: CrossAxisAlignment.center,
-              mainAxisSize: MainAxisSize.max,
-              children: [
-                Container(
-                  alignment: Alignment.center,
-                  padding: const EdgeInsets.only(left:5, right: 0,top:5,bottom: 5),
-                  child: Row(
-                    mainAxisAlignment: MainAxisAlignment.center,
-                    mainAxisSize: MainAxisSize.max,
-                    children: [
-                      MyTextView(
-                        "\$$totalPrice",
-                        fontSize: 18,
-                        textColor: Colors.white,
-                        isFontRegular: true,
-                        marginLeft: 5,
-                        marginRight: 15,
-                        onClick: (){
-
-                        },
-                      ),
-                    ],
-                  ),
-                ),
-              ],
-            ).backgroundColor(context.appColors.textPrimary),
-          ),
-          Expanded(
-            child: Container(
-              color: context.appColors.redDefault,
-              child: Center(
-                child: MyTextView(
-                  'Pay Now',
-                  textColor: context.appColors.textWhite,
-                  fontSize: 17,
-                  isFontMedium: true,
-                  textAlign: TextAlign.center,
-                ),
-              ),
-            ).onTap((){
-              vm.handlerClickPayNow(context, id: id , serviceTypeCode: serviceTypeCode);
-            }),
-          ),
-        ],
-      ),
+                mainAxisAlignment: MainAxisAlignment.center,
+                mainAxisSize: MainAxisSize.max,
+                children: List.generate(actionBtnList.length, (index){
+                  var item = actionBtnList[index];
+                  return Expanded(
+                    child: _buildBtn(context, item, vm, ref),
+                  );
+                  // return _buildBtn(context, item, vm, ref);
+                })
+            ),
+          ).scrollable(
+            scrollDirection: Axis.horizontal,
+            physics: BouncingScrollPhysics(),
+          );
+        }
     );
   }
+
+  Widget _buildBtn(BuildContext context, Map<String, dynamic> btnItem, vm, WidgetRef ref) {
+    // final btnCode = btnItem['code'];
+    return MyButton(
+      onPressed: (){
+        vm.handlerClickActionBtn(context, btnItem);
+      },
+      text: btnItem['text'],
+      radius: 10.0,
+      textColor: context.appColors.textWhite,
+      backgroundColor: ColorUtils.string2Color(btnItem['btnColor']),
+      fontSize: 12,
+      padding: const EdgeInsets.symmetric(horizontal: 5),
+      minWidth: btnItem['btnWidth']?.toDouble(),
+      minHeight: btnItem['btnHeight']?.toDouble() + 5,
+    ).marginOnly(left: 5);
+  }
 }

+ 19 - 15
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_state.dart

@@ -6,40 +6,44 @@ class CleanOrderDetailState {
   LoadState loadingState;
   String? errorMessage;
   double? totalPrice;
-  Map<String, Map<String, dynamic>> remarkInfo;
   Map<String, dynamic>? datas;
 
+  String? cancelReason;  // 取消的文字
+
+  Map<String, Map<String, dynamic>>? cancelFormData;
+
 
   CleanOrderDetailState({
     this.loadingState = LoadState.State_Loading,
     String? errorMessage,
     double? totalPrice,
-
-    remarkInfo,
+    this.cancelReason,
+    Map<String, Map<String, dynamic>>? cancelFormData,
     this.datas,
-  }): remarkInfo = remarkInfo ?? {
-    "remark": {
-      'value': '',
-      'controller': TextEditingController(),
-      'hintText': '',
-      'focusNode': FocusNode(),
-      'obsecure': false,
-    },
-  },
-        totalPrice = totalPrice ?? 0.0;
+  }): cancelFormData = cancelFormData ?? {
+      'reason': {
+        'value': '',
+        'controller': TextEditingController(),
+        'hintText': '',
+        'focusNode': FocusNode(),
+        'obsecure': false,
+      },
+  },totalPrice = totalPrice ?? 0.0;
 
   CleanOrderDetailState copyWith({
     LoadState? loadingState,
     String? errorMessage,
     double? totalPrice,
-    Map<String, dynamic>? remarkInfo,
+    String? cancelReason,
+    Map<String, Map<String, dynamic>>? cancelFormData,
     Map<String, dynamic>? datas,
   }) {
     return CleanOrderDetailState(
       loadingState: loadingState ?? this.loadingState,
       errorMessage: errorMessage ?? this.errorMessage,
       totalPrice: totalPrice ?? this.totalPrice,
-      remarkInfo: remarkInfo ?? this.remarkInfo,
+      cancelReason: cancelReason ?? this.cancelReason,
+      cancelFormData: cancelFormData ?? this.cancelFormData,
       datas: datas ?? this.datas,
     );
   }

+ 114 - 98
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.dart

@@ -14,9 +14,13 @@ import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 import 'package:router/ext/auto_router_extensions.dart';
+import 'package:shared/utils/ext_dart.dart';
 import 'package:shared/utils/log_utils.dart';
+import 'package:widgets/dialog/app_custom_dialog.dart';
+import 'package:widgets/dialog/app_default_dialog.dart';
 import 'package:widgets/dialog/dialog_content_wrap.dart';
 import 'package:widgets/load_state_layout.dart';
+import 'package:widgets/my_button.dart';
 import 'package:widgets/widget_export.dart';
 
 import '../../../components/chooseHouseCleanContent.dart';
@@ -25,6 +29,9 @@ import '../../../components/chooseVisitTimeBottomFooter.dart';
 import '../../../constants_services.dart';
 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 'cancelOrderDialogContent.dart';
 import 'clean_order_detail_state.dart';
 
 part 'clean_order_detail_vm.g.dart';
@@ -40,8 +47,9 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm {
   int _limit = 10; // 每页数量
   int _count = 0; // 总条数
 
-  int _detailId = 0;
-  int _detailServiceTypeCode = 0;
+  late int _detailId;
+  late int _detailServiceTypeCode;
+  late int _detailServiceStatusCode;
 
   // Refresh 控制器
   final EasyRefreshController refreshController = EasyRefreshController(
@@ -61,10 +69,14 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm {
     // servicesRespositoryInstance = ref.read(commonGarageRespositoryProvider);
     final state = initState();
     Log.d("--------------------------build---------------------");
-
+    // 处理 remarkInfo 数据的回显
+    this.onInit();
     return state;
   }
 
+  onInit() {
+    Log.d("--------------------------onInit---------------------");
+  }
 
   //刷新页面状态
   void changeLoadingState(LoadState loadState, String? errorMsg) {
@@ -74,18 +86,19 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm {
     );
   }
 
-
-  setInitPageData({required int id, required int serviceTypeCode}){
+  setInitPageData({required int id, required int serviceTypeCode, required int serviceStatusCode}){
     _detailId = id;
     _detailServiceTypeCode = serviceTypeCode;
+    _detailServiceStatusCode = serviceStatusCode;
   }
+
   // 初始化页面数据
-  initPageData({detailId, detailServiceTypeCode}) {
+  initPageData({detailId, detailServiceTypeCode, detailServiceStatusCode}) {
     _detailId = detailId??_detailId;
     _detailServiceTypeCode = detailServiceTypeCode??_detailServiceTypeCode;
+    _detailServiceStatusCode = detailServiceStatusCode??_detailServiceStatusCode;
     Log.d("--------------------------initPageData---------------------");
     changeLoadingState(LoadState.State_Success, null);
-    setConfirmOrderTotalPrice(null);
   }
 
   // 上拉加载 更多
@@ -95,7 +108,6 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm {
     getListData();
   }
 
-
   // 下拉刷新
   Future onRefresh() async {
     // 当前pageView 页面正处于显示状态
@@ -259,115 +271,119 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm {
     });
   }
 
-
-  handlerClickVisitTime(BuildContext context){
-    // ToastEngine.show("Visit Time");
-    handlerShowChooseVisitTimeDialog(context);
+  handlerClickActionBtn(BuildContext context, Map<String, dynamic> actionBtn){
+    final actionBtnCode = actionBtn['code']!.toString();
+    switch (actionBtnCode) {
+      case '0':
+        // Cancel
+        handlerCancelOrder(context);
+        break;
+      case '1':
+        // Contact Merchant
+
+        break;
+      case '2':
+        // Contact Service Personnel
+
+        break;
+      case '3':
+        // Delete
+        handlerDeleteOrder(context);
+        break;
+      case '4':
+        // Evaluate 去评价
+        ServiceEvaluateCreatePage.startInstance(id: _detailId, serviceTypeCode: _detailServiceTypeCode,);
+        break;
+      default:
+        break;
+    }
   }
 
-  // 显示 选择空调型号和数量的弹框
-  handlerShowChooseVisitTimeDialog(BuildContext context) async{
-    // 定时器
-    LoadState dialogState = LoadState.State_Loading;
+  handlerDeleteOrder(BuildContext context){
+    DialogEngine.show(
+      widget: AppCustomDialog(
+        message: "Are you sure you want to delete?",
+        confirmAction: () {
+        },
+      )
+    );
+  }
 
+  // 取消订单
+  handlerCancelOrder(BuildContext context){
     DialogEngine.show(
-        tag: "chooseAirConditionClean",
-        position: DialogPosition.bottom,
+        tag: "cancelOrder",
+        position: DialogPosition.center,
         widget: DialogContentWrap(
-          key: _chooseVisitTimeDialogGlobalKey,
-          loadingState: dialogState,
-          maxHeight: 480.0,
+          loadingState: LoadState.State_Success,
+          maxHeight: 460.0,
+          dialogWidth: 340.0,
           isShowConfirmBtn: false,
           isShowCancelBtn: false,
-          title: "",
-          bottomBtnRadius:0,
-          bottomBtnSpace: 0,
-          topLeftRadius: 20.0,
-          topRightRadius: 20.0,
-          // bottomBtnSectionPadding: EdgeInsets.only(left: 20, right: 20, bottom: 20,top: 20),
-          yesBtnBg: context.appColors.redDefault,
-          noBtnBg: context.appColors.grayBgE9,
           confirmTxt: "Confirm",
-          cancelTxt: "Cancel",
-          // yesBtnTextStyle: TextStyle(
-          //   color: context.appColors.textWhite,
-          //   fontSize: 17,
-          //   fontWeight: FontWeight.w400
-          // ),
-          // noBtnTextStyle: TextStyle(
-          //   color: context.appColors.textBlack,
-          //   fontSize: 17,
-          //   fontWeight: FontWeight.w400
-          // ),
-          confirmAction: chooseVisitTimeConfirmFn,
-          cancelAction: chooseVisitTimeCancelFn,
-          titleBuilder: (context) {
-            return buildChooseVisitTimeTitle(context);
-          },
+          title: "Cancellation of Order",
+          titleBackgroundColor: context.appColors.textPrimary,
+          closeIconColor: context.appColors.textWhite,
+          titleTextStyle: TextStyle(
+            color: context.appColors.textWhite,
+          ),
           messageBuilder: (context) {
-            return buildChooseVisitTimeContent(context);
+            return CancelOrderDialogContent();
           },
           bottomFooterBuilder: (context){
-            return  buildChooseVisitTimeBottomFooter(context);
+            return Padding(
+              padding: const EdgeInsets.only( bottom: 40),
+              child: MyButton(
+                onPressed: (){
+                  // 提交取消订单
+                  submitCancelOrder(context);
+                },
+                text: "Confirm",
+                minWidth: 305,
+                minHeight: 45,
+                fontSize: 16,
+                fontWeight: FontWeight.w500,
+                backgroundColor: context.appColors.textPrimary,
+                textColor: context.appColors.textWhite,
+              ),
+            );
+          },
+          bottomBtnRadius: 10,
+          bottomBtnSpace: 5,
+          topLeftRadius: 10.0,
+          topRightRadius: 10.0,
+          bottomLeftRadius: 10.0,
+          bottomRightRadius: 10.0,
+          contentPadding: const EdgeInsets.only(left: 20, right: 20, bottom: 20,top: 20),
+          bottomBtnSectionPadding: const EdgeInsets.only(left: 20, right: 20, bottom: 20,top: 20),
+          cancelAction: () {
+            DialogEngine.dismiss(tag: 'cancelOrder');
+            clearReasonInput();
+          },
+          confirmAction: () {
+            clearReasonInput();
           },
         )
     );
-
-    await Future.delayed(Duration(milliseconds: 1000));
-
-    _chooseVisitTimeDialogGlobalKey.currentState?.changeDialogLoadingState(LoadState.State_Success);
-  }
-
-  chooseVisitTimeConfirmFn(){
-    Log.d("点击了确定");
-    // 跳转到 订单确认页面
-    // appRouter.push(CleanOrderDetailPageRoute(id: _detailId, serviceTypeCode: _detailServiceTypeCode));
-  }
-
-  chooseVisitTimeCancelFn(){
-    Log.d("点击了取消");
-  }
-
-  Widget buildChooseVisitTimeTitle(BuildContext context){
-    return ChooseVisitTimeTitle(id: 0, serviceTypeCode: 0);
-  }
-
-  Widget buildChooseVisitTimeContent(BuildContext context){
-    return ChooseVisitTimeContent(id: 0, serviceTypeCode: 0,);
-  }
-
-  Widget buildChooseVisitTimeBottomFooter(BuildContext context){
-    return ChooseVisitTimeBottomFooter(id: 0, serviceTypeCode: 0,);
-  }
-
-  // 关闭visitTime 选择的弹框
-  handlerHideVisitTimeDialog(){
-    DialogEngine.dismiss(tag: 'chooseAirConditionClean');
   }
-  handlerClickPayNow(BuildContext context, {int? id, int? serviceTypeCode}){
-    ToastEngine.show("Pay Now");
 
+  changeCancelFormData(BuildContext context,String cancelReason){
+    state.cancelReason = cancelReason;
+    // state = state.copyWith(
+    //   cancelReason: cancelReason
+    // );
   }
 
-  setConfirmOrderTotalPrice(BuildContext? context){
-    final visitTimeTotalPrice = ref.read(chooseVisitTimeContentVmProvider).totalPrice?? 0.0;
-    final airConditionTotalPrice = ref.read(chooseAirConditionContentVmProvider).totalPrice?? 0.0 ;
-    final houseCleaningTotalPrice = ref.read(chooseHouseCleanContentVmProvider).totalPrice?? 0.0;
-    final totalPrice = visitTimeTotalPrice.toDouble() + airConditionTotalPrice.toDouble() + houseCleaningTotalPrice.toDouble();
-    // if( _detailServiceTypeCode == servicesConstants.servicesType['houseCleaning'] ){
-    //
-    // }else if(_detailServiceTypeCode == servicesConstants.servicesType['airConditioner']){
-    //
-    // }else {
-    //
-    // }
-    state = state.copyWith(
-        totalPrice: totalPrice
-    );
+  submitCancelOrder(BuildContext context){
+    Log.d("cancelReason:  ${state.cancelReason}");
+    clearReasonInput();
+    DialogEngine.dismiss(tag: 'cancelOrder');
+    // 去成功页面
+    CleanOrderCancelSuccessPage.startInstance();
   }
 
-
-  gotoCleanOrderDetailPage(BuildContext context, {int? id, int? serviceTypeCode}){
-
+  clearReasonInput(){
+    state.cancelReason = "";
+    state.cancelFormData!['reason']!["controller"].text = "";
   }
 }

+ 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'8126b9933477dd5c9cd32218958b8d1ccb101bf4';
+    r'de0d8af49280fe6a8d48d7f423e2b2ae47254acb';
 
 /// See also [CleanOrderDetailVm].
 @ProviderFor(CleanOrderDetailVm)

+ 23 - 9
packages/cpt_services/lib/modules/services/history/history_page.dart

@@ -45,6 +45,9 @@ class HistoryPage extends HookConsumerWidget {
     final state = ref.watch(historyVmProvider);
     // final appConfigState = ref.watch(appConfigServiceProvider)
 
+    int serviceTypeCode = servicesConstants.servicesType['houseCleaning']?['code'];
+    int serviceStatusCode = servicesConstants.servicesStatus['2']?['code'];
+
 
     useEffect(() {
       // 组件挂载时执行 - 执行接口请求
@@ -88,7 +91,21 @@ class HistoryPage extends HookConsumerWidget {
                 SliverList(
                   delegate: SliverChildBuilderDelegate(
                         (context, index) {
-                      return  _buildHistoryItem(context, ref, state.list[index], vm,);
+                      return  _buildHistoryItem(
+                          context,
+                          ref,
+                          state.list[index],
+                          vm,
+                          serviceTypeCode,
+                          serviceStatusCode,
+                      ).onTap((){
+                        vm.gotoCleanOrderDetailPage(
+                          context,
+                          state.list?[index]['id'],
+                          serviceTypeCode,
+                          serviceStatusCode,
+                        );
+                      });
                     },
                     childCount: state.list.length,
                   ),
@@ -100,7 +117,7 @@ class HistoryPage extends HookConsumerWidget {
     );
   }
 
-  Widget _buildHistoryItem(BuildContext context, WidgetRef ref, Map<String, dynamic> item, vm){
+  Widget _buildHistoryItem(BuildContext context, WidgetRef ref, Map<String, dynamic> item, vm, int serviceTypeCode, int serviceStatusCode){
     return Container(
       margin: const EdgeInsets.only(top: 9),
       width: double.infinity,
@@ -117,15 +134,12 @@ class HistoryPage extends HookConsumerWidget {
       ),
       child: StausCardItem(
         key: UniqueKey(),
-        cardHeight: 240.0,
-        serviceType: servicesConstants.servicesType['houseCleaning'],
-        serviceStatus: servicesConstants.servicesStatus['completed'],
+        cardHeight: 175.0,
         serviceId: item['id'],
+        serviceTypeCode: serviceTypeCode,
+        serviceStatusCode: serviceStatusCode,
         itemObj: item.cast<String, dynamic>(),
-        onClickColleciotn: (dynamic collectionValue) async {
-          Log.d("点击了喜欢按钮  --id:${item['id']}- $collectionValue");
-          int id = item['id'];
-          return await vm.handlerClickCollection(id, collectionValue);
+        onClickCard: (dynamic value) async {
         },
       ),
     );

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

@@ -12,6 +12,7 @@ import 'package:widgets/widget_export.dart';
 
 import '../../../respository/services_respository.dart';
 import '../../../router/page/services_page_router.dart';
+import '../clean_order_detail/clean_order_detail_page.dart';
 import 'history_state.dart';
 
 part 'history_vm.g.dart';
@@ -335,8 +336,7 @@ class HistoryVm extends _$HistoryVm {
   }
 
   // 去详情页面
-  void handlerGotoDetail({BuildContext? context, required int id, String type='forSale'}){
-    Log.d("去详情页面");
-    // appRouter.push(GaragesaleDetailPageRoute(id: id, type: 'forSale'));
+  gotoCleanOrderDetailPage(BuildContext context, int id, int serviceTypeCode, int serviesStatusCode){
+    CleanOrderDetailPage.startInstance(id: id, serviceTypeCode: serviceTypeCode, serviesStatusCode: serviesStatusCode);
   }
 }

+ 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'b1f852a52208f5b5fd0da3344b6f66255ec9ea3d';
+String _$historyVmHash() => r'2a0c8e7434615d19ce6f2a71d8d4847ae570c1a1';
 
 /// See also [HistoryVm].
 @ProviderFor(HistoryVm)

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

@@ -45,6 +45,8 @@ class InProgressPage extends HookConsumerWidget {
     final state = ref.watch(inProgressVmProvider);
     // final appConfigState = ref.watch(appConfigServiceProvider)
 
+    int serviceTypeCode = servicesConstants.servicesType['houseCleaning']?['code'];
+    int serviceStatusCode = servicesConstants.servicesStatus['1']?['code'];
 
     useEffect(() {
       // 组件挂载时执行 - 执行接口请求
@@ -88,8 +90,20 @@ class InProgressPage extends HookConsumerWidget {
                 SliverList(
                   delegate: SliverChildBuilderDelegate(
                         (context, index) {
-                      return  _buildInProgressItem(context, ref, state.list[index], vm,).onTap((){
-                        vm.gotoCleanOrderDetailPage(context, state.list?[index]['id'], servicesConstants.servicesStatus['inProgress']?['code']);
+                      return  _buildInProgressItem(
+                          context,
+                          ref,
+                          state.list[index],
+                          vm,
+                          serviceTypeCode,
+                          serviceStatusCode
+                      ).onTap((){
+                        vm.gotoCleanOrderDetailPage(
+                            context,
+                            state.list?[index]['id'],
+                            serviceTypeCode,
+                            serviceStatusCode
+                        );
                       });
                     },
                     childCount: state.list.length,
@@ -102,7 +116,7 @@ class InProgressPage extends HookConsumerWidget {
     );
   }
 
-  Widget _buildInProgressItem(BuildContext context, WidgetRef ref, Map<String, dynamic> item, vm){
+  Widget _buildInProgressItem(BuildContext context, WidgetRef ref, Map<String, dynamic> item, vm, int serviceTypeCode, int serviceStatusCode){
     return Container(
       margin: const EdgeInsets.only(top: 9),
       width: double.infinity,
@@ -119,12 +133,12 @@ class InProgressPage extends HookConsumerWidget {
       ),
       child: StausCardItem(
           key: UniqueKey(),
-          cardHeight: 250.0,
-          serviceType: servicesConstants.servicesType['houseCleaning'],
-          serviceStatus: servicesConstants.servicesStatus['inProgress'],
+          cardHeight: 175.0,
           serviceId: item['id'],
+          serviceTypeCode: serviceTypeCode,
+          serviceStatusCode: serviceStatusCode,
           itemObj: item.cast<String, dynamic>(),
-          onClickColleciotn: (dynamic collectionValue) async {
+          onClickCard: (dynamic value) async {
             // Log.d("点击了喜欢按钮  --id:${item['id']}- $collectionValue");
             // int id = item['id'];
             // return await vm.handlerClickCollection(id, collectionValue);

+ 3 - 2
packages/cpt_services/lib/modules/services/inProgress/in_progress_vm.dart

@@ -335,7 +335,8 @@ class InProgressVm extends _$InProgressVm {
     return _queryParams;
   }
 
-  gotoCleanOrderDetailPage(BuildContext context, int id, int serviceTypeCode){
-    CleanOrderDetailPage.startInstance(id: id, serviceTypeCode: serviceTypeCode);
+  //  去详情页面
+  gotoCleanOrderDetailPage(BuildContext context, int id, int serviceTypeCode, int serviesStatusCode){
+    CleanOrderDetailPage.startInstance(id: id, serviceTypeCode: serviceTypeCode, serviesStatusCode: serviesStatusCode);
   }
 }

+ 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'a27e2dc53b688779084b0e2e5312a398a7505904';
+String _$inProgressVmHash() => r'f3c62cd304779aec9504c09d4f83e8b32787073a';
 
 /// See also [InProgressVm].
 @ProviderFor(InProgressVm)

+ 1 - 1
packages/cpt_services/lib/modules/services/repair/repair_vm.g.dart

@@ -6,7 +6,7 @@ part of 'repair_vm.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$repairVmHash() => r'5a61cb25e807b8ef0ba9f09bf17bd7e8f699e904';
+String _$repairVmHash() => r'4ceeef6ea9c2038cda76d13d80eb9adcb1dc55f9';
 
 /// See also [RepairVm].
 @ProviderFor(RepairVm)

+ 5 - 1
packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_vm.dart

@@ -1,6 +1,7 @@
 
 import 'dart:async';
 
+import 'package:cpt_services/components/chooseVisitTimeContent.dart';
 import 'package:cs_resources/generated/assets.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:domain/entity/garage_sale_rent_detail_entity.dart';
@@ -11,6 +12,7 @@ import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 import 'package:router/ext/auto_router_extensions.dart';
+import 'package:shared/utils/ext_dart.dart';
 import 'package:shared/utils/log_utils.dart';
 import 'package:widgets/load_state_layout.dart';
 import 'package:widgets/my_text_view.dart';
@@ -288,7 +290,7 @@ class ServiceCleanDetailVm extends _$ServiceCleanDetailVm {
   }
 
   // 显示选择 房屋清洁的弹框
-  handlerShowChooseCleanConditionerDialog(BuildContext context, ) async{
+  handlerShowChooseCleanConditionerDialog(BuildContext context) async{
     // 定时器
     LoadState dialogState = LoadState.State_Loading;
     DialogEngine.show(
@@ -298,6 +300,7 @@ class ServiceCleanDetailVm extends _$ServiceCleanDetailVm {
           key: _chooseHouseCleanDialogGlobalKey,
           loadingState: dialogState,
           maxHeight: 315.5,
+          dialogWidth: context.screenSize.width,
           isShowConfirmBtn: true,
           isShowCancelBtn: false,
           title: "",
@@ -346,6 +349,7 @@ class ServiceCleanDetailVm extends _$ServiceCleanDetailVm {
         key: _chooseAirCleanDialogGlobalKey,
         loadingState: dialogState,
         maxHeight: 315.5,
+        dialogWidth: context.screenSize.width,
         isShowConfirmBtn: true,
         isShowCancelBtn: false,
         title: "",

+ 1 - 1
packages/cpt_services/lib/modules/services/service_evaluate_create/service_evaluate_create_vm.dart

@@ -471,7 +471,7 @@ class ServiceEvaluateCreateVm extends _$ServiceEvaluateCreateVm {
 
   handlerEvaluateSubmit(BuildContext context,){
     Log.d("handlerEvaluateSubmit");
-    context.appRouter.pushAndPopUntil(EvaluateCreateSuccessPageRoute(id:0, serviceTypeCode: 0,), predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
+    context.appRouter.pushAndPopUntil(const EvaluateCreateSuccessPageRoute(), predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
       // Log.d("888 ${route.settings}");
       return route.settings.name != 'ServiceEvaluateCreatePageRoute';
     });

+ 3 - 7
packages/cpt_services/lib/modules/services/service_evaluate_create_success/evaluate_create_success_page.dart

@@ -26,20 +26,16 @@ import '../homeService/home_service_page.dart';
 
 @RoutePage()
 class EvaluateCreateSuccessPage extends HookConsumerWidget {
-  final int id;
-  final int serviceTypeCode;
   const EvaluateCreateSuccessPage({
     Key? key,
-    required this.id,
-    required this.serviceTypeCode,
   }) : super(key: key);
 
   //启动当前页面
-  static void startInstance({BuildContext? context, required int id, required int serviceTypeCode}) {
+  static void startInstance({BuildContext? context}) {
     if (context != null) {
-      context.router.push( EvaluateCreateSuccessPageRoute(id:id, serviceTypeCode:serviceTypeCode));
+      context.router.push( const EvaluateCreateSuccessPageRoute());
     } else {
-      appRouter.push(EvaluateCreateSuccessPageRoute(id:id, serviceTypeCode:serviceTypeCode));
+      appRouter.push(const EvaluateCreateSuccessPageRoute());
     }
   }
 

+ 0 - 1
packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_page.dart

@@ -346,7 +346,6 @@ class ServiceOrderConfirmPage extends HookConsumerWidget {
               fontSize: 17,
               isFontBold: true,
               textColor: context.appColors.textBlack,
-              marginBottom: 5,
             ),
           ],
         ),

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

@@ -14,6 +14,7 @@ import 'package:plugin_platform/engine/dialog/dialog_engine.dart';
 import 'package:plugin_platform/engine/toast/toast_engine.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 import 'package:router/ext/auto_router_extensions.dart';
+import 'package:shared/utils/ext_dart.dart';
 import 'package:shared/utils/log_utils.dart';
 import 'package:widgets/dialog/dialog_content_wrap.dart';
 import 'package:widgets/load_state_layout.dart';
@@ -25,6 +26,7 @@ import '../../../components/chooseVisitTimeBottomFooter.dart';
 import '../../../constants_services.dart';
 import '../../../respository/services_respository.dart';
 import '../../../router/page/services_page_router.dart';
+import '../service_pay_success/service_pay_success_page.dart';
 import 'service_order_confirm_state.dart';
 
 part 'service_order_confirm_vm.g.dart';
@@ -277,6 +279,7 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
           key: _chooseVisitTimeDialogGlobalKey,
           loadingState: dialogState,
           maxHeight: 480.0,
+          dialogWidth: context.screenSize.width,
           isShowConfirmBtn: false,
           isShowCancelBtn: false,
           title: "",
@@ -344,9 +347,12 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
   handlerHideVisitTimeDialog(){
     DialogEngine.dismiss(tag: 'chooseAirConditionClean');
   }
+
+  // 去支付
   handlerClickPayNow(BuildContext context, {int? id, int? serviceTypeCode}){
     ToastEngine.show("Pay Now");
- 
+    // 去支付成功页面
+    ServicePaySuccessPage.startInstance(id: 0, serviceTypeCode: 0);
   }
 
   setConfirmOrderTotalPrice(BuildContext? context){

+ 109 - 15
packages/cpt_services/lib/modules/services/service_pay_success/service_pay_success_page.dart

@@ -22,6 +22,7 @@ import 'package:widgets/widget_export.dart';
 
 import '../../../constants_services.dart';
 import '../../../router/page/services_page_router.dart';
+import 'service_pay_success_state.dart';
 import 'service_pay_success_vm.dart';
 import '../../../components/status_card_item.dart';
 
@@ -61,11 +62,11 @@ class ServicePaySuccessPage extends HookConsumerWidget {
     }, []);
 
     return Scaffold(
-      // appBar: MyAppBar.appBar(
-      //   context,
-      //   "ServicePaySuccess",
-      //   backgroundColor: context.appColors.whiteBG,
-      // ),
+      appBar: MyAppBar.appBar(
+        context,
+        "Pay Success",
+        backgroundColor: context.appColors.whiteBG,
+      ),
       backgroundColor: ColorUtils.string2Color("#F2F3F6"),
       body: SizedBox(
           width: double.infinity,
@@ -74,26 +75,119 @@ class ServicePaySuccessPage extends HookConsumerWidget {
             key: ValueKey('ServicePaySuccess'),
             controller: vm.refreshController,
             // 上拉加载
-            onLoad: () async{
-              Log.d("----onLoad");
-              vm.loadMore();
-            },
+            onLoad: null,
             // 下拉刷新
-            onRefresh: () async{
-              Log.d("----onRefresh");
-              vm.onRefresh();
-            },
+            onRefresh: null,
             child: LoadStateLayout(
               state: state.loadingState,
               errorMessage: state.errorMessage,
               errorRetry: () {
                 vm.retryRequest();
               },
-              successWidget: Container(),
+              successSliverWidget: [
+                SliverList(
+                  delegate: SliverChildListDelegate(
+                      [
+                        _buildTopInfo(context, state, ref),
+                        _buildBottomInfo(context, state, ref)
+                      ]
+                  ),
+                )
+              ],
+            ),
+          )
+      ),
+    );
+  }
+
+  Widget _buildTopInfo(BuildContext context, ServicePaySuccessState state, WidgetRef ref) {
+    return Container(
+      width: double.infinity,
+      height: 350,
+      color: context.appColors.whiteBG,
+      child: Column(
+        children: [
+          Container(
+            margin: const EdgeInsets.only(top: 30),
+            child: const MyAssetImage(
+              Assets.servicePaySuccessIcon,
+              width: 54,
+              height: 54,
             ),
-          ).marginOnly(left: 15,right: 15,top: 0,bottom: 15)
+          ),
+          MyTextView(
+            "Payment Successful",
+            fontSize: 18,
+            isFontMedium: true,
+            textColor: context.appColors.textPrimary,
+            textAlign: TextAlign.center,
+            marginTop: 13,
+          ),
+          MyTextView(
+            "Fee Paid",
+            fontSize: 15,
+            textColor: context.appColors.textBlack,
+            textAlign: TextAlign.center,
+            marginTop: 38,
+            isFontRegular: true,
+          ),
+          MyTextView(
+            "\$200.00",
+            fontSize: 15,
+            textColor: context.appColors.textPrimary,
+            textAlign: TextAlign.center,
+            isFontMedium: true,
+            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,
+              )
+            ]
+          ),
+          const SizedBox(height: 5),
+          Row(
+            mainAxisAlignment: MainAxisAlignment.center,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              MyTextView(
+                "paid on",
+                fontSize: 15,
+                textColor: context.appColors.textBlack,
+                textAlign: TextAlign.center,
+                isFontRegular: true,
+              ),
+              MyTextView(
+                "24 Oct 2023 at 02:19 PM",
+                fontSize: 15,
+                textColor: context.appColors.textBlack,
+                textAlign: TextAlign.center,
+                isFontMedium: true,
+                marginLeft: 5,
+              )
+            ]
+          ),
+        ]
       ),
     );
   }
 
+  Widget _buildBottomInfo(BuildContext context, ServicePaySuccessState state, WidgetRef ref) {
+    return Text("5666666");
+  }
+
 }

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

@@ -56,7 +56,8 @@ class ServicePaySuccessVm extends _$ServicePaySuccessVm {
 
   // 初始化页面数据
   initPageData() {
-    onRefresh();
+    changeLoadingState(LoadState.State_Success, null);
+    // onRefresh();
   }
 
   // 上拉加载 更多

+ 7 - 2
packages/cpt_services/lib/router/page/services_page_router.dart

@@ -18,7 +18,7 @@ import '../../modules/services/service_pay_success/service_pay_success_page.dart
 import '../../modules/services/service_repair_detail/service_repair_detail_page.dart';
 import '../../modules/services/services_page.dart';
 import '../../modules/services/clean_order_detail/clean_order_detail_page.dart';
-
+import '../../modules/services/clean_order_cancel_success/clean_order_cancel_success_page.dart';
 
 
 import '../../modules/services/repair/repair_page.dart';
@@ -99,7 +99,7 @@ class ServicesPageRouter extends _$ServicesPageRouter {
     ),
     CustomRoute(
       page: CleanOrderDetailPageRoute.page,
-      path: "${RouterPath.servicesOrderDetail}:id/:serviceTypeCode",
+      path: "${RouterPath.servicesOrderDetail}:id/:serviceTypeCode/:serviceStatusCode",
       transitionsBuilder: applySlideTransition,
     ),
     CustomRoute(
@@ -108,6 +108,11 @@ class ServicesPageRouter extends _$ServicesPageRouter {
       transitionsBuilder: applySlideTransition,
     ),
     CustomRoute(
+      page: CleanOrderCancelSuccessPageRoute.page,
+      path: RouterPath.servicesOrderCancelSuccess,
+      transitionsBuilder: applySlideTransition,
+    ),
+    CustomRoute(
       page: ServiceEvaluateCreatePageRoute.page,
       path: "${RouterPath.servicesEvaluateCreate}:id/:serviceTypeCode",
       transitionsBuilder: applySlideTransition,

+ 44 - 42
packages/cpt_services/lib/router/page/services_page_router.gr.dart

@@ -15,26 +15,34 @@ abstract class _$ServicesPageRouter extends RootStackRouter {
 
   @override
   final Map<String, PageFactory> pagesMap = {
+    CleanOrderCancelSuccessPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: const CleanOrderCancelSuccessPage(),
+      );
+    },
     CleanOrderDetailPageRoute.name: (routeData) {
-      final args = routeData.argsAs<CleanOrderDetailPageRouteArgs>();
+      final pathParams = routeData.inheritedPathParams;
+      final args = routeData.argsAs<CleanOrderDetailPageRouteArgs>(
+          orElse: () => CleanOrderDetailPageRouteArgs(
+                id: pathParams.getInt('id'),
+                serviceTypeCode: pathParams.getInt('serviceTypeCode'),
+                serviesStatusCode: pathParams.getInt('serviesStatusCode'),
+              ));
       return AutoRoutePage<dynamic>(
         routeData: routeData,
         child: CleanOrderDetailPage(
           key: args.key,
           id: args.id,
           serviceTypeCode: args.serviceTypeCode,
+          serviesStatusCode: args.serviesStatusCode,
         ),
       );
     },
     EvaluateCreateSuccessPageRoute.name: (routeData) {
-      final args = routeData.argsAs<EvaluateCreateSuccessPageRouteArgs>();
       return AutoRoutePage<dynamic>(
         routeData: routeData,
-        child: EvaluateCreateSuccessPage(
-          key: args.key,
-          id: args.id,
-          serviceTypeCode: args.serviceTypeCode,
-        ),
+        child: const EvaluateCreateSuccessPage(),
       );
     },
     HistoryPageRoute.name: (routeData) {
@@ -159,6 +167,20 @@ abstract class _$ServicesPageRouter extends RootStackRouter {
 }
 
 /// generated route for
+/// [CleanOrderCancelSuccessPage]
+class CleanOrderCancelSuccessPageRoute extends PageRouteInfo<void> {
+  const CleanOrderCancelSuccessPageRoute({List<PageRouteInfo>? children})
+      : super(
+          CleanOrderCancelSuccessPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'CleanOrderCancelSuccessPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
 /// [CleanOrderDetailPage]
 class CleanOrderDetailPageRoute
     extends PageRouteInfo<CleanOrderDetailPageRouteArgs> {
@@ -166,6 +188,7 @@ class CleanOrderDetailPageRoute
     Key? key,
     required int id,
     required int serviceTypeCode,
+    required int serviesStatusCode,
     List<PageRouteInfo>? children,
   }) : super(
           CleanOrderDetailPageRoute.name,
@@ -173,7 +196,13 @@ class CleanOrderDetailPageRoute
             key: key,
             id: id,
             serviceTypeCode: serviceTypeCode,
+            serviesStatusCode: serviesStatusCode,
           ),
+          rawPathParams: {
+            'id': id,
+            'serviceTypeCode': serviceTypeCode,
+            'serviesStatusCode': serviesStatusCode,
+          },
           initialChildren: children,
         );
 
@@ -188,6 +217,7 @@ class CleanOrderDetailPageRouteArgs {
     this.key,
     required this.id,
     required this.serviceTypeCode,
+    required this.serviesStatusCode,
   });
 
   final Key? key;
@@ -196,54 +226,26 @@ class CleanOrderDetailPageRouteArgs {
 
   final int serviceTypeCode;
 
+  final int serviesStatusCode;
+
   @override
   String toString() {
-    return 'CleanOrderDetailPageRouteArgs{key: $key, id: $id, serviceTypeCode: $serviceTypeCode}';
+    return 'CleanOrderDetailPageRouteArgs{key: $key, id: $id, serviceTypeCode: $serviceTypeCode, serviesStatusCode: $serviesStatusCode}';
   }
 }
 
 /// generated route for
 /// [EvaluateCreateSuccessPage]
-class EvaluateCreateSuccessPageRoute
-    extends PageRouteInfo<EvaluateCreateSuccessPageRouteArgs> {
-  EvaluateCreateSuccessPageRoute({
-    Key? key,
-    required int id,
-    required int serviceTypeCode,
-    List<PageRouteInfo>? children,
-  }) : super(
+class EvaluateCreateSuccessPageRoute extends PageRouteInfo<void> {
+  const EvaluateCreateSuccessPageRoute({List<PageRouteInfo>? children})
+      : super(
           EvaluateCreateSuccessPageRoute.name,
-          args: EvaluateCreateSuccessPageRouteArgs(
-            key: key,
-            id: id,
-            serviceTypeCode: serviceTypeCode,
-          ),
           initialChildren: children,
         );
 
   static const String name = 'EvaluateCreateSuccessPageRoute';
 
-  static const PageInfo<EvaluateCreateSuccessPageRouteArgs> page =
-      PageInfo<EvaluateCreateSuccessPageRouteArgs>(name);
-}
-
-class EvaluateCreateSuccessPageRouteArgs {
-  const EvaluateCreateSuccessPageRouteArgs({
-    this.key,
-    required this.id,
-    required this.serviceTypeCode,
-  });
-
-  final Key? key;
-
-  final int id;
-
-  final int serviceTypeCode;
-
-  @override
-  String toString() {
-    return 'EvaluateCreateSuccessPageRouteArgs{key: $key, id: $id, serviceTypeCode: $serviceTypeCode}';
-  }
+  static const PageInfo<void> page = PageInfo<void>(name);
 }
 
 /// generated route for

BIN
packages/cs_resources/assets/service/telphone.webp


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

@@ -257,6 +257,7 @@ class Assets {
   static const String serviceServiceScoreNo = 'assets/service/service_score_no.png';
   static const String serviceServiceScoreYes = 'assets/service/service_score_yes.png';
   static const String serviceServiceType = 'assets/service/service-type.webp';
+  static const String serviceTelphone = 'assets/service/telphone.webp';
   static const String serviceTimeIcon = 'assets/service/time-icon.webp';
 
 }

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

@@ -144,6 +144,7 @@ class RouterPath {
   static const servicesRepairDetail = '/services_repair_detail';
   static const servicesOrderConfirm = '/services_order_confirm';
   static const servicesOrderDetail = '/services_order_detail';
+  static const servicesOrderCancelSuccess = '/services_order_cancel_success';
   static const servicesOrderPaySuccess = '/services_order_pay_success';
   static const servicesEvaluateCreate = '/services_evaluate_create';
   static const servicesEvaluateCreateSuccess = '/services_evaluate_create_success';

+ 25 - 7
packages/cs_widgets/lib/dialog/dialog_content_wrap.dart

@@ -40,6 +40,7 @@ class DialogContentWrap extends StatefulWidget {
   Color? backgroundColor;
   Color? noBtnBg;
   Color? yesBtnBg;
+  Color? closeIconColor;
   TextStyle? yesBtnTextStyle;
   TextStyle? noBtnTextStyle;
   double? bottomBtnRadius;
@@ -48,8 +49,11 @@ class DialogContentWrap extends StatefulWidget {
   final double? bottomBtnSpace;
   final double? topLeftRadius;
   final double? topRightRadius;
+  final double? bottomRightRadius;
+  final double? bottomLeftRadius;
   final double? minHeight;
   final double? maxHeight;
+  final double? dialogWidth;
 
 
   DialogContentWrap({
@@ -70,6 +74,7 @@ class DialogContentWrap extends StatefulWidget {
     this.titleTextStyle,
     this.titleBackgroundColor = Colors.white,
     this.backgroundColor = Colors.white,
+    this.closeIconColor = Colors.white,
     this.bottomBtnRadius = 7,
     this.noBtnBg,
     this.yesBtnBg,
@@ -81,13 +86,19 @@ class DialogContentWrap extends StatefulWidget {
     this.bottomBtnSpace = 0,
     topLeftRadius,
     topRightRadius,
+    bottomLeftRadius,
+    bottomRightRadius,
     minHeight,
     maxHeight,
+    dialogWidth,
   })
       : minHeight = minHeight ?? 0,
         maxHeight = maxHeight ?? 300,
+        dialogWidth = dialogWidth ?? 300.0,
         topLeftRadius = topLeftRadius ?? 0,
         topRightRadius = topRightRadius ?? 0,
+        bottomLeftRadius = bottomLeftRadius ?? 0,
+        bottomRightRadius = bottomRightRadius ?? 0,
         super(key: key);
 
   @override
@@ -111,6 +122,8 @@ class DialogContentWrapState extends State<DialogContentWrap> {
 
   @override
   Widget build(BuildContext context) {
+    Log.d("dialogWidth  ${widget.dialogWidth} ");
+    double _dialogWidth = widget.dialogWidth?? MediaQuery.of(context).size.width * 0.65;
     bool _showTitleSection = (widget.title != null && widget.title!.isNotEmpty) || widget.titleBuilder != null;
     bool _showBottomBtnSection = widget.isShowConfirmBtn || widget.isShowCancelBtn || widget.bottomFooterBuilder != null;
     double _bottomBtnSectionHeight = _showBottomBtnSection ? 50 : 0;
@@ -124,14 +137,17 @@ class DialogContentWrapState extends State<DialogContentWrap> {
       _bottomBtnMargin = widget.bottomBtnSpace??0/2;
     }
 
-    return Stack(children: [
+    return Stack(
+      children: [
         ClipRRect(
           borderRadius: BorderRadius.only(
             topLeft: Radius.circular(widget.topLeftRadius!),
             topRight: Radius.circular(widget.topRightRadius!),
+            bottomLeft: Radius.circular(widget.bottomLeftRadius!),
+            bottomRight: Radius.circular(widget.bottomRightRadius!),
           ),
           child: Container(
-            width: double.infinity,
+            width:  _dialogWidth,
             constraints: BoxConstraints(
               minHeight: widget.minHeight!,
               maxHeight: widget.maxHeight!,
@@ -152,7 +168,7 @@ class DialogContentWrapState extends State<DialogContentWrap> {
                 children: [
                   // 标题区
                   Container(
-                      width: double.infinity,
+                     width: double.infinity,
                       color: widget.titleBackgroundColor,
                       child: Visibility(
                         visible: _showTitleSection,
@@ -160,8 +176,9 @@ class DialogContentWrapState extends State<DialogContentWrap> {
                             widget.title ?? '',
                             fontSize: 18,
                             isFontMedium: true,
-                            textColor: context.appColors.textBlack,
+                            textColor: widget.titleTextStyle?.color ?? context.appColors.textBlack,
                             paddingTop: 15,
+                            paddingBottom: 15,
                             textAlign: TextAlign.center,
                             textStyle: widget.titleTextStyle,
                           ): widget.titleBuilder!.call(context),
@@ -174,6 +191,7 @@ class DialogContentWrapState extends State<DialogContentWrap> {
                         behavior: NoShadowScrollBehavior(),
                         child: SingleChildScrollView(
                           child: Container(
+                            width: double.infinity,
                             padding: widget.contentPadding,
                             child: widget.messageBuilder?.call(context) ??
                                 MyTextView(
@@ -192,7 +210,7 @@ class DialogContentWrapState extends State<DialogContentWrap> {
                   Visibility(
                     visible: _showBottomBtnSection,
                     child: (widget.isShowCancelBtn || widget.isShowConfirmBtn)? Container(
-                      // height: _bottomBtnSectionHeight,
+                      height: _bottomBtnSectionHeight,
                       color: context.appColors.whiteBG,
                       padding: widget.bottomBtnSectionPadding,
                       child: Row(
@@ -262,13 +280,13 @@ class DialogContentWrapState extends State<DialogContentWrap> {
         Visibility(
           visible: widget.showCloseIcon,
           child: Positioned(
-            top: -2,
+            top: 0,
             right: 0,
             child: MyAssetImage(
               Assets.baseServiceDialogDeleteIcon,
               width: 25,
               height: 25.5,
-              color: context.appColors.textPrimary,
+              color: widget.closeIconColor ?? context.appColors.textPrimary,
             ).onTap((){
               onCancel();
             },padding: 10),