Vue开发实例(20)之实现登录功能

news2025/2/26 22:15:17

引言

Vue是现在前端最流行的框架之一,作为前端开发人员应该要熟练的掌握它,如果你是打算学习Vue的开发流程,那么来吧,明哥带你快速上手、带你飞!
即使你并非前端开发人员,对前端的开发流程进行一定的了解也是很有必要的,谁也不确定公司以后会不会让我做前端去,做些简单的实例既不需要花费很多时间,也可以提高自己的自信和成就感,所以跟着明哥走,没有错,来吧!

导航

✪  Vue开发实例目录总索引
上一篇【19】用户列表分页的实现
下一篇【21】待更新

实现最简单的登录功能

  1. 创建 login.vue页面

其中,点击确定后,会直接跳转到主页(确定按钮对应的方法,直接跳转到 “/index”路由)
confirm(){
this.$router.replace(‘/index’);
}

<template>
    <div class="loginbBody">
        <div class="loginDiv">
            <div class="login-content">
                <h1 class="login-title">用户登录</h1>
                <el-form :model="loginForm" label-width="100px"
                         :rules="rules" ref="loginForm">
                    <el-form-item label="名字" prop="name">
                        <el-input style="width: 200px" type="text" v-model="loginForm.name"
                                  autocomplete="off" size="small"></el-input>
                    </el-form-item>
                    <el-form-item label="密码" prop="password">
                        <el-input style="width: 200px" type="password" v-model="loginForm.password"
                                  show-password autocomplete="off" size="small"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="confirm">确 定</el-button>
                    </el-form-item>
                </el-form>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        name: "login",
        data(){
            return{
                loginForm:{
                    name:'',
                    password:''
                },
                rules:{
                  
                }
            }
        },
        methods:{
            confirm(){
                this.$router.replace('/index');
            }
        }
    }
</script>

<style scoped >
    .loginbBody {
        width: 100%;
        height: 100%;
        background-color: #B3C0D1;
    }
    .loginDiv {
        position: absolute;
        top: 50%;
        left: 50%;
        margin-top: -200px;
        margin-left: -250px;
        width: 450px;
        height: 330px;
        background: #fff;
        border-radius: 5%;

    }
    .login-title {
        margin: 20px 0;
        text-align: center;
    }
    .login-content {
        width: 400px;
        height: 250px;
        position: absolute;
        top: 25px;
        left: 25px;
    }
</style>
  1. 在router.js中配置一级路由
{
   path: '/login',
    name: 'login',
    component: () => import('./components/login.vue')
}
  1. 登录页面效果如下:
    在这里插入图片描述
  2. 操作一下试试
    在这里插入图片描述

加入页面验证

刚才直接点击的确定,没有做任何的判断,实际项目上肯定要做不少的判断的;
这里就加是否为空、长度这两个规则来作为验证;
要加其他规则的自己再去加吧。

  1. 在data里面加入规则的内容
rules:{
   name: [
       { required: true, message: '请输入用户名', trigger: 'blur' },
       { min: 3, max: 6, message: '用户名长度在 36 个字符', trigger: 'blur' }
   ],
   password: [
       { required: true, message: '请输密码', trigger: 'blur' },
       { min: 3, max: 6, message: '密码长度在 36 个字符', trigger: 'blur' }
   ]
}
  1. el-form里面的规则配置有没有到位
  • el-form加入 :rules=“rules” ref=“loginForm”
  • el-form-item 加入的prop,写入对应的值

在这里插入图片描述
3. 修改confirm方法的代码,加入验证逻辑

this.$refs.loginForm.validate 执行验证,this.$refs.loginForm 获取当前的表单对象
valid成功为true则直接跳转到index,失败则提示红色的内容

confirm(){
     this.$refs.loginForm.validate((valid) => {
         if (valid) { //valid成功为true,失败为false
             this.$router.replace('/index');
         } else {
             console.log('校验失败');
             return false;
         }
     });

 }

在这里插入图片描述

加入后台验证

  1. 用mockjs模拟后台登录验证,并返回token

用户名密码固定 admin / 123

Mock.mock('/login','post', (param)=>{
    let state=0;
    let body = JSON.parse(param.body);
    console.log(body)
    let data;
    //模拟成功数据
    if(body.name=='admin'&&body.password=='123'){
        state=1;
        data = Mock.mock({
            "token": "@guid()",//模拟token
            "name": "@cname",//随机生成中文名字随机生成中文名字
        });
    }

    return{
        "state":state,
        "vData":data
    }
});
  1. 在storejs里面将token存储

state 添加token属性


在这里插入图片描述


mutations 增加 SET_TOKEN 方法,将token存储到state和localStorage 中

SET_TOKEN(state, token){
    state.token = token ;
    localStorage.setItem("token",token);
}
  1. login.vue的确定方法confirm做修改

提交登录信息到后台,验证成功后则登录并存储token信息,验证不成功提示失败

