Vue后台管理系统-前端登录设计

news2024/9/21 4:16:53

在做后台管理系统时,登录模块是必不可少的,访模块看似简单,在开发涉及到许多细节,一般来说主要有以下这些:

1. 登录输入的信息要进行正则校验;

2. 密码输入要可以查看明文;

3. 密码输入时要对大写锁定进行提示;

4. 表单控件要有Tab键导航操作;

5. 输入完成要可以回车确认登录;

6. 要有自动登录的功能;

7. 二次登录时要有重定向的功能;

8. 登录界面要进行移动端适配;

9. 登录成功后的信息要进行全局状态管理;

10. 安全性较高系统还要添加相关验证,比如:短信验证、谷歌验证、滑动验证;

11. 防止同账号同时登录多台电脑,即同一账号在新的电脑登录了,之前登录的电脑上的账号自动被踢下线;

12. 要有良好的视觉效果设计,毕竟这是用户的第一感受;

以下是基于Vue和Element UI写的一个通用的登录界面和交互功能,实现了基本的功能,提供给大家参考:

<template>
    <div class="login-box">

        <el-card shadow="always">

            <el-form
                ref="loginForm"
                autocomplete="on"
                :model="loginForm"
                :rules="loginRules"
                label-position="left">
            
                <el-form-item prop="username">
                    <span style="font-size:16px">账户</span>
                    <el-input
                        type="text"
                        tabindex="1"
                        ref="username"
                        name="username"
                        autocomplete="on"
                        prefix-icon="el-icon-user"
                        placeholder="请输入账户名称"
                        v-model="loginForm.username"
                    />
                </el-form-item>

                <el-form-item prop="password">
                    <span style="font-size:16px">密 码</span>
                    <el-tooltip
                        manual
                        placement="right"
                        v-model="capsTooltip"
                        content="已开启大写锁定">
                        <el-input
                            tabindex="2"
                            show-password
                            ref="password"
                            name="password"
                            autocomplete="on"
                
                            :key="passwordType"
                            :type="passwordType"

                            placeholder="请输入密码"
                            prefix-icon="el-icon-lock"

                            @blur="capsTooltip = false"
                            v-model="loginForm.password"
                            @keyup.native="checkCapslock"
                            @keyup.enter.native="handleLogin"
                        />
                    </el-tooltip>
                </el-form-item>
         

                <el-button
                    type="primary"
                    :loading="loading"
                    @click.native.prevent="handleLogin">
                    <i class="el-icon-s-promotion"/>登 录
                </el-button>


            </el-form>
        </el-card>
    </div>
</template>

<script>

export default {
    name: "Login",
    data() {
        return {
            // 登录重定向
            redirect:"",
            // 重定向参数
            otherQuery: {},

            // 是否正在登录
            loading: false,
            // 开启大写提示
            capsTooltip: false,
            // 密码控件类型
            passwordType: "password",

            // 登录表单控件
            loginForm:{
                username: "",
                password: "",
            },
            // 控件校验规则
            loginRules: {
                username: [{required: true, trigger: "blur", message: '用户名不能为空' }],
                password: [{required: true, trigger: "blur", message: '密码不能为空'}],
            },

        };
    },
    watch: {

        $route: {
            handler: function (route) {
                const query = route.query;
                if (query) {
                    // 包含第一个参数的重定向
                    this.redirect = query.redirect;
                    // 重定向其它的查询参数
                    this.otherQuery = this.getOtherQuery(query);
                }
            },
            // 立即执行
            immediate: true,
        },
    },

    mounted() {

        // 输入自动聚焦
        if (this.loginForm.username === "") {
            this.$refs.username.focus();
        } else if (this.loginForm.password === "") {
            this.$refs.password.focus();
        }

    },


    methods: {

        // 检测大小写
        checkCapslock(e) {
            const { key } = e;
            this.capsTooltip = key && key.length === 1 && key >= "A" && key <= "Z";
        },


        // 点击按钮登录
        handleLogin() {
            this.$refs.loginForm.validate((valid) => {
                if (valid) {
                    this.loading = true;

                    // 通过状态管理提交用户信息
                    this.$store.dispatch("user/login", this.loginForm).then(() => {
                        this.$router.push({
                            path: this.redirect || "/",
                            query: this.otherQuery,
                        });
                        this.loading = false;
                    }).catch(() => {
                        this.loading = false;
                    });
                } else {
                    return false;
                }
            });
        },


        // 获取查询参数
        getOtherQuery(query) {
            return Object.keys(query).reduce((obj, value) => {
                // 排除重定向和第一个查询能数
                if (value !== "redirect") {
                    obj[value] = query[value];
                };
                return obj;
            },{});
        }

    },
    
};
</script>

