Vue + Element UI + JSEncrypt实现简单登录页面

安装依赖

npm install jsencrypt --save

局部引入

import JSEncrypt from 'jsencrypt/bin/jsencrypt';

登录页面index.vue

<template>
	<div class="loginbody">
		<div class="logindata">
			<div class="logintext">
				<h2>Welcome</h2>
			</div>
			<div class="formdata">
				<el-form ref="form" :model="form" :rules="rules">
					<el-form-item prop="username">
						<el-input v-model="form.username" clearable placeholder="请输入账号"></el-input>
					</el-form-item>
					<el-form-item prop="password">
						<el-input v-model="form.password" clearable placeholder="请输入密码" show-password></el-input>
					</el-form-item>
				</el-form>
			</div>

			<div class="tool">
				<el-checkbox v-model="checked" @change="remember">记住密码</el-checkbox>
			</div>

			<div class="butt">
				<el-button type="primary" @click.native.prevent="login('form')">登录</el-button>
			</div>
		</div>
	</div>
	</div>
</template>

<script>
	import JSEncrypt from 'jsencrypt/bin/jsencrypt';
	export default {
		data() {
			return {
				form: {
					username: "",
					password: "",
				},
				pbkey: "",
				checked: true,
				rules: {
					username: [{
						required: true,
						message: "请输入用户名",
						trigger: "blur"
					}],
					password: [{
						required: true,
						message: "请输入密码",
						trigger: "blur"
					}],
				},
			};
		},
		mounted() {
			// 是否记住密码
			if (localStorage.getItem("emisLoginInfo")) {
				this.form = JSON.parse(localStorage.getItem("emisLoginInfo"))
				this.checked = true;
			}
		},
		methods: {
			// 点击登录按钮
			login(form) {
				this.$refs[form].validate((valid) => {
					if (valid) {
						// 表单校验通过

						this.$api.getPublicKey(({
							data
						}) => {
							this.pbkey = data;
							this.doLogin();
						})
					} else {
						return false;
					}
				});
			},
			// 登录获取token
			doLogin() {
				let loginData = {
					userName: this.form.userName,
					passWord: this.encrypt(this.form.password)
				}
				this.$api.login(loginData, ({
					data
				}) => {
					localStorage.setItem("emisToken", data);
					this.$router.push({
						path: '/home'
					});
				})
			},
			// 加密
			encrypt(pwd) {
				const encrypt = new JSEncrypt();
				encrypt.setPublicKey(this.pbkey); //设置公钥
				return encrypt.encrypt(pwd);
			},
			// 解密 
			decrypt(pwd) {
				const encrypt = new JSEncrypt();
				encrypt.setPrivateKey(privateKey); //设置私钥
				return encrypt.decrypt(pwd);
			},
			// 记住密码
			remember(data) {
				this.checked = data;
				if (this.checked) {
					localStorage.setItem("emisLoginInfo", JSON.stringify(this.form))
				} else {
					localStorage.removeItem("emisLoginInfo")
				}
			},
		},
	};
</script>

<style scoped lang="scss">
	@import "index.scss";
</style>

样式index.scss

.loginbody {
	width: 100%;
	height: 100%;
	min-width: 1000px;
	background: url("~@/assets/images/login/bg.png") no-repeat center/cover;
	overflow: auto;
	background-repeat: no-repeat;
	position: fixed;
	line-height: 100%;
	padding-top: 300px;
	box-sizing: border-box;

	.logintext {
		margin-bottom: 20px;
		line-height: 50px;
		text-align: center;
		font-size: 60px;
		font-weight: bolder;
		color: white;
		text-shadow: 2px 2px 4px #000;
	}

	.logindata {
		width: 400px;
		height: 300px;
		transform: translate(-50%);
		margin-left: 50%;
	}
	
	.tool {
	  color: #606266;
	}

	.butt {
		text-align: center;
		margin: auto;
	}
}

背景图:
在这里插入图片描述
实现页面:
在这里插入图片描述

参考文章:vue+element ui实现好看的登录界面

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值