From d467bf605843ab5d6cdfe795ef8e59934e4efb42 Mon Sep 17 00:00:00 2001
From: w-R <953969641@qq.com>
Date: Mon, 6 Jun 2022 18:26:51 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=9B=B4=E6=94=B9,=20?=
 =?UTF-8?q?=E9=83=A8=E5=88=86bug=E6=9B=B4=E6=94=B9;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lib/home/home_page.dart                       |   11 +-
 lib/home/home_view/discount_zone.dart         |   13 +-
 lib/home/home_view/home_recommend_goods.dart  |   84 +-
 lib/home/home_view/top_selling_list.dart      |   58 +-
 .../points_mall_view/points_goods_title.dart  |    2 +-
 .../points_mall_view/points_goods_view.dart   |   48 +-
 lib/home/welfare_exchange.dart                |    9 +-
 lib/home/welfare_page.dart                    |   14 +-
 .../integral_store_details_page.dart          |    5 +-
 lib/mine/mine_page.dart                       |    4 +-
 lib/mine/mine_view/mine_item.dart             |    6 +-
 lib/retrofit/data/home_rank.dart              | 1080 +++++++++++++++++
 lib/retrofit/retrofit_api.dart                |    5 +
 lib/retrofit/retrofit_api.g.dart              |   21 +
 lib/settlement/settlement_view/coupon.dart    |    7 +-
 lib/store/store_order.dart                    |    2 +-
 lib/view_widget/coupon_details_dialog.dart    |    9 +-
 lib/view_widget/item_title.dart               |    1 +
 lib/view_widget/mine_vip_entry.dart           |    4 +-
 lib/view_widget/new_coupon_widget.dart        |   10 +-
 lib/view_widget/recharge_details_dialog.dart  |    9 +-
 21 files changed, 1271 insertions(+), 131 deletions(-)
 create mode 100644 lib/retrofit/data/home_rank.dart

diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart
index 1a80baea..c1c7533a 100644
--- a/lib/home/home_page.dart
+++ b/lib/home/home_page.dart
@@ -25,6 +25,7 @@ import 'package:huixiang/retrofit/data/coupon.dart';
 import 'package:huixiang/retrofit/data/founder.dart';
 import 'package:huixiang/retrofit/data/goods.dart';
 import 'package:huixiang/retrofit/data/goods_category.dart';
+import 'package:huixiang/retrofit/data/home_rank.dart';
 import 'package:huixiang/retrofit/data/login_info.dart';
 import 'package:huixiang/retrofit/data/msg_stats.dart';
 import 'package:huixiang/retrofit/data/page.dart';
