Sapphire开发日志 (十一) 登陆注册功能

news2024/12/23 8:58:53

任务介绍

本周实现登陆注册功能。

由于本项目主要关注在数据集的相关操作,所以对于用户的登录注册验证没有必要采取完整的一套手机号(邮箱)验证机制,简单的实现一个注册和登录功能即可。

背景效果

首先展示效果

在这里插入图片描述

整体背景页面和中部框的背景框都使用了玻璃模糊效果来避免遮蔽关键数据。

/*内部框css,使用伪元素::before结合filter实现毛玻璃*/
.overlay::before {
  background: url("../../img/loginInnerBG.jpg");
  content: "";
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
  /* background: inherit; */
  background-size: cover;
  filter: blur(2px);
  z-index: -1;
}
.mybody {
  align-items: center;
  background-color: var(--white);
  /* background-image: url("https://www.todaybing.com/api/today/cn"); */
  background-image: url("https://bing.img.run/rand_uhd.php");

  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  display: grid;
  height: 100vh;
  place-items: center;
}
.mybody::before {
  content: "";
  position: absolute; /* 一定要用绝对定位 */
  width: 100%;
  height: 100%;
  backdrop-filter: blur(4px); /* 模糊半径 */
}

整体背景同样使用before+filter实现模糊效果。同时使用一个微软的随机壁纸实现随机背景。

切换效果

切换效果是基于css3的transform实现的,我们定义一个状态theName,当theName为0的时候应该展示登录页面,否则应该展示注册页面。对于这两个页面展示的区分比较好控制。只要判断一下theName的值,然后决定遮罩层的位置即可。

但是我们还需要实现遮罩层移动时的动画。这里我们使用css3的transform实现。为顶层元素定义一个与theName相关的class。

        <div
          className={
            theName === 0 ? "container right-panel-active" : "container"
          }
        >
    		content...
		</div>

然后我们在css中为不同的类定义不同的X轴偏移,这样css就会在类名切换时自动实现切换动画。

.container.right-panel-active .container__overlay {
  transform: translateX(-100%);
}

在这里插入图片描述

登录注册逻辑

登录注册使用一个状态维护用户输入值,然后使用已经封装好的react-query函数发起调用即可。

然后监听一下请求状态,当登录成功的时候,把用户token和id信息等关键信息保存到localstroage中去。注册成功后则切换状态,使用户进入登录页面。

  const Login = () => {
    //实现登录接口
    if (loginUserName === "" || loginUserPsw === "") {
      enqueueSnackbar("账号密码不能为空", { variant: "warning" });
      return;
    }
    loginMutate({
      url: login_url,
      method: "post",
      data: {
        name: loginUserName,
        passwd: loginUserPsw,
      },
    });
  };
  const handleReset = () => {
    if (vertifyCode == "") {
      enqueueSnackbar("请填写密码", { variant: "warning" });
      return;
    }
    if (email == "") {
      enqueueSnackbar("邮箱不能为空", { variant: "warning" });
      return;
    }
    if (loginUserName == "") {
      enqueueSnackbar("用户名不能为空", { variant: "warning" });
      return;
    }

    signUpMutate({
      url: signUP_url,
      data: {
        name: loginUserName,
        passwd: vertifyCode,
        email: email,
        avatar: "http://t",
      },
      method: "post",
    });
  };
  useEffect(() => {
    if (signUpSuccess) {
      enqueueSnackbar("注册成功,请登录", { variant: "success" });
      changeClass();
    }
  }, [signUpSuccess]);

  const innerTheme = useMemo(() =>
    createTheme({
      palette: {
        mode: "light",
      },
    })
  );

  useEffect(() => {
    if (loginSuccess) {
      if (loginData.data.code !== 200) {
        enqueueSnackbar(loginData.data.msg, { variant: "error" });
        return;
      } else {
        console.log(loginData.data);
        localStorage.setItem("token", "Bearer " + loginData.data.data.token);
        localStorage.setItem("name", loginUserName);
        localStorage.setItem("userId", loginData.data.data.user.ID);
        localStorage.setItem("avatar", loginData.data.data.user.avatar);
        navigate("/workshop");
      }
    }
  }, [loginSuccess]);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857544.html

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

相关文章

【事件总线】EventBus

文章目录 概述如何使用如何发布消息如何进行消息监听 来源 概述 事件总线是对发布-订阅模式&#xff08;观察者&#xff09;的一种实现&#xff0c;是一种集中式事件处理机制&#xff0c;允许不同的组件之间进行彼此通信而又不需要相互依赖&#xff0c;达到一种解耦的目的。 …

喜讯:ISO年度审核通过!

在数字化时代&#xff0c;质量是我们不变的追求。近日&#xff0c;矩阵起源迎来了一个值得庆祝的时刻——三项ISO体系年度考核顺利通过&#xff01;分别为&#xff1a;ISO9001 质量管理体系标准认证、ISO20000信息技术服务管理体系认证及ISO27001 信息安全管理体系认证。 ISO标…

摘苹果-第13届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第88讲。 摘苹果&#xff0…

品牌出海!独立站不仅是方向,而是成为跨境电商主流了

近些年&#xff0c;随着跨境电商3.0品牌出海和本土化时代的到来&#xff0c;独立站成为品牌出海的必备渠道和关键胜负手&#xff01; 搭建独立站作为品牌本土化的最好展示载体&#xff0c;独立的品牌包装与产品页面&#xff0c;能够更好讲述品牌故事&#xff0c;因而得以快速发…

fvcore库的一些功能和使用

