《仿盒马》app开发技术分享-- 商品详情页(10)

鸿蒙小林
• 阅读 3

技术栈

Appgallery connect

开发准备

上一节我们实现了自定义标题栏和商品详情的数据接收,我们已经拿到了想要的数据,这一节我们要丰富商品详情页的内容。商品详情页面我们需要展示的是商品的各个属性参数、商品的图片、商品规格、活动详情等

功能分析

商品详情页面的结构需要我们去用比较多的布局去处理,首先因为商品详情页面对的数据足够多,需要他能够实现滚动查看信息,然后我们需要在底部固定加入购物车和立即购买按钮,并且我们加购之后,我们也要在页面中即使响应购物车中的商品数。同时给到用户便捷跳转到购物车的按钮

代码实现

我们先进行数据的填充,因为上一节我们已经接收到数据,所以我们直接吧数据打印到text上,对着数据进行填充,同时还能帮我们暂时丰富一下页面内容,查看滑动的效果,页面完善之后我们再去删掉即可

Text(JSON.stringify(this.productParams)) .fontColor(Color.Black)

然后我们根据设计的样式进行数据填充,要注意滚动和底部布局的固定,挑选合适的布局容器

Stack({alignContent:Alignment.Bottom}){ Scroll(this.scroller){ Column() { CommonTopBar({ title: "商品详情", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true}) Image(this.productParams.url) .width('100%') .height(300) Text(JSON.stringify(this.productParams)) .fontColor(Color.Black) Column({space:10}){ Row(){ if (this.productParams.promotion_spread_price>0){ Text(){ Span("¥") .fontSize(14) .fontColor(Color.Red) Span(this.productParams.promotion_spread_price+"") .fontSize(20) .fontColor(Color.Red) } }else { Text(){ Span("¥") .fontSize(14) .fontColor(Color.Red) Span(this.productParams.price+"") .fontSize(20) .fontColor(Color.Red) } }

            Text("¥"+this.productParams.original_price+"")
              .fontColor('#999')
              .decoration({
                type: TextDecorationType.LineThrough,
                color: Color.Gray
              })
              .fontSize(16)
              .margin({left:10})

            if (this.productParams.promotion_spread_price>0){
              Row(){
                Text("每件立减"+(this.productParams.price-this.productParams.promotion_spread_price)+"元")
                  .fontSize(14)
                  .borderRadius(20)
                  .backgroundColor("#FB424C")
                  .padding(3)
                  .textAlign(TextAlign.Center)
                Text("每人限购"+this.productParams.max_loop_amount+"件")
                  .margin({left:5})
                  .fontSize(14)
                  .borderRadius(20)
                  .backgroundColor("#FB424C")
                  .padding(3)
                  .textAlign(TextAlign.Center)
              }
              .padding({top:2,bottom:2,left:10})
            }



          }
          .padding(10)

          if (this.productParams.promotion_spread_price>0){
            Text(this.productParams.endTime)
              .fontSize(14)
              .borderRadius(20)
              .backgroundColor("#FB424C")
              .padding(3)
              .margin({left:10})
              .textAlign(TextAlign.Center)
          }

          Text(this.productParams.name)
            .fontSize(20)
            .fontColor(Color.Black)
            .margin({left:10})
            .fontWeight(FontWeight.Bold)
          Text(this.productParams.text_message)
            .fontSize(14)
            .fontColor(Color.Black)
            .margin({left:10})
          Row(){
            Text()
            Text("销量 "+this.productParams.sales_volume)
              .fontSize(14)
              .fontColor(Color.Black)
          }
          .padding(10)
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)


          Divider().width('100%')
            .height(5).backgroundColor("#f7f7f7")
          Row(){
            Text("发货")
              .fontColor(Color.Gray)
              .fontSize(14)

            Text(this.productParams.delivery_time+"")
              .fontSize(14)
              .margin({left:20})
              .fontColor(Color.Black)
          }
          .padding(10)
          .width('100%')
          .justifyContent(FlexAlign.Start)
          Divider().width('100%')
            .height(5).backgroundColor("#f7f7f7")
          Row(){
            Text("参数")
              .fontColor(Color.Gray)
              .fontSize(14)

            Text("储藏条件:")
              .margin({left:20})
              .fontSize(14)
              .fontColor(Color.Black)
            Text(this.productParams.parameter)
              .fontSize(14)
              .fontColor(Color.Black)
          }
          .padding(10)

          .width('100%')
          .justifyContent(FlexAlign.Start)
          Divider().width('100%')
            .height(5).backgroundColor("#f7f7f7")


          Row(){
            Text("规格")
              .fontColor(Color.Gray)
              .fontSize(14)

            Column(){
              Text("请选择规格")
            }
          }
          .padding(10)
          .width('100%')
          .justifyContent(FlexAlign.Start)
          Divider().width('100%')
            .height(5).backgroundColor("#f7f7f7")
        }
        .alignItems(HorizontalAlign.Start)
      }
      .alignItems(HorizontalAlign.Start)
      .backgroundColor(Color.White)


  }
  .padding({bottom:80})
  .height('100%')
  .width('100%')
  Row(){
    Image($r('app.media.product_details_cart'))
      .width(35)
      .height(35)
      .objectFit(ImageFit.Contain)


    Blank()

    Text("加入购物车")
      .padding(10)
      .width(100)
      .textAlign(TextAlign.Center)
      .backgroundColor("#FCDB29")
      .fontColor(Color.White)
      .borderRadius({topLeft:15,bottomLeft:15})

    Text(" 立即购买 ")
      .padding(10)
      .textAlign(TextAlign.Center)
      .width(100)
      .backgroundColor(Color.Red)
      .fontColor(Color.White)
      .borderRadius({topRight:15,bottomRight:15})
  }
  .padding(15)
  .justifyContent(FlexAlign.SpaceBetween)
  .width('100%')
  .backgroundColor(Color.White)
}
.backgroundColor(Color.White)

