鸿蒙Harmony应用开发,数据驾驶舱登录页面的实现

news/2024/9/19 19:15:58 标签: harmonyos, 华为

鸿蒙Harmony应用开发,数据驾驶舱登录页面的实现

​ 首先我们有个Splash 过渡页面来判断当前是用户是否登录,我们先从preferences中获取token是否存在。如果不存在直接跳转登录即可,如果存在的情况我们再去获取下用户的信息看看token是否过期.

//Todo  先判断Token是否为空,为空登录 如果不是拿token获取用户信息
UserLoginHelper.getUserToken().then(token => {
  if (token && typeof token === 'string') {
    //判断token是否失效
    UserInfoViewModel.getUserInfo((result) => {
      hideLoadingDialog()
      LogUtils.error("SplashPage", "当前登录信息为:\n" + JSON.stringify(result))
      if (result.data as UserInfoModel) {
        showToast("获取用户信息成功--->---" + result.data.employeeName + "----" + result.data.username)
        setTimeout(() => {
          router.replaceUrl({ url: RoutePath.CockpitPage })
        }, 2000)
      } else {
        LogUtils.error("SplashPage", "Token失效跳转登录.....")
        router.replaceUrl({ url: RoutePath.LoginPage })
      }
    })
  } else {
    LogUtils.error("SplashPage", "未获取到Token跳转登录.....")
    hideLoadingDialog()
    router.replaceUrl({ url: RoutePath.LoginPage })
  }
  • 登录的页面实现

    登录页面的UI 很简单2个TextInput,用来输入账号密码,在Button的点击事件中获取TextInput的值作为请求参数

1.获取token

基于前面介绍的网络请求的封装基础之上,我们创建一个 pwdLogin的function,function中将返回一个LoginDataModel的result.

export function pwdLogin(userName: string = "", password: string) {
  return axiosPolarClient.post<LoginDataModel>({
    url: baseUrl + "/login",
    data: { "userName": userName, "password": password },
    showLoading: true,
    isLoginState: true,
    headers: commonHeader
  });
}

在LoginViewModel中创建一个doLogin供LoginPage页面调用

async doLogin(account: string, pwd: string, resultCallback?: ResultCallback<LoginDataModel>) {
  LogUtils.debug('开始doLogin..网络请求:');
  await this.httpRequest(false)
    .promise(pwdLogin(account, pwd), true)
    .then((result) => {
      resultCallback?.(result)
    })
}

在LoginPage页面中doLogin的回调中在调用UserInfoViewModel的getUserInfo

async getUserInfo(resultCallback?: ResultCallback<BaseEntityModel<UserInfoModel>>) {
  await this.httpRequest(false)
    .promise(getLoginUser(), true)
    .then((result) => {
      resultCallback?.(result)
    })
}

完整的调用实现如下:

  Button('登录')
    .width('90%')
    .backgroundColor(0x165dff)
    .opacity(this.account == '' || this.password == '' ? 0.5 : 1)
    .onClick(() => {
      if (this.account == '' || this.password == '') {
        showToast("请输入账号或密码")
        return;
      }
      showLoadingDialog("登录中...")
      if (this.password && this.account) {
        // LogUtils.debug('点击登录');
        let enPwd: string = createEncryPt(this.password);
        LoginViewModel.doLogin(this.account, enPwd/*,VITE_APP_PWD*/, (result) => {
          hideLoadingDialog()
          if (result.code == 200) {
            StorageUtils.put(AUTHORIZATION, result.data)
            UserInfoViewModel.getUserInfo((result) => {
              if (result != null) {
                showToast("登录成功")
                setTimeout(() => {
                  showToast("登录成功");
                  router.replaceUrl({ url: RoutePath.CockpitPage });
                }, 0);
                StorageUtils.put(USERINFO, JSON.stringify(result))
              } else {
                showToast("登录失败" + result)
              }
            })
          } else {
            showToast("登录失败," + result.msg)
          }
        })
      } else {
        // hideLoadingDialog()
        showToast("账号密码不能为空")
      }
    })
    .margin({ top: 30 })
}

完整项目下载地址


http://www.niftyadmin.cn/n/5666019.html

相关文章

C++实现的小游戏

大家好&#xff0c;这几天做项目太忙&#xff0c;时间不够去更新&#xff0c;十分抱歉。今天凌晨花了半个点的时间写了一个小游戏的青春版&#xff0c;给大家分享。 游戏名&#xff1a;想玩电脑&#xff1f;先过我这关&#xff01; 首先我先来说明一下游戏的规则&#xff1a;…

腾讯音乐2024 Q2财报稳中有进,首席执行官梁柱(Ross Liang)强调平台创新

8 月 13 日&#xff0c;腾讯音乐娱乐集团&#xff08;Tencent Music Entertainment Group&#xff0c;以下简称“TME”&#xff09;发布 2024 年第二季度财报。本季度集团各项核心财务指标稳健增长&#xff0c;总收入达 71.6 亿元&#xff0c;调整后净利润 19.9 亿元&#xff0…

架构师论文备考-论云原生架构及其应用

摘要 2022年3月&#xff0c;我有幸参与了公司的新智慧公交系统的研发工作。该系统基于B/S架构设计&#xff0c;并以多租户SaaS平台化为发展目标&#xff0c;旨在创建一个功能更全面、性能更卓越、稳定性更强、用户体验更佳的公交调度一体化平台。在这一项目中&#xff0c;我主要…

推荐给大家5款小众无广告的软件

​ 你是否喜欢一些小众且无广告的软件&#xff1f;如果是的话&#xff0c;我这边有一些给你推荐的。 1.进程管理——ProcessExplorer ​ ProcessExplorer是一款高级系统进程管理工具&#xff0c;可实时查看Windows系统中所有正在运行的进程及其详细信息。它提供了比任务管理器…

规律题总结(持续更新)

题目链接&#xff1a;5.煎蛋的梦想 - 蓝桥云课 (lanqiao.cn) #include <iostream> #include <algorithm> using namespace std; int n,k,sum0; bool fun(int x) {for(int i2; i<(int)sqrt(x); i){if(x%i0){return false;break;}}return true; } int main() {ci…

Flash扩展——NOR Flash、NAND Flash 和 SD NAND

Flash扩展——NOR Flash、NAND Flash 和 SD NAND 文章目录 Flash扩展——NOR Flash、NAND Flash 和 SD NAND闪存&#xff08;Flash Memory&#xff09;**非易失性原理**NAND Flash 和 NOR Flash 对比 NOR FlashNAND Flash NAND分类——SLC、MLC、TLC和QLCNAND擦除&#xff08;E…

米客方德SD NAND 掉电测试

SD NAND 异常上下电测试的作用 SD NAND 异常上下电测试是一项关键的测试步骤&#xff0c;对确保SD NAND在不同电源条件下的稳定性和可靠性至关重要。 通过模拟正常和异常电源情况&#xff0c;测试可以验证设备的电源管理功能、检测潜在错误和异常行为&#xff0c;并评估设备在…

【模板进阶】模板的万能引用

一、类型的区别和基本定义 1.1类型的基本定义 首先先看一个最简单例子&#xff1a; //类型的区别和基本定义 void func(const int& abc) { } //abc的类型为const int&这里的 a b c abc abc被推导为什么类型&#xff1f; 显然可见&#xff0c;为 c o n s t i n t &am…