《仿盒马》app开发技术分享-- 订单地址修改(31)

简介: 上一节我们实现了订单备注弹窗,订单商品列表的提交,订单列表的提交,提交之后的业务逻辑我们并没有去处理,那么订单提交之后我们需要进入到什么页面呢?这时候我们需要一个过渡页面,它能给我们提供更多的订单相关的入口,帮助用户去确认内容,或者查看订单相关内容

技术栈

Appgallery connect

开发准备

上一节我们实现了订单备注弹窗,订单商品列表的提交,订单列表的提交,提交之后的业务逻辑我们并没有去处理,那么订单提交之后我们需要进入到什么页面呢?这时候我们需要一个过渡页面,它能给我们提供更多的订单相关的入口,帮助用户去确认内容,或者查看订单相关内容

功能分析

要实现这样一个页面,首先我们要做的就是在这个页面我们能拿到用户的信息,对应的订单id,这样的话我们就可以通过一个查询订单的按钮或者入口进入到订单的详情界面,然后我们需要有一个地址确认的页面,这能帮助用户核对地址的准确性,同时我们还需要提供一个地址修改的信息展示,辅助用户进行错误地址的修改

代码实现

首先我们来实现,点击事件的跳转,在提交订单按钮添加要跳转的页面路径和传递过去的值(要在提交成功后跳转)

let num = await databaseZone.upsert(orderPush);
if (num>0) {
router.back({url:'pages/view/OrderSuccessPage',params:{status:true}})
}
然后在订单状态页面接收数据,展示查看订单的入口和当前订单的地址信息

import { OrderList } from '../entity/OrderList';
import showToast from '../utils/ToastUtils';
import { router } from '@kit.ArkUI';
import { CommonTopBar } from '../widget/CommonTopBar';

@Entry
@Component
struct OrderSuccessPage {
  @State orderInfo:OrderList|null=null
  @State addressSuccess:boolean=false
  @State isSuccess:boolean=false
  onPageShow(): void {
    let params = (this.getUIContext().getRouter().getParams() as Record<string, boolean>)['status']
    if (params!=undefined){
      this.isSuccess=params
    }
  }
  aboutToAppear(): void {
    const params = this.getUIContext().getRouter().getParams() as OrderList;
    if (params!=null) {
      this.orderInfo=params
    }
  }
  build() {
    Column() {
      CommonTopBar({ title: "订单状态", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})
      Column({space:15}){
        Row({space:10}){
          Image($r('app.media.order_success'))
            .height(30)
            .width(30)
          Text("下单成功!")
            .fontSize(24)
            .fontColor(Color.Black)
            .fontWeight(FontWeight.Bold)
        }
        Text("您的包裹正准备发出,请保持联系通畅哦~~")
          .fontSize(16)
          .fontColor(Color.Black)

        Text("查看订单")
          .fontSize(16)
          .fontColor(Color.Black)
          .padding(10)
          .borderRadius(10)
          .border({width:1,color:Color.Grey})
          .onClick(()=>{
            showToast("订单号是:"+this.orderInfo!.order_code)
          })
      }
      .padding(30)

      Column({space:10}){
        Text("收货地址")
          .fontSize(16)
          .fontColor(Color.Black)

          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)
        Row({space:10}){
          Text()
          Blank()
          Text("修改地址")
            .fontSize(14)
            .fontColor(Color.Black)
            .padding(5)
            .borderRadius(5)
            .border({width:1,color:Color.Grey})
            .visibility(this.addressSuccess?Visibility.None:Visibility.Visible)
            .onClick(()=>{
              router.pushUrl({url:'pages/view/EditOrderAddressPage',params:{info:JSON.stringify(this.orderInfo)}})
            })



          Text("确认地址")
            .fontSize(14)
            .fontColor(Color.Black)
            .padding(5)
            .borderRadius(5)
            .backgroundColor(Color.White)
            .onClick(()=>{
              this.addressSuccess=true
            })
        }
        .width('100%')
        .justifyContent(FlexAlign.SpaceBetween)
      }
      .backgroundColor("#fff6db95")
      .padding(20)
      .width('90%')
      .borderRadius(10)
      .alignItems(HorizontalAlign.Start)


    }
    .backgroundColor(Color.White)
    .height('100%')
    .width('100%')
  }
}

