glglove 1 місяць тому
батько
коміт
04b439392e
23 змінених файлів з 193 додано та 75 видалено
  1. 8 2
      packages/cpt_services/lib/components/chooseVisitTimeBottomFooter.dart
  2. 4 1
      packages/cpt_services/lib/components/chooseVisitTimeBottomFooter_vm.dart
  3. 1 1
      packages/cpt_services/lib/components/chooseVisitTimeBottomFooter_vm.g.dart
  4. 36 16
      packages/cpt_services/lib/components/chooseVisitTimeContent.dart
  5. 14 1
      packages/cpt_services/lib/components/chooseVisitTimeContent_state.dart
  6. 22 2
      packages/cpt_services/lib/components/chooseVisitTimeContent_vm.dart
  7. 1 1
      packages/cpt_services/lib/components/chooseVisitTimeContent_vm.g.dart
  8. 1 1
      packages/cpt_services/lib/modules/services/homeService/home_service_page.dart
  9. 9 2
      packages/cpt_services/lib/modules/services/homeService/home_service_vm.dart
  10. 1 1
      packages/cpt_services/lib/modules/services/homeService/home_service_vm.g.dart
  11. 2 0
      packages/cpt_services/lib/modules/services/repair_homeService/home_service_vm.dart
  12. 10 6
      packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_page.dart
  13. 9 3
      packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_state.dart
  14. 17 12
      packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_vm.dart
  15. 1 1
      packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_vm.g.dart
  16. 4 2
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_page.dart
  17. 11 6
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_state.dart
  18. 21 5
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.dart
  19. 1 1
      packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.g.dart
  20. 1 1
      packages/cpt_services/lib/modules/services/service_repair_detail/service_repair_detail_vm.g.dart
  21. 2 3
      packages/cpt_services/lib/respository/services_respository.dart
  22. 14 7
      packages/cpt_services/lib/router/page/services_page_router.gr.dart
  23. 3 0
      packages/cs_widgets/lib/dialog/dialog_content_wrap.dart

+ 8 - 2
packages/cpt_services/lib/components/chooseVisitTimeBottomFooter.dart