<style lang="scss">


.login-box{
    height: 100%; 
    overflow: hidden;
    background-image:url(./background.png);
    background-size:100% 100%;
    .el-input__inner{
        height: 40px;
        font-size: 16px;
        padding-left: 35px;
    }
}

@media screen and (max-device-width: 1920px) {
    .login-box .el-card {
        width: 30%;
        margin: 10% auto;
        height: 50%;
        padding: 40px 10px;
        border-radius: 4%;
    }
}

@media screen and (max-device-width: 600px) {
    .login-box .el-card {
        width: 100%;
        height: 100%;
        margin: auto;
        padding-top: 25%;
        border-radius: 0;
    }

}

</style>

实现的效果如下:

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

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

相关文章

JavaWeb——IP协议的相关特性

目录 一、IP协议 1、地址管理 &#xff08;1&#xff09;、动态分配IP地址 &#xff08;2&#xff09;、NAT机制 &#xff08;3&#xff09;、IPv6协议 2、路由选择 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、原理 二、路由器 三、IP地址的组成 1…

Postman登录注册指导

在做后端开发的小伙伴经常需要测试自己写的接口是否可以用 这时Postman就是一个很好的选择 如果您还没有下载 可以参考我的文章 API接口调试工具Postman下载安装步骤 安装好之后 我们就需要处理 它的一个注册和登录 我们点击右上角 这里就有一个创建一个账户 我们点击一下 …

CF - Playing in a Casino

题意&#xff1a;一个数的幸运值计算规则是用里面最大的数字-最小的数字所得值 给出一个范围&#xff0c;求这个范围里幸运值最大的是哪个数 解&#xff1a; 这道题相对来说就很简单了&#xff0c;注意数值限制范围在1道1e6&#xff0c;虽然这道题确实暴力就能做出来&#xf…

手把手教你用几行代码给winform多个控件(数量无上限)赋值

前言&#xff1a; 我们在开发winform程序的过程中&#xff0c;经常会遇到这样一个场景&#xff0c;我们设计的界面&#xff0c;比如主窗体有一百多个TextBox&#xff0c;然后初始化的时候要对这个一百多个TextBox的Text属性赋值&#xff0c;比如赋个1&#xff0c;如果是winfor…

CAD DLL 15 crack增加了对SLDASM、FSAT

CAD DLL 15 crack增加了对SLDASM、FSAT 改进的3D&#xff1a; 提高了打开三维文件的速度。 提高了SAT、STEP、SLDPRT、X_T、X_B、OBJ格式的阅读能力。 增加了对SLDASM、FSAT、SAB、SMT、IPT、IFC格式的支持。 增加了导出为SAT、SAB、STL、OBJ格式的功能。 改进了SAT、STE…

系统错误 无法启动此程序,因为计算机中丢失MSVCP140_1.dll。尝试重新安装该程序已解决此问题

Qt系列文章目录 文章目录 Qt系列文章目录前言一、解决方法 前言 我在windows10系统&#xff0c;使用Qt5.15.2 打包命令&#xff1a;windeployqt.exe ImageManageSys.exe &#xff0c;把ImageManageSys.exe 拷贝到windows7系统下&#xff0c;报错&#xff1a;ImageManageSys.ex…

红海云CEO孙伟解密智能化人力资源新范式

4月25日&#xff0c;由广州人力资源服务协会联合HRflag主办的“2023广州人力资源创新与科技展”在广州越秀国际会议中心举办&#xff0c;大会邀请红海云CEO孙伟出席并发表主题演讲&#xff0c;分享人力资源数字化的创新&#xff0c;实践以及思考。 红海云持续高增长的密码 在…

jsp内置对象

