《仿盒马》app开发技术分享-- 账号注销(86)

简介: 上一节我们在欢迎页用户账号注销后给用户开通了一个账号恢复的功能,但是我们的账号注销一直都是从云数据库直接修改的。一直没有一个账号注销的入口,这一节我们来实现这样的一个入口,并且实现账号注销的功能

技术栈

Appgallery connect

开发准备

上一节我们在欢迎页用户账号注销后给用户开通了一个账号恢复的功能,但是我们的账号注销一直都是从云数据库直接修改的。一直没有一个账号注销的入口,这一节我们来实现这样的一个入口,并且实现账号注销的功能

功能分析

要实现账号的注销,首先我们要在个人中心页面功能列表新增入口,通过这个入口我们进入页面,先拿到当前登陆账号的信息,用户确认无误后,输入密码点击注销,这时会出现一个弹窗二次提醒,用户点击弹窗确认后实现账号的注销

代码实现

首先在个人中心页面新增入口

  new SectionLine("注销",
        "注销您的账号",
        $r('app.media.zhuxiao'),
        false),

添加对应的跳转事件

if (item.title=='注销'){
   
        if (this.user!=null) {
   
          router.pushUrl({
   url:'pages/view/LogOffPage'})

        }else {
   
          showToast("请先登录")

        }
      }

我们创建对应的注销页面,在进入页面之后拿到当前用户的信息,告知用户要注销的账号,以及一些细则

@State message: string ="提示信息";
  @State user: User|null=null
  @State psw:string = ''
 async aboutToAppear(): Promise<void> {
   
    const  userInfo= await StorageUtils.getAll('user')
    if (userInfo!=null) {
   
      this.user=JSON.parse(userInfo)
    }
  }

拿到用户信息之后我们实现对应的ui

 CommonTopBar({
    title: "账号注销", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})
      Text("尊敬的"+this.user?.user_name+"您好,"+this.message)
        .border({
   width:1,color:Color.Black})
        .borderRadius(15)
        .margin({
   left:15,right:15})
        .fontColor(Color.Black)
        .padding(10)
        .fontSize(16)
        .fontWeight(FontWeight.Bold)


      TextInput({
   text:this.psw,
        placeholder: '请输入密码'
      })
        .backgroundColor("#f6f6f6")
        .placeholderColor("#ff999595")
        .fontColor("#333333")
        .type(InputType.Password)
        .onChange((value: String) => {
   
          this.psw = value.toString()
        }).margin(20)

      Row() {
   
        Text('注销')
          .fontColor(Color.White)
          .fontSize(18)
          .backgroundColor("#ffe74141")
          .padding(10)
          .borderRadius(10)

然后我们实现点击注销按钮的逻辑


            let databaseZone = cloudDatabase.zone('default');
            let condition = new cloudDatabase.DatabaseQuery(user);
            condition.equalTo("user_name",this.user?.user_name).and().equalTo("psw",this.psw)
            let listData = await databaseZone.query(condition);
            let json = JSON.stringify(listData)
            let data1:User[]= JSON.parse(json)
            if (data1.length>0) {
   
              let userInfo = new user();
              userInfo.id=data1[0].id
              userInfo.user_id=data1[0].user_id
              userInfo.user_name=data1[0].user_name
              userInfo.psw=data1[0].psw
              userInfo.is_vip=false
              userInfo.user_code=data1[0].user_code;
              userInfo.is_log_off=true
              let num = await databaseZone.upsert(userInfo);
              if (num>0) {
   
                showToast("您的账号已注销")
              }
            }
      }

这里我们已经实现了注销,我们添加一个二次弹窗来让用户双重确认

  promptAction.showDialog({
   
              title: '提示',
              message: '您正在注销账号',
              buttons: [
                {
   
                  text: '取消',
                  color: '#ffffff'
                },
                {
   
                  text: '确认',
                  color: '#ffffff'
                }
              ],
            })
              .then(async data => {
   
                if (data.index==0) {
   
                }
                if (data.index==1) {
   
                  let databaseZone = cloudDatabase.zone('default');
                  let condition = new cloudDatabase.DatabaseQuery(user);
                  condition.equalTo("user_name",this.user?.user_name).and().equalTo("psw",this.psw)
                  let listData = await databaseZone.query(condition);
                  let json = JSON.stringify(listData)
                  let data1:User[]= JSON.parse(json)
                  if (data1.length>0) {
   
                    let userInfo = new user();
                    userInfo.id=data1[0].id
                    userInfo.user_id=data1[0].user_id
                    userInfo.user_name=data1[0].user_name
                    userInfo.psw=data1[0].psw
                    userInfo.is_vip=false
                    userInfo.user_code=data1[0].user_code;
                    userInfo.is_log_off=true
                    let num = await databaseZone.upsert(userInfo);
                    if (num>0) {
   
                      showToast("您的账号已注销")
                    }
                  }
                }
                console.info('showDialog success, click button: ' + data.index);
              })
              .catch((err: Error) => {
   
                console.info('showDialog error: ' + err);
              })

