当前位置: 首页 > news >正文

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

鸿蒙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 })
}

完整项目下载地址

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 电子元件制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • linux内核 devtmpfs介绍
  • 【学习资料】袋中共36个球,红白黑格12个,问能一次抽到3个红4个白5个黑的概率是多少?
  • springboot家政服务管理系统—计算机毕业设计源码34242
  • 苹果CMS插件:优化蜘蛛访问内容,提升百度收录率
  • 设计模式之外观设计模式
  • 基于菜鸟教程的flask学习记录 —— Flask视图函数
  • 零基础考过软考信息系统项目管理师经验分享
  • saltstack高级用法
  • MATLAB基础:5脚本与函数
  • 鸿萌数据恢复服务:Synology Hybrid RAID 的容错、优势和数据恢复
  • 【Java算法】二叉树的深搜
  • 数据结构修炼——顺序表和链表的区别与联系
  • 【目标检测】labelimg图像标注软件的使用流程
  • Vue3:reactive丢失响应式,数据有更新但表单没有更新
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 345-反转字符串中的元音字母
  • bearychat的java client
  • canvas绘制圆角头像
  • CSS 专业技巧
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ECS应用管理最佳实践
  • ES6--对象的扩展
  • gitlab-ci配置详解(一)
  • hadoop集群管理系统搭建规划说明
  • Java Agent 学习笔记
  • Javascript 原型链
  • JS实现简单的MVC模式开发小游戏
  • LeetCode18.四数之和 JavaScript
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Mysql数据库的条件查询语句
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PermissionScope Swift4 兼容问题
  • 百度地图API标注+时间轴组件
  • 程序员该如何有效的找工作?
  • 分享一份非常强势的Android面试题
  • 前端面试总结(at, md)
  • 终端用户监控:真实用户监控还是模拟监控?
  • 阿里云移动端播放器高级功能介绍
  • $(selector).each()和$.each()的区别
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)STM32单片机上位机
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C11) 泛型表达式
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (vue)页面文件上传获取:action地址
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程