《仿盒马》app开发技术分享-- 订单详情页(端云一体)

article/2025/9/7 23:19:16

开发准备

在之前的章节中我们实现了订单的提交,以及提交之后跳转到确认订单页面,在确认订单页面我们添加了一个入口,这个入口是查询订单,当我们点击入口时,我们需要跳转到一个新的界面,这个界面通过接收上个界面的订单id或者订单code 等信息,进行订单的详细内容展示

功能分析

要想实现订单内容的展示,首先我们要解决订单查询的问题,之前的订单提交页面,因为我们做了一张关联表,把提交的商品放置到了一张单独的表中,通过order_product_id去做关联查询,所以我们还需要根据id 把对应的商品列表查出来,然后我们再查出对应order_code 对应的订单,展示到页面上,同时展示出更多的信息给到用户

代码实现

首先在确认订单页面实现数据的传递

  Text("查看订单").fontSize(16).fontColor(Color.Black).padding(10).borderRadius(10).border({width:1,color:Color.Grey}).onClick(()=>{router.pushUrl({url:'pages/view/OrderDetailsPage',params:{code:this.orderInfo!.order_code}})})

然后我们回到订单详情页面进行传递数据的接收

@State orderCode:string=''let params = (this.getUIContext().getRouter().getParams() as Record<string, string>)['code']if (params!=undefined&& params!=''){this.orderCode=params}

接收到数据之后我们首先根据ordercode进行表数据的查询

let databaseZone = cloudDatabase.zone('default');let condition = new cloudDatabase.DatabaseQuery(order_list);condition.equalTo("order_code",this.orderCode!)let listData = await databaseZone.query(condition);let json = JSON.stringify(listData)let data1:OrderList[]= JSON.parse(json)this.orderInfo=data1[0]

查询出来数据之后,我们拿到返回值中的order_product_id字段,根据它再次进行查询,拿到对应的商品列表

  @State orderInfo:OrderList|null=nulllet condition1 = new cloudDatabase.DatabaseQuery(order_product_list);condition1.equalTo("order_product_id",data1[0].order_product_id)let listData1 = await databaseZone.query(condition1);let json1 = JSON.stringify(listData1)this.productList=JSON.parse(json1)

都查询出来之后我们开始进行页面数据的绘制和数据的填充