@@ -146,6 +147,7 @@ class HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin {
   int totalMsg = 0;
   List<Coupon> coupons = [];
   int state = 1;
+  HomeRank homeRank;
 
   queryHome() async {
     // EasyLoading.show(status: S.of(context).zhengzaijiazai);
@@ -180,6 +182,11 @@ class HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin {
       articles.addAll(article.data.list);
     }
 
+    final BaseData<HomeRank> rank = await apiService.recommendRank().catchError((onError) {});
+    if (rank != null && rank.isSuccess) {
+      homeRank = rank.data;
+    }
+
     final BaseData<PageInfo<Goods>> goodsData = await apiService.creditGoods({
       "orderDesc": true,
       "orderType": 1,
@@ -510,13 +517,13 @@ class HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin {
                         DiscountZone(coupons),
 
                         ///特惠专区-推荐商品展示
-                        HomeRecommendGoods(),
+                        HomeRecommendGoods(homeRank),
 
                         ///福利中心
                         WelfareCore(),
 
                         ///吃喝玩商品热销榜
-                        TopSellingList(),
+                        TopSellingList(homeRank),
 
                         // ///店铺推荐
                         // QuickOrder(),
diff --git a/lib/home/home_view/discount_zone.dart b/lib/home/home_view/discount_zone.dart
index 0778d1b2..24c0df28 100644
--- a/lib/home/home_view/discount_zone.dart
+++ b/lib/home/home_view/discount_zone.dart
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
 import 'package:huixiang/generated/l10n.dart';
 import 'package:huixiang/retrofit/data/coupon.dart';
 import 'package:huixiang/retrofit/retrofit_api.dart';
+import 'package:huixiang/utils/flutter_utils.dart';
 import 'package:huixiang/utils/font_weight.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:huixiang/view_widget/classic_header.dart';
@@ -74,7 +75,7 @@ class _DiscountZone extends State<DiscountZone> {
 
   Widget discountItem(Coupon coupon) {
     return Container(
-      width: 270.w,
+      width: 290.w,
       height: 100.h,
       decoration: BoxDecoration(
         image: DecorationImage(
@@ -82,7 +83,7 @@ class _DiscountZone extends State<DiscountZone> {
           image: AssetImage("assets/image/discount.webp"),
         ),
       ),
-      margin: EdgeInsets.only(right: 6.w),
+      margin: EdgeInsets.only(right: 10.w),
       child: Row(
         mainAxisAlignment: MainAxisAlignment.center,
         crossAxisAlignment: CrossAxisAlignment.center,
@@ -140,6 +141,7 @@ class _DiscountZone extends State<DiscountZone> {
                   crossAxisAlignment: CrossAxisAlignment.center,
                   children: [
                     Expanded(child: Container(
+                      padding: EdgeInsets.only(right: 5),
                       child:discountWidget(coupon),
                     )),
                   ],
@@ -174,8 +176,7 @@ class _DiscountZone extends State<DiscountZone> {
               ),
               Text(
                 coupon != null
-                    ? double.tryParse("${coupon.discountAmount}" ?? "0")
-                    .toInt()
+                    ? double.tryParse("${coupon.discountAmount}" ?? "0").toInt()
                     .toString()
                     : "",
                 style: TextStyle(
@@ -274,7 +275,7 @@ class _DiscountZone extends State<DiscountZone> {
               ),
               Text(
                 coupon != null
-                    ? double.tryParse("${coupon.limitAmount}" ?? "0").toStringAsFixed(2)
+                    ? "${AppUtils.calculateDouble(double.tryParse(coupon.limitAmount) ?? 0)}"
                     : "",
                 style: TextStyle(
                   fontSize: 28.sp,
@@ -303,7 +304,7 @@ class _DiscountZone extends State<DiscountZone> {
                     : "",
                 style: TextStyle(
                   fontSize: 30.sp,
-                  fontWeight: MyFontWeight.semi_bold,
+                  fontWeight: FontWeight.w900,
                   color:  coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xFFFFFFFF),
                 ),
               ),
diff --git a/lib/home/home_view/home_recommend_goods.dart b/lib/home/home_view/home_recommend_goods.dart
index 191a53a9..6e7e7f32 100644
--- a/lib/home/home_view/home_recommend_goods.dart
+++ b/lib/home/home_view/home_recommend_goods.dart
@@ -3,6 +3,7 @@ import 'dart:convert';
 import 'package:flutter/material.dart';
 import 'package:flutter_swiper/flutter_swiper.dart';
 import 'package:huixiang/retrofit/data/banner.dart';
+import 'package:huixiang/retrofit/data/home_rank.dart';
 import 'package:huixiang/retrofit/data/shopping_home_config.dart';
 import 'package:huixiang/retrofit/retrofit_api.dart';
 import 'package:huixiang/view_widget/custom_image.dart';
@@ -11,6 +12,11 @@ import 'package:huixiang/utils/font_weight.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 
 class HomeRecommendGoods extends StatefulWidget {
+  // final List<CommodityZone> commodityZone;
+  final HomeRank homeRank;
+
+  HomeRecommendGoods(this.homeRank);
+
   @override
   State<StatefulWidget> createState() {
     return _HomeRecommendGoods();
@@ -37,18 +43,28 @@ class _HomeRecommendGoods extends State<HomeRecommendGoods> {
           Container(
             height: 257.h,
             decoration: BoxDecoration(
-            borderRadius: BorderRadius.circular(6),
+              borderRadius: BorderRadius.circular(6),
               color: Colors.white,
-          ),
-            margin: EdgeInsets.only(left: 14.w,right: 14.w,top: 14.h,bottom: 24.h),
+            ),
+            margin: EdgeInsets.only(
+                left: 14.w, right: 14.w, top: 14.h, bottom: 24.h),
             child: ListView.builder(
               scrollDirection: Axis.horizontal,
               physics: BouncingScrollPhysics(),
-              itemCount:3,
+              itemCount: widget.homeRank?.commodityZone?.length ?? 0,
               itemBuilder: (context, position) {
                 return GestureDetector(
-                  onTap: () {},
-                  child: recommendGoodsItem(),
+                  onTap: () {
+                    Navigator.of(context).pushNamed(
+                      '/router/store_order',
+                      arguments: {
+                        "id": widget.homeRank.commodityZone[position].storeId,
+                        "tenant": widget.homeRank.commodityZone[position].tenantCode,
+                        "storeName": ""
+                      },
+                    );
+                  },
+                  child: recommendGoodsItem(widget.homeRank?.commodityZone[position]),
                 );
               },
             ),
@@ -58,10 +74,10 @@ class _HomeRecommendGoods extends State<HomeRecommendGoods> {
     );
   }
 
-  Widget recommendGoodsItem() {
+  Widget recommendGoodsItem(CommodityZone commodityZone) {
     return Container(
       width: 158.w,
-      margin: EdgeInsets.only(right:7.w,left:12.w,top: 12.h),
+      margin: EdgeInsets.only(right: 7.w, left: 12.w, top: 12.h),
       child: Column(
         mainAxisAlignment: MainAxisAlignment.start,
         crossAxisAlignment: CrossAxisAlignment.start,
@@ -72,44 +88,23 @@ class _HomeRecommendGoods extends State<HomeRecommendGoods> {
                 decoration: BoxDecoration(
                   borderRadius: BorderRadius.circular(4),
                 ),
-                child:
-                ClipRRect(
-                  borderRadius: BorderRadius.circular(4),
-                  child:  Image.asset(
-                    "assets/image/icon_story_td.webp",
-                    width: 158.w,
-                    height: 158,
-                    fit: BoxFit.cover,
-                  ),
-                ),),
-              Container(
-                width: 81.w,
-                height: 27.h,
-                alignment: Alignment.center,
-                decoration: BoxDecoration(
-                borderRadius: BorderRadius.only(
-                  topLeft: Radius.circular(4),
-                  bottomLeft: Radius.circular(0),
-                  bottomRight: Radius.circular(100),
-                  topRight: Radius.circular(100),),
-                  color: Color(0xFF32A060),
-              ),
-                child: Text(
-                  "直降¥120.00",
-                  style: TextStyle(
-                    fontWeight: MyFontWeight.regular,
-                    color: Color(0xFFFFFFFF),
-                    fontSize: 12.sp,
-                  ),
+                child: MImage(
+                  commodityZone?.productImg ?? "",
+                  fit: BoxFit.contain,
+                  radius: BorderRadius.circular(4),
+                  width: 158,
+                  height: 158,
+                  errorSrc: "assets/image/default_2_1.webp",
+                  fadeSrc: "assets/image/default_2_1.webp",
                 ),
               ),
             ],
           ),
           SizedBox(
-            height:8.h,
+            height: 8.h,
           ),
           Text(
-            "花生吐司",
+           commodityZone?.productName ?? "",
             maxLines: 1,
             overflow: TextOverflow.ellipsis,
             style: TextStyle(
@@ -117,14 +112,15 @@ class _HomeRecommendGoods extends State<HomeRecommendGoods> {
               fontWeight: MyFontWeight.regular,
               color: Color(0xFF0D0D0D),
             ),
-          ),SizedBox(
-            height:4.h,
+          ),
+          SizedBox(
+            height: 4.h,
           ),
           Text.rich(
             TextSpan(
               children: [
                 TextSpan(
-                  text: "¥123.00",
+                  text: commodityZone?.price ?? "",
                   style: TextStyle(
                     fontSize: 16.sp,
                     fontWeight: MyFontWeight.semi_bold,
@@ -132,9 +128,9 @@ class _HomeRecommendGoods extends State<HomeRecommendGoods> {
                   ),
                 ),
                 TextSpan(
-                  text: "¥123.00",
+                  text: commodityZone?.applyPrice ?? "",
                   style: TextStyle(
-                    fontSize:10.sp,
+                    fontSize: 10.sp,
                     decoration: TextDecoration.lineThrough,
                     fontWeight: MyFontWeight.regular,
                     color: Color(0xFFB3B3B3),
diff --git a/lib/home/home_view/top_selling_list.dart b/lib/home/home_view/top_selling_list.dart
index 5790ccc9..9a96d0e2 100644
--- a/lib/home/home_view/top_selling_list.dart
+++ b/lib/home/home_view/top_selling_list.dart
@@ -3,6 +3,7 @@ import 'dart:convert';
 import 'package:flutter/material.dart';
 import 'package:flutter_swiper/flutter_swiper.dart';
 import 'package:huixiang/retrofit/data/banner.dart';
+import 'package:huixiang/retrofit/data/home_rank.dart';
 import 'package:huixiang/retrofit/data/shopping_home_config.dart';
 import 'package:huixiang/retrofit/retrofit_api.dart';
 import 'package:huixiang/view_widget/custom_image.dart';
@@ -11,6 +12,8 @@ import 'package:huixiang/utils/font_weight.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 
 class TopSellingList extends StatefulWidget {
+  final HomeRank homeRank;
+  TopSellingList(this.homeRank);
   @override
   State<StatefulWidget> createState() {
     return _TopSellingList();
@@ -34,8 +37,10 @@ class _TopSellingList extends State<TopSellingList> {
       decoration: BoxDecoration(
         borderRadius: BorderRadius.circular(6),
         image: DecorationImage(
-          fit: BoxFit.fill,
-          image: AssetImage("assets/image/hot_list.webp"),
+          image: NetworkImage(
+           widget?.homeRank?.commodityListImg ?? ""
+          ),
+          fit: BoxFit.cover,
         ),
       ),
       margin: EdgeInsets.only(left: 14.w,right: 14.w,top: 12.h,bottom: 23.h),
@@ -63,11 +68,12 @@ class _TopSellingList extends State<TopSellingList> {
             child: ListView.builder(
               scrollDirection: Axis.horizontal,
               physics: BouncingScrollPhysics(),
-              itemCount:3,
+              itemCount:widget.homeRank.commodityList.length ?? 0,
               itemBuilder: (context, position) {
                 return GestureDetector(
-                  onTap: () {},
-                  child: hotSaleItem(),
+                  onTap: () {
+                  },
+                  child: hotSaleItem(widget.homeRank.commodityList[position],position),
                 );
               },
             ),
@@ -77,7 +83,7 @@ class _TopSellingList extends State<TopSellingList> {
     );
   }
 
-  Widget hotSaleItem() {
+  Widget hotSaleItem(CommodityList commodityList,index) {
     return Container(
       width: 290.w,
       decoration: BoxDecoration(
@@ -91,7 +97,7 @@ class _TopSellingList extends State<TopSellingList> {
         crossAxisAlignment: CrossAxisAlignment.start,
         children: [
           Text(
-            "好喝榜",
+            commodityList?.typeName ?? "",
             style: TextStyle(
               fontSize: 14.sp,
               fontWeight: MyFontWeight.bold,
@@ -102,15 +108,23 @@ class _TopSellingList extends State<TopSellingList> {
           ),
           Expanded(child:  ListView.builder(
             padding: EdgeInsets.zero,
-            itemCount:6,
+            itemCount:widget.homeRank.commodityList[index].goodList.length>3?3:widget.homeRank.commodityList[index].goodList.length,
             scrollDirection: Axis.vertical,
             shrinkWrap: true,
             physics: BouncingScrollPhysics(),
             itemBuilder: (context, position) {
               return GestureDetector(
                 onTap: () {
+                  Navigator.of(context).pushNamed(
+                    '/router/store_order',
+                    arguments: {
+                      "id": widget.homeRank.commodityList[index].goodList[position].storeId,
+                      "tenant": widget.homeRank.commodityList[index].goodList[position].tenantCode,
+                      "storeName": ""
+                    },
+                  );
                 },
-                child: rankingItem(),
+                child: rankingItem(widget.homeRank.commodityList[index].goodList[position],position),
               );
             },
           ),)
@@ -119,7 +133,7 @@ class _TopSellingList extends State<TopSellingList> {
     );
   }
 
-  Widget rankingItem() {
+  Widget rankingItem(GoodList goodList,index) {
     return Container(
       margin: EdgeInsets.only(right:14.w,top: 12.h,bottom: 12.h),
       child: Row(
@@ -128,14 +142,18 @@ class _TopSellingList extends State<TopSellingList> {
         children: [
           Stack(
             children: [
-              Image.asset(
-                "assets/image/icon_story_td.webp",
-                width: 54.w,
-                height: 54,
+              MImage(
+                goodList.productImg ?? "",
                 fit: BoxFit.cover,
-              ),  Image.asset(
-                "assets/image/ranking1.webp",
-                width: 25.w,
+                radius: BorderRadius.circular(4),
+                width: 54,
+                height: 54,
+                errorSrc: "assets/image/default_2_1.webp",
+                fadeSrc: "assets/image/default_2_1.webp",
+              ),
+              Image.asset(
+               index == 0 ? "assets/image/ranking1.webp" :(index == 1 ? "assets/image/ranking2.webp": "assets/image/ranking3.webp"),
+                width: 25,
                 height: 25,
                 fit: BoxFit.cover,
               ),
@@ -151,7 +169,7 @@ class _TopSellingList extends State<TopSellingList> {
             children: [
               Padding(padding:EdgeInsets.only(top: 5.h,bottom: 8.h),
               child: Text(
-                "暴打柠檬茶",
+                goodList?.productName ?? "",
                 style: TextStyle(
                   fontSize: 13.sp,
                   fontWeight: MyFontWeight.regular,
@@ -162,7 +180,7 @@ class _TopSellingList extends State<TopSellingList> {
                 TextSpan(
                   children: [
                     TextSpan(
-                      text: "¥22.00",
+                      text: goodList?.price ?? "",
                       style: TextStyle(
                         fontSize: 12.sp,
                         fontWeight: MyFontWeight.semi_bold,
@@ -170,7 +188,7 @@ class _TopSellingList extends State<TopSellingList> {
                       ),
                     ),
                     TextSpan(
-                      text: "¥22.00",
+                      text: goodList?.applyPrice ?? "",
                       style: TextStyle(
                         fontSize:10.sp,
                         decoration: TextDecoration.lineThrough,
diff --git a/lib/home/points_mall_view/points_goods_title.dart b/lib/home/points_mall_view/points_goods_title.dart
index 22009eba..f1c57b3e 100644
--- a/lib/home/points_mall_view/points_goods_title.dart
+++ b/lib/home/points_mall_view/points_goods_title.dart
@@ -48,7 +48,7 @@ class _PointsGoodsTitle extends State<PointsGoodsTitle> {
         // ),
         ItemTitle(
           text: S.of(context).jifenshangcheng,
-          imgPath: "assets/image/icon_points_mall.webp",
+          // imgPath: "assets/image/icon_points_mall.webp",
           moreText: _itemText,
           moreType: 1,
           items: sortString
diff --git a/lib/home/points_mall_view/points_goods_view.dart b/lib/home/points_mall_view/points_goods_view.dart
index 2095b564..dce3faf7 100644
--- a/lib/home/points_mall_view/points_goods_view.dart
+++ b/lib/home/points_mall_view/points_goods_view.dart
@@ -25,9 +25,9 @@ class _PointGoods extends State<PointGoods> {
     if(goods?.onePrice!=null && goods?.onePrice!="0"){
       return S.of(context).jifen_(goods?.onePrice);
     }else if((goods?.onePrice == null || goods?.onePrice == "0") && ((goods?.price != null  && goods?.price != "0")  || (goods?.money != null  && goods?.money != "0.00"))){
-      return (goods?.price== "0"|| goods?.price == null ? "" : S.of(context).jifen_(goods?.price)) + (goods?.money== "0"|| goods?.money == null ? "" : " + ${goods?.money}元");
+      return (goods?.price== "0"|| goods?.price == null ? "" : S.of(context).jifen_(goods?.price)) + (goods?.money== "0"|| goods?.money == null ? "" : " + ${AppUtils.calculateDouble(double.tryParse(goods?.money) ?? 0)}元");
     }else if(goods.oneMoney != null && goods.oneMoney != "0.00"){
-      return "${goods.oneMoney}元";
+      return "${AppUtils.calculateDouble(double.tryParse(goods.oneMoney) ?? 0)}元";
     }
   }
 
@@ -52,7 +52,7 @@ class _PointGoods extends State<PointGoods> {
         mainAxisSpacing: 16.w,
         //子Widget宽高比例  0.59
         childAspectRatio:
-            200 / (295 / 2 + (295 / 2) * AppUtils.textScale(context)),
+            200 / (305 / 2 + (305 / 2) * AppUtils.textScale(context)),
       ),
       itemBuilder: (context, index) {
         return GestureDetector(
@@ -127,32 +127,34 @@ class _PointGoods extends State<PointGoods> {
                         children: [
                           Text(
                             pointPrice(goods),
+                            overflow: TextOverflow.ellipsis,
+                            maxLines: 2,
                             style: TextStyle(
                               color: Color(0xFFE5600D),
                               fontSize: 15.sp,
                               fontWeight: MyFontWeight.semi_bold,
                             ),
                           ),
-                          Row(
-                            children: [
-                              Image.asset(
-                                "assets/image/green_leaf.webp",
-                                fit: BoxFit.cover,
-                                width: 12,
-                                height: 12,
-                              ),
-                              Text(
-                                "x100",
-                                overflow: TextOverflow.ellipsis,
-                                maxLines: 2,
-                                style: TextStyle(
-                                  color: Color(0xFF32A060),
-                                  fontWeight: MyFontWeight.semi_bold,
-                                  fontSize: 15.sp,
-                                ),
-                              ),
-                            ],
-                          ),
+                          // Row(
+                          //   children: [
+                          //     Image.asset(
+                          //       "assets/image/green_leaf.webp",
+                          //       fit: BoxFit.cover,
+                          //       width: 12,
+                          //       height: 12,
+                          //     ),
+                          //     Text(
+                          //       "x100",
+                          //       overflow: TextOverflow.ellipsis,
+                          //       maxLines: 2,
+                          //       style: TextStyle(
+                          //         color: Color(0xFF32A060),
+                          //         fontWeight: MyFontWeight.semi_bold,
+                          //         fontSize: 15.sp,
+                          //       ),
+                          //     ),
+                          //   ],
+                          // ),
                         ],
                       ),
                       // Row(
diff --git a/lib/home/welfare_exchange.dart b/lib/home/welfare_exchange.dart
index 00329630..e6377c49 100644
--- a/lib/home/welfare_exchange.dart
+++ b/lib/home/welfare_exchange.dart
@@ -426,7 +426,7 @@ class _WelfareExchange extends State<WelfareExchange> {
           mainAxisSpacing: 16.w,
           //子Widget宽高比例  0.59
           childAspectRatio:
-          200 / (261 / 2 + (261 / 2) * AppUtils.textScale(context)),
+          200 / (285 / 2 + (285 / 2) * AppUtils.textScale(context)),
         ),
         itemBuilder: (context, index) {
           return GestureDetector(
@@ -505,6 +505,8 @@ class _WelfareExchange extends State<WelfareExchange> {
                       Spacer(),
                       Text(
                           pointPrice(goods),
+                        overflow: TextOverflow.ellipsis,
+                        maxLines: 2,
                         style: TextStyle(
                           color: Color(0xFFE5600D),
                           fontSize: 16.sp,
@@ -529,10 +531,11 @@ class _WelfareExchange extends State<WelfareExchange> {
     if(goods?.onePrice!=null && goods?.onePrice!="0"){
       return S.of(context).jifen_(goods?.onePrice);
     }else if((goods?.onePrice == null || goods?.onePrice == "0") && ((goods?.price != null  && goods?.price != "0")  || (goods?.money != null  && goods?.money != "0.00"))){
-      return (goods?.price== "0"|| goods?.price == null ? "" : S.of(context).jifen_(goods?.price)) + (goods?.money== "0"|| goods?.money == null ? "" : " + ${goods?.money}元");
+      return (goods?.price== "0"|| goods?.price == null ? "" : S.of(context).jifen_(goods?.price)) + (goods?.money== "0"|| goods?.money == null ? "" : " + ${AppUtils.calculateDouble(double.tryParse(goods?.money) ?? 0)}元");
     }else if(goods.oneMoney != null && goods.oneMoney != "0.00"){
-      return "${goods.oneMoney}元";
+      return "${AppUtils.calculateDouble(double.tryParse(goods.oneMoney) ?? 0)}元";
     }
   }
 
+
 }
diff --git a/lib/home/welfare_page.dart b/lib/home/welfare_page.dart
index 436462de..1335656a 100644
--- a/lib/home/welfare_page.dart
+++ b/lib/home/welfare_page.dart
@@ -41,6 +41,8 @@ class _WelfarePage extends State<WelfarePage> {
   bool orderDesc = true;
   int orderType = 1;
   int type = 1;
+  // int index = 0;
+
 
   @override
   void initState() {
@@ -372,8 +374,8 @@ class _WelfarePage extends State<WelfarePage> {
             ),
           )),
           Column(
-            mainAxisAlignment: MainAxisAlignment.center,
-            crossAxisAlignment: CrossAxisAlignment.center,
+            // mainAxisAlignment: MainAxisAlignment.center,
+            // crossAxisAlignment: CrossAxisAlignment.center,
             children: [
               Expanded(child: Container(
                 child:weekWidget(cop),
@@ -523,7 +525,7 @@ class _WelfarePage extends State<WelfarePage> {
               ),
               Text(
                 coupon != null
-                    ? double.tryParse("${cop.limitAmount}" ?? "0").toStringAsFixed(2)
+                    ? "${AppUtils.calculateDouble(double.tryParse(cop.limitAmount) ?? 0)}"
                     : "",
                 style: TextStyle(
                   fontSize: 24.sp,
@@ -601,7 +603,7 @@ class _WelfarePage extends State<WelfarePage> {
                 ),
               ),
             );
-    if(cop.status == 1)
+    if(cop.status == 1 || cop.status == 2)
       return Align(
               alignment: Alignment.centerRight,
               child: InkWell(
@@ -874,9 +876,9 @@ class _WelfarePage extends State<WelfarePage> {
     if(goodsPrice?.onePrice!=null && goodsPrice?.onePrice!="0"){
       return S.of(context).jifen_(goodsPrice?.onePrice);
     }else if((goodsPrice?.onePrice == null || goodsPrice?.onePrice == "0") && ((goodsPrice?.price != null  && goodsPrice?.price != "0")  || (goodsPrice?.money != null  && goodsPrice?.money != "0.00"))){
-      return (goodsPrice?.price== "0"|| goodsPrice?.price == null ? "" : S.of(context).jifen_(goodsPrice?.price)) + (goodsPrice?.money== "0"|| goodsPrice?.money == null ? "" : " + ${goodsPrice?.money}元");
+      return (goodsPrice?.price== "0"|| goodsPrice?.price == null ? "" : S.of(context).jifen_(goodsPrice?.price)) + (goodsPrice?.money== "0"|| goodsPrice?.money == null ? "" : " + ${AppUtils.calculateDouble(double.tryParse(goodsPrice?.money) ?? 0)}元");
     }else if(goodsPrice.oneMoney != null && goodsPrice.oneMoney != "0.00"){
-      return "${goodsPrice.oneMoney}元";
+      return "${AppUtils.calculateDouble(double.tryParse(goodsPrice.oneMoney) ?? 0)}元";
     }
   }
 
diff --git a/lib/integral_store/integral_store_details_page.dart b/lib/integral_store/integral_store_details_page.dart
index 18f2d6dc..e722f7b7 100644
--- a/lib/integral_store/integral_store_details_page.dart
+++ b/lib/integral_store/integral_store_details_page.dart
@@ -11,6 +11,7 @@ import 'package:huixiang/retrofit/data/base_data.dart';
 import 'package:huixiang/retrofit/data/goods.dart';
 import 'package:huixiang/retrofit/data/user_info.dart';
 import 'package:huixiang/retrofit/retrofit_api.dart';
+import 'package:huixiang/utils/flutter_utils.dart';
 import 'package:huixiang/utils/font_weight.dart';
 import 'package:huixiang/view_widget/classic_header.dart';
 import 'package:huixiang/view_widget/custom_image.dart';
@@ -84,9 +85,9 @@ class _IntegralStoreDetailsPage extends State<IntegralStoreDetailsPage> {
     if(goods?.onePrice!=null && goods?.onePrice!="0"){
       return S.of(context).jifen_(goods?.onePrice);
     }else if((goods?.onePrice == null || goods?.onePrice == "0") && ((goods?.price != null  && goods?.price != "0")  || (goods?.money != null  && goods?.money != "0.00"))){
-      return (goods?.price== "0"|| goods?.price == null ? "" : S.of(context).jifen_(goods?.price)) + (goods?.money== "0"|| goods?.money == null ? "" : " + ${goods?.money}元");
+      return (goods?.price== "0"|| goods?.price == null ? "" : S.of(context).jifen_(goods?.price)) + (goods?.money== "0"|| goods?.money == null ? "" : " + ${AppUtils.calculateDouble(double.tryParse(goods?.money) ?? 0)}元");
     }else if(goods.oneMoney != null && goods.oneMoney != "0.00"){
-      return "${goods.oneMoney}元";
+      return "${AppUtils.calculateDouble(double.tryParse(goods?.oneMoney) ?? 0)}元";
     }
   }
 
diff --git a/lib/mine/mine_page.dart b/lib/mine/mine_page.dart
index 4ee6bcc9..21a52263 100644
--- a/lib/mine/mine_page.dart
+++ b/lib/mine/mine_page.dart
@@ -18,7 +18,6 @@ import 'package:huixiang/utils/font_weight.dart';
 import 'package:huixiang/view_widget/classic_header.dart';
 import 'package:huixiang/view_widget/login_tips_dialog.dart';
 import 'package:huixiang/view_widget/mine_vip_entry.dart';
-import 'package:huixiang/view_widget/mine_vip_view.dart';
 import 'package:pull_to_refresh/pull_to_refresh.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:dio/dio.dart';
@@ -26,7 +25,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 
 import 'mine_view/mine_item.dart';
 import 'mine_view/mine_view.dart';
-import 'mine_view/wallet_coupon_view.dart';
 
 class MinePage extends StatefulWidget {
 
@@ -247,7 +245,7 @@ class MinePageState extends State<MinePage> with AutomaticKeepAliveClientMixin {
                                 ),
                               ),
                               Container(
-                                margin: EdgeInsets.only(top: 255),
+                                margin: EdgeInsets.only(top: 265),
                                 child: Column(
                                   children: [
                                     ///我的订单
diff --git a/lib/mine/mine_view/mine_item.dart b/lib/mine/mine_view/mine_item.dart
index f82b75de..9df96ca2 100644
--- a/lib/mine/mine_view/mine_item.dart
+++ b/lib/mine/mine_view/mine_item.dart
@@ -122,7 +122,7 @@ class _MineItem extends State<MineItem> {
               //     "assets/image/icon_location_address.webp",
               //   ),
               // ),),
-              // ///联系客服
+              // ///
               // Expanded(child:  InkWell(
               //   onTap: () {
               //     showCallMobile();
@@ -394,9 +394,9 @@ class _MineItem extends State<MineItem> {
             title: Text(S.of(context).bodadianhua),
             actions: [
                 CupertinoActionSheetAction(
-                  child: Text("15392949097"),
+                  child: Text("19947603193"),
                   onPressed: () {
-                    callMobile("15392949097");
+                    callMobile("19947603193");
                     Navigator.of(context).pop();
                   },
                   isDefaultAction: true,
diff --git a/lib/retrofit/data/home_rank.dart b/lib/retrofit/data/home_rank.dart
new file mode 100644
index 00000000..49f2a3c5
--- /dev/null
+++ b/lib/retrofit/data/home_rank.dart
@@ -0,0 +1,1080 @@
+/// CommodityList : [{"goodList":[{"productImg":"https://pos.upload.gznl.top/1175/2022/04/fc9dfd1f-c5b9-4a23-95f7-9ddcadb33410.jpg","productSkuVOList":[{"ticketStyle":"","productId":"1519870512681975808","isDelete":0,"ticketDays":"0","setMeal":"","updateUser":"1333246101196636160","skuPrice":"0.01","skuStock":10,"weight":0,"updateTime":"2022-04-29 10:45:43","ticketType":"","sort":50,"storeId":"1511585212109160448","version":0,"deliveries":0,"volume":0,"autoRenewSkuStock":0,"skuNameStr":"","createTime":"2022-04-29 10:45:43","createUser":"1333246101196636160","id":"1519870513038491648","applyPrice":"0.00","skuAttrList":[{"attrValueId":"1519870512921051136","isDelete":0,"updateUser":"1333246101196636160","updateTime":"2022-04-29 10:45:43","attrId":"1519870512837165056","createTime":"2022-04-29 10:45:43","createUser":"1333246101196636160","id":"1519870513097211904","skuId":"1519870513038491648"}],"skuCode":"P202204291045422"}],"thumbnailImg":"","productName":"原味奶茶","posShow":true,"price":"0.01","sellCount":5,"details":"","id":"1519870512681975808","applyPrice":"0.00","stock":10,"status":1,"info":""}],"typeName":"好吃榜"}]
+/// CommodityZone : [{"productImg":"https://pos.upload.gznl.top/1174/2021/12/7eeee579-f536-4481-8953-12e423f7edee.jpg","productSkuVOList":[{"ticketStyle":"","productId":"1472767814229032960","isDelete":0,"ticketDays":"0","setMeal":"","updateUser":"1328618782859460608","skuPrice":"13.00","skuStock":864,"weight":0,"updateTime":"2021-12-20 11:16:24","ticketType":"","sort":50,"storeId":"1328618782985289728","version":0,"deliveries":0,"volume":0,"autoRenewSkuStock":0,"skuNameStr":"","createTime":"2021-12-20 11:16:24","createUser":"1328618782859460608","id":"1472767814275170304","applyPrice":"13.00","skuAttrList":[{"attrValueId":"1472767814262587392","isDelete":0,"updateUser":"1328618782859460608","updateTime":"2021-12-20 11:16:24","attrId":"1472767814254198784","createTime":"2021-12-20 11:16:24","createUser":"1328618782859460608","id":"1472767814287753216","skuId":"1472767814275170304"}],"skuCode":"P202112201116242"}],"thumbnailImg":"","productName":"红薯魔方吐司","posShow":true,"price":"13.00","sellCount":135,"details":"","id":"1472767814229032960","applyPrice":"13.00","stock":865,"status":1,"info":""}]
+/// CommodityListImg : "https://pos.upload.gznl.top/0000/2022/06/86331f31-cae1-4096-8773-561524d71c18.png"
+
+class HomeRank {
+  HomeRank({
+      List<CommodityList> commodityList, 
+      List<CommodityZone> commodityZone, 
+      String commodityListImg,}){
+    _commodityList = commodityList;
+    _commodityZone = commodityZone;
+    _commodityListImg = commodityListImg;
+}
+
+  HomeRank.fromJson(dynamic json) {
+    if (json['CommodityList'] != null) {
+      _commodityList = [];
+      json['CommodityList'].forEach((v) {
+        _commodityList.add(CommodityList.fromJson(v));
+      });
+    }
+    if (json['CommodityZone'] != null) {
+      _commodityZone = [];
+      json['CommodityZone'].forEach((v) {
+        _commodityZone.add(CommodityZone.fromJson(v));
+      });
+    }
+    _commodityListImg = json['CommodityListImg'];
+  }
+  List<CommodityList> _commodityList;
+  List<CommodityZone> _commodityZone;
+  String _commodityListImg;
+HomeRank copyWith({  List<CommodityList> commodityList,
+  List<CommodityZone> commodityZone,
+  String commodityListImg,
+}) => HomeRank(  commodityList: commodityList ?? _commodityList,
+  commodityZone: commodityZone ?? _commodityZone,
+  commodityListImg: commodityListImg ?? _commodityListImg,
+);
+  List<CommodityList> get commodityList => _commodityList;
+  List<CommodityZone> get commodityZone => _commodityZone;
+  String get commodityListImg => _commodityListImg;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    if (_commodityList != null) {
+      map['CommodityList'] = _commodityList.map((v) => v.toJson()).toList();
+    }
+    if (_commodityZone != null) {
+      map['CommodityZone'] = _commodityZone.map((v) => v.toJson()).toList();
+    }
+    map['CommodityListImg'] = _commodityListImg;
+    return map;
+  }
+
+}
+
+/// productImg : "https://pos.upload.gznl.top/1174/2021/12/7eeee579-f536-4481-8953-12e423f7edee.jpg"
+/// productSkuVOList : [{"ticketStyle":"","productId":"1472767814229032960","isDelete":0,"ticketDays":"0","setMeal":"","updateUser":"1328618782859460608","skuPrice":"13.00","skuStock":864,"weight":0,"updateTime":"2021-12-20 11:16:24","ticketType":"","sort":50,"storeId":"1328618782985289728","version":0,"deliveries":0,"volume":0,"autoRenewSkuStock":0,"skuNameStr":"","createTime":"2021-12-20 11:16:24","createUser":"1328618782859460608","id":"1472767814275170304","applyPrice":"13.00","skuAttrList":[{"attrValueId":"1472767814262587392","isDelete":0,"updateUser":"1328618782859460608","updateTime":"2021-12-20 11:16:24","attrId":"1472767814254198784","createTime":"2021-12-20 11:16:24","createUser":"1328618782859460608","id":"1472767814287753216","skuId":"1472767814275170304"}],"skuCode":"P202112201116242"}]
+/// thumbnailImg : ""
+/// productName : "红薯魔方吐司"
+/// posShow : true
+/// price : "13.00"
+/// sellCount : 135
+/// details : ""
+/// id : "1472767814229032960"
+/// applyPrice : "13.00"
+/// stock : 865
+/// status : 1
+/// info : ""
+
+class CommodityZone {
+  CommodityZone({
+      String productImg, 
+      List<ProductSkuVoList> productSkuVOList, 
+      String thumbnailImg,
+      String tenantCode,
+      String storeId,
+      String productName, 
+      bool posShow, 
+      String price, 
+      int sellCount, 
+      String details, 
+      String id, 
+      String applyPrice, 
+      int stock, 
+      int status, 
+      String info,}){
+    _productImg = productImg;
+    _productSkuVOList = productSkuVOList;
+    _thumbnailImg = thumbnailImg;
+    _tenantCode = tenantCode;
+    _storeId = storeId;
+    _productName = productName;
+    _posShow = posShow;
+    _price = price;
+    _sellCount = sellCount;
+    _details = details;
+    _id = id;
+    _applyPrice = applyPrice;
+    _stock = stock;
+    _status = status;
+    _info = info;
+}
+
+  CommodityZone.fromJson(dynamic json) {
+    _productImg = json['productImg'];
+    if (json['productSkuVOList'] != null) {
+      _productSkuVOList = [];
+      json['productSkuVOList'].forEach((v) {
+        _productSkuVOList.add(ProductSkuVoList.fromJson(v));
+      });
+    }
+    _thumbnailImg = json['thumbnailImg'];
+    _tenantCode = json['tenantCode'];
+    _storeId = json['storeId'];
+    _productName = json['productName'];
+    _posShow = json['posShow'];
+    _price = json['price'];
+    _sellCount = json['sellCount'];
+    _details = json['details'];
+    _id = json['id'];
+    _applyPrice = json['applyPrice'];
+    _stock = json['stock'];
+    _status = json['status'];
+    _info = json['info'];
+  }
+  String _productImg;
+  List<ProductSkuVoList> _productSkuVOList;
+  String _thumbnailImg;
+  String _tenantCode;
+  String _storeId;
+  String _productName;
+  bool _posShow;
+  String _price;
+  int _sellCount;
+  String _details;
+  String _id;
+  String _applyPrice;
+  int _stock;
+  int _status;
+  String _info;
+CommodityZone copyWith({  String productImg,
+  List<ProductSkuVoList> productSkuVOList,
+  String thumbnailImg,
+  String tenantCode,
+  String storeId,
+  String productName,
+  bool posShow,
+  String price,
+  int sellCount,
+  String details,
+  String id,
+  String applyPrice,
+  int stock,
+  int status,
+  String info,
+}) => CommodityZone(  productImg: productImg ?? _productImg,
+  productSkuVOList: productSkuVOList ?? _productSkuVOList,
+  thumbnailImg: thumbnailImg ?? _thumbnailImg,
+  tenantCode: tenantCode ?? _tenantCode,
+  storeId: storeId ?? _storeId,
+  productName: productName ?? _productName,
+  posShow: posShow ?? _posShow,
+  price: price ?? _price,
+  sellCount: sellCount ?? _sellCount,
+  details: details ?? _details,
+  id: id ?? _id,
+  applyPrice: applyPrice ?? _applyPrice,
+  stock: stock ?? _stock,
+  status: status ?? _status,
+  info: info ?? _info,
+);
+  String get productImg => _productImg;
+  List<ProductSkuVoList> get productSkuVOList => _productSkuVOList;
+  String get thumbnailImg => _thumbnailImg;
+  String get tenantCode => _tenantCode;
+  String get storeId => _storeId;
+  String get productName => _productName;
+  bool get posShow => _posShow;
+  String get price => _price;
+  int get sellCount => _sellCount;
+  String get details => _details;
+  String get id => _id;
+  String get applyPrice => _applyPrice;
+  int get stock => _stock;
+  int get status => _status;
+  String get info => _info;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    map['productImg'] = _productImg;
+    if (_productSkuVOList != null) {
+      map['productSkuVOList'] = _productSkuVOList.map((v) => v.toJson()).toList();
+    }
+    map['thumbnailImg'] = _thumbnailImg;
+    map['tenantCode'] = _tenantCode;
+    map['storeId'] = _storeId;
+    map['productName'] = _productName;
+    map['posShow'] = _posShow;
+    map['price'] = _price;
+    map['sellCount'] = _sellCount;
+    map['details'] = _details;
+    map['id'] = _id;
+    map['applyPrice'] = _applyPrice;
+    map['stock'] = _stock;
+    map['status'] = _status;
+    map['info'] = _info;
+    return map;
+  }
+
+}
+
+/// ticketStyle : ""
+/// productId : "1472767814229032960"
+/// isDelete : 0
+/// ticketDays : "0"
+/// setMeal : ""
+/// updateUser : "1328618782859460608"
+/// skuPrice : "13.00"
+/// skuStock : 864
+/// weight : 0
+/// updateTime : "2021-12-20 11:16:24"
+/// ticketType : ""
+/// sort : 50
+/// storeId : "1328618782985289728"
+/// version : 0
+/// deliveries : 0
+/// volume : 0
+/// autoRenewSkuStock : 0
+/// skuNameStr : ""
+/// createTime : "2021-12-20 11:16:24"
+/// createUser : "1328618782859460608"
+/// id : "1472767814275170304"
+/// applyPrice : "13.00"
+/// skuAttrList : [{"attrValueId":"1472767814262587392","isDelete":0,"updateUser":"1328618782859460608","updateTime":"2021-12-20 11:16:24","attrId":"1472767814254198784","createTime":"2021-12-20 11:16:24","createUser":"1328618782859460608","id":"1472767814287753216","skuId":"1472767814275170304"}]
+/// skuCode : "P202112201116242"
+
+class ProductSkuVoList {
+  ProductSkuVoList({
+      String ticketStyle, 
+      String productId, 
+      int isDelete, 
+      String ticketDays, 
+      String setMeal, 
+      String updateUser, 
+      String skuPrice, 
+      int skuStock, 
+      int weight, 
+      String updateTime, 
+      String ticketType, 
+      int sort,
+      int version, 
+      int deliveries, 
+      int volume, 
+      int autoRenewSkuStock, 
+      String skuNameStr, 
+      String createTime, 
+      String createUser, 
+      String id, 
+      String applyPrice, 
+      List<SkuAttrList> skuAttrList, 
+      String skuCode,}){
+    _ticketStyle = ticketStyle;
+    _productId = productId;
+    _isDelete = isDelete;
+    _ticketDays = ticketDays;
+    _setMeal = setMeal;
+    _updateUser = updateUser;
+    _skuPrice = skuPrice;
+    _skuStock = skuStock;
+    _weight = weight;
+    _updateTime = updateTime;
+    _ticketType = ticketType;
+    _sort = sort;
+    // _storeIds = storeIds;
+    _version = version;
+    _deliveries = deliveries;
+    _volume = volume;
+    _autoRenewSkuStock = autoRenewSkuStock;
+    _skuNameStr = skuNameStr;
+    _createTime = createTime;
+    _createUser = createUser;
+    _id = id;
+    _applyPrice = applyPrice;
+    _skuAttrList = skuAttrList;
+    _skuCode = skuCode;
+}
+
+  ProductSkuVoList.fromJson(dynamic json) {
+    _ticketStyle = json['ticketStyle'];
+    _productId = json['productId'];
+    _isDelete = json['isDelete'];
+    _ticketDays = json['ticketDays'];
+    _setMeal = json['setMeal'];
+    _updateUser = json['updateUser'];
+    _skuPrice = json['skuPrice'];
+    _skuStock = json['skuStock'];
+    _weight = json['weight'];
+    _updateTime = json['updateTime'];
+    _ticketType = json['ticketType'];
+    _sort = json['sort'];
+    // _storeIds = json['storeIds'];
+    _version = json['version'];
+    _deliveries = json['deliveries'];
+    _volume = json['volume'];
+    _autoRenewSkuStock = json['autoRenewSkuStock'];
+    _skuNameStr = json['skuNameStr'];
+    _createTime = json['createTime'];
+    _createUser = json['createUser'];
+    _id = json['id'];
+    _applyPrice = json['applyPrice'];
+    if (json['skuAttrList'] != null) {
+      _skuAttrList = [];
+      json['skuAttrList'].forEach((v) {
+        _skuAttrList.add(SkuAttrList.fromJson(v));
+      });
+    }
+    _skuCode = json['skuCode'];
+  }
+  String _ticketStyle;
+  String _productId;
+  int _isDelete;
+  String _ticketDays;
+  String _setMeal;
+  String _updateUser;
+  String _skuPrice;
+  int _skuStock;
+  int _weight;
+  String _updateTime;
+  String _ticketType;
+  int _sort;
+  // String _storeIds;
+  int _version;
+  int _deliveries;
+  int _volume;
+  int _autoRenewSkuStock;
+  String _skuNameStr;
+  String _createTime;
+  String _createUser;
+  String _id;
+  String _applyPrice;
+  List<SkuAttrList> _skuAttrList;
+  String _skuCode;
+ProductSkuVoList copyWith({  String ticketStyle,
+  String productId,
+  int isDelete,
+  String ticketDays,
+  String setMeal,
+  String updateUser,
+  String skuPrice,
+  int skuStock,
+  int weight,
+  String updateTime,
+  String ticketType,
+  int sort,
+  // String storeIds,
+  int version,
+  int deliveries,
+  int volume,
+  int autoRenewSkuStock,
+  String skuNameStr,
+  String createTime,
+  String createUser,
+  String id,
+  String applyPrice,
+  List<SkuAttrList> skuAttrList,
+  String skuCode,
+}) => ProductSkuVoList(  ticketStyle: ticketStyle ?? _ticketStyle,
+  productId: productId ?? _productId,
+  isDelete: isDelete ?? _isDelete,
+  ticketDays: ticketDays ?? _ticketDays,
+  setMeal: setMeal ?? _setMeal,
+  updateUser: updateUser ?? _updateUser,
+  skuPrice: skuPrice ?? _skuPrice,
+  skuStock: skuStock ?? _skuStock,
+  weight: weight ?? _weight,
+  updateTime: updateTime ?? _updateTime,
+  ticketType: ticketType ?? _ticketType,
+  sort: sort ?? _sort,
+  // storeId: storeId ?? _storeIds,
+  version: version ?? _version,
+  deliveries: deliveries ?? _deliveries,
+  volume: volume ?? _volume,
+  autoRenewSkuStock: autoRenewSkuStock ?? _autoRenewSkuStock,
+  skuNameStr: skuNameStr ?? _skuNameStr,
+  createTime: createTime ?? _createTime,
+  createUser: createUser ?? _createUser,
+  id: id ?? _id,
+  applyPrice: applyPrice ?? _applyPrice,
+  skuAttrList: skuAttrList ?? _skuAttrList,
+  skuCode: skuCode ?? _skuCode,
+);
+  String get ticketStyle => _ticketStyle;
+  String get productId => _productId;
+  int get isDelete => _isDelete;
+  String get ticketDays => _ticketDays;
+  String get setMeal => _setMeal;
+  String get updateUser => _updateUser;
+  String get skuPrice => _skuPrice;
+  int get skuStock => _skuStock;
+  int get weight => _weight;
+  String get updateTime => _updateTime;
+  String get ticketType => _ticketType;
+  int get sort => _sort;
+  // String get storeIds => _storeIds;
+  int get version => _version;
+  int get deliveries => _deliveries;
+  int get volume => _volume;
+  int get autoRenewSkuStock => _autoRenewSkuStock;
+  String get skuNameStr => _skuNameStr;
+  String get createTime => _createTime;
+  String get createUser => _createUser;
+  String get id => _id;
+  String get applyPrice => _applyPrice;
+  List<SkuAttrList> get skuAttrList => _skuAttrList;
+  String get skuCode => _skuCode;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    map['ticketStyle'] = _ticketStyle;
+    map['productId'] = _productId;
+    map['isDelete'] = _isDelete;
+    map['ticketDays'] = _ticketDays;
+    map['setMeal'] = _setMeal;
+    map['updateUser'] = _updateUser;
+    map['skuPrice'] = _skuPrice;
+    map['skuStock'] = _skuStock;
+    map['weight'] = _weight;
+    map['updateTime'] = _updateTime;
+    map['ticketType'] = _ticketType;
+    map['sort'] = _sort;
+    // map['storeIds'] = _storeIds;
+    map['version'] = _version;
+    map['deliveries'] = _deliveries;
+    map['volume'] = _volume;
+    map['autoRenewSkuStock'] = _autoRenewSkuStock;
+    map['skuNameStr'] = _skuNameStr;
+    map['createTime'] = _createTime;
+    map['createUser'] = _createUser;
+    map['id'] = _id;
+    map['applyPrice'] = _applyPrice;
+    if (_skuAttrList != null) {
+      map['skuAttrList'] = _skuAttrList.map((v) => v.toJson()).toList();
+    }
+    map['skuCode'] = _skuCode;
+    return map;
+  }
+
+}
+
+/// attrValueId : "1472767814262587392"
+/// isDelete : 0
+/// updateUser : "1328618782859460608"
+/// updateTime : "2021-12-20 11:16:24"
+/// attrId : "1472767814254198784"
+/// createTime : "2021-12-20 11:16:24"
+/// createUser : "1328618782859460608"
+/// id : "1472767814287753216"
+/// skuId : "1472767814275170304"
+
+class SkuAttrList {
+  SkuAttrList({
+      String attrValueId, 
+      int isDelete, 
+      String updateUser, 
+      String updateTime, 
+      String attrId, 
+      String createTime, 
+      String createUser, 
+      String id, 
+      String skuId,}){
+    _attrValueId = attrValueId;
+    _isDelete = isDelete;
+    _updateUser = updateUser;
+    _updateTime = updateTime;
+    _attrId = attrId;
+    _createTime = createTime;
+    _createUser = createUser;
+    _id = id;
+    _skuId = skuId;
+}
+
+  SkuAttrList.fromJson(dynamic json) {
+    _attrValueId = json['attrValueId'];
+    _isDelete = json['isDelete'];
+    _updateUser = json['updateUser'];
+    _updateTime = json['updateTime'];
+    _attrId = json['attrId'];
+    _createTime = json['createTime'];
+    _createUser = json['createUser'];
+    _id = json['id'];
+    _skuId = json['skuId'];
+  }
+  String _attrValueId;
+  int _isDelete;
+  String _updateUser;
+  String _updateTime;
+  String _attrId;
+  String _createTime;
+  String _createUser;
+  String _id;
+  String _skuId;
+SkuAttrList copyWith({  String attrValueId,
+  int isDelete,
+  String updateUser,
+  String updateTime,
+  String attrId,
+  String createTime,
+  String createUser,
+  String id,
+  String skuId,
+}) => SkuAttrList(  attrValueId: attrValueId ?? _attrValueId,
+  isDelete: isDelete ?? _isDelete,
+  updateUser: updateUser ?? _updateUser,
+  updateTime: updateTime ?? _updateTime,
+  attrId: attrId ?? _attrId,
+  createTime: createTime ?? _createTime,
+  createUser: createUser ?? _createUser,
+  id: id ?? _id,
+  skuId: skuId ?? _skuId,
+);
+  String get attrValueId => _attrValueId;
+  int get isDelete => _isDelete;
+  String get updateUser => _updateUser;
+  String get updateTime => _updateTime;
+  String get attrId => _attrId;
+  String get createTime => _createTime;
+  String get createUser => _createUser;
+  String get id => _id;
+  String get skuId => _skuId;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    map['attrValueId'] = _attrValueId;
+    map['isDelete'] = _isDelete;
+    map['updateUser'] = _updateUser;
+    map['updateTime'] = _updateTime;
+    map['attrId'] = _attrId;
+    map['createTime'] = _createTime;
+    map['createUser'] = _createUser;
+    map['id'] = _id;
+    map['skuId'] = _skuId;
+    return map;
+  }
+
+}
+
+/// goodList : [{"productImg":"https://pos.upload.gznl.top/1175/2022/04/fc9dfd1f-c5b9-4a23-95f7-9ddcadb33410.jpg","productSkuVOList":[{"ticketStyle":"","productId":"1519870512681975808","isDelete":0,"ticketDays":"0","setMeal":"","updateUser":"1333246101196636160","skuPrice":"0.01","skuStock":10,"weight":0,"updateTime":"2022-04-29 10:45:43","ticketType":"","sort":50,"storeId":"1511585212109160448","version":0,"deliveries":0,"volume":0,"autoRenewSkuStock":0,"skuNameStr":"","createTime":"2022-04-29 10:45:43","createUser":"1333246101196636160","id":"1519870513038491648","applyPrice":"0.00","skuAttrList":[{"attrValueId":"1519870512921051136","isDelete":0,"updateUser":"1333246101196636160","updateTime":"2022-04-29 10:45:43","attrId":"1519870512837165056","createTime":"2022-04-29 10:45:43","createUser":"1333246101196636160","id":"1519870513097211904","skuId":"1519870513038491648"}],"skuCode":"P202204291045422"}],"thumbnailImg":"","productName":"原味奶茶","posShow":true,"price":"0.01","sellCount":5,"details":"","id":"1519870512681975808","applyPrice":"0.00","stock":10,"status":1,"info":""}]
+/// typeName : "好吃榜"
+
+class CommodityList {
+  CommodityList({
+      List<GoodList> goodList, 
+      String typeName,}){
+    _goodList = goodList;
+    _typeName = typeName;
+}
+
+  CommodityList.fromJson(dynamic json) {
+    if (json['goodList'] != null) {
+      _goodList = [];
+      json['goodList'].forEach((v) {
+        _goodList.add(GoodList.fromJson(v));
+      });
+    }
+    _typeName = json['typeName'];
+  }
+  List<GoodList> _goodList;
+  String _typeName;
+CommodityList copyWith({  List<GoodList> goodList,
+  String typeName,
+}) => CommodityList(  goodList: goodList ?? _goodList,
+  typeName: typeName ?? _typeName,
+);
+  List<GoodList> get goodList => _goodList;
+  String get typeName => _typeName;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    if (_goodList != null) {
+      map['goodList'] = _goodList.map((v) => v.toJson()).toList();
+    }
+    map['typeName'] = _typeName;
+    return map;
+  }
+
+}
+
+/// productImg : "https://pos.upload.gznl.top/1175/2022/04/fc9dfd1f-c5b9-4a23-95f7-9ddcadb33410.jpg"
+/// productSkuVOList : [{"ticketStyle":"","productId":"1519870512681975808","isDelete":0,"ticketDays":"0","setMeal":"","updateUser":"1333246101196636160","skuPrice":"0.01","skuStock":10,"weight":0,"updateTime":"2022-04-29 10:45:43","ticketType":"","sort":50,"storeId":"1511585212109160448","version":0,"deliveries":0,"volume":0,"autoRenewSkuStock":0,"skuNameStr":"","createTime":"2022-04-29 10:45:43","createUser":"1333246101196636160","id":"1519870513038491648","applyPrice":"0.00","skuAttrList":[{"attrValueId":"1519870512921051136","isDelete":0,"updateUser":"1333246101196636160","updateTime":"2022-04-29 10:45:43","attrId":"1519870512837165056","createTime":"2022-04-29 10:45:43","createUser":"1333246101196636160","id":"1519870513097211904","skuId":"1519870513038491648"}],"skuCode":"P202204291045422"}]
+/// thumbnailImg : ""
+/// productName : "原味奶茶"
+/// posShow : true
+/// price : "0.01"
+/// sellCount : 5
+/// details : ""
+/// id : "1519870512681975808"
+/// applyPrice : "0.00"
+/// stock : 10
+/// status : 1
+/// info : ""
+
+class GoodList {
+  GoodList({
+      String productImg, 
+      List<GoodProductSkuVOList> goodProductSkuVOList,
+      String thumbnailImg,
+      String tenantCode,
+      String storeId,
+      String productName, 
+      bool posShow, 
+      String price, 
+      int sellCount, 
+      String details, 
+      String id, 
+      String applyPrice, 
+      int stock, 
+      int status, 
+      String info,}){
+    _productImg = productImg;
+    _goodProductSkuVOList = goodProductSkuVOList;
+    _thumbnailImg = thumbnailImg;
+    _tenantCode = tenantCode;
+    _storeId = storeId;
+    _productName = productName;
+    _posShow = posShow;
+    _price = price;
+    _sellCount = sellCount;
+    _details = details;
+    _id = id;
+    _applyPrice = applyPrice;
+    _stock = stock;
+    _status = status;
+    _info = info;
+}
+
+  GoodList.fromJson(dynamic json) {
+    _productImg = json['productImg'];
+    if (json['productSkuVOList'] != null) {
+      _goodProductSkuVOList = [];
+      json['productSkuVOList'].forEach((v) {
+        _goodProductSkuVOList.add(GoodProductSkuVOList.fromJson(v));
+      });
+    }
+    _thumbnailImg = json['thumbnailImg'];
+    _tenantCode = json['tenantCode'];
+    _storeId = json['storeId'];
+    _productName = json['productName'];
+    _posShow = json['posShow'];
+    _price = json['price'];
+    _sellCount = json['sellCount'];
+    _details = json['details'];
+    _id = json['id'];
+    _applyPrice = json['applyPrice'];
+    _stock = json['stock'];
+    _status = json['status'];
+    _info = json['info'];
+  }
+  String _productImg;
+  List<GoodProductSkuVOList> _goodProductSkuVOList;
+  String _thumbnailImg;
+  String _tenantCode;
+  String _storeId;
+  String _productName;
+  bool _posShow;
+  String _price;
+  int _sellCount;
+  String _details;
+  String _id;
+  String _applyPrice;
+  int _stock;
+  int _status;
+  String _info;
+GoodList copyWith({  String productImg,
+  List<ProductSkuVoList> goodProductSkuVOList,
+  String thumbnailImg,
+  String tenantCode,
+  String storeId,
+  String productName,
+  bool posShow,
+  String price,
+  int sellCount,
+  String details,
+  String id,
+  String applyPrice,
+  int stock,
+  int status,
+  String info,
+}) => GoodList(  productImg: productImg ?? _productImg,
+  goodProductSkuVOList: goodProductSkuVOList ?? _goodProductSkuVOList,
+  thumbnailImg: thumbnailImg ?? _thumbnailImg,
+  tenantCode: tenantCode ?? _tenantCode,
+  storeId: storeId ?? _storeId,
+  productName: productName ?? _productName,
+  posShow: posShow ?? _posShow,
+  price: price ?? _price,
+  sellCount: sellCount ?? _sellCount,
+  details: details ?? _details,
+  id: id ?? _id,
+  applyPrice: applyPrice ?? _applyPrice,
+  stock: stock ?? _stock,
+  status: status ?? _status,
+  info: info ?? _info,
+);
+  String get productImg => _productImg;
+  List<GoodProductSkuVOList> get goodProductSkuVOList => _goodProductSkuVOList;
+  String get thumbnailImg => _thumbnailImg;
+  String get tenantCode => _tenantCode;
+  String get storeId => _storeId;
+  String get productName => _productName;
+  bool get posShow => _posShow;
+  String get price => _price;
+  int get sellCount => _sellCount;
+  String get details => _details;
+  String get id => _id;
+  String get applyPrice => _applyPrice;
+  int get stock => _stock;
+  int get status => _status;
+  String get info => _info;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    map['productImg'] = _productImg;
+    if (_goodProductSkuVOList != null) {
+      map['goodProductSkuVOList'] = _goodProductSkuVOList.map((v) => v.toJson()).toList();
+    }
+    map['thumbnailImg'] = _thumbnailImg;
+    map['tenantCode'] = _tenantCode;
+    map['storeId'] = _storeId;
+    map['productName'] = _productName;
+    map['posShow'] = _posShow;
+    map['price'] = _price;
+    map['sellCount'] = _sellCount;
+    map['details'] = _details;
+    map['id'] = _id;
+    map['applyPrice'] = _applyPrice;
+    map['stock'] = _stock;
+    map['status'] = _status;
+    map['info'] = _info;
+    return map;
+  }
+
+}
+
+/// ticketStyle : ""
+/// productId : "1519870512681975808"
+/// isDelete : 0
+/// ticketDays : "0"
+/// setMeal : ""
+/// updateUser : "1333246101196636160"
+/// skuPrice : "0.01"
+/// skuStock : 10
+/// weight : 0
+/// updateTime : "2022-04-29 10:45:43"
+/// ticketType : ""
+/// sort : 50
+/// storeId : "1511585212109160448"
+/// version : 0
+/// deliveries : 0
+/// volume : 0
+/// autoRenewSkuStock : 0
+/// skuNameStr : ""
+/// createTime : "2022-04-29 10:45:43"
+/// createUser : "1333246101196636160"
+/// id : "1519870513038491648"
+/// applyPrice : "0.00"
+/// skuAttrList : [{"attrValueId":"1519870512921051136","isDelete":0,"updateUser":"1333246101196636160","updateTime":"2022-04-29 10:45:43","attrId":"1519870512837165056","createTime":"2022-04-29 10:45:43","createUser":"1333246101196636160","id":"1519870513097211904","skuId":"1519870513038491648"}]
+/// skuCode : "P202204291045422"
+
+class GoodProductSkuVOList {
+  GoodProductSkuVOList({
+      String ticketStyle, 
+      String productId, 
+      int isDelete, 
+      String ticketDays, 
+      String setMeal, 
+      String updateUser, 
+      String skuPrice, 
+      int skuStock, 
+      int weight, 
+      String updateTime, 
+      String ticketType, 
+      int sort, 
+      // String storeIds,
+      int version, 
+      int deliveries, 
+      int volume, 
+      int autoRenewSkuStock, 
+      String skuNameStr, 
+      String createTime, 
+      String createUser, 
+      String id, 
+      String applyPrice, 
+      List<GoodSkuAttrList> goodSkuAttrList,
+      String skuCode,}){
+    _ticketStyle = ticketStyle;
+    _productId = productId;
+    _isDelete = isDelete;
+    _ticketDays = ticketDays;
+    _setMeal = setMeal;
+    _updateUser = updateUser;
+    _skuPrice = skuPrice;
+    _skuStock = skuStock;
+    _weight = weight;
+    _updateTime = updateTime;
+    _ticketType = ticketType;
+    _sort = sort;
+    // _storeIds = storeIds;
+    _version = version;
+    _deliveries = deliveries;
+    _volume = volume;
+    _autoRenewSkuStock = autoRenewSkuStock;
+    _skuNameStr = skuNameStr;
+    _createTime = createTime;
+    _createUser = createUser;
+    _id = id;
+    _applyPrice = applyPrice;
+    _goodSkuAttrList = goodSkuAttrList;
+    _skuCode = skuCode;
+}
+
+  GoodProductSkuVOList.fromJson(dynamic json) {
+    _ticketStyle = json['ticketStyle'];
+    _productId = json['productId'];
+    _isDelete = json['isDelete'];
+    _ticketDays = json['ticketDays'];
+    _setMeal = json['setMeal'];
+    _updateUser = json['updateUser'];
+    _skuPrice = json['skuPrice'];
+    _skuStock = json['skuStock'];
+    _weight = json['weight'];
+    _updateTime = json['updateTime'];
+    _ticketType = json['ticketType'];
+    _sort = json['sort'];
+    // _storeIds = json['storeIds'];
+    _version = json['version'];
+    _deliveries = json['deliveries'];
+    _volume = json['volume'];
+    _autoRenewSkuStock = json['autoRenewSkuStock'];
+    _skuNameStr = json['skuNameStr'];
+    _createTime = json['createTime'];
+    _createUser = json['createUser'];
+    _id = json['id'];
+    _applyPrice = json['applyPrice'];
+    if (json['goodSkuAttrList'] != null) {
+      _goodSkuAttrList = [];
+      json['goodSkuAttrList'].forEach((v) {
+        _goodSkuAttrList.add(GoodSkuAttrList.fromJson(v));
+      });
+    }
+    _skuCode = json['skuCode'];
+  }
+  String _ticketStyle;
+  String _productId;
+  int _isDelete;
+  String _ticketDays;
+  String _setMeal;
+  String _updateUser;
+  String _skuPrice;
+  int _skuStock;
+  int _weight;
+  String _updateTime;
+  String _ticketType;
+  int _sort;
+  // String _storeIds;
+  int _version;
+  int _deliveries;
+  int _volume;
+  int _autoRenewSkuStock;
+  String _skuNameStr;
+  String _createTime;
+  String _createUser;
+  String _id;
+  String _applyPrice;
+  List<GoodSkuAttrList> _goodSkuAttrList;
+  String _skuCode;
+ProductSkuVoList copyWith({  String ticketStyle,
+  String productId,
+  int isDelete,
+  String ticketDays,
+  String setMeal,
+  String updateUser,
+  String skuPrice,
+  int skuStock,
+  int weight,
+  String updateTime,
+  String ticketType,
+  int sort,
+  // String storeIds,
+  int version,
+  int deliveries,
+  int volume,
+  int autoRenewSkuStock,
+  String skuNameStr,
+  String createTime,
+  String createUser,
+  String id,
+  String applyPrice,
+  List<SkuAttrList> goodSkuAttrList,
+  String skuCode,
+}) => ProductSkuVoList(  ticketStyle: ticketStyle ?? _ticketStyle,
+  productId: productId ?? _productId,
+  isDelete: isDelete ?? _isDelete,
+  ticketDays: ticketDays ?? _ticketDays,
+  setMeal: setMeal ?? _setMeal,
+  updateUser: updateUser ?? _updateUser,
+  skuPrice: skuPrice ?? _skuPrice,
+  skuStock: skuStock ?? _skuStock,
+  weight: weight ?? _weight,
+  updateTime: updateTime ?? _updateTime,
+  ticketType: ticketType ?? _ticketType,
+  sort: sort ?? _sort,
+  // storeIds: storeIds ?? _storeIds,
+  version: version ?? _version,
+  deliveries: deliveries ?? _deliveries,
+  volume: volume ?? _volume,
+  autoRenewSkuStock: autoRenewSkuStock ?? _autoRenewSkuStock,
+  skuNameStr: skuNameStr ?? _skuNameStr,
+  createTime: createTime ?? _createTime,
+  createUser: createUser ?? _createUser,
+  id: id ?? _id,
+  applyPrice: applyPrice ?? _applyPrice,
+  skuAttrList: goodSkuAttrList ?? _goodSkuAttrList,
+  skuCode: skuCode ?? _skuCode,
+);
+  String get ticketStyle => _ticketStyle;
+  String get productId => _productId;
+  int get isDelete => _isDelete;
+  String get ticketDays => _ticketDays;
+  String get setMeal => _setMeal;
+  String get updateUser => _updateUser;
+  String get skuPrice => _skuPrice;
+  int get skuStock => _skuStock;
+  int get weight => _weight;
+  String get updateTime => _updateTime;
+  String get ticketType => _ticketType;
+  int get sort => _sort;
+  // String get storeIds => _storeIds;
+  int get version => _version;
+  int get deliveries => _deliveries;
+  int get volume => _volume;
+  int get autoRenewSkuStock => _autoRenewSkuStock;
+  String get skuNameStr => _skuNameStr;
+  String get createTime => _createTime;
+  String get createUser => _createUser;
+  String get id => _id;
+  String get applyPrice => _applyPrice;
+  List<GoodSkuAttrList> get goodSkuAttrList => _goodSkuAttrList;
+  String get skuCode => _skuCode;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    map['ticketStyle'] = _ticketStyle;
+    map['productId'] = _productId;
+    map['isDelete'] = _isDelete;
+    map['ticketDays'] = _ticketDays;
+    map['setMeal'] = _setMeal;
+    map['updateUser'] = _updateUser;
+    map['skuPrice'] = _skuPrice;
+    map['skuStock'] = _skuStock;
+    map['weight'] = _weight;
+    map['updateTime'] = _updateTime;
+    map['ticketType'] = _ticketType;
+    map['sort'] = _sort;
+    // map['storeIds'] = _storeIds;
+    map['version'] = _version;
+    map['deliveries'] = _deliveries;
+    map['volume'] = _volume;
+    map['autoRenewSkuStock'] = _autoRenewSkuStock;
+    map['skuNameStr'] = _skuNameStr;
+    map['createTime'] = _createTime;
+    map['createUser'] = _createUser;
+    map['id'] = _id;
+    map['applyPrice'] = _applyPrice;
+    if (_goodSkuAttrList != null) {
+      map['goodSkuAttrList'] = _goodSkuAttrList.map((v) => v.toJson()).toList();
+    }
+    map['skuCode'] = _skuCode;
+    return map;
+  }
+
+}
+
+/// attrValueId : "1519870512921051136"
+/// isDelete : 0
+/// updateUser : "1333246101196636160"
+/// updateTime : "2022-04-29 10:45:43"
+/// attrId : "1519870512837165056"
+/// createTime : "2022-04-29 10:45:43"
+/// createUser : "1333246101196636160"
+/// id : "1519870513097211904"
+/// skuId : "1519870513038491648"
+
+class GoodSkuAttrList {
+  GoodSkuAttrList({
+      String attrValueId, 
+      int isDelete, 
+      String updateUser, 
+      String updateTime, 
+      String attrId, 
+      String createTime, 
+      String createUser, 
+      String id, 
+      String skuId,}){
+    _attrValueId = attrValueId;
+    _isDelete = isDelete;
+    _updateUser = updateUser;
+    _updateTime = updateTime;
+    _attrId = attrId;
+    _createTime = createTime;
+    _createUser = createUser;
+    _id = id;
+    _skuId = skuId;
+}
+
+  GoodSkuAttrList.fromJson(dynamic json) {
+    _attrValueId = json['attrValueId'];
+    _isDelete = json['isDelete'];
+    _updateUser = json['updateUser'];
+    _updateTime = json['updateTime'];
+    _attrId = json['attrId'];
+    _createTime = json['createTime'];
+    _createUser = json['createUser'];
+    _id = json['id'];
+    _skuId = json['skuId'];
+  }
+  String _attrValueId;
+  int _isDelete;
+  String _updateUser;
+  String _updateTime;
+  String _attrId;
+  String _createTime;
+  String _createUser;
+  String _id;
+  String _skuId;
+  SkuAttrList copyWith({  String attrValueId,
+  int isDelete,
+  String updateUser,
+  String updateTime,
+  String attrId,
+  String createTime,
+  String createUser,
+  String id,
+  String skuId,
+}) => SkuAttrList(  attrValueId: attrValueId ?? _attrValueId,
+  isDelete: isDelete ?? _isDelete,
+  updateUser: updateUser ?? _updateUser,
+  updateTime: updateTime ?? _updateTime,
+  attrId: attrId ?? _attrId,
+  createTime: createTime ?? _createTime,
+  createUser: createUser ?? _createUser,
+  id: id ?? _id,
+  skuId: skuId ?? _skuId,
+);
+  String get attrValueId => _attrValueId;
+  int get isDelete => _isDelete;
+  String get updateUser => _updateUser;
+  String get updateTime => _updateTime;
+  String get attrId => _attrId;
+  String get createTime => _createTime;
+  String get createUser => _createUser;
+  String get id => _id;
+  String get skuId => _skuId;
+
+  Map<String, dynamic> toJson() {
+    final map = <String, dynamic>{};
+    map['attrValueId'] = _attrValueId;
+    map['isDelete'] = _isDelete;
+    map['updateUser'] = _updateUser;
+    map['updateTime'] = _updateTime;
+    map['attrId'] = _attrId;
+    map['createTime'] = _createTime;
+    map['createUser'] = _createUser;
+    map['id'] = _id;
+    map['skuId'] = _skuId;
+    return map;
+  }
+
+}
\ No newline at end of file
diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart
index d05b7563..f2fd3a6b 100644
--- a/lib/retrofit/retrofit_api.dart
+++ b/lib/retrofit/retrofit_api.dart
@@ -36,6 +36,7 @@ import 'data/goods.dart';
 import 'data/goods_category.dart';
 import 'data/headlines_list.dart';
 import 'data/headlines_list_details.dart';
+import 'data/home_rank.dart';
 import 'data/invitation_list.dart';
 import 'data/logistics.dart';
 import 'data/member_Infor.dart';
@@ -523,4 +524,8 @@ abstract class ApiService {
   @GET("/home/version")
   Future<BaseData<AppUpdate>> appVersion();
 
+  ///App推荐排行
+  @GET("/home/recommendRank")
+  Future<BaseData<HomeRank>> recommendRank();
+
 }
diff --git a/lib/retrofit/retrofit_api.g.dart b/lib/retrofit/retrofit_api.g.dart
index 07036975..2c45bf97 100644
--- a/lib/retrofit/retrofit_api.g.dart
+++ b/lib/retrofit/retrofit_api.g.dart
@@ -1981,4 +1981,25 @@ class _ApiService implements ApiService {
     );
     return value;
   }
+
+  @override
+  Future<BaseData<HomeRank>> recommendRank() async {
+    const _extra = <String, dynamic>{};
+    final queryParameters = <String, dynamic>{};
+    final _data = <String, dynamic>{};
+    final _result = await _dio.request<Map<String, dynamic>>(
+        '/home/recommendRank',
+        queryParameters: queryParameters,
+        options: RequestOptions(
+            method: 'GET',
+            headers: <String, dynamic>{},
+            extra: _extra,
+            baseUrl: baseUrl),
+        data: _data);
+    final value = BaseData<HomeRank>.fromJson(
+      _result.data,
+          (json) => HomeRank.fromJson(json),
+    );
+    return value;
+  }
 }
diff --git a/lib/settlement/settlement_view/coupon.dart b/lib/settlement/settlement_view/coupon.dart
index a3b725b7..b9e31079 100644
--- a/lib/settlement/settlement_view/coupon.dart
+++ b/lib/settlement/settlement_view/coupon.dart
@@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:huixiang/generated/l10n.dart';
 import 'package:huixiang/retrofit/data/settleOrderInfo.dart';
 import 'package:huixiang/retrofit/data/store_info.dart';
+import 'package:huixiang/utils/flutter_utils.dart';
 import 'package:huixiang/utils/font_weight.dart';
 import 'package:huixiang/view_widget/separator.dart';
 
@@ -294,9 +295,7 @@ class _CouponWidget extends State<CouponWidget> {
               ),
               Text(
                 widget.couponList != null
-                    ? double.tryParse("${widget.couponList.discountAmount}" ?? "0")
-                    .toInt()
-                    .toString()
+                    ? "${AppUtils.calculateDouble(double.tryParse(widget.couponList.discountAmount) ?? 0)}"
                     : "",
                 style: TextStyle(
                   fontSize: 30.sp,
@@ -394,7 +393,7 @@ class _CouponWidget extends State<CouponWidget> {
               ),
               Text(
               widget.couponList != null
-                    ? double.tryParse("${widget.couponList.limitAmount}" ?? "0").toStringAsFixed(2)
+                    ? "${AppUtils.calculateDouble(double.tryParse(widget.couponList.limitAmount) ?? 0)}"
                     : "",
                 style: TextStyle(
                   fontSize: 28.sp,
diff --git a/lib/store/store_order.dart b/lib/store/store_order.dart
index 11112dfc..58cfad09 100644
--- a/lib/store/store_order.dart
+++ b/lib/store/store_order.dart
@@ -438,7 +438,7 @@ class _StoreOrderPage extends State<StoreOrderPage>
             ),
             // if(count() != 0)
             Positioned(
-              bottom: 0,
+              bottom: 30,
               left: 0,
               right: 0,
               child: Stack(
diff --git a/lib/view_widget/coupon_details_dialog.dart b/lib/view_widget/coupon_details_dialog.dart
index e9e55f38..2ef4c28e 100644
--- a/lib/view_widget/coupon_details_dialog.dart
+++ b/lib/view_widget/coupon_details_dialog.dart
@@ -26,7 +26,7 @@ class _CouponDetailsWidget extends State<CouponDetailsWidget> {
   Widget build(BuildContext context) {
     return Container(
       width: double.infinity,
-      height:291.h,
+      height:355.h,
       decoration: BoxDecoration(
         color: Colors.white,
         borderRadius: BorderRadius.only(
@@ -34,7 +34,9 @@ class _CouponDetailsWidget extends State<CouponDetailsWidget> {
           topRight: Radius.circular(8),
         ),
       ),
-      child: Column(
+      child: SingleChildScrollView(
+    physics: BouncingScrollPhysics(),
+    child: Column(
         mainAxisAlignment: MainAxisAlignment.start,
         crossAxisAlignment: CrossAxisAlignment.start,
         children: [
@@ -78,6 +80,7 @@ class _CouponDetailsWidget extends State<CouponDetailsWidget> {
           ),
           Container(
             color: Colors.white,
+            margin: EdgeInsets.symmetric(horizontal: 12),
             child: Html(
               data: widget.coupon.remark ?? "",
               customImageRenders: {
@@ -89,6 +92,6 @@ class _CouponDetailsWidget extends State<CouponDetailsWidget> {
               },
             ),
           ),
-  ]));
+  ])));
   }
 }
diff --git a/lib/view_widget/item_title.dart b/lib/view_widget/item_title.dart
index 14c40786..8ac81083 100644
--- a/lib/view_widget/item_title.dart
+++ b/lib/view_widget/item_title.dart
@@ -117,6 +117,7 @@ class ItemTitle extends StatelessWidget {
               items: items,
               value: moreText,
               onChanged: onChanged,
+              underline: Container(color: Colors.transparent),
             ),
           );
   }
diff --git a/lib/view_widget/mine_vip_entry.dart b/lib/view_widget/mine_vip_entry.dart
index e5d33c45..129f7c1d 100644
--- a/lib/view_widget/mine_vip_entry.dart
+++ b/lib/view_widget/mine_vip_entry.dart
@@ -70,9 +70,9 @@ class MineVipEntry extends StatelessWidget {
 
     Widget widget = Container(
         width: double.infinity,
-        padding: EdgeInsets.only(top: 12.h, bottom: 25.h, left: 12, right: 12),
+        padding: EdgeInsets.only(top: 12.h, bottom: 35.h, left: 12, right: 12),
         // margin: EdgeInsets.symmetric(horizontal: 14),
-        margin: EdgeInsets.only(top: 15,left: 14,right: 14),
+        margin: EdgeInsets.only(top: 15,left: 14,right: 14,bottom:15),
         decoration: BoxDecoration(
           color: Color(0xFF3D3D5D),
           borderRadius: BorderRadius.only(
diff --git a/lib/view_widget/new_coupon_widget.dart b/lib/view_widget/new_coupon_widget.dart
index 96785008..17714a8c 100644
--- a/lib/view_widget/new_coupon_widget.dart
+++ b/lib/view_widget/new_coupon_widget.dart
@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:huixiang/generated/l10n.dart';
 import 'package:huixiang/retrofit/data/coupon.dart';
+import 'package:huixiang/utils/flutter_utils.dart';
 import 'package:huixiang/utils/font_weight.dart';
 import 'package:huixiang/view_widget/separator.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
@@ -45,6 +46,7 @@ class NewCouponWidget extends StatelessWidget {
       height: (coupon != null && coupon.isEx) ? 155.h : 135.h,
       width: double.infinity,
       margin: EdgeInsets.fromLTRB(14.w, 6.h, 14.w, 6.h),
+      padding: EdgeInsets.only(right: 5),
       decoration: BoxDecoration(
         color: Colors.white,
         borderRadius: BorderRadius.circular(6),
@@ -184,7 +186,7 @@ class NewCouponWidget extends StatelessWidget {
                       child: priceWidget(context),
                     )),
                     Container(
-                      margin: EdgeInsets.only(right: 23.w),
+                      margin: EdgeInsets.only(right: 15.w),
                       child: rightBtn(context),
                     )
                   ],
@@ -408,7 +410,7 @@ class NewCouponWidget extends StatelessWidget {
                     .toString()
                     : "",
                 style: TextStyle(
-                  fontSize: 40.sp,
+                  fontSize: 35.sp,
                   fontWeight: MyFontWeight.semi_bold,
                   color:  coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060),
                 ),
@@ -513,7 +515,7 @@ class NewCouponWidget extends StatelessWidget {
               ),
               Text(
                 coupon != null
-                    ? double.tryParse("${coupon.limitAmount}" ?? "0").toStringAsFixed(2)
+                    ?  "${AppUtils.calculateDouble(double.tryParse(coupon.limitAmount) ?? 0)}"
                     : "",
                 style: TextStyle(
                   fontSize: 35.sp,
@@ -541,7 +543,7 @@ class NewCouponWidget extends StatelessWidget {
                     "0"
                     : "",
                 style: TextStyle(
-                  fontSize: 40.sp,
+                  fontSize: 37.sp,
                   fontWeight: MyFontWeight.semi_bold,
                   color:  coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060),
                 ),
diff --git a/lib/view_widget/recharge_details_dialog.dart b/lib/view_widget/recharge_details_dialog.dart
index 13512eb7..92b880b3 100644
--- a/lib/view_widget/recharge_details_dialog.dart
+++ b/lib/view_widget/recharge_details_dialog.dart
@@ -33,9 +33,10 @@ class _RechargeWidget extends State<RechargeWidget> {
                 topLeft: const Radius.circular(25.0),
                 topRight: const Radius.circular(25.0))),
         child: Container(
-          width: 299,
-          height:299,
-          child: Column(
+          height:355,
+          child:SingleChildScrollView(
+            physics: BouncingScrollPhysics(),
+            child:Column(
             children: [
               Row(
                 mainAxisAlignment: MainAxisAlignment.start,
@@ -101,6 +102,6 @@ class _RechargeWidget extends State<RechargeWidget> {
                 ),)
             ],
           ),
-        ));
+        )));
   }
 }