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

news2024/11/14 15:26:06

鸿蒙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.coloradmin.cn/o/2144710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索音乐的新边界——AI写歌的奇妙呈现

在音乐的世界里&#xff0c; 创新总是令人充满期待。 对于没有创作灵感、毫无创作水平的小孩&#xff0c;走进一个充满惊喜的音乐平台 —— &#xff08;Suno&#xff09; 看看AI 写歌的神奇魅力。S为我们提供了一个丰富多彩的音乐世界&#xff0c; 从新歌推荐到各种风格的音…

Vmware虚拟机无法打开内核设备“\\.\Global\vmx86“的解决方法

我的问题是在一次系统更新后&#xff0c;导致虚拟机无法使用的。我的虚拟机只有方法三解决了问题。 一、方法一 以管理员身份打开cmd&#xff0c;依次执行以下命令&#xff1a; net start vmci net start vmx86 net start VMnetuserif二、方法二 按 WinR 键&#xff0c;运行…

用好这几个AI抠图工具,既省心又省力!

在设计、摄影和数字创作的世界里&#xff0c;抠图虽然常见&#xff0c;却往往让人感到繁琐。不过&#xff0c;随着人工智能的飞速发展&#xff0c;许多可爱的AI抠图工具应运而生&#xff0c;轻松高效地解决了这一难题&#xff01;下面就来看看几款超级实用的AI抠图工具&#xf…

Python “字符串操作” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中列表的一些题目&#xff0c;方便学习完Python的元组之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的列表&#xff0c;推荐…

Qt 学习第九天:标准对话框 页面布局

系统标准对话框 错误对话框 //错误对话框connect(createPro, &QAction::triggered, this, []{//参数1 父亲 参数2 标题 参数3 对话框内显示文本内容 。。。QMessageBox::critical(this, "报错!", "没加头文件!");}); 【运行结果】 信息对话框 co…

使用arduino玩基于esp8266的nodemcu开发板

一、简介 中秋节到图书馆看书&#xff0c;看到了arduino方面的书籍&#xff0c;里面有提到ESP8266模块。让我想起我抽屉里吃灰很久了的基于esp8266的nodemcu开发板。于是把书借回家研究了一下。这里做个记录。 二、我目前在使用的云服务器推荐 学Linux不搞个云服务器始终感觉…

【笔记】进制转换

文章目录 一、任意进制转十进制1、整数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 2、小数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 3、代码1、整数转化成十进制2、小…

使用 Vue 3 和 TypeScript 实现带打字效果的仿 AI 分析展示组件

在这篇博客中&#xff0c;我将分享如何用 Vue 3 和 TypeScript 实现一个带打字效果的 AI 分析展示组件。该组件具有如下功能&#xff1a; 动态打字效果&#xff1a;模拟打字机逐步显示内容。自动滚动&#xff1a;内容超出容器高度时自动滚动到最新位置。 1. 组件实现需求 我…

【读点论文】Text Recognition in the Wild: A Survey 非常纯粹的OCR研究,专业细致,脉络清晰

Text Recognition in the Wild: A Survey 文本的历史可以追溯到几千年前。文本所携带的丰富而精确的语义信息在广泛的基于视觉的应用场景中非常重要。因此&#xff0c;自然场景中的文本识别一直是计算机视觉和模式识别中一个活跃的研究领域。近年来&#xff0c;随着深度学习的…

基础 Web 开发

1. 构建项目&#xff1a; 2.添加依赖 <dependencies> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupI…

低代码门户技术:构建高效应用的全新方式

什么是低代码门户技术&#xff1f; 低代码门户技术是一种利用低代码平台构建企业门户网站或应用的技术。门户通常是企业内部和外部用户访问信息和应用的集中平台。低代码门户技术通过图形化界面和预置组件&#xff0c;允许用户快速搭建和定制这些门户平台&#xff0c;而无需深…

数据结构入门学习(全是干货)——树(中)

数据结构入门学习&#xff08;全是干货&#xff09;——树&#xff08;中&#xff09; 1 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09; 1.1 二叉搜索树及查找 二叉搜索树&#xff08;Binary Search Tree, BST&#xff09; 是一种特殊的二叉树…

四、JVM原理-4.1、JVM介绍

4.1、JVM介绍 4.1.1、如何理解Java虚拟机&#xff0c;它的结构是如何设计的&#xff1f; 答&#xff1a; Java虚拟机&#xff08;Java Virtual Machine&#xff0c;JVM&#xff09;是Java语言编写的程序在运行时的执行环境。它是Java的核心组成部分&#xff0c;负责解释和执行…

开源项目 face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet

开源项目 - face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet 人像分割 开源项目地址&#xff1a;https://gitcode.net/EricLee/faceparsing 包括开源数据集 和 预训练模型 咨询合作 DataBall 项目&#xff0c;欢迎加以下微信。 助力快速掌握数据集的信…

HarmonyOS 速记

目录 装饰器Entry(入口)Component(组件)State(状态)Prop(属性)Preview(预览)PreviewerInspector 结构体structbuild自定义组件自定义 Custom 组件 容器Row(行) & Column(列)RelativeContainer(相对布局容器)marginpaddingSwiper(轮播图)Grid(网格容器)List(列表) 组件Image…

python函数一:函数的概念、函数定义与调用、函数的参数、函数的返回值、说明文档以及函数的嵌套调用

文章目录 1. 函数介绍1.1 函数的概念1.2 函数定义与调用1.2 函数的参数1.3 函数的返回值1.4 说明文档 2. 函数的嵌套调用2.1 嵌套调用及执行流程2.2 嵌套调用的应用 1. 函数介绍 1.1 函数的概念 什么是函数&#xff1f; 函数:是一个被命名的、独立的、完成特定功能的代码段&am…

使用c#制作一个小型桌面程序

封装dll 首先使用visual stdio 创建Dll新项目,然后属性管理器导入自己的工程属性表&#xff08;如果没有可以参考visual stdio 如何配置opencv等其他环境&#xff09; 创建完成后 系统会自动生成一些文件&#xff0c;其中 pch.cpp 先不要修改&#xff0c;pch.h中先导入自己需…

Python画笔案例-053 绘制海龟螺旋图

1、绘制海龟螺旋图 通过 python 的turtle 库绘制 海龟螺旋图&#xff0c;如下图&#xff1a; 2、实现代码 绘制海龟螺旋图&#xff0c;以下为实现代码&#xff1a; """海龟螺旋图.py""" import turtle from random import randintscreen turtl…

引入第三方字体图标icon

引入第三方字体图标icon 1.登录阿里巴巴icon库 2.点开ui提供的字体图标并下载 3.解压download 将font_4008950_i6fkbudh8ld文件放置项目中例如&#xff1a;放在assets文件夹下 4.然后再main.js中引入 import ‘/assets/font_4008950_i6fkbudh8ld/iconfont.css’; 5.项目中应…

Rsync未授权访问漏洞复现及彻底修复

一、什么是 Rsync&#xff1f; Rsync 是一种广泛使用的文件传输工具&#xff0c;它允许系统管理员和用户通过局域网&#xff08;LAN&#xff09;或广域网&#xff08;WAN&#xff09;在计算机之间同步文件和目录。Rsync 支持通过本地或远程 shell 访问&#xff0c;也可以作为守…