登录页form

news/2025/1/12 19:47:48/
<template>
<div class="login-bg login-container"><el-formref = "loginForm":model="loginForm":rules="loginRules"class="login-form"label-position="left">//登录页面html的内容<div class="title-container"><h3 class="title">Cms-Manager内容管理系统</h3></div>// 表单阈<el-form-item prop="username"><el-input ref="username" v-model="loginForm.username" placeholder="用户名" name="username"/></el-form-item><el-form-item prop="password"><el-input :key="password" ref="password" v-model="loginForm.password" :type="password" placeholder="密码" name="password"/></el-form-item><el-button:loading="loading"type="primary"style="width:100%;margin-botton:30px"@click="handleLogin">登录</el-button></el-form>
</div>
</template>
<script>import {login} from '@/api/activity'
export default {name:'Login',data() {const validateUsername = (rules,value,callback) => {if(!value) {callback(new Error('请输入用户名'))} else {callback()}},const validatePassword= (rules,value,callback) => {if(value.length < 6) {callback(new Error('请输入密码'))} else {callback()}},return {loginForm: {username:'',password:''}},loginRules: {username:[{required:true,trigger:'blur',validator:validateUsername}],password:[{required:true,trigger:'blur',validator:validatePassword}],},loading:false},method: {handleLogin() {this.$ref.loginForm.validate(valid=> {if (valid) {this.loading = true,this.login(this.loginForm).then(res => {this.loading = false,localStorage.setItem('token',res.data.token),localStorage.setItem('username',res.data.username),this.$router.replace('/home')}).catch(() => {this.loading = false,}) } else {return false}})}}}
</script>

添加loading
实现思路
validateUsername 用户名校验的实现思路,

  1. 接收rules,value,callback,如果value不存在,直接callback,传入error提示,里面接收的是字符串,不是对象,请输入用户名。否则,callback
    validatePassword:
  2. 判断值的长度,小于6,callback newError提示请输入密码;否则,callback

登录的实现逻辑:
拿到用户名和密码,确认是注册的用户后,根据规则返回token,token信息缓存再浏览器中,并且调用后端接口后,将token作为header部分传给后端,后端拿到以后对token进行验证,如果token合法,允许用户继续访问,如果不合法,给错误的提示。

handleLogin()实现流程:

  1. 通过ref拿到表单的实例,调用表单的validate,接收的函数为当前校验的对象,如果对象存在,说名校验正常,如果正常, 1. 设置loading,2. 调用login接口,表单为参数,通过.then拿到数据
  2. 拿到数据后,把loading关闭,用localStorage设置token,
  3. localStorage保存用户名,从接口中的username获取
  4. 登录成功后进行跳转,用replace
  5. 容错,.catch,设置了箭头函数,把loading关闭

import {login} from ‘@/api/activity’

错误:
token的获取方式 res.data.token
.catch对应的是.then,里面加的是箭头函数,而不是单独的函数
跳转的页面是/home,不是/decorate


http://www.ppmy.cn/news/688074.html

相关文章

2021清华大学年度人物候选 | 曹丰泽:我要证明,理想主义的路是走得通的

来源 | 清华小五爷园 一转眼&#xff0c;来非洲已经快半年了。短短半年&#xff0c;我却扎扎实实地明白了“理想主义”这四个字究竟意味着什么。回想半年前&#xff0c;我兴高采烈地离开清华&#xff0c;怀抱着满腔热情来到非洲&#xff0c;一心想要为坦桑尼亚人民用上清洁而充…

Debian 环境使用 docker compose 部署 sentry

Debian 环境使用 docker compose 部署 sentry Sentry 简介什么是 Sentry &#xff1f;Sentry 开发语言及支持的 SDKSentry 功能架构 前置准备条件规格配置说明Dcoker Desktop 安装WSL2/Debian11 环境准备 Sentry 安装步骤docker 部署 sentry 步骤演示过程说明 总结 Sentry 简介…

【今日CV 计算机视觉论文速览 第127期】Fri, 7 Jun 2019

今日CS.CV 计算机视觉论文速览 Fri, 7 Jun 2019 Totally 41 papers ?上期速览✈更多精彩请移步主页 Interesting: ?*****Mesh R-CNN, 研究人员提出了一种通过二维图像输入得到目标三维mesh的模型Mesh RCNN&#xff0c;通过在maskRCNN上增加了一条mesh预测支路来实现&#xf…

阿里巴巴 iDST 首席科学家兼副院长任小枫:最看好计算机视觉在这四大新零售细分方向的应用...

最近一段时间&#xff0c;无人便利店在国内发展得如火如荼&#xff0c;技术方案也各不相同。其中非常核心的技术之一就是计算机视觉。Amazon Go和阿里巴巴的淘咖啡无人超市都是这条技术路线上的领先者&#xff0c;而它们背后都离不开一个人——任小枫。 任小枫曾是亚马逊最高级…

垃圾分类机器人、无线电子皮肤、孟加拉转基因金稻...| 技术前沿洞察

热点追踪 / 深度探讨 / 实地探访 / 商务合作 大家好&#xff0c;一周技术前沿洞察又和大家见面啦。本周的一大趋势是&#xff0c;越来越多的技术都开始走出实验室&#xff0c;投入到解决实际问题的应用当中&#xff0c;比如&#xff0c;Alphabet的子公司X推出了办公室垃圾分类的…

Inferring Motion Direction using Commodity Wi-Fi for Interactive Exergames (WiDrancd)论文翻译

Inferring Motion Direction using Commodity Wi-Fi for Interactive Exergames (WiDrance) 利用wifi推断运动方向的互动健身游戏&#xff08;WiDance&#xff09; #摘要 In-air interaction acts as a key enabler for ambient intelligence and augmented reality. As an in…

在应用中简单进行蓝牙通信

作业5 近场通信 1、请分析三种近场通信技术的特点&#xff0c;对未来近场通信技术的应用场景进行分析与预测&#xff1b; 答&#xff1a; &#xff08;1&#xff09;三种主要近场通信技术的特点&#xff1a; 近场通信技术是一种短距离无线通信技术&#xff0c;它允许设备之间进…

浅谈三种近场通信的特点和未来发展趋势

目录 一、蓝牙 1.蓝牙的简要介绍 2.蓝牙的技术特点 3.蓝牙技术未来的应用场景预测与分析 二、WiFi 1.WiFi的简要介绍 2.WiFi的技术特点 3.WiFi技术未来的应用场景预测与分析 三、NFC 1.NFC的简要介绍 2.NFC的技术特点 3.NCF技术未来应用场景预测与分析 一、蓝牙 1…