build() {if (this.flag){Column(){CommonTopBar({ title: "订单详情", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})Scroll(){Column({space:10}) {Column({space:15}){Text("买家已付款").fontSize(20).width('100%').textAlign(TextAlign.Center).fontColor(Color.Black).fontWeight(FontWeight.Bold)Text("您买的商品已经安排了,商家即将发货").fontSize(16).fontColor(Color.Black).width('100%').textAlign(TextAlign.Center)}.width('100%').padding(15).backgroundColor("#fff3574a")Divider().width('100%').height(5).color("#e6e6e6")Column(){Row({space:20}){Image($r('app.media.order_location')).height(20).width(20)Column(){Row(){Text(this.orderInfo?.nickname).fontColor(Color.Black).fontSize(16).fontWeight(FontWeight.Bold)Text(this.orderInfo?.phone).fontColor(Color.Black).fontSize(16).fontWeight(FontWeight.Bold).margin({left:20})}Text(this.orderInfo?.address).fontColor(Color.Black).fontSize(16).margin({top:10})}.padding(10).alignItems(HorizontalAlign.Start).width('100%')}}.padding(10).alignItems(HorizontalAlign.Start).width('100%')Divider().width('100%').height(0.8).color("#e6e6e6")List({scroller:this.scroller}){ForEach(this.productList,(item:OrderProductList,index:number)=>{ListItem(){Column(){Row() {Row({ space: 10 }) {Image(item.img).height(70).width(70).margin({ left: 10 }).borderRadius(10)Column({ space: 5 }) {Text(item.name).fontColor(Color.Black).fontSize(14)Text(item.spec).fontColor(Color.Grey).fontSize(14)Row() {Text() {Span("¥ ").fontSize(14).fontColor(Color.Red)Span(item.price + "").fontSize(16).fontColor(Color.Red)}Text("¥" + item.originalPrice + "").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.price*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()Blank()Text() {Span("合计:").fontSize(16).fontColor(Color.Black)Span("¥ ").fontSize(10).fontColor(Color.Red)Span(this.price()+"").fontSize(16).fontColor(Color.Red)}}.padding(10).width('100%').justifyContent(FlexAlign.SpaceBetween)Divider().width('100%').height(5).color("#e6e6e6")Text("订单信息").fontSize(18).fontColor(Color.Black).fontWeight(FontWeight.Bold).margin({left:15})Divider().width('100%').height(5).color("#e6e6e6")Row(){Text("订单编号:").fontSize(16).fontColor(Color.Black)Blank()Text(this.orderInfo?.order_code).fontColor(Color.Black).fontSize(14)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10)Divider().width('100%').height(0.8).color("#e6e6e6")Row(){Text("订单备注:").fontSize(16).fontColor(Color.Black)Blank()Text(this.orderInfo?.order_remark!=''&&this.orderInfo?.order_remark!=null?this.orderInfo?.order_remark:"无").fontColor(Color.Black).fontSize(14)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10)Divider().width('100%').height(0.8).color("#e6e6e6")Row(){Text("付款方式:").fontSize(16).fontColor(Color.Black)Blank()Text("线上支付").fontSize(16).fontColor(Color.Black)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10)Divider().width('100%').height(0.8).color("#e6e6e6")Row(){Text("创建时间:").fontSize(16).fontColor(Color.Black)Blank()Text(this.orderInfo?.order_create_time).fontColor(Color.Black).fontSize(14)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10)Divider().width('100%').height(0.8).color("#e6e6e6")Row(){Text("付款时间:").fontSize(16).fontColor(Color.Black)Blank()Text(this.orderInfo?.order_pay_time).fontColor(Color.Black).fontSize(14)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10)Divider().width('100%').height(0.8).color("#e6e6e6").visibility(this.orderInfo?.order_over_time!=''?Visibility.Visible:Visibility.None)Row(){Text("完成时间:").fontSize(16).fontColor(Color.Black)Blank()Text(this.orderInfo?.order_over_time).fontColor(Color.Black).fontSize(14)}.visibility(this.orderInfo?.order_over_time!=null&&this.orderInfo.order_over_time!=''?Visibility.Visible:Visibility.None).justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10)}.margin({bottom:50}).backgroundColor(Color.White).alignItems(HorizontalAlign.Start)}.height('100%').width('100%')}}}price():number{let  number=0for (let i = 0; i <this.productList.length ; i++) {number+=this.productList[i].buyAmount*this.productList[i].price}return  number}

我们执行一下代码看看效果
在这里插入图片描述
在这里插入图片描述
到这里我们就实现了订单详情的展示


http://www.hkcw.cn/article/IZqMHpfgAu.shtml

相关文章

C# 控制台程序获取用户输入数据验证 不合规返回重新提示输入

在 C# 控制台程序中实现输入验证并循环重试&#xff0c;可以通过以下方式实现高效且用户友好的交互。以下是包含多种验证场景的完整解决方案&#xff1a; 一、通用输入验证框架 public static T GetValidInput<T>(string prompt, Func<string, (bool IsValid, T Val…

Linux:shell脚本常用命令

一、设置主机名称 1、查看主机名称 2、用文件的方式更改主机名称 重启后&#xff1a; 3、 通过命令修改主机名 重启后&#xff1a; 二、网络管理命令 1、查看网卡 2、设置网卡 &#xff08;1&#xff09;网卡未被设置过时 &#xff08;2&#xff09;当网卡被设定&#xff0c…

2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 匿名[校招]安全研究员(SAST方向) 一面问题回答框架 1. 自我介绍 2. 简历深挖&#xff08;漏洞挖掘&#x…

基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计

摘要 随着医疗信息化的不断推进以及“互联网医疗”模式的广泛普及&#xff0c;传统医院挂号流程中存在的排队时间长、资源分配不均等问题日益凸显&#xff0c;急需通过数字化手段加以解决。本研究设计并实现了一套基于Java、SpringBoot、Vue与UniAPP技术栈的医院预约挂号微信小…

制作一款打飞机游戏62:添加音效

添加音乐 今天&#xff0c;我们要添加音乐。 首先&#xff0c;打开包含音轨的文件夹&#xff0c;然后使用文本编辑器打开cowshrub文件。接着&#xff0c;打开捐赠卡&#xff0c;复制其中的音乐和音效数据&#xff0c;粘贴到cowshrub文件中&#xff0c;替换原有的音效块&#…

WPF log4net用法

WPF log4net用法 一、在工程中管理NuGet程序包&#xff0c;找到log4net&#xff0c;点击安装&#xff0c;如下图已成功安装&#xff1b; 二、在工程中右键添加新建项&#xff0c;选择应用程序配置文件&#xff08;后缀为.config&#xff09;,然后设置名称&#xff0c;这里设置…

视频监控管理平台EasyCVR安防监控小知识:视频监控AI智能分析的常见部署方式有哪些?

一、方案背景​ 随着视频监控技术迭代&#xff0c;AI智能分析成为提升系统价值的核心。通过实时处理视频流辅助决策&#xff0c;广泛应用于智慧社区、园区等场景。由于AI算法部署方式多样且各有适用场景&#xff0c;因此合理选择部署方式是项目成功的关键。 二、主流AI算法部署…

5G RedCap是什么-与标准5G的区别及支持路由器推荐

技术背景与重要性 从智能穿戴到工业传感器&#xff0c;物联网设备种类繁多&#xff0c;但并非所有设备都需要标准5G的全部功能。为满足这些中端应用的需求&#xff0c;3GPP在Release 17中引入了5G RedCap&#xff08;Reduced Capability&#xff09;&#xff0c;也称为5G NR-L…

vmware虚拟机固定IP

vmware虚拟机固定IP vmware虚拟机端设置 vmware 设置nat模式 打开设置“网络和Internet”&#xff0c;点击“更改适配器选项”&#xff0c;点击适配器VMnet8&#xff0c;修改IP和DNS相关配置 虚拟机端设置 root用户登录虚拟机&#xff0c;输入命令&#xff1a; vi /et…

据传苹果将在WWDC上发布iOS 26 而不是iOS 19

苹果可能会对其操作系统的编号方式做出重大改变&#xff0c;基于年份的新版系统会将iOS 19重新命名为 iOS 26&#xff0c;同时 macOS 也会以同样的方式命名。 苹果的编号系统相当简单&#xff0c;版本号每年都会像钟表一样定期更新。然而&#xff0c;今年秋天情况可能有所不同&…

【深度剖析】义齿定制行业数字化转型模式创新研究(上篇2:痛点和难点分析)

数字化转型正在重塑义齿行业的生态格局,但也面临技术融合与模式变革的深层挑战。当前,义齿定制行业正处于从传统手工制造向全流程数字化制造转型的关键阶段。3D扫描、CAD/CAM(计算机辅助设计与制造)、3D打印等技术的广泛应用,显著提升了义齿制作的精度和效率。传统石膏模型…

英语学习5.29

主语 be动词 the first to do sth ✅ 例句解析&#xff1a; He was the first to arrive at the meeting. 他是第一个到会议现场的人。 Zhai Zhigang was the first Chinese astronaut to walk in space. 翟志刚是第一个进行太空行走的中国宇航员。 She is the first in h…

【从零开始学习QT】快捷键、帮助文档、Qt窗口坐标体系

目录 Qt Creator 中的快捷键 使用帮助文档 Qt 窗口坐标体系 QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 Qt Creator 中的快捷键 • 注释&#xff1a;ctrl / • 运行&#xff1a;ctrl R • 编译&#xff1a;ctrl B • 字体缩放&#xff1a;ctrl 鼠标滑轮 • 查找&am…

docker网络相关内容详解

一、docker与k8s 一、Docker 核心解析 1. Docker 定义与架构 本质&#xff1a; 容器化平台&#xff08;构建容器化应用&#xff09;、进程管理软件&#xff08;守护进程管理容器生命周期&#xff09;。客户端&#xff08;docker cli&#xff09;与服务端&#xff08;docker ser…

制造企业生产数据分析全解析:5大类数据定义、分析方法与落地指南

在制造业精细化管理需求日益迫切的背景下&#xff0c;生产数据分析成为破解效率低下、成本高企、质量波动等难题的关键。本文系统解析制造企业生产数据的核心类别、分析逻辑及落地路径&#xff0c;提供从数据采集到决策优化的全流程方法论。 文章首先阐明生产数据分析的核心价…

C# 类和继承(屏蔽基类的成员)

屏蔽基类的成员 虽然派生类不能删除它继承的任何成员&#xff0c;但可以用与基类成员名称相同的成员来屏蔽&#xff08;mask&#xff09; 基类成员。这是继承的主要功能之一&#xff0c;非常实用。 例如&#xff0c;我们要继承包含某个特殊方法的基类。该方法虽然适合声明它的…

C语言——数组

一、数组的概念 数组是一组相同类型元素的集合&#xff1b;从这个概念中我们就可以发现2个有价值的信息&#xff1a; &#xff08;1&#xff09;数组中存放的是1个或者多个数据&#xff0c;但是数组元素个数不能为0。 &#xff08;2&#xff09;数组中存放的多个数据&#xff…

Flink

文章目录 Flink1.Flink简介2.为什么选择Flink2.1 传统数据处理架构2.2 大数据Lambda架构2.3 流处理架构2.4 Flink是理想的流计算框架2.5 Flink的优势 3.Flink应用场景3.1 事件驱动型应用3.2 数据分析应用3.3 数据流水线应用 4.Flink技术栈5.Flink体系架构 Flink 1.Flink简介 …

使用C# 快速删除Excel表格中的重复行数据-详解

目录 简介 使用工具 C# 删除Excel工作表中的重复行 C# 删除指定Excel单元格区域中的重复行 C# 基于特定列删除重复行 RemoveDuplicates 方法快速比较 简介 重复行是指在Excel表格中完全相同的多行数据。这些冗余行的存在可能源于多种原因&#xff0c;例如&#xff1a; …

OpenCv高阶(十九)——dlib关键点定位

文章目录 一、什么是人脸关键点定位&#xff1f;二、关键点模型的下载及关键信息的理解三、dlib关键点定位的简单实现&#xff08;1&#xff09;导入必要的库&#xff08;2&#xff09;从指定路径读取图像文件&#xff08;3&#xff09;创建dlib的正面人脸检测器对象&#xff0…