confirm(){
    this.$refs.loginForm.validate((valid) => {
        if (valid) { //valid成功为true,失败为false
            //去后台验证用户名密码,并返回token
            this.$axios.post('/login',this.loginForm).then(res=>{
                console.log(res.data)
                if(res.data.state==1){
                    //存储token到本地
                    this.$store.commit("SET_TOKEN",res.data.vData.token);
                    //跳转到主页
                    this.$router.replace('/index');
                }else{
                    alert('校验失败,用户名或密码错误!');
                    return false;
                }
            });
        } else {
            console.log('校验失败');
            return false;
        }
    });

}
  1. 测试一下
    在这里插入图片描述

退出功能

  1. mockjs模拟退出
//退出
Mock.mock('/logout','post', ()=>{
    return {state:1}
});
  1. storejs的mutations中添加 resetState 用于重置相关数据
resetState(state){
    state.token = '';
    localStorage.clear();
}
  1. 在Header页面的退出加入点击事件

el-dropdown-item编写click方法的时候要加入 native ,否则会点击没反应
在这里插入图片描述

  1. 在Header页面增加点击方法

成功调用后台后

  1. 清空相关数据
  2. 跳转到登录页面
logout(){
    this.$axios.post('/logout',this.loginForm).then(res=>{
        console.log(res)
        //清理数据
        this.$store.commit('resetState');
        //跳转到登录路由
        this.$router.push({path:"/login"})
    });
}
  1. 测试
    在这里插入图片描述

小结

这节总结了“ 实现登录功能 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java和前端的,【关注一波】不迷路哦。
请到文章下方帮忙【一键三连】谢谢哈!

在这里插入图片描述

导航

✪  Vue开发实例目录总索引
上一篇【19】用户列表分页的实现
下一篇【21】待更新

热门专栏推荐

【1】Java小游戏(俄罗斯方块、植物大战僵尸等)
【2】JavaWeb项目实战(图书管理、宿舍管理等)
【3】JavaScript精彩实例(飞机大战、验证码等)
【4】Java小白入门200例
【5】从零学Java、趣学Java
【6】IDEA从零到精通

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

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

相关文章

微信小程序简洁登录页面(附源码)

微信小程序简洁登录页面&#xff08;附源码&#xff09; 文章目录微信小程序简洁登录页面&#xff08;附源码&#xff09;1. 群聊&#xff08;开源项目以及技术交流&#xff09;2.看效果3.用户不存在4.上代码4.1login.wxml4.2login.css4.3login.js5.总结1. 群聊&#xff08;开源…

手把手教你用vue + node 作后端连接数据库

教程的顺序&#xff1a; 1、编写node服务器 2、用node连接数据库 3、编写前端页面 4、前后端交互 ok&#xff0c;让我们开始吧 1、编写node服务器 先下载几个依赖包 express&#xff08;用于网络连接&#xff09; npm i express --save cors&#xff08;用于处理跨域…

IDEA 2022专业版创建Java Web项目(保姆式小白讲义,强烈建议入手!)

这里先给出IDEA专业版的下载链接&#xff0c;没有下载的小伙伴&#xff0c;请先下载哦&#xff01;&#xff08;选择左边的Ultimate&#xff09; 目录 1.新建Java Class 2.添加框架 3. 配置Maven 4.配置项目结构 5.配置tomcat 本文致力于2022.3IDEA 专业版创建Java Web项目小白…

JS中的this指向

this的概念&#xff1a; 在js中&#xff0c;this的意思为“这个;当前”&#xff0c;是一个指针型变量&#xff0c;它动态指向当前函数的运行环境。 在不同的场景中调用同一个函数&#xff0c;this的指向也可能会发生变化&#xff0c;但是它永远指向其所在函数的真实调用者&…

如何在uniapp中优雅地使用WebView

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 从webview页面传值到uniapp中 官方文档已经很详细了,这里给大家上我的实战代码&#xff0c;首先在webview页面中引入相关依赖&#xff1a; <!-- uniapp各平台依赖 --> <script type"tex…

用uniapp实现微信小程序的电子签名效果

✅作者简介&#xff1a;大家好我是瓜子三百克&#xff0c;励志成为全栈工程师的一枚程序猿&#xff0c;也是喜欢在学习和开发中记录笔记的小白博主&#xff01; &#x1f4c3;个人主页&#xff1a;瓜子三百克的主页 &#x1f525;系列专栏&#xff1a;uniapp前端 &#x1f496;…

vue项目实战-电商后台管理系统

项目简介&#xff1a; 该项目为电商后台的管理系统。设计了登录页面。 管理人员需要通过输入正确的用户名和密码才能登录。登陆成功之后进入管理页面&#xff1a; 管理页面由五个子模块组成&#xff1a;用户管理&#xff0c;权限管理&#xff0c;商品管理&#xff0c;订单管理…

ChatGPT对话数据备份

ChatGPT对话数据备份 文章目录ChatGPT对话数据备份1. 背景2. 其他&#xff08;失败的&#xff09;方法2.1 右键另存为2.2 直接copy html代码3. 编写Javascript脚本3.1 思路过程3.2 安装教程3.3 使用说明3.4 最终效果1. 背景 之前在ChatGPT更新时有好几天都无法查看过往对话&am…

