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

server/2024/9/23 20:40:14/

鸿蒙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.ppmy.cn/server/120978.html

相关文章

Qwen 2.5:阿里巴巴集团的新一代大型语言模型

Qwen 2.5&#xff1a;阿里巴巴集团的新一代大型语言模型 摘要&#xff1a; 在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的发展日新月异&#xff0c;它们在自然语言处理&#xff08;NLP&#xff09;和多模态任务中扮演着越来越重要的角色。阿里巴巴集…

MySQL--导入SQL文件(命令行导入)

MySQL--导入SQL文件 一、前言二、导入SQL文件 一、前言 用可视化编辑工具编写&#xff0c;并且在控制台输入命令行在MySQL中导入SQL文件。 在导入SQL文件之前查看了目前存在的数据库 **目标&#xff1a;**在可视化编辑工具(这里以word文档为例&#xff09;中编写SQL语句&…

新手教学系列——基于统一页面的管理后台设计(一)

在现代企业级应用中,后台管理系统往往是核心组成部分,特别是随着业务规模的扩展,如何在多个后端服务模块的基础上实现统一的登录验证、权限控制和页面管理,成为许多开发者面对的挑战。本文将以实际项目为例,详细讲解如何设计一个多模块的后台管理系统,满足不同服务模块的…

信息技术(IT)行业的发展

近年来&#xff0c;信息技术&#xff08;IT&#xff09;行业的发展呈现出前所未有的活力和潜力。随着全球数字化转型的加速&#xff0c;IT行业正逐步成为推动社会经济发展的重要引擎。无论是互联网、大数据、人工智能&#xff0c;还是云计算、物联网&#xff0c;这些新兴技术都…

SAP 特别总账标识[SGL]

1. 特别总账标识(SGL)概述 1.1 定义与目的 特别总账标识&#xff08;Special General Ledger, SGL&#xff09;在SAP系统中用于区分客户或供应商的不同业务类型&#xff0c;以便将特定的业务交易记录到非标准的总账科目中。 定义&#xff1a;SGL是一个用于标记特殊业务类型的…

石油高压胶管的种类和测量方法

关键字:石油高压胶管,高压胶管测径仪,高压胶管种类,高压胶管生产线, 高压钢丝缠绕胶管, 高压钢丝编织胶管,胶管测径仪,非接触测径仪, 石油高压胶管在石油行业中扮演着至关重要的角色&#xff0c;主要用于高压流体输送&#xff0c;特别是在矿井液压支架、油田开发、工程建筑等领…

AI健身体能测试之基于paddlehub实现引体向上计数个数统计

【引体向上计数】 本项目使用PaddleHub中的骨骼检测模型human_pose_estimation_resnet50_mpii&#xff0c;进行人体运动分析&#xff0c;实现对引体向上的自动计数。 1. 项目介绍 人体运动分析是近几年许多领域研究的热点问题。在学科的交叉研究上&#xff0c;人体运动分析涉…

Vue3.4 中 v-model 双向数据绑定新玩法详解

随着 Vue3.4 版本的发布&#xff0c;defineModel 也正式转正了。它可以简化父子组件之间的双向绑定&#xff0c;是目前官方推荐的双向绑定实现方式。 之前在 Vue3.3 中&#xff0c;该方法还是实验性方法&#xff0c;使用 defineModel 需在 vite.config.ts 里面配置 defineMode…