《仿盒马》app开发技术分享-- 确认订单页(数据展示)(29)

举报
yd_215151764 发表于 2025/06/30 10:29:39 2025/06/30
【摘要】 ## 技术栈Appgallery connect## 开发准备上一节我们实现了地址的添加,那么有了地址之后我们接下来的重点就可以放到订单生成上了,我们在购物车页面,点击结算会跳转到一个 订单确认页面,在这个页面我们需要有地址选择、加购列表展示、价格计算、优惠计算、商品数量展示等信息。## 功能分析要想实现确认订单页面的功能,我们只需要从购物车页面把加购的列表传递过来,然后根据列表中的buya...


## 技术栈

Appgallery connect
## 开发准备
上一节我们实现了地址的添加,那么有了地址之后我们接下来的重点就可以放到订单生成上了,我们在购物车页面,点击结算会跳转到一个 订单确认页面,在这个页面我们需要有地址选择、加购列表展示、价格计算、优惠计算、商品数量展示等信息。


## 功能分析
要想实现确认订单页面的功能,我们只需要从购物车页面把加购的列表传递过来,然后根据列表中的buyamount 以及price 去计算对应的价格和加购数量,然后我们通过划线价去计算我们的优惠。最后确认无误提交订单


## 代码实现

首先在购物车页面点击结算时传递数据到确认订单页
.onClick(()=>{
            router.pushUrl({url:'pages/view/OrderSubmitPage',params:{data:JSON.stringify(this.productList)}})
          })
然后我们在确认订单页面接收数据
 @State productList:CartProductList[]=[]
  aboutToAppear(): void {
    let params = (this.getUIContext().getRouter().getParams() as Record<string, string>)['data']
    if (params!=undefined&& params!=''){
      this.productList=JSON.parse(params)
    }
  }
数据接收成功之后我们绘制收货地址模块,以及列表展示模块,价格计算模块的ui
  Column() {
      CommonTopBar({ title: "确认订单", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})
      Divider()
        .width('100%')
        .height(5)
        .backgroundColor("#f7f7f7")
        Column(){
          Row({space:20}){
            Image($r('app.media.order_location'))
              .height(20)
              .width(20)
            Text("请选择收货地址")
              .fontColor(Color.Black)
              .fontSize(16)
            Blank()
            Image($r('app.media.right'))
              .height(20)
              .width(20)
          }
          .padding(10)
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
          .height(40)
          .alignItems(VerticalAlign.Center)
          Divider()
            .width('100%')
            .height(5)
            .backgroundColor("#f7f7f7")

          List({scroller:this.scroller}){
            ForEach(this.productList,(item:CartProductList,index:number)=>{
              ListItem(){
                Column(){
                  Row() {
                    Row({ space: 10 }) {
                      Image(item.productImgAddress)
                        .height(70)
                        .width(70)
                        .margin({ left: 10 })
                        .borderRadius(10)
                      Column({ space: 5 }) {
                        Text(item.productName)
                          .fontColor(Color.Black)
                          .fontSize(14)

                        Text(item.productSpecName)
                          .fontColor(Color.Grey)
                          .fontSize(14)

                        Row() {
                          Text() {
                            Span("¥ ")
                              .fontSize(14)
                              .fontColor(Color.Red)
                            Span(item.productPrice + "")
                              .fontSize(16)
                              .fontColor(Color.Red)
                          }

                          Text("¥" + item.productOriginalPrice + "")
                            .fontColor('#999')
                            .decoration({
                              type: TextDecorationType.LineThrough,
                              color: Color.Gray
                            })
                            .fontSize(14)
                            .margin({ left: 10 })

                        }
                        .alignItems(VerticalAlign.Bottom)


                        Text("已选:" + item.buyAmount)
                          .fontColor(Color.Black)
                          .fontColor(Color.Gray)
                          .fontSize(12)
                      }
                      .alignItems(HorizontalAlign.Start)

                    }

                    .justifyContent(FlexAlign.Start)
                    .alignItems(VerticalAlign.Top)


                    Blank()

                    Text("¥ " + item.productPrice*item.buyAmount)
                      .fontColor(Color.Black)
                      .fontSize(14)
                  }
                  .padding(10)
                  .width('100%')
                  .alignItems(VerticalAlign.Top)
                  .justifyContent(FlexAlign.SpaceBetween)


                  Divider()
                    .width('100%')
                    .height(1)
                    .backgroundColor("#f7f7f7")

                }


              }
            })

          }
          .height('auto')
          Row(){
            Text("订单备注")
              .fontSize(14)
              .fontColor(Color.Black)

            Blank()
            Text("选填,请写明备注内容")
              .fontColor(Color.Gray)
              .fontSize(12)

            Image($r('app.media.right'))
              .height(15)
              .width(15)
          }
          .width('100%')
          .padding(10)
          .justifyContent(FlexAlign.SpaceBetween)

          Row(){
            Text()
            Blank()
            Text("共"+this.amount()+"份")
              .fontSize(12)
              .fontColor(Color.Gray)

            Text("小计:")
              .fontColor(Color.Gray)
              .fontSize(12)
              .margin({left:15})
            Text() {
              Span("¥ ")
                .fontSize(12)
                .fontColor(Color.Red)
              Span(this.price()+"")
                .fontSize(12)
                .fontColor(Color.Red)
            }

          }
          .padding(10)
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)

          Divider()
            .width('100%')
            .height(10)
            .backgroundColor("#f7f7f7")

          Row(){
            Text("商品总价")
              .fontSize(14)
              .fontColor(Color.Black)

            Text() {
              Span("¥ ")
                .fontSize(12)
                .fontColor(Color.Black)
              Span(this.price()+"")
                .fontSize(12)
                .fontColor(Color.Black)
            }
          }
          .padding(10)
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)

          Row(){
            Text("平台优惠")
              .fontSize(14)
              .fontColor(Color.Black)

            Text() {
              Span("¥ ")
                .fontSize(12)
                .fontColor(Color.Black)
              Span(this.originalPrice()-this.price()+"")
                .fontSize(12)
                .fontColor(Color.Black)
            }
          }
          .padding(10)
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)

        }
        .layoutWeight(1)


      Row({space:10}){
        Text("共"+this.amount()+"份")
          .fontSize(14)
          .fontColor(Color.Black)

        Blank()
        Text() {
          Span("实付:")
          Span("¥ ")
            .fontSize(10)
            .fontColor(Color.Red)
          Span(this.price()+"")
            .fontSize(16)
            .fontColor(Color.Red)
        }

        Text("提交订单")
          .fontColor(Color.White)
          .padding(10)
          .borderRadius(10)
          .backgroundColor("#d81e06")
          .fontSize(14)

      }
      .padding(20)
      .justifyContent(FlexAlign.SpaceBetween)
      .width('100%')
    }
    .backgroundColor(Color.White)
    .height('100%')
    .width('100%')
都玩成之后我们在方法中计算加购的总数和当前价格和优惠价格
amount():number{

    let  number=0
    for (let i = 0; i <this.productList.length ; i++) {
      number+=this.productList[i].buyAmount
    }
    return  number
  }

  price():number{

    let  number=0
    for (let i = 0; i <this.productList.length ; i++) {
      number+=this.productList[i].buyAmount*this.productList[i].productPrice
    }
    return  number
}

  originalPrice():number{

    let  number=0
    for (let i = 0; i <this.productList.length ; i++) {
      number+=this.productList[i].buyAmount*this.productList[i].productOriginalPrice
    }
    return  number
  }
这样我们确认订单页面相对静态的功能就实现了

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。