b站黑马Vue2后台管理项目笔记——(1)登录功能

news2024/11/16 18:47:00

说明:

此项目中使用的是本地SQL数据库,Vue2

其他功能请见本人后续的其他相关文章。

本文内容实现的最终效果如下图:

目录

一.登录功能的实现

1.登录页面的布局:

(1)查看当前工作区是否干净

(2)创建分支

(3)查看分支

(4)运行项目

【如果没node_modules文件夹,需要添加node_modules文件夹】

【运行项目】

【启动mySQL,使得点击登录按钮后可跳转到home页面】

【启动api接口】

【梳理App.vue—根组件】

(6)创建登录组件

【新建Login.vue】

【导入Login.vue登录组件】

【加上路由占位符】

 【添加路由重定向路由规则】

 【设置登录页面的背景色】

 【设置登录页面的登录框盒子】

 【新建并设置全局样式表】

 【导入全局样式表】

 【设置登录组件的头部布局(设置了登录框的头像)】

(7)用element-ui布局登录框的表单

【导入element-ui】

【给表单文本框加按钮】

【给表单文本框加icon图标】

【在入口文件main.js中导入字体图标】

【登录框表单的数据绑定】

​【让密码隐藏】

【实现表单的数据验证】

【验证用户名】 

​【验证密码】

【实现表单重置——点击重置按钮,即可重置表单】

 (常用)【发起登录请求之前,要对表单进行预验证】

​        (常用)【根据登录验证的结果,判断是否进行登录】

(常用)【启动mySQL数据库】

【启动api接口】

(!!!常用)【!!!用async和await简化promise操作,并且解构赋值】

 【添加登录的消息提示】

【导入Message组件】

【设置默认的登录框的数据】

【将登录成功后console.log(res)结果中的data中的token,保存到客户端的sessionStorage中】

【通过编程式导航对象$router,跳转到后台主页,路由地址是/home】

 【新建Home.vue文件】

​【导入Home组件】

(常用)【路由重定向】

(8)通过路由导航守卫,控制访问权限

【在路由文件中,改造代码:需要拿到路由对象,给其挂载一个导航守卫】

(9)实现登录的退出功能


一.登录功能的实现

1.登录页面的布局:

用vscode,打开素材里的vue-shop文件夹:

在vscode中,终端-新建终端:

(1)查看当前工作区是否干净

在vscode终端中,输入git status,回车:

出现如下提示,则表明当前工作区干净。

(2)创建分支

在开发新功能的时候,都将新功能放到一个新分支上。

新功能开发完毕,再将这个新分支合并到主分支master上。

(【新建分支命令】在vscode终端中,输入git checkout -b,回车)

【此处新建名字是login的分支】在vscode终端中,输入git checkout -b login,回车。

(3)查看分支

【查看当前项目所有分支命令】在vscode终端中,输入git branch,回车。

*代表当前处在的分支。

master是代表从master切换到当前的login分支上的。

(4)运行项目

【如果没node_modules文件夹,需要添加node_modules文件夹】

回到vue-shop文件夹,打开cmd终端,输入npm install,回车安装依赖。

(如果输入npm install,回车,之后出现下图的情况:

则输入npm cache clear --force,回车。再输入npm i,回车,即可)

【运行项目】

回到vue-shop文件夹,打开cmd终端,输入npm run serve,回车。

复制http://localhost:8080/,去浏览器打开。

【启动mySQL,使得点击登录按钮后可跳转到home页面】

用phpStudy,启动mySQL数据库:

点击其他选项菜单:

 

打开vue_api_server文件夹,按住shift+右键,点里面的app.js文件:

【启动api接口】

输入 node app,回车: 

用vscode,打开素材里的vue-shop文件夹:

打开里面的src-views-main.js——整个项目的入口文件:

【梳理App.vue—根组件】

打开里面的src-App.vue—根组件:

template是ui结构

script是行为