request 将要介绍request对象的作用范围及其常用的方法。用户每访问一个页面&#xff0c; 就会产生一个HTTP请求。这些请求中一般都包含了请求所需的参数值或者信息&#xff0c; 如果将request对象看作是客户请求的一个实例&#xff0c; 那么这个实例就包含了客户请求的所有数…

Nuxt3 布局layouts和NuxtLayout的使用

Nuxt3是基于Vue3的一个开发框架&#xff0c;基于服务器端渲染SSR&#xff0c;可以更加方便的用于Vue的SEO优化。 用Nuxt3 SSR模式开发出来的网站&#xff0c;渲染和运行速度非常快&#xff0c;性能也非常高&#xff0c;而且可SEO。 接下来我主要给大家讲解下Nuxt3的layouts布…

CF - Li Hua and Pattern

题意&#xff1a;给出了矩阵&#xff0c;里面每个位置分为蓝色或红色&#xff08;数据上用1和0体现了&#xff09;&#xff0c;给出了一个操作次数&#xff0c;每次可以改变一个坐标的颜色&#xff0c;问能否通过操作使得图像旋转180度后不变。 解&#xff1a;很容易想到&…

修改DaemonSet 的/args参数后多个pod重启的顺序

理论 当您修改了DaemonSet的/args参数时&#xff0c;DaemonSet控制器会自动触发Pod的滚动更新。滚动更新的过程是逐个将旧的Pod删除并创建新的Pod&#xff0c;以确保应用程序的高可用性和稳定性。 在进行滚动更新时&#xff0c;DaemonSet控制器会按照以下步骤逐个重启Pod&…

flask+apscheduler+企业微信消息机器人推送

简介&#xff1a;APScheduler是一个轻量级的Python库&#xff0c;用于在后台运行定时任务和延迟任务。它可以轻松地安排任务并支持多种类型的触发器&#xff0c;例如固定间隔、日期/时间表达式、CRON表达式等。APScheduler还提供了多个后台调度器实现&#xff0c;例如基于线程池…

51单片机(五)LCD1602调试工具

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

4月24日~4月26日学习总结

一&#xff0c;刷题目情况&#xff0c;已经完成了8道题目&#xff0c;对于其中一些题目做一下题解。 这个题目的意思是找到的两个位置l和r&#xff0c;为了做到这个数组的l到r的子数组经过排序后&#xff0c;会变成输入的另外一个数组&#xff0c;这个题目的思路就是首先找到在…

【1G-6G】移动通信技术发展

移动通信技术发展 1G 早在1947年&#xff0c;贝尔实验室的科学家就提出了蜂窝通信的概念&#xff0c;在20世纪60年代对此进行了系统的实验。20世纪60年代末、70年代初开始出现了第一个蜂窝&#xff08;Cellular&#xff09;系统。蜂窝的意思是将一个大区域划分为若干个相邻的…

nodejs+vue 古诗词数字化分享平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1nodejs语言简介 7 2.2vue技术 8 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 9 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第…

31-基于GA遗传算法的车辆充电调度系统优化matlab程序

资源地址&#xff1a; 主要内容&#xff1a; 研究多辆电动汽车的充电调度问题&#xff0c;考虑某时段区域范围内有M 辆电动汽车发出充电请求时&#xff0c;周围有N 个充电桩可以提供充电位的调度情况。把当前调度时段电动汽车和充电桩的基本数据加载到调度中心&#xff0c;调度…

基于springboot“漫画之家”系统(附源码、设计文档)

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Linux->管道和共享内存通信

目录 1 管道 1.1 管道是什么 1.1 匿名管道通信 1.2 父子进程通信 1.3 匿名管道实现多进程文件的写入读取 1.4 命名管道 2 共享内存 1 管道 1.1 管道是什么 管道顾名思义&#xff0c;他就是一个像是连通器一样的东西&#xff0c;原本不存在联系的东西之间建立起一定的关…

数据结构学习记录——平衡二叉树的调整(基本介绍、右单旋、左单旋、左右双旋、右左双旋、平衡因子的计算)

目录 基本介绍 右单旋 左单旋 左右双旋 右左双旋 平衡因子的计算 基本介绍 首先&#xff0c;平衡二叉树也是一棵二叉搜索树。 当我们在一棵平衡二叉树进行插入或者删除时&#xff0c;可能会把原来的平衡二叉树变得不平衡&#xff0c; 这个时候我们就需要进行调整了。…