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

article/2025/6/14 15:49:46

开发准备

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

功能分析

要实现状态的修改,我们在登录以及退出登录页面间通信采用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=nullthis.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: 'https://blog.csdn.net/qq_43238112?spm=1001.2014.3001.10640'};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%')}
}

我们执行一下代码看看webview页面的展示效果
在这里插入图片描述
到这里我们就实现了对已有功能的业务逻辑完善了


http://www.hkcw.cn/article/rGvcenvrwr.shtml

相关文章

UniRig:如何在矩池云一站式解决 3D 模型绑定难题

在 3D 动画制作中&#xff0c;绑定&#xff08;Rigging&#xff09;是一个至关重要但复杂耗时的步骤。它包括为 3D 模型创建骨架并分配蒙皮权重&#xff0c;以实现流畅的动画效果。由清华大学与 Tripo 联合开发的 UniRig 框架&#xff0c;为这一难题提供了全新的解决方案。 什…

二分查找和二分答案(基础)

目录 前言 二分的本质 二分的代码实现 二分查找 题目 洛谷 P1571 眼红的Medusa 洛谷 P1102 A-B 数对 洛谷 P1678 烦恼的高考志愿 OpenJudge 01&#xff1a;查找最接近的元素 二分答案 实现 题目 洛谷 P1824 进击的奶牛 洛谷 P1182 数列分段 Section || 洛谷 P128…

三极管和MOS的三种状态命名的区别

前言 还记得大学用MOS做仿真&#xff0c;来进行原理说明时&#xff0c;总是会将三极管和MOS的叫法搞混。本篇文章就重新回顾&#xff0c;加深下印象。 1. 三极管&#xff08;BJT&#xff09;的三个工作状态 BJT 是电流控制型器件&#xff0c;其工作状态由 基极电流 IB​ 和 集…

SKUA-GOCAD入门教程-第八节 线的创建与编辑2

8.1.3根据线创建曲线 (1)从线生成线 这个命令可以将一组曲线合并为一条曲线。每个输入曲线都会成为新曲线内的一个部分。 1、选择 Curve commands > New > Curves 打开对话框。 图1 根据曲线创建曲线 在“name”框中:输入新建线的名称。在“Curves”框中:输入用于…

关于easyx头文件

一、窗口创建 &#xff08;1&#xff09;几种创建方式 #include<easyx.h>//easyx的头文件 #include<iostream> using namespace std;int main() {//创建一个500*500的窗口//参数为&#xff1a;长度&#xff0c;宽度&#xff0c;是否显示黑框&#xff08;无参为不…

基于VLC的Unity视频播放器(四)

上篇文章中提到的问题 播放某个m3u8地址时会嘎掉&#xff0c;想办法解决了一下&#xff0c;很粗暴的&#xff0c;先SetFormat&#xff0c;再Stop&#xff0c;最后再Play&#xff0c;能用…… if (player ! null && player.GetSize() 0) {player.GetSize((w, h) >…

邢台山峰特种橡胶制品有限公司专题报道

在河北任泽经济开发区的现代化厂房里&#xff0c;全自动硫化机正以0.01毫米的精度压制着油封。这里生产的特种橡胶制品&#xff0c;已悄然进入全球90多个国家的工业供应链。作为邢台市橡塑新材料产业集群的企业&#xff0c;邢台山峰特种橡胶制品有限公司用25项专利技术&#xf…

单文件制作工具 7.0.2.3856

【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VORkoGbMcUDScW2C5kyqJla8A1?pwdegvq# 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VORkoGbMcUDScW2C5kyqJla8A1?pwdegvq# 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/HPQywvPc7iLZu1…

打破 GIS 数据处理瓶颈!GISBox 的九种切片方式

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;数据格式的多样性和复杂性一直是制约高效处理与应用的瓶颈。从倾斜摄影模型到BIM设计图纸&#xff0c;从地形影像到点云数据&#xff0c;每一种数据类型都需要精准且高效的切片处理&#xff0c;以实现流畅的三维可视…

Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满!

