后台管理系统项目-登录页-实现步骤
1、登录页面-样式调整
登录页整体思路如下:
表单验证(login/index.vue)
utils/validate.js ---> validMobile
收集用户的参数,调用actions
调用 api/user.js中封装好的api
找到axios实例:utils/request.js中获取axios实例
设置基地址从环境变量中
经过请求拦截器,添加请求头(添加token, utils/request.js)
代理转发(vue.config.js)
后端服务器要启动,mongoDB也要启动;后端才能收到请求,返回数据
经过响应拦截器的处理(utils/request.js)
判断当前操作是否成功,决定是否axios报错
简化获取有效数据的写法(脱壳)
得到api调用之后结果(login.vue)
保存token到vuex,调用mutations(store/modules/user.js)
token做持久化(utils/auth.js)
1.1设置登录表单的logo图
在views/login/index.vue
<!-- 放置标题图片 @是设置的别名-->
<div class="title-container"><h3 class="title"><img src="@/assets/common/login-logo.png" alt=""></h3></div>
@ 是我们在vue.config.js中设置的一个路径别名,指向src根目录,这样可以很方便的寻找文件
1.2设置背景图片
views/login/index.vue
<style lang="scss">
.login-container {background-image: url('~@/assets/common/login.jpg'); // 设置背景图片background-position: center; // 将图片位置设置为充满整个屏幕
}
解释一下为什么加 ~ :
当在样式表中使用@别名的时候,必须要在@前面加上~这个符号,否则不识别。(固定用法)
1.3设置输入框中的字体颜色
$light_gray: #68b0fe; // 将输入框颜色改成蓝色
1.4设置登录按钮的样式
在el-button 上补充一个loginBtn的class,并设置样式如下
.loginBtn {background: #407ffe;height: 64px;line-height: 32px;font-size: 24px;
}
1.5修改显示在Login页面上的提示文本
<div class="tips"><span style="margin-right:20px;">账号: 13800000002</span><span> 密码: 123456</span>
</div>
1.6设置输入表单整体背景色: 输入框的背景色
/* reset element-ui css */
.el-form-item {border: 1px solid rgba(255, 255, 255, 0.1);background: rgba(255, 255, 255, 0.7); // 输入登录表单的背景色border-radius: 5px;color: #454545;
}
1.7设置错误信息的颜色**
当表单元素的输入验证错误时,它会在相应的表单元素下边出现一个文字说明。
/* reset element-ui css */
.el-form-item__error {color: #fff
}
2、登录页面-改造登录表单中的数据项
1.1按照接口文档的要求,修改已有代码中的表单数据绑定
使用vscode中的替换功能
在login/index.vue中 按shift+f 区分大小写,将username全部换成mobile
查看接口文档,在当前页面中做替换。
loginForm: {mobile: '13800000002',password: '123456'},
2.2自定义校验规则
utils/validate.js中
export function validMobile(str) {return /^1[3-9]\d{9}$/.test(str) // 校验手机号
}
在login/index.vue中引入
// 引入手机号校验规则
import { validMobile } from '@/utils/validate'data() {// 自定义校验规则const validateMobile = (rule, value, callback) => {console.log(value)// 如果validMobile的value符合校验规则 则手机号验证通过if (validMobile(value)) {callback()} else { // 否则提示手机号格式错误callback(new Error('手机号格式错误'))}}return {loginForm: {mobile: '13800000002',password: '123456'},
loginRules: {// 手机号的校验规则mobile: [{ required: true, trigger: 'blur', validator: validateMobile }],// 密码的校验规则password: [{ required: true, trigger: 'blur', message: '密码不能为空' },{ min: 6, max: 16, message: '密码的长度在6-16位之间 ', trigger: 'blur' }]},loading: false,passwordType: 'password',redirect: undefined}},
3、修改axios的响应拦截器
bug:登录时,填写错误的用户名密码,没有报错提示(没有进入catch分支)
解决方法
在request.js中添加 响应拦截器
// 响应拦截器
service.interceptors.response.use(response => {console.log('所有的响应结果在这:', response)// 如果success 是true 就是操作成功if (response.data.success) {// 操作成功} else {// 如果success是false 业务出错 直接触发reject// 被catch分支捕获return Promise.reject(new Error('请求失败'))}
}, error => {return Promise.reject(error) // 返回执行错误 让当前的执行跳转出成功 直接进入catch
})
4、解决观察返回值需要 res.data.data的问题
只需要一行代码就可以解决
5、token-处理
整体思路
5.1将token保存到vuex中
store/user.js中
export default {namespaced: true,state: {token: ''},mutations: {setToken(state, newToken) {state.token = newToken}},actions: {}
}
在login/indexvue中 如何调用mutation
// 做登录的动作async doLogin() {try {const res = await login(this.loginForm)console.log('登录的接口结果是:', res)
// 保存token到vuex// 在组件中调用mutationthis.$store.commit('user/setToken', res.data)} catch (err) {alert('登录失败')}},
配置axios请求拦截器
将登陆获取到的token统一注入到接口的请求头中 。
请求拦截器代码
在文件src/utils/request.js
中:
引入store
- import store from '@/store'
如果当前vuex中有token,就在请求头中设置上。
// 请求拦截 :添加请求头 携带token信息
service.interceptors.request.use((config) => {const token = store.state.user.tokenif (token) {config.headers['Authorization'] = `Bearer ${token}`}
return config
}, error => {return Promise.reject(error) // 返回执行错误
})// Authorization和bearer 是本项目的后端接口要求的写法。
6、token-处理-持久化
现在的token是保存在vuex中,而页面刷新之后,vuex的内容丢失了,将会导致接口访问异常。所以我们需要对token做持久化处理: 刷新页面之后token不丢失。
在utils/auth.js
import Cookies from 'js-cookie'
const TokenKey = 'vue_admin_template_token'
export function getToken() {return Cookies.get(TokenKey)
}
export function setToken(token) {return Cookies.set(TokenKey, token)
}
export function removeToken() {return Cookies.remove(TokenKey)
}
在vuex中引入方法,并调用
在store/modules/user.js
文件中,
import { getToken, setToken, removeToken } from '@/utils/auth'
export default {namespaced: true,state: {token: getToken() || null // 默认为null},// 修改状态mutations: {// 设置tokensetToken(state, newToken) {state.token = newToken// 本地存一下setToken(newToken)},
// 删除vuex的token---用于登出时removeToken(state) {state.token = null// 删除本地token// 本地存一下removeToken()}},
7、在vuex中的action里发登陆请求
在store/modules/user.js
中,写actions如下:
export default {// ... 省略其他actions: {// data表示接口参数async userLogin(context, obj) {console.log('action userLogin', context, obj)// 调用ajax请求去做登陆const res = await login(obj)// 在actions中,如果要修改state,还是要调用mutaions// context.commit('mutation名', 参数)context.commit('setToken', res.data)}}}
7.1在组件中调用action
async doLogin() {try {// // 1. 保存token到vuex// // 如何在组件调用带命名空间mutations// // this.$store.commit("命名空间/mutations名",载荷)// this.$store.commit('user/setToken', res.data)// 在组件中调用带命名空间的actionawait this.$store.dispatch('user/userLogin', this.loginForm)console.log('用户登录成功')} catch (err) {alert('用户登录,失败')console.log('用户登录,失败', err)}},
后台管理系统项目-登录页-实现步骤相关推荐
- 电商平台后台管理系统项目介绍
MIMO电商平台后台管理系统 项目简介 基于 Vue3 + Vite2 + Typescript 开发的电子商务平台,组件库使用 element plus: 数据为 mock 模拟,登录账号密码随意填 ...
- SpringBoot实现分页查询——基于SpringBoot和Vue的后台管理系统项目系列博客(七)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- 中后台管理系统之登录流程
登录之执行流程 初识Vue-element-Admin 今天我们来看看中后台管理系统中 "登录" 执行了那些操作流程 views/login/index 首先在点击登录后,触发啦 ...
- SpringBoot实现代码生成器——基于SpringBoot和Vue的后台管理系统项目系列博客(十)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- SpringBoot实现1对1、1对多、多对多关联查询——基于SpringBoot和Vue的后台管理系统项目系列博客(十八)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- 开发陪玩游戏源码的后台管理系统,登录的实现是第一步!
在开发陪玩游戏源码时,不仅需要开发Android端和iOS端,还需要开发服务端,也就是后台管理系统,由于后天管理系统掌控者用户端的陪玩游戏源码使用效果,所以非常重要,今天我们先来了解一下号后台管理系统 ...
- SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- 安利一个非常优秀的开源后台管理系统项目,开箱即用,极大提高效率
介绍 | BuildAdmin 是一个完善的开源的后台管理系统项目. 以下是我认为的优缺点: 优点: 1.开箱即用,功能很多. 2.界面美观,带手动切换界面样式功能. 缺点: 1.功能多带来的缺点是让 ...
- vue项目登录页-实现字体动画案例
vue项目登录页-实现字体动画案例 实现思路: 1,让每个字都包含在span标签中,span标签的display:inner-block 2,页面刚生成时(动画之前)设置margin宽度为80px,o ...
最新文章
- 领跑交互新时代 蓦然认知助力传统产业智能化升级
- Python中6种基本数据类型
- 2019 ICPC Asia Nanjing Regional K.Triangle(求一个能将三角形分成两个面积相同的线段、计算几何)
- 『假如我是面试官』RabbitMQ我会这样问!
- 收敛速度更快更稳定的Wasserstein GAN(WGAN)
- 数学——Euler方法求解微分方程详解(python3)
- linux下的mysql修改默认编码
- 免费指纹浏览器破解方法之开源代码
- 使用Lucene的新FreeTextSuggester查找长尾建议
- 故宫也在拼多多卖货!故宫文具将入驻拼多多开设旗舰店!
- JavaScript 图片切换展示效果
- windows10 右键 manage 没反应
- uipath 收邮件_UIpath 循环读取IMAP邮件,并保存附件
- No qualifying bean of type;Unsatisfied dependency expressed through field 解决办法(总结全网)
- 初学windows程序设计
- 千图/千库/我图网/觅元素,终身会员来了!设计师的福利日!视觉运营室
- 高德地图ios11 定位失败
- 安装mathtype6.9时显示缺少MT Extra字体问题
- Emgu CV 第一个实例
- 财政局计算机岗位总结,2018计算机专业技术个人总结与2018计财科财务工作总结汇编.docx...
热门文章
- OpenFlow简单介绍
- 2021年智能晾衣机销售增长96%,好易点的增长引擎是什么?
- linux实训报告内容一万字,Linux实训报告.doc
- 【OpenCV-Python】教程:3-16 利用Grabcut交互式前景提取
- 雍禾医疗上市的喜和忧:获80倍超额认购,利润开始下滑,成本高企
- android动态修改refresh rate,Lenovo k860i 移植Android 4.4 cm11进度记录【下篇--实时更新中】...
- 企业微信为何出现信息发不出去的情况
- 面试官谈游戏开发入行--选择
- 学习Python处理Excel 难度1级别 多表合并、数据透视表、拆分合并单元格并获得一维表
- 浅谈Linux内核编程规范与代码风格