目录 一、安装fvcore库 二、使用 fvcore是Facebook开源的一个轻量级的核心库&#xff0c;它提供了各种计算机视觉框架中常见且基本的功能。其中就包括了统计模型的参数以及FLOPs等。 项目地址&#xff1a;fvcore 一、安装fvcore库 pip install fvcore 二、使用 1、计算模…

Debian12中搭建TiddlyWiki服务并进行配置

一、Node.js 环境安装 apt update & apt install nodejs npm ## 查看版本 node -v npm -v二、安装Tiddlywiki npm install -g tiddlywiki## 查看版本号 tiddlywiki --version 三、配置并运行 tiddlywiki ## 在/home 目录自动创建Testwiki文件夹&#xff0c;作为wiki的存…

项目实践---Windows11中安装Zookeeper/Hadoop/Hive的部分问题解决

一.Hadoop与Hive兼容版本选择 正常来说&#xff0c;Hadoop与Hive版本不兼容会出现很多问题导致hive安装失败&#xff0c;可以先确定HIve的版本&#xff0c;比如&#xff1a;要用Hive3.1.2版本&#xff0c;该如何确定使用Hadoop的版本呢&#xff0c;需要我们在hive源码中找到对…

自学鸿蒙HarmonyOS的ArkTS语言<四>@Builder自定义构建函数

作用&#xff1a;可以提取重复的ui, 在buil()中调用 【官方文档传送门】 一、用在自定义组件内 自定义组件内可以有一个或多个Builder只能在所属组件的builder方法和其他Builder中调用&#xff0c;组件外不能调Builder中的this指当前所属组件&#xff0c;组件的状态变量可以在…

LeetCode 热题100 --双指针

双指针 b站UP主蜜糖&#xff1a;由于数据特征的有序性&#xff08;大小或者正负&#xff09;&#xff0c;所以可以证明当前节点一定是优于过往节点&#xff0c;从而可以通过数据的维度数量的指针&#xff0c;逐步的迭代收敛最终找到最优解。 283.移动零 相关标签 &#xff1a;…

计算机网络 —— 应用层(电子邮件)

计算机网络 —— 应用层&#xff08;电子邮件&#xff09; 电子邮件发送电子邮件的过程SMTP特性工作流程 电子邮件格式MIME关键组件工作方式 POP/IMAPPOP&#xff08;邮局协议&#xff09;IMAP&#xff08;因特网邮件访问协议&#xff09; 基于万维网的电子邮箱特点优势常见的基…

营销复盘秘籍,6步法让你的活动效果翻倍

在营销的世界中&#xff0c;每一次活动都是一次探险&#xff0c;而复盘就是探险后的宝藏图&#xff0c;指引我们发现问题、提炼经验、优化策略。 想要学习如何复盘&#xff0c;只要了解以下复盘六大步骤&#xff0c;即可不断总结&#xff0c;逐渐走向卓越。 第一步&#xff1…

lvgl v8.3 windows仿真

1&#xff0c;下载安装codeblocks20.03 https://zenlayer.dl.sourceforge.net/project/codeblocks/Binaries/20.03/Windows/codeblocks-20.03mingw-setup.exe?viasf1 2&#xff0c;下载代码 git clone --recurse-submodules https://github.com/lvgl/lv_port_win_codeblock…

fairseq (Facebook AI Research) 包

0. Abstract 最近在看一个用 RNNs 网络做 Translation 任务的程序, 关于数据处理部分, 主要用到工具包 sentencepiece 和 fairseq, 前者主要是对文本进行分词处理, 后者则是对已分词的文本进行二进制化和快速加载. 包越方便使用, 就说明包装得越狠, 也就越令人一头雾水, 本文简…

虚拟机拖拽文档造成缓存过大

查看文件夹大小&#xff1a;du -h --max-depth1 缓存位置&#xff1a;~/.cache/vmware/drag_and_drop 删除&#xff1a;rm -fr ~/.cache/vmware/drag_and_drop 释放了3GB

Javascript中的this关键字指向

this关键字介绍 不同情况下的this 1.对象调用方法中的this 2.在全局使用this(单独使用) 3.函数中的this 4.函数严格模式下 5.事件中的this 6.构造函数中的this 7.箭头函数没有this call()、apply()、bind() 的用法 this关键字介绍 面向对象语言中 this 表示当前对象…

JavaScript中的内置对象

// 用法2&#xff1a;参数&#xff1a;指定的时间的字符串 创建一个指定的时间 // new Date(‘2018-12-12 12:00:00’) var date1 new Date(‘2018-12-12 12:00:00’); console.log(date1); // 用法3&#xff1a; 参数可以是年月日时分秒 月份从0开始 // var date2 new …

基于Java实验室课程管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

Linux 阻塞和非阻塞 IO 实验学习

Linux 阻塞和非阻塞 IO 实验学习 IO 指的是 Input/Output&#xff0c;也就是输入/输出&#xff0c;是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候&#xff0c;如果不能获取到设备资源&#xff0c;那么阻塞式 IO 就会将应用程序对应的线程挂起&…

【初阶数据结构】二叉树(附题)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念&#xff08;树结构的相关概念命名参考自然树和人的血缘关系&#xff09; 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff0c;初次之外网盘中使用到&#xff09; 2.二叉树概念及结构 …

Google浏览器快捷方式固定到任务栏启动被其他网页劫持

场景复现 1、Google浏览器设置启动时继续浏览上次打开的网页 2、先浏览CSDN网站&#xff0c;然后关闭Google浏览器 3、再次打开Google浏览器时&#xff0c;除了显示我们上次浏览的CSDN网页外&#xff0c;还默认打开了百度网页 解决办法 1、在Google浏览器中新建标签页&am…