到这里我们的商品详情页面的内容已经比较完善了

点赞
收藏
评论区
推荐文章
鸿蒙小林 鸿蒙小林
9小时前
《仿盒马》app开发技术分享-- 商品规格弹窗(11)
技术栈Appgalleryconnect开发准备上一节我们实现了商品详情页面,并且成功在页面上展示了商品的图片、商品规格、活动详情等信息,要知道同一种商品大多数都是有多种型号跟规格的,所以这一节我们来实现商品的规格弹窗。这节的要点是自定义弹窗的运用。功能分
鸿蒙小林 鸿蒙小林
9小时前
《仿盒马》app开发技术分享-- 加入购物车&加购列表展示(12)
技术栈Appgalleryconnect开发准备上一节我们实现了商品详情页面的规格选择弹窗,这在任何购物类应用中都是最常用的功能之一。当然了,作为一个购物类的应用,我们仅仅展示是用处不大的,我们还需要有添加的动作。这一节我们就来实现添加到购车里并且在购物车
鸿蒙小林 鸿蒙小林
9小时前
《仿盒马》app开发技术分享-- 购物车功能完善(14)
技术栈Appgalleryconnect开发准备上一节我们实现了购物车商品列表的状态切换,已添加商品数量的增减,已添加商品滑动删除,已添加商品在选中情况下的价格计算。这一节我们在这些功能的基础上实现云端记录,因为我们现在只有数据的查询是从云端获取的,其他的
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 购物车业务逻辑完善(34)
技术栈Appgalleryconnect开发准备之前我们已经实现了购物车相关的内容,实现了购物车数据列表的展示,但是我们结算订单之后我们的购物车列表并没有刷新,而且底部的状态栏并没有明显的数据展示来提醒用户,而且当我们在商品详情页添加新商品,底部也没有同步
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 商品搜索页(搜索记录&商品搜索)(38)
技术栈Appgalleryconnect开发准备上一节我们新建了商品搜索页,实现了顶部的搜索bar以及下方的推荐搜索列表,这一节我们要新增一个商品搜索记录列表,以及输入内容之后搜索出对应商品的功能,我们还需要保证搜索内容的唯一性,以及搜索记录的本地数据持久
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 回收记录页(47)
技术栈Appgalleryconnect开发准备上一节我们实现了在订单列表中查看订单详情,但是我们的回收相关的营收就必须要进入到商品详情页才能够进行查看,如果我们在订单较多的情况下,一个一个的查看订单的详情就会变得非常的麻烦了,现在我们需要实现一个订单记录
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 兑换商品详情(69)
技术栈Appgalleryconnect开发准备上一节我们实现了兑换商品列表的展示,用户可以在回收之后通过积分页面进入兑换列表页查看当前能够兑换的商品了,我们距离一个完整的app又更近了一步,现在我们要实现的就是当用户点击列表条目的时候能够查看数据详情。功
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 商品兑换校验(70)
技术栈Appgalleryconnect开发准备上一节我们实现了可兑换商品的详情,我们能够查看到商品更多的信息,这一节我们来实现商品兑换相关的功能,在进行商品兑换之前,我们在兑换详情页面,点击立即兑换按钮之后我们需要跳转到兑换详情页,但是用户的积分可能达不
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 兑换订单提交(73)
技术栈Appgalleryconnect开发准备上一节我们实现了兑换提交前的准备页面,向用户展示了兑换相关的所有信息,这一节我们就可以实现兑换订单的提交了功能分析订单提交我们需要创建对应的兑换商品订单提交信息表,我们需要把地址,商品信息,积分,备注,订单状
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 兑换商品订单详情页(80)
技术栈Appgalleryconnect开发准备我们的兑换商品列表相关的功能都已经实现的差不多了,现在我们还缺少一个订单详情查看的功能,为了ui一致性,我们的订单详情页样式要保持一致性,外观要跟订单、回收单的详情页相似。功能分析要实现订单详情首先我们需要拿