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

《仿盒马》app开发技术分享-- 回收金提现安全锁校验(端云一体)

开发准备

上一节我们实现了回收金提现记录的展示功能,我们回收金相关的内容更加的丰富了,在之前的业务逻辑中我们添加了一个设置安全锁的功能,虽然我们成功设置了安全锁,也把对应的表信息提交到云端,但是我们并没有在提现的流程中去使用安全锁相关的内容,这一节我们就把安全锁相关的内容跟提现流程关联起来,让我们的功能安全性更高

功能分析

首先我们在进入提现页面的时候要先查询当前userid下的安全锁表有没有数据,有数据我们就拿当前安全锁开启的状态,如果是开启的,那我们就在用户点击提现按钮的时候进行一个弹窗校验,根据用户在弹窗里绘制的值跟我们设置的安全锁的值进行匹配,如果匹配成功,就执行内容的添加操作,如果不成功,提醒用户,安全锁验证失败

代码实现

首先我们在提现页面先查询对应的表内容

let databaseZone = cloudDatabase.zone('default');
let condition3 = new cloudDatabase.DatabaseQuery(verify_info);condition.equalTo("user_id", this.user?.user_id)let listData3 = await databaseZone.query(condition3);let json3 = JSON.stringify(listData3)let data3: VerifyInfo[] = JSON.parse(json3)this.verifyInfo=data3

然后我们进行数据源的非空判断,安全锁开关判断

 if (this.verifyInfo.length>0) {if (this.verifyInfo[0].open_lock) {}}

都没问题之后我们需要有一个校验的弹窗

import showToast from '../utils/ToastUtils';@Preview
@CustomDialog
export struct WithdrawalLockDialog {@State passwords: Number[]=[];public callback:(passwords:string)=>void=():void=>{}private patternLockController: PatternLockController = new PatternLockController();controller: CustomDialogController;build() {Column({space:10}) {Text("请验证您的安全密码!").fontColor(Color.White).fontWeight(FontWeight.Bold).fontSize(16).width('100%').textAlign(TextAlign.Center).padding(10)PatternLock(this.patternLockController).sideLength(300).circleRadius(9).pathStrokeWidth(5).borderRadius(10).activeColor('#707070').selectedColor('#707070').pathColor('#707070').backgroundColor('#F5F5F5').autoReset(true).onDotConnect((index: number) => {console.log("onDotConnect index: " + index);}).onPatternComplete((input: Array<number>) => {if (input.length < 5) {showToast("图案连接数不能小于5")return;}const str: string = JSON.stringify(input);this.callback(str)this.controller.close()})}.width('100%').height(400)}
}

这里我们把弹窗中输入的值通过回调传递出去,在提现页面引用弹窗

private dialogController: CustomDialogController = new CustomDialogController({builder: WithdrawalLockDialog({callback: async (str:string)=>{}}),alignment: DialogAlignment.Bottom,customStyle:false});

然后我们把输入的值跟表中存储的值进行校验,验证成功后提交对应的记录

 if (str==this.verifyInfo[0].lock_str) {showToast("校验成功")let record=new withdrawal_record()record.id=Math.floor(Math.random() * 1000000)record.user_id=this.user!.user_idrecord.bank_name=this.bankList[0].bank_namerecord.bank_num=this.bankList[0].bank_cardrecord.creat_time=this.year+"-"+this.month+"-"+this.day+" "+this.timerecord.type_str='0'record.money=this.moneyNumlet status =  await databaseZone.upsert(record);let money=new money_info()money.id=Math.floor(Math.random() * 1000000)money.user_id=this.user!.user_idmoney.money=String(this.moneyNum)money.all_money=''money.money_type='1'money.address='银行卡提现'money.year=this.yearmoney.month=this.monthmoney.day=this.daymoney.time=this.timemoney.create_time=this.year+"-"+this.month+"-"+this.day+" "+this.timelet nums =  await databaseZone.upsert(money);let userData=new user_info()userData.id=this.userInfo!.iduserData.user_id=this.userInfo!.user_iduserData.sex=this.userInfo!.sexuserData.bind_phone=this.userInfo!.bind_phoneuserData.create_time=this.userInfo!.create_timeuserData.nickname=this.userInfo!.nicknameuserData.head_img=this.userInfo!.head_imgif (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'})}this.dialogController.close()}else {showToast("安全锁验证失败!")}

我们执行代码查看一下开启安全锁后提现的效果
在这里插入图片描述

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

相关文章:

  • NodeJS中老生代和新生代和垃圾回收机制
  • Arduino入门教程:6、计时与定时
  • 阿帕奇基金会软件授权与公司贡献者许可协议(中英双语版)
  • (笔记)1.web3学习-区块链技术
  • Web3-代币ERC20/ERC721以及合约安全溢出和下溢的研究
  • EXCEL破解VBA密码 ( 仅供学习研究使用)
  • [VSCode] VSCode 设置 python 的编译器
  • 40-Oracle 23 ai Bigfile~Smallfile-Basicfile~Securefile矩阵对比
  • NodeJS里经常用到require,require的模块加载机制是什么
  • lua版的Frpc
  • go.work
  • 车载通信架构 --- IP ECU 在连接被拒绝后的重连机制
  • Spring Cloud Gateway 全面学习指南
  • 论文略读:MLPs Learn In-Context on Regression and Classification Tasks
  • CM工作室发展史 下
  • Python装饰器:优雅增强函数行为的艺术
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月14日第108弹
  • Win10安装DockerDesktop踩坑记
  • Java学习_‘+’作连接符的情况
  • Go语言底层(五): 深入浅出Go语言的ants协程池
  • ASR语音转写技术全景解析:从原理到实战
  • shell三剑客
  • FileBrowser Quantum更丝滑的文件网盘共享FileBrowser的平替
  • Python命名空间与作用域:深入解析名称查找的艺术
  • halcon开发之我与阿莲的故事1
  • Web自动化测试详细流程和步骤
  • Vue框架详解与Element
  • Python Day51 学习(日志Day20复习)
  • Atcoder Beginner Contest 410 题解报告
  • 来自麻省理工和AI制药公司 Recursion 的结构与结合亲和力预测模型Boltz-2,解决小分子药物发现的关键问题