webpack 面试题整理

文章目录webpack 面试题整理谈谈你对Webpack的理解Webpack的打包过程/打包原理/构建流程&#xff1f;Webpack中loader的作用/ loader是什么&#xff1f;常见的loader有哪些&#xff1f;Plugin有什么作用&#xff1f;/Plugin是什么常见的Plugin有哪些Webpack 插件的执行顺序&…

15套前端经典实战项目大合集,小白练手必备实战项目

15套前端经典实战项目大合集&#xff0c;悄悄练习&#xff0c;你会惊艳所有人。 今日我以内卷为荣&#xff0c;明日内卷以我为荣&#xff0c;不管学习哪门语言都要做出实际的东西来&#xff0c;这个实际的东西就是项目。 这里整理了15前端经典实战项目&#xff0c;每套都有完…

nodejs高版本降为低版本方案

1.首先通过控制面板应用卸载当前环境下的Node.js相关安装&#xff0c;并清理磁盘残存的文件夹等文件 2.下载nvm来管理node版本 官网&#xff1a;https://github.com/coreybutler/nvm-windows/releases 说在前面&#xff0c;贴一个error C:\Windows\system32>nvm use 12.10.…

web前端Vue 报错:Uncaught (in promise) TypeError: Cannot read properties of nu

前言 最近在写vue项目 在写自定义分页器的时候报了一个异常 知道错误却一直找不到解决方案 苦思冥想后 还是js的基础语法不扎实导致的&#xff0c;在此记录一下解决方案和思路 为以后的bug解决之路打下基础 错误提示 错误内容Uncaught (in promise) TypeError: Cannot read…

【HTML特效程序】① 给女神表白的程序(让女神看科技烟花),输入名字自动生成表白二维码

目录一、效果演示视频二、一步一步创建项目三、生成表白二维码的小链接一、效果演示视频 给女神表白的程序二、一步一步创建项目 &#x1f339; 在您的电脑上创建 love 文件夹 &#xff08;存放所有的资源和代码&#xff09; &#x1f339; 在 love 文件夹中创建 images 文件夹…

Vue 国际化之 vue-i18n 的使用

目录 一、安装 二、使用 1、准备语言包 2、准备翻译的语言环境 3、实现语言翻译 三、整合 ElementUI 语言包 1、扩展中文 2、扩展英文 3、使用扩展语言翻译 四、问题记录 五、扩展 vue3 中使用 vue-i18n 一、安装 npm install vue-i18n 如果在一个模块系统中使用…

elementUI使用el-upload上传文件写法总结及避坑,上传图片/视频到本地/服务器以及回显+删除

Element Upload 上传 Element Upload官方文档&#xff1a;el-upload 具体细节只看官方文档&#xff0c;本篇主要介绍避坑点和用法总结 注意点以及坑 本地上传想要回显图片视频&#xff0c;使用on-success是没办法再在上传后获取到本地文件路径后进行回显的&#xff0c;因为只…

若依(RuoYi )权限管理设计

前言 若依权限管理包含两个部分&#xff1a;菜单权限 和 数据权限。菜单权限控制着我们可以执行哪些操作。数据权限控制着我们可以看到哪些数据。 菜单是一个概括性名称&#xff0c;可以细分为目录、菜单和按钮&#xff0c;以若依自身为例&#xff1a; 目录&#xff0c;就是页…

TypeScript 学习笔记(十万字超详细知识点总结)

👉 本系列专栏:TypeScript从入门到精通 🖥️ NodeJS专栏:Node.js从入门到精通 📢 欢迎私信博主加入前端交流群🌹 知识目录 一、介绍1、JavaScript最大的问题2、什么是TypeScript3、JS , ES , TS 的关系4、为什么使用TypeScript5、配置TypeScript环境二、数据类型1、基…

下载、编译、安装、使用 vue-devtools

不少人都想下载 vue-devtools插件&#xff0c;但又不会做&#xff0c;今天我做个比较详细的笔记 查看当前的devtools的版本可以去这个网站看右侧的个v几点几的&#xff0c;就是版本号 github/vuejs/devtools 目录 第一个方法&#xff1a;使用极简插件 第一步&#xff1a;查…

Node.js | JavaScript也能写后端?

本文已收录于专栏⭐️ 《深入浅出Node.js》⭐️ 学习指南&#x1f4c3;&#x1f449;引入⭐️初识Node.js⭐️发展历史⭐️应用场景⭐️搭建环境&#x1f449;完结散花&#x1f449;参考文献&#x1f449;引入 如果读者是一个前端开发的同学&#xff0c;不知道你有没有过这样的…

jsoup的使用

本文在写作过程中参考了官方文档&#xff0c;传送门。 一、jsoup概述 jsoup 是一款基于 Java 的HTML解析器&#xff0c;它提供了一套非常省力的API&#xff0c;不但能直接解析某个URL地址、HTML文本内容&#xff0c;而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据&…