《仿盒马》app开发技术分享-- 个人中心&关于逻辑完善(36)

鸿蒙小林
• 阅读 4

技术栈

Appgallery connect

开发准备

上一节我们针对首页的一些静态按钮做了一些功能上的完善,这一节我们要针对已有的功能做一下逻辑完善,经过测试,在一开始的登录中我们登录之后当前页面的状态并不能马上的展示出来,并且缺少退出功能,退出后我们同样要立马让页面修改为用户未登录的状态,在个人中心页面关于功能缺失,这一节我们就来完善对应的内容

功能分析

要实现状态的修改,我们在登录以及退出登录页面间通信采用emitter来发送和接收消息,在消息接收成功后的回调里修改当前页面的参数,同时销毁存储的用户信息,关于页面我们直接添加当前应用以及作者的信息即可,同时为了能更好的方便同学们查看其他内容,在关于中我使用webview展示了某站的个人主页,可以查看最新的文章列表,同时在个人信息页面添加退出按钮和对应逻辑

代码实现

首先修改登录页面添加对应的逻辑,用来发送我们的登录状态

 async login(): Promise<void>{
    if (this.acc===''&&this.psw==='') {
      promptAction.showToast({message:"请输入账号或密码"})
      return
    }else {
      let condition = new cloudDatabase.DatabaseQuery(user);
      condition.equalTo("user_name",this.acc).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) {
        if (data1[0].is_log_off) {
          promptAction.showDialog({
            title: '提示',
            message: '改账号已经注销',
            buttons: [
              {
                text: '去处理',
                color: '#ffffff'
              },
              {
                text: '关闭',
                color: '#ffffff'
              }
            ],
          })
            .then(data => {
              showToast(data.index+"")
              console.info('showDialog success, click button: ' + data.index);
            })
            .catch((err: Error) => {
              console.info('showDialog error: ' + err);
            })
        }else {

          let eventData: emitter.EventData = {
            data: {}
          };

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

          emitter.emit(innerEvent, eventData);
          StorageUtils.set("user",JSON.stringify(data1[0]))
          router.back({
            url: 'pages/Index',
            params: {
              info: user
            }
          });
        }


      }else {
        showToast("请检查用户名或密码")
      }
      hilog.info(0x0000, 'testTag', `Succeeded in querying data, result: ${data1}`);
    }
  }

在这里我们通知后在我的页面组件中去接收,同时查询用户信息赋值,实现修改页面状态

aboutToAppear(): void {
    let innerEvent: emitter.InnerEvent = {
      eventId: 2001
    };
    let callback: Callback<emitter.EventData> = async (eventData: emitter.EventData) => {
      console.info(`eventData: ${JSON.stringify(eventData)}`);
      const value = await StorageUtils.getAll('user');
      if (value != "") {
        this.user = JSON.parse(value)
        if (this.user != null) {
          let databaseZone = cloudDatabase.zone('default');
          let condition = new cloudDatabase.DatabaseQuery(user_info);
          condition.equalTo("user_id", this.user?.user_id)
          let listData = await databaseZone.query(condition);
          let json = JSON.stringify(listData)
          let data2: UserInfo[] = JSON.parse(json)
          this.userInfo = data2[0]
          hilog.error(0x0000, 'testTag', `Failed to query data, code: ${data2}`);
        }
      }else {
        this.userInfo=null
        this.user=null
      }
    }
    emitter.on(innerEvent, callback);
  }

完成之后我们在个人信息页面新增退出按钮,添加发送事件,以及清空用户信息缓存

 Text("退出")
          .width('50%')
          .height(45)
          .fontColor(Color.White)
          .fontSize(16)
          .textAlign(TextAlign.Center)
          .backgroundColor("#fffc1515")
          .borderRadius(10)
          .margin({top:20})
          .onClick(()=>{
            StorageUtils.remove('user')
              router.back()
            let eventData: emitter.EventData = {
              data: {}
            };

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

            emitter.emit(innerEvent, eventData);
          })

我们继续实现关于页面的逻辑,在这个页面我们只需要填充对应的信息即可,只需要注意跳转到web页面的事件

import { CommonTopBar } from '../widget/CommonTopBar';
import { router } from '@kit.ArkUI';
import { WebUrlModel } from '../model/WebUrlModel';

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

  build() {
    Column() {
      CommonTopBar({ title: "关于", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})
      Column({space:20}){
        Image($r('app.media.e_logo'))
          .height(200)
          .width(200)
          .borderRadius(10)
          .margin({top:20})

        Text("一款端云一体化的购物App")
          .fontSize(16)
          .fontWeight(FontWeight.Bold)
          .fontColor(Color.Black)


        Text("开发者:鸿蒙小林")
          .fontSize(16)
          .fontWeight(FontWeight.Bold)
          .fontColor(Color.Black)



        Text("点击查看app对应说明文章")
          .fontSize(16)
          .fontWeight(FontWeight.Bold)
          .fontColor(Color.Blue)
          .onClick(()=>{
            let url: WebUrlModel = {
              url: '主页地址'
            };
            router.pushUrl({url:'pages/view/WebPage',params:url})
          })
      }
      .backgroundColor(Color.White)
      .height('100%')
      .width('100%')
      .alignItems(HorizontalAlign.Center)
    }
    .height('100%')
    .width('100%')
  }
}