style是样式

 

template中,删除以下红框部分:

 script中,只留下以下部分:

style中,清空里面的内容

【梳理router.js—路由】打开里面的src-router.js—路由:

只留下下图部分内容:

删除src-views-Home.vue和About.vue=直接删除views文件夹: 

删除src-components-HelloWorld.vue:

(6)创建登录组件

【新建Login.vue】

在src-components中,新建一个叫Login.vue的文件:

 

在Login.vue的文件输入以下内容:

 【导入Login.vue登录组件】

打开router.js文件,输入以下内容:

 

【加上路由占位符

打开App.vue文件,输入以下内容:

这样通过路由匹配到的组件都会被渲染到App.vue文件的<router-view></router-view>中,来展示。

 【添加路由重定向路由规则】

打开router.js文件,输入以下内容:

 【设置登录页面的背景色】

打开Login.vue文件,输入以下内容:

 

 【设置登录页面的登录框盒子】

打开Login.vue文件,输入以下内容:

 【新建并设置全局样式表

在src-assets-css里,新建一个global.css文件。在global.css文件中,输入以下内容:

 【导入全局样式表】

在main.js里,输入以下内容:

 【设置登录组件的头部布局(设置了登录框的头像)】

在Login.vue里,输入以下内容:

<!-- 模板 -->
<template>
    <div class="login_container">
        <div class="login_box">
            <div class="avatar_box">
                <img src="../assets/logo.png" alt="">
            </div>
        </div>
    </div>
</template>
<!-- 行为 -->
<script>
export default {}
</script>
<!-- 样式 -->
<!-- 加上了scoped,表明该样式只在当前组件生效 -->
<!-- 去掉scoped,表明该样式全局生效 -->
<style lang="less" scoped>
.login_container {
    background-color: #2b4b6b;
    height: 100%;
}

.login_box {
    width: 450px;
    height: 300px;
    background-color: #fff;
    border-radius: 3px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}

.avatar_box {
    width: 130px;
    height: 130px;
    border: 1px solid #eee;
    border-radius: 50%;
    padding: 10px;
    box-shadow: 0 0 10px #ddd;
    position: absolute;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: #fff;

    img {
        width: 100%;
        height: 100%;
        border-radius: 50%;
        background-color: #eee;
    }
}
</style>

 实现以下效果:

(7)用element-ui布局登录框的表单

【给表单加文本框】

登录element-ui官网:

Element - The world's most popular Vue UI framework

点击组件-form表单:

复制需要的表单部分的代码,粘贴到Login.vue组件中:

Login.vue组件中:

 【导入element-ui】

在src-plugins-element.js中,输入以下内容:

【给表单文本框加按钮】

在element-ui官网:

Element - The world's most popular Vue UI framework

点击组件-Button按钮:

复制需要的按钮部分的代码,粘贴到Login.vue组件中:

 

 Login.vue组件中,改文字内容:

再修改登录表单的CSS样式:

 最终实现到下图效果:

【给表单文本框加icon图标】

在element-ui官网:

Element - The world's most popular Vue UI framework

点击组件-input输入框:

复制需要的输入框的icon部分的代码,粘贴到Login.vue组件中:

 Login.vue组件中:

实现的效果:

【修改表单文本框的icon图标】

在element-ui官网:

Element - The world's most popular Vue UI framework

点击组件-icon图标:

复制需要的输入框的icon图标部分的代码,粘贴到Login.vue组件中:

如果没合适的图标,可去素材-fonts:

 将fonts文件夹复制到项目的vue_shop的assets文件夹中:

【在入口文件main.js中导入字体图标】

在项目的main.js文件中,导入iconfont.css:

 参考fonts里面的iconfont.html,在项目的Login.vue文件中修改用户名和密码的类名:

 Login.vue文件中:

 实现的效果:

【登录框表单的数据绑定】

去element-ui官网,组件-Form表单中:

用里面的:model,v-model双向绑定数据:

 

 

在Login.vue文件中: 

 【让密码隐藏】

在Login.vue文件中,给密码表单加上type=”password”或type=”show-password”。

 实现的效果:

【实现表单的数据验证】

打开Element-ui官网,点击组件-Form表单-表单验证,参考表单验证的道理:

 

【验证用户名】 

 在Login.vue文件中,添加以下内容:

 实现效果,当失去焦点的时候:

 【验证密码】

在Login.vue文件中,添加以下内容:

 实现的效果,失去焦点时:

【实现表单重置——点击重置按钮,即可重置表单】

打开Element-ui官网,点击组件-Form表单-Form Methods,参考重置表单的道理:

 

在Login.vue文件中,添加以下部分:

给<el form>添加ref=”loginFormRef”,该loginFormRef属性值是表单的引用对象。

下面那个$refs是如果console.log(this)的this里面的一个属性叫$refs:

(常用)【发起登录请求之前,要对表单进行预验证

登录Element-ui官网,点击组件-Form表单-Form Methods,参考里面的validate方法

 

 在Login.vue文件中,添加以下内容:

 (常用)【根据登录验证的结果,判断是否进行登录】

在Login.vue文件中,添加以下内容:

 在main.js入口文件中,添加以下内容:

参考api接口文档:

在Login.vue文件中,添加以下内容:

参考api文档:

 (常用)【启动mySQL数据库】

用phpStudy,启动mySQL数据库:

点击其他选项菜单:

 

 打开vue_api_server文件夹,按住shift+右键,点里面的app.js文件:

【启动api接口】

输入 node app,回车: 

在Login.vue文件中,输入以下内容:

(!!!常用)【!!!用async和await简化promise操作,并且解构赋值

其中{data:res}是用对象解构的方法,提取await this.$http.post('login', this.loginForm);返回值里面的data,并且将其命名为res。

 【添加登录的消息提示】

登录Element-ui官网,点击组件-Message消息提示,参考以下内容:

【导入Message组件】

去element.js里面,添加如下内容:

 

在Login.vue文件中,添加以下内容:

实现的效果:

如果登录失败:

 

 如果登录成功:

后续要进行的操作: 

【设置默认的登录框的数据】

在Login.vue文件中,修改username为admin,password改为123456:

【将登录成功后console.log(res)结果中的data中的token,保存到客户端的sessionStorage中】

在Login.vue文件中,添加以下内容:

【通过编程式导航对象$router,跳转到后台主页,路由地址是/home】

在Login.vue文件中,添加以下内容:

 【新建Home.vue文件】

在components文件夹中,新建一个Home.vue文件:

在Home.vue文件中,添加以下内容:

 【导入Home组件】

(常用)【路由重定向

在router.js文件中,添加以下内容:

 

 实现的效果:当点击登录按钮,则记录token,同时跳转到/home地址,访问到登录组件:

(8)通过路由导航守卫,控制访问权限

此时没token也能看到/home页面(访问到登录组件),这是不对的,应该是只有登录情况下,有token才行。

【在路由文件中,改造代码:需要拿到路由对象,给其挂载一个导航守卫】

在router.js路由文件中,添加以下内容: 

实现的效果:

如果用户没登陆,想直接跳转到/home页面,则会被强制跳转回/login登录页面。

(9)实现登录的退出功能

退出功能实现原理:

在Home.vue文件中,添加以下内容:

 实现的效果:

点击灰色的退出按钮,token会被销毁,页面会跳转到登录页。

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

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

相关文章

读锁应该插队吗?什么是锁的升降级?

背景 ReentrantReadWriteLock可以设置公平或非公平&#xff0c;为什么&#xff1f; 读锁插队策略 每次获取响应锁之前都要检查能否获取 readerShouldBlockwriterShouldBlock 公平锁 final boolean writerShouldBlock() {return hasQueuedPredecessors(); } final boolean …

