《仿盒马》app开发技术分享-- 回收金提现(53)

鸿蒙小林
• 阅读 3

技术栈

Appgallery connect

开发准备

上一节我们实现了银行卡的绑定跟回显,这一节我们要真正的实现银行卡提现的功能了,在这之前我们还需要对提现页的业务逻辑进行更进一步的优化,同时为了方便我们去进行数据间的交互,我们在个人信息模块新增了金额和积分的字段,方便我们其他页面的展示和隐藏

功能分析

要实现这些功能首先我们要获取当前账号下的回收金总额,这样我们在金额输入的时候才能根据他们两个实现用户多填写金额的判断,这样就会少对云数据库少进行一次请求,避免对资源浪费,同时我们提现的时候也要生成对应的记录,我们还需要操作moneyinfo表,因为我们在userinfo中新增了字段,同时还要操作userinfo表

代码实现

首先在提现页面先获取当前用户信息表userinfo下的账户总额

  let condition1=new cloudDatabase.DatabaseQuery(user_info)
    condition1.equalTo("user_id", this.user?.user_id)
    let listData1 = await databaseZone.query(condition1)
    let json1=JSON.stringify(listData1)
    let data1:UserInfo[] = JSON.parse(json1)
    this.userInfo=data1[0]

拿到之后我们传递给金额填写的自定义组件

//先在组件中定义
@Link userInfo:UserInfo|null

//传入数据
  InputItem({userInfo:this.userInfo})

修改对应的校验逻辑,展示当前账号回收金总额

 TextInput({ text: this.text, placeholder: '输入提现金额', controller: this.controller })
          .placeholderColor("#999999")
          .placeholderFont({ size: 28, weight: 400 })
          .caretColor("#FCDB29")
          .width(400)
          .height(50)
          .backgroundColor(null)
          .type(InputType.Number)
          .margin(20)
          .fontSize(14)
          .fontColor(Color.Black)
          .onChange((value: string) => {

            this.moneyNum=Number(value)
            this.text = value
            if (this.moneyNum>0&&this.moneyNum<=300) {
              if (this.moneyNum>this.userInfo!.money) {
                this.isPost=false
              }else {
                this.isPost=true
              }
            }else {
              this.isPost=false
            }
          })
      }
      Divider().width('100%').height(1)
      Text("可提现金额¥"+this.userInfo?.money+" (单笔最大提现额度:300)")
        .fontSize(15)
        .fontColor("#333333")

在提交按钮处新增提醒用户

 if (this.moneyNum>this.userInfo!.money) {
                    showToast('超过最大可提现金额,请重新输入')

                  }

这样我们就先处理好了逻辑,然后在确认提现的按钮处操作我们的两张表,分别把已经获取到的数据和填写的提现金额输入进去,我们需要拿账号总额去减去当前提现的额度,并且生成记录

   Text("确认提现")
              .width('100%')
              .fontColor(Color.White)
              .borderRadius(15)
              .padding(10)
              .textAlign(TextAlign.Center)
              .fontColor(this.isPost?Color.Black:Color.White)
              .backgroundColor(this.isPost?"#ffff6363":$r('app.color.color_999'))
              .onClick(async ()=>{
                if (this.isPost) {
                  let money=new money_info()
                  money.id=Math.floor(Math.random() * 1000000)
                  money.user_id=this.user!.user_id
                  money.money=String(this.moneyNum)
                  money.all_money=''
                  money.money_type='1'
                  money.address='银行卡提现'
                  money.year=this.year
                  money.month=this.month
                  money.day=this.day
                  money.time=this.time
                  money.create_time=this.year+"-"+this.month+"-"+this.day+" "+this.time
                  let nums =  await databaseZone.upsert(money);



                  let userData=new user_info()
                  userData.id=this.userInfo!.id
                  userData.user_id=this.userInfo!.user_id
                  userData.sex=this.userInfo!.sex
                  userData.bind_phone=this.userInfo!.bind_phone
                  userData.create_time=this.userInfo!.create_time
                  userData.nickname=this.userInfo!.nickname
                  userData.head_img=this.userInfo!.head_img
                  if (this.userInfo?.money!=null) {
                    userData.money=this.userInfo!.money-this.moneyNum
                  }else {
                    userData.money=0
                  }
                  if (this.userInfo?.points!=null) {
                    userData.points=this.userInfo!.points
                  }else {
                    userData.points=0
                  }
                  let s= await databaseZone.upsert(userData);

                  if (s>0) {
                    router.pushUrl({url:'pages/recycle/money/SuccessPage'})
                  }
                }else {
                  if (this.moneyNum==0){
                    showToast("提现金额单笔至少1元")
                  }
                  if (this.moneyNum>300) {
                    showToast('单日限额300元,请重新输入')
                  }
                  if (this.moneyNum>this.userInfo!.money) {
                    showToast('超过最大可提现金额,请重新输入')

                  }
                }
              })

