当前位置: 首页 > news >正文

仿盒马》app开发技术分享-- 确认订单页(数据展示)(端云一体)

开发准备

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

功能分析

要想实现确认订单页面的功能,我们只需要从购物车页面把加购的列表传递过来,然后根据列表中的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 ( ′ a p p . m e d i a . o r d e r l o c a t i o n ′ ) ) . h e i g h t ( 20 ) . w i d t h ( 20 ) T e x t ( " 请选择收货地址 " ) . f o n t C o l o r ( C o l o r . B l a c k ) . f o n t S i z e ( 16 ) B l a n k ( ) I m a g e ( r('app.media.order_location')) .height(20) .width(20) Text("请选择收货地址") .fontColor(Color.Black) .fontSize(16) Blank() Image( r(app.media.orderlocation)).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

}
这样我们确认订单页面相对静态的功能就实现了我们执行一下代码看看效果
在这里插入图片描述

http://www.xdnf.cn/news/670843.html

相关文章:

  • 过河卒--记忆化搜索
  • OpenHarmony平台驱动使用(五),HDMI
  • Python实现VTK-自学笔记(5):在三维世界里自由舞蹈——高级交互与动态可视化
  • @recogito/annotorious图像标注库
  • java 项目登录请求业务解耦模块全面
  • (自用)Java学习-5.16(取消收藏,批量操作,修改密码,用户更新,上传头像)
  • 基于 Operator 部署 Prometheus 实现 K8S 监控
  • Spark实时流数据处理实例(SparkStreaming通话记录消息处理)
  • 【md2html python 将 Markdown 文本转换为 HTML】
  • HTML Day02
  • pythonday30
  • Spark SQL进阶:解锁大数据处理的新姿势
  • AG32 DMAC实现内部MCU与FPGA通信【知识库】
  • 运维自动化工具 ansible 知识点总结
  • 域控账号密码抓取
  • C++数据结构 : 哈希表的实现
  • 2025上半年软考高级系统架构设计师经验分享
  • 第十一节:第一部分:正则表达式:应用案例、爬取信息、搜索替换
  • 牙科低对比度模体,衡量牙科影像设备的性能和诊断能力的工具
  • 8种使用克劳德4的方法,目前可用随时更新!
  • 人工智能与机器学习从理论、技术与实践的多维对比
  • 打造AI智能旅行规划器:基于LLM和Crew AI的Agent实践
  • Flash Attention:让Transformer飞起来的硬件优化技术
  • 宝塔安装easyswoole框架
  • Cherry Studio连接配置MCP服务器
  • wsl图形界面显示
  • 探讨Facebook的元宇宙愿景下的虚拟现实技术
  • 【2025最新】Cline自定义API配置完全指南:接入Claude 3.7/GPT-4o
  • 用C#完成最小二乘法拟合平面方程,再计算点到面的距离
  • OpenGL Chan视频学习-8 How I Deal with Shaders in OpenGL