打造智慧工地,低代码平台助力基建行业全链路数字化升级

编者按&#xff1a;基建行业数字化转型需求迫切&#xff0c;低代码平台有助于加快数字化转型速度&#xff0c;赋能建筑工程企业升级。本文分析了低代码在基建行业中的应用价值&#xff0c;并指出基建行业对于低代码平台的需求&#xff0c;最后通过相关案例的展示了低代码平台在…

低代码平台解读:“低代码+PaaS”的技术创新实践

数字化转型已经成为必然趋势&#xff0c;几乎所有传统行业都喊出了数字化转型的口号。但在数字化转型中&#xff0c;很多企业面临着成本高、周期长的难题。低代码是其中一种破解难题的方式&#xff0c;如今的低代码已经是企业数字化的核心引擎。 低代码平台越来越多&#xff0…

数据结构——链表(五)

数据结构 文章目录数据结构前言一、什么是链表二、实现单链表1.单链表的结构2.单链表的初始化3.单链表的插入4.遍历链表5.链表长度总结前言 接下来学习一下链表&#xff0c;链表比数组用的更多。 一、什么是链表 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存…

《从0开始学大数据》之如何自己开发一个大数据SQL引擎

背景 大数据仓库 Hive&#xff0c;作为一个成功的大数据仓库&#xff0c;它将 SQL 语句转换成 MapReduce 执行过程&#xff0c;并把大数据应用的门槛下降到普通数据分析师和工程师就可以很快上手的地步。 但是 Hive 也有自己的问题&#xff0c;由于它使用自己定义的 Hive QL …

Linux常用命令——repquota命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) repquota 报表的格式输出磁盘空间限制的状态 补充说明 repquota命令以报表的格式输出指定分区&#xff0c;或者文件系统的磁盘配额信息。 语法 repquota(选项)(参数)选项 -a&#xff1a;列出在/etc/fstab文…

gRPC 基础(二)-- Go 语言版 gRPC-go

gRPC-Go Github gRPC的Go实现:一个高性能、开源、通用的RPC框架&#xff0c;将移动和HTTP/2放在首位。有关更多信息&#xff0c;请参阅Go gRPC文档&#xff0c;或直接进入快速入门。 一、快速入门 本指南通过一个简单的工作示例让您开始在Go中使用gRPC。 1.1 先决条件 Go:…

word排版技巧:这几种特殊版式轻松搞定

我们在许多报刊、杂志中会见到一些带有特殊效果的文档&#xff0c;如首字下沉、分栏排版、竖排文档等形式的排版效果。这些效果其实不是只有专业排版软才能实现&#xff0c;利用Word我们可以轻松完成这些排版效果。1、首字下沉首字下沉是一种突出显示段落中的第一个汉字的排版方…

3小时快速上手sharding-jdbc

今日目标 1、理解分库分表基础概念【垂直分库分表、水平分库分表】 2、能够说出sharding-jdbc为我们解决什么问题 3、理解sharding-jdbc中的关键名词 4、理解sharding-jdbc的整体架构及原理 5、掌握sharding-jdbc的集成方式1.分库分表介绍 1.1 分库分表概述 分库分表就是为了…

普元EOS_工作流引擎相关数据表记录---工作流工作笔记002

由于现在在用普元的工作流引擎,但是,说明文档中没有对数据表的说明 所以整理一下记录下来: 业务流程(com.eos.workflow.data.WFProcessDefine) 属性 名称 类型 processDefID 业务流程ID long processDefName 业务流程名称 String processChName 业务流程显示名称 String desc…

计算机图形学 第5章 二维变换与裁剪完结

目录中点分割直线段裁剪算法中点计算公式代码Liang-Barsky直线段裁剪算法⭐⭐⭐代码&#xff1a;多边形裁剪算法/Sutherland-Hodgman裁剪算法代码相关学习资料&#xff1a;中点分割直线段裁剪算法 中点分割直线段裁剪算法对Cohen-Sutherland直线裁剪算法的第3种情况做了改进&a…