在提现成功后,我们需要给用户一个反馈,这时候我们就新增一个简单的页面展示状态即可

```css import { CommonTopBar } from '../../widget/CommonTopBar'; import { router } from '@kit.ArkUI';

@Entry @Component struct SuccessPage { @State message: string = 'Hello World';

build() { Column() { CommonTopBar({ title: "提现状态", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true}) Text("提现成功") .textAlign(TextAlign.Center) .fontColor(Color.Black) .fontSize(20) .fontWeight(FontWeight.Bold) .margin({top:100})

  Image($r('app.media.success_money'))
    .height(100)
    .width(100)
    .margin({top:20})



  Text("确认")
    .textAlign(TextAlign.Center)
    .width('95%')
    .padding(10)
    .fontColor(Color.White)
    .borderRadius(10)
    .backgroundColor("#fffa4444")
    .margin({top:100})
    .onClick(()=>{
      router.back()
    })
}
.backgroundColor(Color.White)
.height('100%')
.width('100%')

} }

点赞
收藏
评论区
推荐文章
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 旧物回收页(静态)(40)
技术栈Appgalleryconnect开发准备上一节我们进行了购物车业务逻辑的优化,使我们的程序变得更加健壮,这一节我们将要开始电商业务以外的内容,旧物回收,这是一个全新的业务模块,我们将要在这里实现对应的,回收金,积分,回收业务相关内容功能分析要想实现
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 回收金收支查询(49)
技术栈Appgalleryconnect开发准备上一节我们实现了回收金页面的部分布局填充和内容展示,并且实现了当前订单收益总金额的展示,以及金额的隐藏,这一节我们来实现当前用户收支列表的展示,在这之前,我们先要修改一下我们recycleinfo表,我们把规
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 回收金提现准备页(50)
技术栈Appgalleryconnect开发准备上一节我们实现了回收金的收入、支出记录查询,并且在订单完成后成功创建对应的收支记录,但是我们暂时只有收入记录,并没有支出记录,这一节我们将要实现账号的回收金提现功能,从商业角度实现app应用的正向循环功能分析
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 设置安全锁(51)
技术栈Appgalleryconnect开发准备上一节我们实现了提现页面以及部分组件的业务逻辑,那么我们在提现这一步为了更多的安全层面的考虑,设置了一个安全锁,用户只要开启了安全锁,那么每次的提现,都需要把本地的密码提交到云端核对安全锁的内容才可以执行后续
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 绑定银行卡回显(52)
技术栈Appgalleryconnect开发准备上一节我们实现了安全锁的绑定,这一切都是为了帮助用户在提现流程上能有更好更安全的体验,现在我们开始正式着手提现相关的流程,我们先进行提现银行卡的绑定,绑定成功后我们关闭页面把数据回显到提现页功能分析首先我们要
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 回收金提现记录查询(54)
技术栈Appgalleryconnect开发准备上一节我们实现了回收金提现的功能,并且成功展示了当前账户的支出列表,但是我们的提现相关的记录并没有很好的给用户做出展示,用户只知道当前账户提现扣款,并不知道回收金的去向,这一节我们就要实现回收金记录的查询添加
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 回收金提现安全锁校验(55)
技术栈Appgalleryconnect开发准备上一节我们实现了回收金提现记录的展示功能,我们回收金相关的内容更加的丰富了,在之前的业务逻辑中我们添加了一个设置安全锁的功能,虽然我们成功设置了安全锁,也把对应的表信息提交到云端,但是我们并没有在提现的流程中
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 个人中心页优化(62)
技术栈Appgalleryconnect开发准备上一节我们实现了订单逻辑的优化,现在我们的app功能更加的完善了,并且随着我们的迭代逻辑疏漏越来越少,现在我们继续进行优化,在之前的业务逻辑中我们的个人中心页面展示了用户的余额以及积分商城入口,这里我们要展示
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 我的积分页(63)
技术栈Appgalleryconnect开发准备上一节我们实现了个人中心页面的业务逻辑优化,成功的在用户登陆退出状态下展示对应的组件内容,这一节我们来实现app中另外一个比较重要的模块积分模块。功能分析因为我们的回收订单是跟回收金积分是绑定的,我们在完成回
鸿蒙小林 鸿蒙小林
4小时前
《仿盒马》app开发技术分享-- 兑换订单列表框架(75)
技术栈Appgalleryconnect开发准备上一节我们针对订单兑换的业务逻辑进行了完善,成功的在兑换物品之后修改了用户信息的修改,新增了积分消费的记录。这一节我们实现订单创建之后进入的列表展示页框架。功能分析兑换商品的订单列表框架我们选择使用tabs,