点击后跳转到对应的web 展示页面

import { webview } from '@kit.ArkWeb';
import { router } from '@kit.ArkUI';
import { WebUrlModel } from '../model/WebUrlModel';
import { CommonTopBar } from '../widget/CommonTopBar';

@Entry
@Component
struct WebPage {
  @State urlInfo: WebUrlModel = null!;
  @State mode: MixedMode = MixedMode.All;

  aboutToAppear(): void {
    this.urlInfo = router.getParams() as WebUrlModel
  }

  webController: webview.WebviewController = new webview.WebviewController();

  build() {
    Column() {
      CommonTopBar({ title: "我的主页", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})
      Web({ src: this.urlInfo.url, controller: this.webController })
        .height('100%')
        .width('100%')
        .mixedMode(this.mode)
        .domStorageAccess(true)


    }
    .height('100%')
    .width('100%')
  }
}

到这里我们就实现了对已有功能的业务逻辑完善了

点赞
收藏
评论区
推荐文章
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 个人中心页or静态头像选择(业务逻辑)(22)
技术栈Appgalleryconnect开发准备上一节我们实现了登录页面的业务逻辑,并且成功的实现了数据的查询,同时我们新增了用户首选项的工具类,现在主界面往登录页面跳转,登录成功后我们关闭登录页面,这时候我们就会回到个人中心页面,那么现在我们的业务逻辑是
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 商品搜索页(顶部搜索bar&热门搜索)(37)
技术栈Appgalleryconnect开发准备随着开发功能的逐渐深入,我们的应用逐渐趋于完善,现在我们需要继续在首页给没有使用按钮以及组件添加对应的功能,这一节我们要实现的功能是商品搜索页面,这个页面我们从上到下开始实现功能,首先就是一个搜索的bar,然
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 购物车逻辑优化(39)
技术栈Appgalleryconnect开发准备我们的app主要购物功能已经开发的相对来说比较完善了,接下来就针对各个功能的逻辑性进行迭代和修改,让我们的程序更加的健壮,减少一些逻辑上的bug功能分析在之前的开发中我们的购物车功能已经实现,但是在后来的使用
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 个人中心页优化(62)
技术栈Appgalleryconnect开发准备上一节我们实现了订单逻辑的优化,现在我们的app功能更加的完善了,并且随着我们的迭代逻辑疏漏越来越少,现在我们继续进行优化,在之前的业务逻辑中我们的个人中心页面展示了用户的余额以及积分商城入口,这里我们要展示
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 我的积分页(63)
技术栈Appgalleryconnect开发准备上一节我们实现了个人中心页面的业务逻辑优化,成功的在用户登陆退出状态下展示对应的组件内容,这一节我们来实现app中另外一个比较重要的模块积分模块。功能分析因为我们的回收订单是跟回收金积分是绑定的,我们在完成回
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 兑换订单列表框架(75)
技术栈Appgalleryconnect开发准备上一节我们针对订单兑换的业务逻辑进行了完善,成功的在兑换物品之后修改了用户信息的修改,新增了积分消费的记录。这一节我们实现订单创建之后进入的列表展示页框架。功能分析兑换商品的订单列表框架我们选择使用tabs,
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 待发货兑换订单列表(76)
技术栈Appgalleryconnect开发准备上一节我们实现了兑换订单展示页面的框架,这一节我们要进行兑换订单的展示,在兑换订单提交后,默认的状态是待发货状态,我们用列表的方式展示出来功能分析进入页面时我们就要通过用户的userid去查询对应的订单,获取
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 兑换商品取消订单&取消列表展示(77)
技术栈Appgalleryconnect开发准备上一节我们实现了兑换订单待发货列表的展示逻辑,成功的在列表中展示出来,我们在订单条目中新增了两个按钮,确认揽收与取消订单,这一节我们要实现的功能是订单的取消,以及订单取消后取消列表的展示功能分析要实现订单取消
鸿蒙小林 鸿蒙小林
12小时前
《仿盒马》app开发技术分享-- 逻辑优化第一弹(81)
技术栈Appgalleryconnect开发准备随着上一节我们兑换商品订单相关逻辑的实现,我们的app功能已经更加的完善了,接下来我们开始对整个app缺失的小功能以及对已有的功能bug进行优化和逻辑的新增,这一节我们新增的功能是,商城订单的揽收功能,兑换订
鸿蒙小林 鸿蒙小林
9小时前
《伴时匣》app开发技术分享--表单提交准备(4)
技术栈Appgalleryconnect开发准备上一节我们实现了用户登录功能,现在我们进入首页,可以开始准备着手发布我们的日期计划了,在这之前我们先实现信息表的创建。在首页实现一个标题栏,一个悬浮的按钮。功能分析我们的信息表要展示的内容很多,首先是我们的事