现在我们就会让用户二次确认注销。但是我们注销之后,我们修改了当前的账号状态,我们应用其实还是有账号信息,还是可以使用的,所以我们还需要把当前的账号退出,我们在注销成功的判断中实现账号退出

 let num = await databaseZone.upsert(userInfo);
                    if (num>0) {
   
                      showToast("您的账号已注销")

                      StorageUtils.remove('user')
                      router.back()
                      let eventData: emitter.EventData = {
   
                        data: {
   }
                      };

                      let innerEvent: emitter.InnerEvent = {
   
                        eventId: 2001,
                        priority: emitter.EventPriority.HIGH
                      };

                      emitter.emit(innerEvent, eventData);
                    }

到这里我们就实现了账号注销的功能了

相关文章
|
6月前
|
开发工具
鸿蒙开发:DevEcoStudio中的代码提取
如何快速的实现?可能很多老铁会第一时间想到,把代码复制出来呗,这有什么难的?虽然手动复制出来可以实现,但是未免太浪费时间了,本篇文章就告诉大家一个便捷的方式来实现,那就是DevEcoStudio中的代码提取。
133 0
鸿蒙开发:DevEcoStudio中的代码提取
|
6月前
|
存储 安全 Java
华为仓颉语言初识:并发编程之同步机制(下)
本文介绍了华为仓颉语言中的三种线程同步机制:MultiConditionMonitor、synchronized和ThreadLocal。MultiConditionMonitor继承自ReentrantMutex,通过条件变量实现复杂线程同步,文中以生产者-消费者模型为例展示了其用法。synchronized关键字自动加解锁,简化了ReentrantMutex的使用。ThreadLocal则通过线程局部存储实现线程隔离。这三种机制分别适用于不同场景,与Java中的同步工具类似,掌握后可以有效解决多线程并发问题。文章包含代码示例和测试结果,清晰地展示了各机制的实现原理和使用方法。
177 3
|
6月前
|
存储
《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
上一节我们实现订单与优惠券的联合提交时,我去到订单列表页面查看生成的订单信息,发现现在的订单从信息展示到价格计算全都是有问题的。所以紧急的把对应的问题修改一下。
248 70
|
6月前
|
数据库
《仿盒马》app开发技术分享-- 兑换商品取消订单&取消列表展示(77)
上一节我们实现了兑换订单待发货列表的展示逻辑,成功的在列表中展示出来,我们在订单条目中新增了两个按钮,确认揽收与取消订单,这一节我们要实现的功能是订单的取消,以及订单取消后取消列表的展示
120 1
|
6月前
《仿盒马》app开发技术分享-- 注销账号恢复(85)
上一节我们实现了欢迎页的逻辑,并且在欢迎页面实现了对账号状态的提示,但是如果我们的用户之前因为一些原因注销了账号,但现在又想用回我们的应用怎么办?我们这一节就要在注销账号的提示弹窗处,实现一个账号恢复功能,使我们的用户可以继续使用我们的应用
136 0
|
6月前
《仿盒马》app开发技术分享-- 个人中心页优化(62)
上一节我们实现了订单逻辑的优化,现在我们的app功能更加的完善了,并且随着我们的迭代逻辑疏漏越来越少,现在我们继续进行优化,在之前的业务逻辑中我们的个人中心页面展示了用户的余额以及积分商城入口,这里我们要展示余额准确的值,积分商城的入口我们修改为积分相关的功能入口。并且展示当前账号的积分余额
131 0
|
6月前
《仿盒马》app开发技术分享-- 兑换商品收货确认&已完成列表展示(79)
上一节我们实现了兑换商品订单的确认揽收功能,实现了tabs切换时的数据刷新,实现了待收货订单的列表展示。这一节我们要实现确认收货功能,并且实现待收货的列表展示功能
123 0
|
6月前
《仿盒马》app开发技术分享-- 兑换商品确认揽收&待收货列表展示(78)
上一节我们实现了订单取消功能,实现了tabs切换时的数据刷新,实现了已取消订单的列表展示。这一节我们要实现揽收功能,并且实现待收货的列表展示功能
157 0
|
6月前
《仿盒马》app开发技术分享-- 逻辑优化第三弹(83)
现在我们的app功能已经趋近完善,bug和缺失的细节也越来越少了,我们继续对app进行优化,首先是我们的积分页面,我们只实现了全部的积分展示内容,对收入和支出的积分明细并没有进行展示,这里我们要实现一下,然后就是我们的优惠券,我们已过期的优惠券并没有修改状态为已过期。
122 0

热门文章

最新文章