Matlab回归预测大合集又更新啦&#xff01;新增2种高斯过程回归预测模型&#xff0c;已更新41个模型&#xff01;性价比拉满&#xff01; 目录 Matlab回归预测大合集又更新啦&#xff01;新增2种高斯过程回归预测模型&#xff0c;已更新41个模型&#xff01;性价比拉满&#xf…

中英混合编码解码全解析

qwen模型分词器怎么映射的:中英混合编码解码全解析 中英文混合编码与解码的过程,本质是 字符编码标准(如 UTF-8)对多语言字符的统一处理 ,核心逻辑围绕“字节序列 ↔ 字符映射”展开 北京智源人工智能研究院中文tokenID qwen模型分词器文件 一、编码阶段:统一转为字节序…

【散刷】二叉树基础OJ题(二)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及刷题记录&#xff0c;使用语言为C。 每道题我会给出LeetCode上的题号&#xff08;如果有题号&#xff09;&#xff0c;题目&#xff0c;以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…

深度学习与特征交叉:揭秘FNN与SNN在点击率预测中的应用

今天&#xff0c;给大家分享一篇关于基于深度神经网络&#xff08;DNNs&#xff09;的特征交叉方法——FNN&#xff08;Factorization-machine supported Neural Network&#xff09;和SNN&#xff08;Sampling-based Neural Network&#xff09;的研究。随着广告点击率预估等领…

Win11系统不推送24H2/西数SSD无法安装24H2 - 解决方案

Win11系统不推送24H2/西数SSD无法安装24H2 - 解决方案 前言获取24H2推送西数SSD安装24H2更新SSD固件规避设备检查修改注册表&#xff08;可选&#xff09; 前言 Win11 24H2系统优化了底层架构&#xff0c;加快了系统响应速度&#xff0c;并在25年5月份开始推送&#xff0c;但很…

Elasticsearch集群最大分片数设置详解:从问题到解决方案

目录 前言 1 问题背景&#xff1a;重启后设置失效 2 核心概念解析 2.1 什么是分片(Shard)&#xff1f; 2.2 cluster.max_shards_per_node的作用 2.3 默认值是多少&#xff1f; 3 参数设置的两种方式 3.2 持久性设置(persistent) 3.2 临时设置(transient) 4 问题解决方…

机器学习:集成学习概念、分类、随机森林

本文目录&#xff1a; 一、集成学习概念**核心思想&#xff1a;** 二、集成学习分类&#xff08;一&#xff09;Bagging集成&#xff08;二&#xff09;Boosting集成(三&#xff09;两种集成方法对比 三、随机森林 一、集成学习概念 集成学习是一种通过结合多个基学习器&#…

Python基于SVM技术的手写数字识别问题项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在当今数字化转型加速的时代&#xff0c;手写数字识别作为图像处理与机器学习领域的一个经典问题&#xff0c;具有广…

MySQL 全量、增量备份与恢复

一.MySQL 数据库备份概述 备份的主要目的是灾难恢复&#xff0c;备份还可以测试应用、回滚数据修改、查询历史数据、审计等。之前已经学习过如何安装 MySQL&#xff0c;本小节将从生产运维的角度了解备份恢复的分类与方法。 1 数据备份的重要性 在企业中数据的价值至关…

Python Pytest

1.Pytest用例发现规则 1.1 模块名(python文件)名必须以 test_ 开头或 _test 结尾&#xff0c;如 test_case&#xff0c;case_test&#xff0c;下划线都不能少 1.2 模块不能放在 . 开头的隐藏目录或者叫 venv的目录下&#xff0c;virtual environment&#xff0c;叫venv1都可以…

[Linux] MySQL源码编译安装

目录 环境包安装 创建程序用户 解压源码包 配置cmake ​编辑编译 安装 配置修改属性 属主和属组替换成mysql用户管理 系统环境变量配置 初始化数据库 服务管理 启动 环境包安装 yum -y install ncurses ncurses-devel bison cmake gcc gcc-c 重点强调&#xff1a;采…