@@ -26,7 +26,13 @@ class ChooseVisitTimeBottomFooter extends HookConsumerWidget {
     final vm = ref.read(chooseVisitTimeBottomFooterVmProvider.notifier);
     final state = ref.watch(chooseVisitTimeBottomFooterVmProvider);
 
-    double toTalPrice = ref.watch(serviceOrderConfirmVmProvider.select((state) => state.totalPrice??0.0));
+    num cleanServiceToast = ref.watch(serviceOrderConfirmVmProvider.select((state) => state.cleanServiceToTalCost??0.0));
+
+    num extraPrice = ref.watch(chooseVisitTimeContentVmProvider.select((state) => state.extraTotalCost??0.0));
+
+    num totalPrice = cleanServiceToast + extraPrice;
+
+
 
     useEffect((){
       // 组件挂载时执行 - 执行接口请求
@@ -60,7 +66,7 @@ class ChooseVisitTimeBottomFooter extends HookConsumerWidget {
                     mainAxisSize: MainAxisSize.max,
                     children: [
                       MyTextView(
-                        "\$$toTalPrice",
+                        "\$$totalPrice",
                         fontSize: 18,
                         textColor: Colors.white,
                         isFontRegular: true,

+ 4 - 1
packages/cpt_services/lib/components/chooseVisitTimeBottomFooter_vm.dart

@@ -72,7 +72,7 @@ class ChooseVisitTimeBottomFooterVm extends _$ChooseVisitTimeBottomFooterVm {
     if(visitTimeContentVm.state.allSelectedTimeList !=null && visitTimeContentVm.state.allSelectedTimeList!.isNotEmpty ){
       // 有选中的时间
       // 关闭 visitTime 弹框
-      // 需要更新 confirmOrdervm 的 visitTime
+      // 需要更新 serviceOrderConfrimVm 的 visitTime
       final serviceOrderConfrimVm = ref.read(serviceOrderConfirmVmProvider.notifier);
       final visitTimeTitleVm = ref.read(chooseVisitTimeTitleVmProvider.notifier);
       final visitTimeContentVm = ref.read(chooseVisitTimeContentVmProvider.notifier);
@@ -81,6 +81,9 @@ class ChooseVisitTimeBottomFooterVm extends _$ChooseVisitTimeBottomFooterVm {
       String visitTime = visitTimeContentVm.state.allSelectedTimeList!.first?.time!??'';
       serviceOrderConfrimVm.handlerHideVisitTimeDialog();
       serviceOrderConfrimVm.handlerUpdateVisitTime(visitTime);
+
+      // 需要更新订单页面 serviceOrderConfrimVm 的 cleanServiceToTalCost  和 extraCost
+      serviceOrderConfrimVm?.setConfirmOrderTotalPrice(context);
     }else {
       // 没有选中预约时间
       ToastEngine.show("Please Choose Visit Time");

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

@@ -7,7 +7,7 @@ part of 'chooseVisitTimeBottomFooter_vm.dart';
 // **************************************************************************
 
 String _$chooseVisitTimeBottomFooterVmHash() =>
-    r'5139b3c161e0f751a573fd4e13afb81be48557b2';
+    r'717bedb19b618d4a8c0e84f05dc27874943b2233';
 
 /// See also [ChooseVisitTimeBottomFooterVm].
 @ProviderFor(ChooseVisitTimeBottomFooterVm)

+ 36 - 16
packages/cpt_services/lib/components/chooseVisitTimeContent.dart

@@ -160,6 +160,8 @@ class ChooseVisitTimeContent extends HookConsumerWidget {
               ),
               // 加急
               Positioned(
+                left: 0,
+                top: 0,
                 child: urgent.value? MyTextView(
                   'Extreme speed',
                   textColor: ColorUtils.string2Color("#DD6800"),
@@ -176,22 +178,40 @@ class ChooseVisitTimeContent extends HookConsumerWidget {
                 ): const SizedBox.shrink(),
               ),
               // 节假日
-              // Positioned(
-              //   child: urgent.value? MyTextView(
-              //     'Extreme speed',
-              //     textColor: ColorUtils.string2Color("#DD6800"),
-              //     fontSize: 8,
-              //     isFontRegular: true,
-              //     backgroundColor:ColorUtils.string2Color("#FFEBD9"),
-              //     paddingTop: 2,
-              //     paddingBottom: 2,
-              //     paddingLeft: 5,
-              //     paddingRight: 5,
-              //   ).clipRRect(
-              //       topLeft: 10,
-              //       bottomRight: 10
-              //   ): const SizedBox.shrink(),
-              // ),
+              Positioned(
+                right: 0,
+                top: 0,
+                child: holiday.value? MyTextView(
+                  'Holiday',
+                  textColor: ColorUtils.string2Color("#DD6800"),
+                  fontSize: 8,
+                  isFontRegular: true,
+                  backgroundColor:ColorUtils.string2Color("#FFEBD9"),
+                  paddingTop: 2,
+                  paddingBottom: 2,
+                  paddingLeft: 5,
+                  paddingRight: 5,
+                ).clipRRect(
+                    topLeft: 10,
+                    bottomRight: 10
+                ): const SizedBox.shrink(),
+              ),
+              Positioned(
+                child: night.value? MyTextView(
+                  'Night',
+                  textColor: ColorUtils.string2Color("#DD6800"),
+                  fontSize: 8,
+                  isFontRegular: true,
+                  backgroundColor:ColorUtils.string2Color("#FFEBD9"),
+                  paddingTop: 2,
+                  paddingBottom: 2,
+                  paddingLeft: 5,
+                  paddingRight: 5,
+                ).clipRRect(
+                    topLeft: 10,
+                    bottomRight: 10
+                ): const SizedBox.shrink(),
+              ),
             ],
           ),
         );

+ 14 - 1
packages/cpt_services/lib/components/chooseVisitTimeContent_state.dart

@@ -5,7 +5,16 @@ import 'visitTimeType.dart';
 
 class ChooseVisitTimeContentState{
   // 当前所选中的所有时间段集合
-  List<VisitTimeContentItem> get allSelectedTimeList => visitTimeList.where((item) => item.isChecked??false).toList();
+  List<VisitTimeContentItem> get allSelectedTimeList => visitTimeList.where((item) => item.isChecked??false).toList()??[];
+
+  // extraTotalCost 总预约费用
+  double get extraTotalCost {
+    if(extraCostList?.isNotEmpty == true){
+      return extraCostList?.fold(0.0, (previousValue, current) => previousValue! + current??0.0)??0.0;
+    }else {
+      return 0.0;
+    }
+  }
 
   //页面 LoadView 状态的展示
   LoadState loadingState;
@@ -14,6 +23,7 @@ class ChooseVisitTimeContentState{
   // 是否可多选
   bool? isMultiSelect;
   List<VisitTimeContentItem> visitTimeList = [];
+  List<double>? extraCostList = [];  // 预约费用(节假日/加急/夜间 费用的集合)
   String currentDate = DateTimeUtils.formatDate(DateTime.now(), format: "yyyy-MM-dd");
 
 
@@ -22,6 +32,7 @@ class ChooseVisitTimeContentState{
     this.errorMessage,
     this.isMultiSelect = false,
     required this.currentDate,
+    this.extraCostList,
     List<VisitTimeContentItem>? visitTimeList,
   }) {
     this.visitTimeList = visitTimeList ?? [];
@@ -32,6 +43,7 @@ class ChooseVisitTimeContentState{
     String? errorMessage,
     bool? isMultiSelect,
     List<VisitTimeContentItem>? visitTimeList,
+    List<double>? extraCostList,
     String? currentDate,
   }) {
     return ChooseVisitTimeContentState(
@@ -39,6 +51,7 @@ class ChooseVisitTimeContentState{
       errorMessage: errorMessage ?? this.errorMessage,
       isMultiSelect: isMultiSelect ?? this.isMultiSelect,
       visitTimeList: visitTimeList ?? this.visitTimeList,
+      extraCostList: extraCostList ?? this.extraCostList,
       currentDate: currentDate ?? this.currentDate,
     );
   }

+ 22 - 2
packages/cpt_services/lib/components/chooseVisitTimeContent_vm.dart

@@ -13,6 +13,7 @@ import 'package:widgets/dialog/dialog_content_wrap.dart';
 import 'package:widgets/load_state_layout.dart';
 
 import '../../../respository/services_respository.dart';
+import '../modules/services/service_clean_detail/service_clean_detail_vm.dart';
 import 'chooseVisitTimeContent_state.dart';
 
 part 'chooseVisitTimeContent_vm.g.dart';
@@ -167,11 +168,30 @@ class ChooseVisitTimeContentVm extends _$ChooseVisitTimeContentVm {
         }
       });
     }
+
+    final cleanDetailVm = ref.read(serviceCleanDetailVmProvider.notifier);
+    // 结算当前所 预约的价格 (加急/节假日/夜间 等)所有选中的时间段 如果有 紧急、节假日、夜间 则需要加上相应价格
+    final extraCostItemList = state.allSelectedTimeList?.map((item) {
+      if (item.urgent ?? false) {
+        return cleanDetailVm?.state.urgentPrice ?? 0.0;
+      } else if (item.holiday ?? false) {
+        return cleanDetailVm?.state.holidayPrice ?? 0.0;
+      } else if (item.night ?? false) {
+        return cleanDetailVm?.state.nightPrice ?? 0.0;
+      } else {
+        return 0.0;
+      }
+    }).toList();
+
+    state.extraCostList = extraCostItemList;
+    Log.d("chooseVisitTimeContent中选择了预约的时间段后 state.extraCostList: ${state.extraCostList}");
     state = state.copyWith(
       visitTimeList: state.visitTimeList,
+      extraCostList: extraCostItemList,
     );
 
-    final serviceOrderConfirmVm = ref.read(serviceOrderConfirmVmProvider.notifier);
-    serviceOrderConfirmVm?.setConfirmOrderTotalPrice(context);
+    // 设置 订单确认页面的 总价格 (当点击了 Confirm 按钮后再去设置 订单页面的总价格)
+    // final serviceOrderConfirmVm = ref.read(serviceOrderConfirmVmProvider.notifier);
+    // serviceOrderConfirmVm?.setConfirmOrderTotalPrice(context);
   }
 }

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

@@ -7,7 +7,7 @@ part of 'chooseVisitTimeContent_vm.dart';
 // **************************************************************************
 
 String _$chooseVisitTimeContentVmHash() =>
-    r'354e573081792050eac7d9ec5dccf496e9d2bf66';
+    r'6d59a67cf0b38046893035e796921b6e1bd6bd0f';
 
 /// See also [ChooseVisitTimeContentVm].
 @ProviderFor(ChooseVisitTimeContentVm)

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

@@ -106,7 +106,7 @@ class HomeServicePage extends HookConsumerWidget {
                               // 去详情页面
                               PaidServiceList paidServiceEntity = state.list[index] as PaidServiceList;
                               PaidServiceListCategory paidServiceCategory = paidServiceEntity.category!;
-                              vm.handlerGotoDetail(context: context, id: paidServiceEntity.id!, paidServiceCategory: paidServiceCategory!);
+                              vm.handlerGotoDetail(context: context, id: paidServiceEntity.id!, paidServiceCategory: paidServiceCategory!, liked: paidServiceEntity.liked!, likesCount: paidServiceEntity.likesCount!);
                             });
                           },
                           childCount: state.list.length,

+ 9 - 2
packages/cpt_services/lib/modules/services/homeService/home_service_vm.dart

@@ -422,6 +422,7 @@ class HomeServiceVm extends _$HomeServiceVm {
       //请求网络
       Map<String, dynamic>  params = {
         "id": id,
+        "type": 'paid', // 类型(paid=付费服务,inquiry=询价服务)
       };
       Log.d("请求参数------$params");
       final result = await servicesRespositoryInstance.fetchServiceLiked(params);
@@ -511,12 +512,18 @@ class HomeServiceVm extends _$HomeServiceVm {
   }
 
   // 去详情页面
-  void handlerGotoDetail({BuildContext? context, required int id, required PaidServiceListCategory paidServiceCategory }){
+  void handlerGotoDetail({
+    BuildContext? context,
+    required int id,
+    required PaidServiceListCategory paidServiceCategory,
+    liked,
+    likesCount,
+  }){
     final cleanServiceType = paidServiceCategory.name!;
     Log.d("去详情页面:  $id  $cleanServiceType");
     if(cleanServiceType == servicesConstants.servicesType['houseCleaning']!['code'] || cleanServiceType == servicesConstants.servicesType['airConditioner']!['code']){
       // clean service  跳转到 clean 详情页
-      appRouter.push(ServiceCleanDetailPageRoute(id: id, cleanServiceType: cleanServiceType));
+      appRouter.push(ServiceCleanDetailPageRoute(id: id, cleanServiceType: cleanServiceType,liked: liked,likesCount: likesCount));
     }else {
       // other service  跳转到 other 详情页
       ToastEngine.show("${cleanServiceType} 类型的详情暂未开放");

+ 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'7c5d76923a572cd63f3a31036baec538f17a0cc4';
+String _$homeServiceVmHash() => r'318c976134aacfdc5ed6c7c8a641351822c48b32';
 
 /// See also [HomeServiceVm].
 @ProviderFor(HomeServiceVm)

+ 2 - 0
packages/cpt_services/lib/modules/services/repair_homeService/home_service_vm.dart

@@ -406,11 +406,13 @@ class RepairHomeServiceVm extends _$RepairHomeServiceVm {
       //请求网络
       Map<String, dynamic>  params = {
         "id": id,
+        "type": 'inquiry', // 类型(paid=付费服务,inquiry=询价服务)
       };
       Log.d("请求参数------$params");
       final result = await servicesRespositoryInstance.fetchServiceLiked(params);
       //校验成功失败
       if (result.isSuccess) {
+        Log.d("4444444");
         // 修改 该id 的 liked 和 likes_count 字段
         state.list!.forEach((RepairServiceList elementEntity) {
 

+ 10 - 6
packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_page.dart

@@ -34,14 +34,16 @@ import '../../../router/page/services_page_router.dart';
 class ServiceCleanDetailPage extends HookConsumerWidget {
   final int id;
   final String cleanServiceType;
+  bool liked = false;
+  int likesCount = 0;
 
-  const ServiceCleanDetailPage({Key? key,@PathParam('id') required this.id, @PathParam('cleanServiceType') required this.cleanServiceType}) : super(key: key);
+  ServiceCleanDetailPage({Key? key,@PathParam('id') required this.id, @PathParam('cleanServiceType') required this.cleanServiceType, required this.liked, required this.likesCount}) : super(key: key);
   // 启动当前页面
-  static void startInstance({BuildContext? context, int? id, String? cleanServiceType}) {
+  static void startInstance({BuildContext? context, int? id, String? cleanServiceType, bool? liked, int? likesCount}) {
     if (context != null) {
-      context.router.push(ServiceCleanDetailPageRoute(id: id!, cleanServiceType: cleanServiceType!));
+      context.router.push(ServiceCleanDetailPageRoute(id: id!, cleanServiceType: cleanServiceType!, liked: liked!, likesCount: likesCount = 0));
     } else {
-      appRouter.push(ServiceCleanDetailPageRoute(id: id!, cleanServiceType: cleanServiceType!));
+      appRouter.push(ServiceCleanDetailPageRoute(id: id!, cleanServiceType: cleanServiceType!, liked: liked!, likesCount: likesCount = 0));
     }
   }
 
@@ -57,7 +59,7 @@ class ServiceCleanDetailPage extends HookConsumerWidget {
 
 
     useEffect((){
-      vm.setInitPageData(id: id, cleanServiceType: cleanServiceType);
+      vm.setInitPageData(id: id, cleanServiceType: cleanServiceType, liked: liked, likesCount: likesCount);
 
       // 组件挂载时执行 - 执行接口请求
       Future.microtask(() => vm.initPageData());
@@ -505,7 +507,7 @@ class ServiceCleanDetailPage extends HookConsumerWidget {
                         onLike: () async {
                           Log.d('点击了like button');
                           int id = detailInfo.id!;
-                          final isSuccess = await vm.handlerClickCollection(context, id, true);
+                          final isSuccess = await vm.handlerClickLikedBtn(context, id, true);
                           if(isSuccess!=null && isSuccess){
                             // 成功
                             if(_isLiked.value){
@@ -528,6 +530,7 @@ class ServiceCleanDetailPage extends HookConsumerWidget {
                         marginLeft: 5,
                         marginRight: 15,
                         onClick: (){
+                          // 点击了like button
                           final state = likeButtonKey.currentState;
                           state?.triggerTap();
                         },
@@ -544,6 +547,7 @@ class ServiceCleanDetailPage extends HookConsumerWidget {
                       width: 21.5,
                       height: 18,
                     ).onTap((){
+                      // 点击了打电话
                       vm.handlerClickMobile(context, contact);
                     }),
                     const SizedBox(width: 15,),

+ 9 - 3
packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_state.dart

@@ -13,7 +13,15 @@ class ServiceCleanDetailState {
 
   final int? id;
   final String? type;
-  double? totalPrice;
+
+  double? get urgentPrice => datas?.urgentPrice?.toDouble(); // 加急价格
+  double? get holidayPrice => datas?.holidayPrice?.toDouble(); // 节假日价格
+  double? get nightPrice => datas?.nightPrice?.toDouble(); // 夜间价格
+
+  String?  get servicePeriodStart => datas?.servicePeriodStart; // 服务开始时间
+  String? get servicePeriodEnd => datas?.servicePeriodEnd; // 服务结束时间
+  int? get servicePeriodInterval => datas?.servicePeriodInterval; // 服务时间间隔
+
   PaidServiceDetailEntity? datas;
 
   ServiceCleanDetailState({
@@ -21,7 +29,6 @@ class ServiceCleanDetailState {
     this.errorMessage,
     this.dialogLoadingState = LoadState.State_Loading,
     this.dialogErrorMessage,
-    this.totalPrice = 0,
     this.id,
     this.type,
     required this.datas,
@@ -42,7 +49,6 @@ class ServiceCleanDetailState {
       errorMessage: errorMessage ?? this.errorMessage,
       dialogLoadingState: dialogLoadingState ?? this.dialogLoadingState,
       dialogErrorMessage: dialogErrorMessage ?? this.dialogErrorMessage,
-      totalPrice: totalPrice?? this.totalPrice,
       id: id ?? this.id,
       type: type ?? this.type,
       datas: datas?? this.datas,

+ 17 - 12
packages/cpt_services/lib/modules/services/service_clean_detail/service_clean_detail_vm.dart

@@ -45,17 +45,16 @@ final _chooseAirCleanDialogGlobalKey = GlobalKey<DialogContentWrapState>();
 class ServiceCleanDetailVm extends _$ServiceCleanDetailVm {
   late ServicesRespository serviceRespositoryInstance;
 
-  int? _detailId;
-  String? _cleanServiceType;
-
   bool _needShowPlaceholder = false; //是否展示LoadingView
   int _page = 1;  // 当前页
   int _limit = 10; // 每页数量
   int _count = 0; // 总条数
 
-  int _totalnum = 130;
+  int? _detailId;
+  String? _cleanServiceType;
+  bool? _liked;
+  num? _likesCount;
 
-  int totalnum = 50;
 
   // Refresh 控制器
   final EasyRefreshController refreshController = EasyRefreshController(
@@ -88,10 +87,12 @@ class ServiceCleanDetailVm extends _$ServiceCleanDetailVm {
     );
   }
 
-  setInitPageData({required int id, required String cleanServiceType}){
+  setInitPageData({required int id, required String cleanServiceType, bool? liked, num? likesCount}){
     Log.d("service_clean_detail 设置 initpagedata ---  id:$id cleanServiceType:$cleanServiceType");
     _detailId = id;
     _cleanServiceType = cleanServiceType!;
+    _liked = liked;
+    _likesCount = likesCount;
   }
   
   // 初始化页面数据
@@ -169,8 +170,8 @@ class ServiceCleanDetailVm extends _$ServiceCleanDetailVm {
   }
 
 
-  // 点击了底部的收藏按钮
-  Future<bool?> handlerClickCollection(BuildContext? context, int id, bool isCollection) async{
+  // 点击了底部的点赞按钮
+  Future<bool?> handlerClickLikedBtn(BuildContext? context, int id, bool isLiked) async{
     // var vm;
     // if(_cleanServiceType == "forSale"){
     //   // vm = ref.read(forsaleVmProvider.notifier);
@@ -227,10 +228,14 @@ class ServiceCleanDetailVm extends _$ServiceCleanDetailVm {
   }
 
   // 点击 电话
-  handlerClickMobile(BuildContext? context,String contact){
-    String mobileNumber = getContactNumber(contact);
-    // 拨打电话
-    makePhoneCall(mobileNumber);
+  handlerClickMobile(BuildContext? context,String mobileNumber){
+    if(mobileNumber.isEmpty){
+      ToastEngine.show("No phone number found");
+      return;
+    }else {
+      // 拨打电话
+      makePhoneCall(mobileNumber);
+    }
   }
 
   // 拨打电话

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

@@ -7,7 +7,7 @@ part of 'service_clean_detail_vm.dart';
 // **************************************************************************
 
 String _$serviceCleanDetailVmHash() =>
-    r'5ff571fb878b262e14b77aaf7a2046adc226ef51';
+    r'd1d4a37356ed36d9d30fd6ee92c9fa2a2b8b71c6';
 
 /// See also [ServiceCleanDetailVm].
 @ProviderFor(ServiceCleanDetailVm)

+ 4 - 2
packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_page.dart

@@ -731,7 +731,9 @@ class ServiceOrderConfirmPage extends HookConsumerWidget {
 
   // 底部操作区域
   Widget _buildBottomSection(ServiceOrderConfirmState state, ServiceOrderConfirmVm vm,WidgetRef ref, BuildContext context, int id, String cleanServiceType) {
-    double toTalPrice = ref.watch(serviceOrderConfirmVmProvider.select((state) => state.totalPrice??0.0));
+
+    double totalPrice = ref.watch(serviceOrderConfirmVmProvider.select((state) => ((state.cleanServiceToTalCost??0.0) + (state.extraCost??0.0)??0.0)));
+
     return Container(
       height: 50,
       width: double.infinity,
@@ -754,7 +756,7 @@ class ServiceOrderConfirmPage extends HookConsumerWidget {
                     mainAxisSize: MainAxisSize.max,
                     children: [
                       MyTextView(
-                        "\$$toTalPrice",
+                        "\$$totalPrice",
                         fontSize: 18,
                         textColor: Colors.white,
                         isFontRegular: true,

+ 11 - 6
packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_state.dart

@@ -4,10 +4,13 @@ import 'package:flutter/cupertino.dart';
 import 'package:widgets/load_state_layout.dart';
 
 class ServiceOrderConfirmState {
+
+  double? get totalPrice => cleanServiceToTalCost?? 0.0.toDouble() + extraCost! ?? 0.0.toDouble(); // 总价(包含购买的所有服务的价格 + 加急/节假日/夜间 等的价格总和)
   //页面 LoadView 状态的展示
   LoadState loadingState;
   String? errorMessage;
-  double? totalPrice;
+  double? cleanServiceToTalCost;  // 服务项目的总价(不包含加急/节假日/夜间 等的价格)
+  double? extraCost; // 额外费用(加急/节假日/夜间 等的额外费用)
   String? visitTime;
   Map<String, Map<String, dynamic>> remarkInfo;
   PaidServiceDetailEntity? datas;
@@ -19,7 +22,8 @@ class ServiceOrderConfirmState {
   ServiceOrderConfirmState({
     this.loadingState = LoadState.State_Loading,
     String? errorMessage,
-    double? totalPrice,
+    double? cleanServiceToTalCost,
+    this.extraCost = 0.0,
     this.visitTime,
     remarkInfo,
     this.datas,
@@ -32,13 +36,13 @@ class ServiceOrderConfirmState {
       'focusNode': FocusNode(),
       'obsecure': false,
     },
-  },
-  totalPrice = totalPrice ?? 0.0;
+  }, cleanServiceToTalCost = cleanServiceToTalCost ?? 0.0;
 
   ServiceOrderConfirmState copyWith({
     LoadState? loadingState,
     String? errorMessage,
-    double? totalPrice,
+    double? cleanServiceToTalCost,
+    double? extraCost,
     String? visitTime,
     Map<String, dynamic>? remarkInfo,
     PaidServiceDetailEntity? datas,
@@ -47,7 +51,8 @@ class ServiceOrderConfirmState {
     return ServiceOrderConfirmState(
       loadingState: loadingState ?? this.loadingState,
       errorMessage: errorMessage ?? this.errorMessage,
-      totalPrice: totalPrice ?? this.totalPrice,
+      cleanServiceToTalCost: cleanServiceToTalCost ?? this.cleanServiceToTalCost,
+      extraCost: extraCost ?? this.extraCost,
       visitTime: visitTime ?? this.visitTime,
       remarkInfo: remarkInfo ?? this.remarkInfo,
       datas: datas ?? this.datas,

+ 21 - 5
packages/cpt_services/lib/modules/services/service_order_confirm/service_order_confirm_vm.dart

@@ -194,11 +194,18 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
 
   // 显示 预约时间弹框
   handlerShowChooseVisitTimeDialog(BuildContext context) async{
+    // 每次点击 预约时间按钮,需要 清空 confirm 页面的 extraCost
     // 定时器
     LoadState dialogState = LoadState.State_Success;
     DialogEngine.show(
         tag: "chooseVisitTimeDialog",
         position: DialogPosition.bottom,
+        clickMaskDismiss:false,
+        onDismiss: (){
+          Log.d("--------------------------dismissDialog---------------------");
+          // 弹框消失
+          // _chooseVisitTimeDialogGlobalKey.currentState?.dismissDialog();
+        },
         widget: DialogContentWrap(
           key: _chooseVisitTimeDialogGlobalKey,
           loadingState: dialogState,
@@ -206,6 +213,7 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
           dialogWidth: context.screenSize.width,
           isShowConfirmBtn: false,
           isShowCancelBtn: false,
+          closeIconColor: context.appColors.textPrimary,
           title: "",
           bottomBtnRadius:0,
           bottomBtnSpace: 0,
@@ -228,6 +236,7 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
           // ),
           confirmAction: chooseVisitTimeConfirmFn,
           cancelAction: chooseVisitTimeCancelFn,
+            closeAction: chooseVisitTimeCloseFn,
           titleBuilder: (context) {
             return buildChooseVisitTimeTitle(context);
           },
@@ -256,6 +265,10 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
     Log.d("点击了取消");
   }
 
+  chooseVisitTimeCloseFn(){
+    Log.d("点击了右上方关闭");
+  }
+
   Widget buildChooseVisitTimeTitle(BuildContext context){
     return ChooseVisitTimeTitle(id: 0, cleanServiceType: _cleanServiceType!);
   }
@@ -402,10 +415,12 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
     Log.d("订单的备注信息: $remarkInfo");
     return remarkInfo;
   }
-  // 设置订单相关数据
+  // 设置订单相关数据    总价(包含购买的所有服务的价格 + 加急/节假日/夜间 等的价格总和)
   setConfirmOrderTotalPrice(BuildContext? context){
     Log.d("service_order_confirm_vm 设置订单页面的相关数据");
     double cleanServiceToTalPrice = 0.0;
+    double extraCost = 0.0;  // 加急/节假日/夜间 等费用
+
     final chooseHouseCleanCotentVm = ref.read(chooseHouseCleanContentVmProvider.notifier);
     double houseCleanTotalPrice = 0.0;
     final chooseAirCleanContentVm = ref.read(chooseAirConditionContentVmProvider.notifier);
@@ -418,14 +433,15 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
       airCleanTotalPrice = (chooseAirCleanContentVm?.state.totalPrice ?? 0.0).toDouble();
       cleanServiceToTalPrice = airCleanTotalPrice;
     }
-
-    final totalPrice = cleanServiceToTalPrice.toDouble();
+    final chooseVisitTimeContentVm = ref.read(chooseVisitTimeContentVmProvider.notifier);
+    extraCost = chooseVisitTimeContentVm?.state.extraTotalCost??0.0;
+    Log.d("当前的 extraCost: $extraCost");
 
     final serviceDetailVm = ref.read(serviceCleanDetailVmProvider.notifier);
 
-
     state = state.copyWith(
-        totalPrice: totalPrice,
+        cleanServiceToTalCost: cleanServiceToTalPrice,
+        extraCost: extraCost,
         datas: serviceDetailVm?.state.datas!
     );
   }

+ 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'586ef070a06d954a4aed1735d642b1e8fb8c02da';
+    r'b7cf5a927676989e18f7723f78c5535300082b02';
 
 /// See also [ServiceOrderConfirmVm].
 @ProviderFor(ServiceOrderConfirmVm)

+ 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'783e4c9115e5ccc0ab8866fc08260b09764eec5c';
+    r'2a6458bfaa88196839a05fd1ac64a32e77490a4c';
 
 /// See also [ServiceRepairDetailVm].
 @ProviderFor(ServiceRepairDetailVm)

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

@@ -127,8 +127,8 @@ class ServicesRespository {
     Map<String, dynamic> params = {};
     params = data!;
     Map<String, String> headers = {};
-    headers["Content-Type"] = "application/x-www-form-urlencoded";
-    headers["Accept"] = "application/x.yyjobs-api.v1+json";
+    // headers["Content-Type"] = "application/x-www-form-urlencoded";
+    // headers["Accept"] = "application/x.yyjobs-api.v1+json";
 
     final result = await dioEngine.requestNetResult(
       // ApiConstants.apiServerTime, // api 地址
@@ -146,7 +146,6 @@ class ServicesRespository {
     if (result.isSuccess) {
       //重新赋值data或list
       final json = result.getDataDynamic();
-      // var data = NewsfeedForyouEntity.fromJson(json!);
       //重新赋值data或list
       return result.convert(data: json);
     } else {

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

@@ -92,18 +92,15 @@ abstract class _$ServicesPageRouter extends RootStackRouter {
       );
     },
     ServiceCleanDetailPageRoute.name: (routeData) {
-      final pathParams = routeData.inheritedPathParams;
-      final args = routeData.argsAs<ServiceCleanDetailPageRouteArgs>(
-          orElse: () => ServiceCleanDetailPageRouteArgs(
-                id: pathParams.getInt('id'),
-                cleanServiceType: pathParams.getString('cleanServiceType'),
-              ));
+      final args = routeData.argsAs<ServiceCleanDetailPageRouteArgs>();
       return AutoRoutePage<dynamic>(
         routeData: routeData,
         child: ServiceCleanDetailPage(
           key: args.key,
           id: args.id,
           cleanServiceType: args.cleanServiceType,
+          liked: args.liked,
+          likesCount: args.likesCount,
         ),
       );
     },
@@ -395,6 +392,8 @@ class ServiceCleanDetailPageRoute
     Key? key,
     required int id,
     required String cleanServiceType,
+    required bool liked,
+    required int likesCount,
     List<PageRouteInfo>? children,
   }) : super(
           ServiceCleanDetailPageRoute.name,
@@ -402,6 +401,8 @@ class ServiceCleanDetailPageRoute
             key: key,
             id: id,
             cleanServiceType: cleanServiceType,
+            liked: liked,
+            likesCount: likesCount,
           ),
           rawPathParams: {
             'id': id,
@@ -421,6 +422,8 @@ class ServiceCleanDetailPageRouteArgs {
     this.key,
     required this.id,
     required this.cleanServiceType,
+    required this.liked,
+    required this.likesCount,
   });
 
   final Key? key;
@@ -429,9 +432,13 @@ class ServiceCleanDetailPageRouteArgs {
 
   final String cleanServiceType;
 
+  final bool liked;
+
+  final int likesCount;
+
   @override
   String toString() {
-    return 'ServiceCleanDetailPageRouteArgs{key: $key, id: $id, cleanServiceType: $cleanServiceType}';
+    return 'ServiceCleanDetailPageRouteArgs{key: $key, id: $id, cleanServiceType: $cleanServiceType, liked: $liked, likesCount: $likesCount}';
   }
 }
 

+ 3 - 0
packages/cs_widgets/lib/dialog/dialog_content_wrap.dart

@@ -29,6 +29,7 @@ class DialogContentWrap extends StatefulWidget {
   Widget Function(BuildContext)? messageBuilder;
   VoidCallback confirmAction;
   VoidCallback? cancelAction;
+  VoidCallback? closeAction;
   bool isShowConfirmBtn;
   bool isShowCancelBtn;
   bool isConfirmAutoClose;
@@ -66,6 +67,7 @@ class DialogContentWrap extends StatefulWidget {
     Widget Function(BuildContext)? this.bottomFooterBuilder,
     required this.confirmAction,
     this.cancelAction,
+    this.closeAction,
     this.showCloseIcon = true,
     this.isShowConfirmBtn = true,
     this.isShowCancelBtn = true,
@@ -302,6 +304,7 @@ class DialogContentWrapState extends State<DialogContentWrap> {
               height: 25.5,
               color: widget.closeIconColor ?? context.appColors.textPrimary,
             ).onTap((){
+              widget.closeAction ?.call();
               onCancel();
             },padding: 10),
           ),