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

鸿蒙小林
• 阅读 5

技术栈

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);
                    }

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

点赞
收藏
评论区
推荐文章
陈杨 陈杨
1个月前
HarmonyOS5云服务技术分享--账号关联开发指南
👋大家好!今天我们来聊聊如何在HarmonyOS应用开发中,使用ArkTS(API12)实现账号关联功能。无论是社交应用、游戏还是工具类App,账号体系都是用户体验的重要一环。通过灵活的账号关联功能,用户可以用手机、邮箱、华为账号等多种方式登录,还能自由
陈杨 陈杨
1个月前
HarmonyOS5云服务技术分享--退出登录文档问题
Hey小伙伴们~今天咱们来聊聊HarmonyOS应用开发中关于用户认证的那些重要操作,特别是登出、账号注销和重新认证这些容易让人懵圈的功能。准备好瓜子饮料,咱们开整!一、优雅的用户登出姿势当用户想切换账号或者彻底离开时,咱们可不能简单粗暴地直接关闭应用。试
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 个人中心页面(19)
技术栈Appgalleryconnect开发准备上一节我们实现了分类页面的所有联动效果,这一节我们要开始完成一个新的页面,这个页面是我们主界面的第四个板块,就是个人中心页面。在这个模块,我们可以显示一些用户信息,以及用户相关的各类功能的入口功能分析要实现个
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 订单列表页(33)
技术栈Appgalleryconnect开发准备上一节我们实现了订单详情的展示,但是我们的确认订单页面只在下单成功后才会出现供用户查看,现在我们要有一个常驻的入口让用户去随时查看自己的订单以及订单状态,订单状态分为多个,还需要给用户提供切换的功能功能分析要
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 旧物回收订单列表(43)
技术栈Appgalleryconnect开发准备上一节我们实现了订单的创建,并且成功吧数据提交到云数据库中,这一节我们实现的内容是展示我们提交的订单列表功能分析要实现订单列表的展示,首先我们要查询对应用户下的订单列表,查询出对应的订单列表后,展示出对应的数
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 回收金查询页面(48)
技术栈Appgalleryconnect开发准备上一节我们实现了查看当前账号下的预收益,以及当下收益,并且展示了已完成订单的列表,现在我们可以针对收益来做更多的内容了,在之前的开发中我们在个人中心页面实现了一个静态的金额展示,后续我们将会在这里展示当前账号
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 回收金提现准备页(50)
技术栈Appgalleryconnect开发准备上一节我们实现了回收金的收入、支出记录查询,并且在订单完成后成功创建对应的收支记录,但是我们暂时只有收入记录,并没有支出记录,这一节我们将要实现账号的回收金提现功能,从商业角度实现app应用的正向循环功能分析
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 优惠券展示页(57)
技术栈Appgalleryconnect开发准备上一节我们实现了优惠券的领取功能,并且在云端已经成功查询出优惠券信息,那么我们需要来实现一个优惠券展示的页面来向用户展示当前账号下的优惠券信息,辅助用户更好的去购买需要的商品,因为优惠券会有多种状态,在展示时
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 兑换商品确认揽收&待收货列表展示(78)
技术栈Appgalleryconnect开发准备上一节我们实现了订单取消功能,实现了tabs切换时的数据刷新,实现了已取消订单的列表展示。这一节我们要实现揽收功能,并且实现待收货的列表展示功能功能分析当我们点击确认揽收的时候,修改订单状态ordertype
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 注销账号恢复(85)
技术栈Appgalleryconnect开发准备上一节我们实现了欢迎页的逻辑,并且在欢迎页面实现了对账号状态的提示,但是如果我们的用户之前因为一些原因注销了账号,但现在又想用回我们的应用怎么办?我们这一节就要在注销账号的提示弹窗处,实现一个账号恢复功能,使