瀏覽代碼

修改services 部分bug

glglove 5 天之前
父節點
當前提交
bd494257b7

+ 11 - 10
packages/cpt_community/lib/components/newsfeed_card_content.dart

@@ -18,6 +18,7 @@ import 'package:shared/utils/log_utils.dart';
 import 'package:widgets/ext/ex_widget.dart';
 import 'package:widgets/my_load_image.dart';
 import 'package:widgets/my_text_view.dart';
+import 'package:widgets/utils/dark_theme_util.dart';
 
 class NewsFeedCardContent extends StatelessWidget {
   final String content;
@@ -99,7 +100,7 @@ class NewsFeedCardContent extends StatelessWidget {
                 height: 87,
                   width: (totalImageCount < rowMaxImageNum)? maxWidth/rowMaxImageNum - 16 : maxWidth/imageCount - 16,
                 margin: EdgeInsets.only(right: (index!=imageCount-1) ? 16 : 0 ),
-                color: ColorUtils.string2Color("#F2F3F6"),
+                color: Colors.transparent,
                 child:Stack(
                     children: [
                       Hero(
@@ -119,16 +120,16 @@ class NewsFeedCardContent extends StatelessWidget {
                               List<String> filteredImages = totalImageUrls?.whereType<String>().toList() ?? [];
                               // PreviewPhotoPage.startInstance(context: context, images: filteredImages, position: index);
                               // context.appRouter.push(PreviewPhotoPageRoute(images: filteredImages, position: index));
-                              // ImagePreviewEngine.multipleImagePreview(
-                              //     context,
-                              //     filteredImages,
-                              //     heroes: List.generate(filteredImages.length, (index) => filteredImages[index]),
-                              //     onLongPressAction: (url) {}
+                              // GotoPage.pushPageByFade(
+                              //     context: context,
+                              //     targetPage:
+                              //     PreviewPhotoPage(images: filteredImages, position: index),
                               // );
-                              GotoPage.pushPageByFade(
-                                  context: context,
-                                  targetPage:
-                                  PreviewPhotoPage(images: filteredImages, position: index),
+                              ImagePreviewEngine.multipleImagePreview(
+                                  context,
+                                  filteredImages,
+                                  heroes: List.generate(filteredImages.length, (index) => filteredImages[index]),
+                                  onLongPressAction: (url) {}
                               );
                             }
                           },

+ 2 - 1
packages/cpt_community/lib/modules/community/community_vm.dart

@@ -20,6 +20,7 @@ import 'package:shared/utils/log_utils.dart';
 import 'package:auto_route/auto_route.dart';
 import 'package:widgets/dialog/app_custom_dialog.dart';
 import 'package:widgets/my_checkbox_group.dart';
+import 'package:widgets/utils/dark_theme_util.dart';
 
 import '../garage/for_rent/for_rent_vm.dart';
 import '../garage/for_sale/for_sale_vm.dart';
@@ -268,7 +269,7 @@ class CommunityVm extends _$CommunityVm {
           confirmTxt: S.current.confirm,
           messageBuilder: (BuildContext context){
             return Container(
-              color: context.appColors.textWhite,
+              color: DarkThemeUtil.multiColors(context, context.appColors.textWhite, darkColor: Colors.transparent),
               child: Column(
                 mainAxisAlignment: MainAxisAlignment.start,
                 crossAxisAlignment: CrossAxisAlignment.start,

+ 1 - 1
packages/cpt_community/lib/modules/garage/garagesale_detail/garagesale_detail_page.dart

@@ -75,7 +75,7 @@ class GaragesaleDetailPage extends HookConsumerWidget {
           type=='mineForSale'||type=='mineForRent'?Center(
             child: MyTextView(
               S.current.delete,
-              textColor: context.appColors.redDefault,
+              textColor: DarkThemeUtil.multiColors(context, context.appColors.redDefault,darkColor: Colors.redAccent),
               fontSize: 16,
               isFontMedium: true,
               marginRight: 20,

+ 30 - 3
packages/cpt_services/lib/components/status_card_item.dart

@@ -123,15 +123,15 @@ class StausCardItem extends HookConsumerWidget {
                   children: [
                     // 商品/服务名称
                     MyTextView(
-                      item?.orderProducts[0].productName ?? "-",
+                      getOrderServiceProductName(item!),
                       fontSize: 14,
                       maxLines: 1,
                       isFontRegular: true,
                       textAlign: TextAlign.left,
-                    ),
+                    ).expanded(),
                     // 公司名称
                     MyTextView(
-                      '${servicesConstants.dollarUnit}${item?.orderProducts[0].totalAmount ?? "-"}',
+                      '${servicesConstants.dollarUnit}${getOrderTotalAmount(item!)}',
                       fontSize: 17,
                       maxLines: 1,
                       isFontBold: true,
@@ -244,6 +244,33 @@ class StausCardItem extends HookConsumerWidget {
     ).marginOnly(left: 5);
   }
 
+  String getOrderServiceProductName(GarageSaleHistoryList item) {
+    String serviceProductName = '';
+    if (item?.orderProducts != null && item?.orderProducts?.isNotEmpty == true) {
+      for (var i = 0; i < item.orderProducts!.length; i++) {
+        String itemName = item.orderProducts[i].productName ?? '';
+        if (i == 0) {
+          serviceProductName = itemName;
+        } else {
+          // 超过1个的时候,只显示"共**个服务项"
+          serviceProductName = '${item.orderProducts.length} services items in total';
+        }
+      }
+    }
+    return serviceProductName;
+  }
+
+  String getOrderTotalAmount(GarageSaleHistoryList item) {
+    num orderTotalAmount = 0;
+    if (item?.orderProducts != null && item?.orderProducts?.isNotEmpty == true) {
+      for (var i = 0; i < item.orderProducts!.length; i++) {
+        num itemTotalAmount = num.tryParse(item?.orderProducts[i].totalAmount ?? '') ?? 0;
+        orderTotalAmount += itemTotalAmount;
+      }
+    }
+    return orderTotalAmount.toString();
+  }
+
   Color getStatusColor(BuildContext context,GarageSaleHistoryList item) {
     switch (item.orderStatus) {
       case 'Wait Paid':

+ 3 - 2
packages/cpt_services/lib/constants_services.dart

@@ -78,9 +78,9 @@ class servicesConstants {
    static Map<String, List<Map<String, dynamic>>> servicesStatusActionBtnList = {
      // 0 waitPaid, 1 waitService, 2 completed, 3 canceled
      '0': [
-       actionBtn['0'],
        actionBtn['2'],
        actionBtn['3'],
+       actionBtn['0'],
      ],
      '1': [
        actionBtn['1'],
@@ -102,8 +102,9 @@ class servicesConstants {
          "type": "proceedWidthPayment",
          'code': 0,
          'btnColor': '#FFFE6C00',
-         'btnWidth': 65.0,
+         'btnWidth': 500.0,
          'btnHeight': 35.0,
+         'widthFactor': 1,
        },
        "1": {
          "text": S.current.cancel,

+ 124 - 19
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_page.dart

@@ -647,37 +647,135 @@ class CleanOrderDetailPage extends HookConsumerWidget {
   }
 
   // 底部操作区域
+  // Widget _buildActionSection(
+  //     BuildContext context, state, vm, WidgetRef ref, int id,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: Wrap(
+  //           // mainAxisAlignment: MainAxisAlignment.center,
+  //           // mainAxisSize: MainAxisSize.max,
+  //         alignment: WrapAlignment.center,
+  //           spacing: 8.0, // 子项之间的水平间距
+  //           runSpacing: 4.0, // 行与行之间的垂直间距
+  //           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: const BouncingScrollPhysics(),
+  //     );
+  //   });
+  // }
+
   Widget _buildActionSection(
       BuildContext context, state, vm, WidgetRef ref, int id,List<Map<String, dynamic>> actionBtnList) {
+    final state = ref.watch(cleanOrderDetailVmProvider);
+    int? orderStatus = state.datas?.orderStatus;
+    String? cancelStatus = state.datas?.cancelStatus;
+
     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(
+      if (orderStatus!.toString() == '0') {
+        // 未支付场景
+        return Container(
+          color: context.appColors.whiteBG,
+          width: maxWidth,
+          padding: const EdgeInsets.only(left: 10, right: 10),
+          child: Column(
+            crossAxisAlignment: CrossAxisAlignment.stretch,
+            children: [
+              Row(
+                children: actionBtnList
+                    .asMap()
+                    .map((index, item) {
+                  final isLast = index == actionBtnList.length - 1;
+                  if (isLast) return MapEntry(index, const SizedBox.shrink());
+                  return MapEntry(
+                    index,
+                    Expanded(
+                      child: _waitPaidBuildBtn(context, item, vm, ref, index),
+                    ),
+                  );
+                }).values.toList(),
+              ),
+              if (actionBtnList.isNotEmpty && actionBtnList.last != null)
+                Padding(
+                  padding: const EdgeInsets.only(top: 8.0),
+                  child: _waitPaidBuildBtn(
+                    context,
+                    actionBtnList.last,
+                    vm,
+                    ref,
+                    actionBtnList.length - 1,
+                  ),
+                ),
+            ],
+          ),
+        );
+      }
+      else {
+        return Container(
+          // height: 71.5,
+          color: context.appColors.whiteBG,
+          width: maxWidth,
+          padding: const EdgeInsets.only(left: 10, right: 10),
+          child: Row(
             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: const BouncingScrollPhysics(),
-      );
+              children: List.generate(actionBtnList.length, (index) {
+                var item = actionBtnList[index];
+                return Expanded(
+                  child: _buildBtn(context, item, vm, ref,index),
+                );
+                // return _buildBtn(context, item, vm, ref);
+              })),
+        ).scrollable(
+          scrollDirection: Axis.horizontal,
+          physics: const BouncingScrollPhysics(),
+        );
+      }
     });
   }
 
-  Widget _buildBtn(BuildContext context, Map<String, dynamic> btnItem, vm, WidgetRef ref) {
+  Widget _waitPaidBuildBtn(BuildContext context, Map<String, dynamic> btnItem, vm, WidgetRef ref, int btnIdx) {
+    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);
+  }
+
+
+  Widget _buildBtn(BuildContext context, Map<String, dynamic> btnItem, vm, WidgetRef ref, int btnIdx) {
     // final btnCode = btnItem['code'];
+    final state = ref.watch(cleanOrderDetailVmProvider);
+    Log.d("8323  cancelStatus:${state.datas?.cancelStatus}  orderStatus:${state.datas?.orderStatus}");
+    int? orderStatus = state.datas?.orderStatus;
+    String? cancelStatus = state.datas?.cancelStatus;
     return MyButton(
       onPressed: () {
         vm.handlerClickActionBtn(context, btnItem);
@@ -688,8 +786,15 @@ class CleanOrderDetailPage extends HookConsumerWidget {
       backgroundColor: ColorUtils.string2Color(btnItem['btnColor']),
       fontSize: 12,
       padding: const EdgeInsets.symmetric(horizontal: 5),
-      minWidth: btnItem['btnWidth']?.toDouble(),
+      minWidth: getBtnActionWidth(btnItem, orderStatus!, cancelStatus!, btnIdx),
       minHeight: btnItem['btnHeight']?.toDouble() + 5,
     ).marginOnly(left: 5);
   }
+
+  double getBtnActionWidth(Map<String, dynamic> btnItem, int orderStatus, String cancelStatus, int btnIdx) {
+    if (btnItem['btnWidth'] != null) {
+      return btnItem['btnWidth']?.toDouble() + 5;
+    }
+    return 0;
+  }
 }

+ 3 - 2
packages/cpt_services/lib/modules/services/clean_order_detail/clean_order_detail_vm.dart

@@ -134,13 +134,14 @@ class CleanOrderDetailVm extends _$CleanOrderDetailVm with DioCancelableMixin {
         vm.handlerExcutePay(
             true,
             orderId: _orderId,
+            orderDetailId: _detailId.toString(),
             scallback: (String? orderId, String? orderDetailId){
               Log.d("继续支付成功 orderId:$_orderId  orderId1:$orderId  orderDetailId:$orderDetailId");
-              int orderid_int = int.parse(orderDetailId!);
+              int orderDetailId_int = int.parse(orderDetailId!);
               // 跳入 支付成功页面
               // ServicePaySuccessPage.startInstance();
               context.appRouter.pushAndPopUntil(
-                  ServicePaySuccessPageRoute(id: orderid_int, cleanServiceTypeStr: _cleanServiceTypeStr),
+                  ServicePaySuccessPageRoute(id: orderDetailId_int, cleanServiceTypeStr: _cleanServiceTypeStr),
                   predicate: (Route<dynamic> route) {       // 根据具体条件返回 true 或 false
                 return route.settings.name != 'CleanOrderDetailPageRoute';
               });

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

@@ -489,11 +489,11 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
   }
 
   // 调起支付组件进行支付流程
-  void handlerExcutePay(bool hasOrderId, {Future<Map<String, dynamic>> Function()? asyncGetOrderIdFn, String? orderId,Function? scallback, Function? fcallback}) async {
+  void handlerExcutePay(bool hasOrderId, {Future<Map<String, dynamic>> Function()? asyncGetOrderIdFn, String? orderId, String? orderDetailId, Function? scallback, Function? fcallback}) async {
     //支付流程 Loading 开始
     LoadingEngine.show();
     String finnalOrderId = '';
-    String? orderDetailId;
+    String? finnalOrderDetailId;
 
     if(!hasOrderId){
       if(asyncGetOrderIdFn != null){
@@ -503,7 +503,7 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
       if (result is Map<String, dynamic>) {
         // final {'orderId': String? finnalOrderId, 'orderDetailId': String? orderDetailId} = result;
         finnalOrderId = result['orderId'];
-        orderDetailId = result['orderDetailId'];
+        finnalOrderDetailId = result['orderDetailId'];
       } else {
         // 处理错误情况
         Log.d("获取订单号asyncGetOrderIdFn 返回值不是 Map<String, dynamic>");
@@ -511,7 +511,7 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
     }
     }else {
       finnalOrderId = orderId!;
-      orderDetailId = orderId!;
+      finnalOrderDetailId = orderDetailId!;
     }
 
     Log.d("当前支付的订单ID:$finnalOrderId");
@@ -525,9 +525,9 @@ class ServiceOrderConfirmVm extends _$ServiceOrderConfirmVm {
     LoadingEngine.dismiss();
     //如果支付成功,走下一步流程
     if (success) {
-      scallback?.call(finnalOrderId, orderDetailId, );
+      scallback?.call(finnalOrderId, finnalOrderDetailId, );
     } else {
-      fcallback?.call(finnalOrderId, orderDetailId, );
+      fcallback?.call(finnalOrderId, finnalOrderDetailId, );
     }
   }
 }

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

@@ -106,12 +106,12 @@ class ServicePaySuccessPage extends HookConsumerWidget {
   Widget _buildTopInfo(BuildContext context, ServicePaySuccessState state, WidgetRef ref) {
     return Container(
       width: double.infinity,
-      height: 300,
+      padding: const EdgeInsets.only(top: 20, bottom: 20),
+      // height: 300,
       color: context.appColors.whiteBG,
       child: Column(
         children: [
           Container(
-            margin: const EdgeInsets.only(top: 20),
             child: const MyAssetImage(
               Assets.servicePaySuccessIcon,
               width: 54,

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

@@ -225,7 +225,7 @@ class ServiceRepairDetailPage extends HookConsumerWidget {
                       //  Get A Quote
                       child: MyButton(
                         text: S.current.get_a_quote,
-                        textColor: context.appColors.textWhite,
+                        textColor: DarkThemeUtil.multiColors(context, context.appColors.textWhite, darkColor: Colors.white),
                         backgroundColor: DarkThemeUtil.multiColors(context, context.appColors.textPrimary, darkColor: AppColorsTheme.color666666),
                         fontSize: 15,
                         minWidth: 310,

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

@@ -314,7 +314,7 @@ class ServiceRepairDetailVm extends _$ServiceRepairDetailVm {
                 fontSize: 16,
                 fontWeight: FontWeight.w500,
                 backgroundColor:  DarkThemeUtil.multiColors(context, context.appColors.textPrimary, darkColor: Colors.black),
-                textColor: context.appColors.textWhite,
+                textColor: DarkThemeUtil.multiColors(context, context.appColors.textWhite, darkColor: Colors.white),
               ),
             );
           },