Centos 安装部署 Sentinel

在微服务架构中&#xff0c;业务高峰时段&#xff0c;请求过多可能导致直接查询数据库&#xff0c;造成雪崩等事故。 一、雪崩问题 微服务调用链路中某个服务故障&#xff0c;引起整个链路中所有服务不可用。 解决方案 1&#xff09;超时处理 设置超时时间&#xff0c;请求超…

最近超火的ChatGPT到底怎么样?体验完后我有哪些感受和思考?

✔️本文主题&#xff1a;ChatGPT 人工智能 ✔️官方网站&#xff1a;chat.openai.com 文章目录前言二、初识三、深入四、编程相关编写纠错五、感想六、展望七、结语前言 大家好&#xff0c;这次我们来聊一聊最近超级火的人工智能语音——ChatGPT&#xff01; ChatGPT是什么&…

从 synchronized 到 CAS 和 AQS的超详细解析

文章目录一、Synchronized 关键字二、悲观锁和乐观锁三、公平锁和非公平锁四、可重入锁和不可重入锁五、CAS5.1、操作模型5.2、重试机制&#xff08;循环 CAS&#xff09;5.3、底层实现5.4、ABA 问题六、可重入锁 ReentrantLock七、AQS7.1、请求锁7.2、创建 Node 节点并加入链表…

Vue3组合式API

Vue3组合式APIcomposition API 和 options API体验 composition APIsetup 函数reactive 函数ref 函数script setup语法composition API 和 options API vue2 采用的就是 optionsAPI (1) 优点:易于学习和使用, 每个代码有着明确的位置 (例如: 数据放 data 中, 方法放 methods中)…

Mac 打开JD-GUI报错:ERROR launching ‘JD-GUI‘

目录一、JD-GUI下载二、JD-GUI报错信息三、解决方案1、查找JD-GUI包内容2、修改universalJavaApplicationStub.sh文件一、JD-GUI下载 JD-GUI下载地址&#xff1a;https://github.com/java-decompiler/jd-gui/releases 二、JD-GUI报错信息 Mac系统版本&#xff1a;11.3 JD-GUI…

智能车|自主导航 ROS Navigation Stack 功能包 简介与编译

智能车|自主导航 ROS Navigation Stack 功能包 简介与编译前言功能包下载与编译前言 ros功能包&#xff1a;Navigation ros wiki&#xff1a;http://wiki.ros.org/navigation github 地址&#xff1a;https://github.com/ros-planning/navigation 功能包简介&#xff1a; ROS…

第一次创业,注册什么类型的公司?

前言 几乎每一个打工者都有一颗当老板的心&#xff0c;大喊一声&#xff1a;"大丈夫生居天地间,岂能郁郁久居人下"&#xff0c;于是一拍桌子就辞职创业&#xff0c;现实往往都是潦草收场&#xff0c;看下面一段统计数据&#xff1a; 中国小微企业平均存活周期4.13年&…

通过Bypass UAC进行权限提升

什么是UAC用户账户控制&#xff08;User Account control&#xff0c;UAC&#xff09;是windows系统采用的一种控制机制&#xff0c;可以阻止自动安装未经授权的应用 并防止意外更改系统设置&#xff0c;有助于防止恶意软件损坏计算机。用户账户控制程序使应用程序和任务始终在…

2.5.3 PCIe——物理电气子层——动态均衡

因为PCIE 3.0信号的速率可以达到8Gb/s&#xff0c;而且链路通道走线也可能会很长&#xff0c;这可能会导致高速信号衰减过大&#xff0c;为了补偿channel的衰减需要增加传输信号的高频成分&#xff0c;让高频和低频能量差不多&#xff0c;这就是equalization。因此在PCIE 3.0的…