我们执行一下代码,看看效果

订单详情我们到下一节实现,现在我们点击地址修改

这里定义一个变量
@State addressSuccess:boolean=false
当我们不需要修改地址,点击确认地址之后,我们要隐藏对应的修改地址按钮

相关代码:
.visibility(this.addressSuccess?Visibility.None:Visibility.Visible)

这时修改地址按钮已经消失了

当我们的地址需要修改,我们点击修改地址按钮,来到订单地址修改页,我们依旧要接收对应的数据集在当前页面加载,我们展示的内容有当前选择的地址,以及要修改的地址,要修改的地址我们从地址列表也重新选择实现

import { OrderList } from '../entity/OrderList';
import { router } from '@kit.ArkUI';
import { AddressList } from '../entity/AddressList';
import { cloudDatabase } from '@kit.CloudFoundationKit';
import { order_list } from '../clouddb/order_list';
import { CommonTopBar } from '../widget/CommonTopBar';

@Entry
@Component
struct EditOrderAddressPage {
  @State orderInfo:OrderList|null=null
  @State addressInfo:AddressList|null=null

  aboutToAppear(): void {

    let params = (this.getUIContext().getRouter().getParams() as Record<string, string>)['info']
    if (params!=null&&params!=undefined) {
      this.orderInfo=JSON.parse(params)
    }
  }
  onPageShow(): void {
    let params = (this.getUIContext().getRouter().getParams() as Record<string, string>)['address']
    if (params!=''&&params!=undefined){
      this.addressInfo=JSON.parse(params)
    }
  }
  build() {
    Column() {
      CommonTopBar({ title: "订单地址修改", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})

      Row({space:15}){
        Image($r('app.media.edit_address_notice'))
          .height(15)
          .width(15)

        Text("提示:地址仅可以修改一次,请谨慎修改!!!")
          .fontSize(14)
          .fontColor(Color.Black)
      }
      .width('100%')
      .height(50)
      .alignItems(VerticalAlign.Center)
      .padding(10)
      .backgroundColor("#ffe7bdbd")

      Column({space:20}){

        Column({space:10}){
          Text("原地址")
            .fontColor(Color.Black)
            .fontSize(14)
          Row(){
            Text(this.orderInfo?.nickname)
              .fontColor(Color.Black)
              .fontSize(14)
            Text(this.orderInfo?.phone)
              .fontColor(Color.Black)
              .fontSize(14)
          }
          Text(this.orderInfo?.address)
            .fontColor(Color.Black)
            .fontSize(14)
        }
        .borderRadius(10)
        .alignItems(HorizontalAlign.Start)
        .width('80%')
        .padding(10)
        .backgroundColor(Color.Pink)

        Column({space:10}){
          Row(){
            Text("新地址")
              .fontColor(Color.Black)
              .fontSize(14)
            Text("选择地址 >")
              .fontColor(Color.Black)
              .fontSize(14)
              .onClick(()=>{
                router.pushUrl({url:'pages/view/AddressListPage',params:{edit_status:true}})
              })
          }.width('100%')
          .justifyContent(FlexAlign.SpaceBetween)

          Row(){
            Text(this.addressInfo?.nikeName)
              .fontColor(Color.Black)
              .fontSize(14)
            Text(this.addressInfo?.phone)
              .fontColor(Color.Black)
              .fontSize(14)
          }
          Text(this.addressInfo?.address)
            .fontColor(Color.Black)
            .fontSize(14)
        }
        .alignItems(HorizontalAlign.Start)
        .width('80%')
        .padding(10)
        .backgroundColor(Color.Pink)
        .borderRadius(10)
      }
      .margin({top:20})
      .layoutWeight(1)

      Text("提交修改")
        .fontColor(Color.Black)
        .width('80%')
        .height(50)
        .backgroundColor(Color.Pink)
        .textAlign(TextAlign.Center)
        .margin({bottom:20})
        .borderRadius(10)


    }
    .backgroundColor(Color.White)
    .height('100%')
    .width('100%')
  }
}

