React+Antd搭建xx后台管理系统(二)

906 阅读4分钟

一、阶段性工作复盘

1.业务流程

image.png
业务流程描述:
1)用户输入网址(域名)
2)判定浏览器本地有无认证的用户信息
3)本地有记录认证过的权限用户信息,则跳转至网址首页;反之则跳转到登录界面,让用户登录
4)用户成功登录后,本地记录相关权限认证信息(一般会有超时策略等),并跳转至网站首页或者历史的url对应的界面

2.问题处理记录小结

1.loader和action的作用及用法,参考官方文档进行使用
2.VS code支持TypeScript语法高亮,但工程未安装typescript,导致工程启动时无法识别*.tsx文件
3.安装支持TypeScript后,又导致无法兼容*.js和*.jsx文件,故需对tsconfig.json进行相应配置
4.安装antd4.x后,发现Button组件样式未生效,需在全局导入相关样式文件,且每个版本的antd文件配置不一样
5.工程目前不支持热启动,即保存变更重启,需"Control+C"关闭工程后重启,否则一些更改可能不生效
6.共用的layout,前端路由对应的page,需使用<Outlet>组件来呈现

3.目前已实现功能简述

1.layout样式实现
2.layout上支持用户点击菜单,切换到对应的page
3.前端路由实现,未授权跳转至登录页面(通过react-router-dom提供的loader机制实现),登录成功跳转主页面还未实现

image.png

二、用户登录登出功能实现

1.功能简述

1.登录界面开发,样式调整
2.登录成功后,跳转至管理系统主界面
3.未授权的用户,或者用户登录超期后跳转至登录页面
4.用户选择登出后,跳转至登录界面

2.具体实践

2.1 登录界面

参考antd4的表单,粘贴复制后,根据自己的项目进行微调即可实现一个登录Form表单 新建pages/login/index.tsx,代码内容实现如下:

image.png

image.png

image.png
具体的样式和文字等,可根据自己的项目进行修改;需注意点如下:
1.通常登录界面都要设置相关背景图等,推荐的是使用svg格式的图片;如果使用jpg等图片,需要配置图中所示的样式
2.点击登录后,通常会向后端发起用户登录请求,认证成功后,会跳转至系统主界面,此处使用react-router-dom提供的useNavigate钩子函数,当点击登录且通过后端认证后,返回一个navigate("/home")对象,即可以实现登录后自动跳转的效果

1.非代码文件资源识别问题

使用yarn create react-app或者npx create-react-app创建的react脚手架工程项目,在js或者jsx中,是可以直接使用如下语句使用非代码文件资源的:

import logo from "../logo.svg" 
<img src={logo} alt="logo" />

但是在tsx的文件中是无法识别的,也就是说TypeScript中是无法直接识别和使用非代码文件的,需要经过配置;直接使用会报错"Cannot find module '../logo.svg' or its corresponding type declaration";TypeScript配置识别非代码资源文件,参考如下:juejin.cn/post/701698…, 即在scr/目录文件夹下,新建images.d.ts文件,react自动加载里面的配置

image.png

2.背景填充图问题

由于没有使用svg格式的图片,使用jpg格式的图片作为背景图,实际测试时,会发现图片要么填充不全,要么就是会重复等诸多问题(大佬们可以多多分享下此类问题的解决之道),一顿搜索和尝试后,使用如下的样式解决

image.png

2.2 登出界面

参考antd4的下拉组件,实现一个用户登出的效果,考虑到后续可能会有用户中心等需求,故简单封装了一个组件,新建src/config/Usershortcuts.tsx,内容如下:

image.png

image.png
在layout.tsx中引入自定义组件:

image.png 则可以实现点击退出登录跳转到登录界面 image.png

2.3 用户信息

一般来说,登录后会把用户相关的信息保存在客户端(浏览器)的cookie或者Local storage里面,具体使用cookie还是Local storage,根据项目需要而定,一般推荐Local storage,具体Local storage使用会在下篇中进行阐释。

image.png