未选择修改地址的状态,选择了地址之后.我们在提交修改按钮重新提交我们的订单信息,把新地址提交到云数据库

Text("提交修改")
        .fontColor(Color.Black)
        .width('80%')
        .height(50)
        .backgroundColor(Color.Pink)
        .textAlign(TextAlign.Center)
        .margin({bottom:20})
        .borderRadius(10)
        .onClick(async ()=>{
          let databaseZone = cloudDatabase.zone('default');
          let orderPush = new order_list();
          orderPush.id=this.orderInfo!.id
          orderPush.user_id=this.orderInfo!.user_id
          orderPush.order_product_id=this.orderInfo!.order_product_id
          orderPush.order_code=this.orderInfo!.order_code
          orderPush.order_status=this.orderInfo!.order_status
          orderPush.order_remark=this.orderInfo!.order_remark
          orderPush.address=this.addressInfo!.address
          orderPush.nickname=this.addressInfo!.nikeName
          orderPush.phone=this.addressInfo!.phone
          orderPush.order_create_time=this.orderInfo!.order_create_time
          orderPush.order_pay_time=this.orderInfo!.order_pay_time
          let num = await databaseZone.upsert(orderPush);
          if (num>0) {
            router.back({url:'pages/view/OrderSuccessPage',params:{status:true}})
          }
        })

到这里我们的地址修改主要功能就实现了,后续我们只需要打磨细节即可

相关文章
|
移动开发
钉钉H5微应用配置IP,应用首页地址报错:app url exceeds max length limit,这个怎么处理?
钉钉H5微应用配置IP,应用首页地址报错:app url exceeds max length limit,这个怎么处理?
1274 0
|
7月前
|
存储 定位技术 数据库
《仿盒马》app开发技术分享-- 新增地址(28)
上一节我们实现了地图选点,获取当前位置,在地图上添加标记,根据当前的定位获取poi地址列表等功能,这些全部都为了我们这一节而铺垫,这一节我们要实现的是新增地址,把我们的用户信息,填写收件人、门牌号、手机号、经纬度、详细地址等信息添加到我们的云数据库中,然后在地址查询列表里展示出来。
175 2
|
JSON 数据库 数据格式
《仿盒马》app开发技术分享-- 兑换页地址商品展示(71)
上一节我们实现了商品兑换的校验功能,这能很好的帮助用户节省更多的时间,同时也能减小服务器的开销,同时我们的业务逻辑也会更加的完善功能也更加的丰富了,这一节我们实现校验通过后的内容,实现地址的选择和兑换商品信息的展示
122 0
|
7月前
|
JSON 前端开发 数据库
《仿盒马》app开发技术分享-- 地址管理页(24)
上一节我们实现了个人信息页面的信息展示和页面修改,并且实现了数据的同步修改,这一节我们来实现电商应用里比较重要的模块,地址模块。首先我们来实现地址的展示。
166 0
|
7月前
|
存储
《仿盒马》app开发技术分享-- 首页地址选择&会员码(8)
上一节我们实现了商品流标的创建,数据的填充和展示,并且在商品信息表中添加了许多我们后去需要使用到的参数。让我们的首页功能更加的丰富,截至目前首页板块可以说是完成了百分之五十了,跟展示有关的基本都已完成,接下来就是我们对业务逻辑的完善,当然了我们的首页内容还缺少很多,这一节我们来把顶部toolbar的地址选择,会员码展示实现一下
119 0
|
JSON Java 定位技术
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
5299 1
|
Web App开发 缓存 编解码
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适用于复杂直播场景。SRS是一款强大的开源流媒体服务器,支持多种协议,起初为RTMP,现扩展至HLS、SRT等。在FFmpeg 6.1之前,推送给SRS的HEVC流不受支持。要播放RTMP流,Android应用可使用ExoPlayer,需在`build.gradle`导入ExoPlayer及RTMP扩展,并根据URL类型创建MediaSource。若SRS播放黑屏,需在配置文件中开启`gop_cache`以缓存关键帧。
814 2
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
243 0
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
277 0

热门文章

最新文章