2025-03-23 21:57:19 +08:00

244 lines
5.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="login_container">
<div class="login_title">登录</div>
<div class="login_box">
<!-- 头像区域 -->
<div class="avatar_box">
<!-- <img src="../assets/images/dinosaur.jpg" alt="" /> -->
</div>
<!-- 登录表单区域 -->
<el-form
ref="loginFormRef"
:model="loginForm"
:rules="loginFormRules"
label-width="0px"
class="login_form"
>
<!-- 用户名 -->
<el-form-item prop="username">
<el-input
v-model.trim="loginForm.username"
prefix-icon="iconfont icon-gerenxinxi"
></el-input>
</el-form-item>
<!-- 密码 -->
<el-form-item prop="password">
<el-input
v-model="loginForm.password"
prefix-icon="iconfont icon-tianchongxing-"
type="password"
@keyup.enter.native="login"
:show-password="true"
></el-input>
</el-form-item>
<!-- 按钮区域 -->
<el-form-item class="btns">
<el-button type="primary" @click="login" :loading="loginLoading"
>登录</el-button
>
<el-button type="info" @click="resetLoginForm">重置</el-button>
</el-form-item>
</el-form>
</div>
<!-- 粒子插件特效-->
<vue-particles
class="login-bg"
color="#39AFFD"
:particleOpacity="0.7"
:particlesNumber="100"
shapeType="circle"
:particleSize="4"
linesColor="#8DD1FE"
:linesWidth="1"
:lineLinked="true"
:lineOpacity="0.4"
:linesDistance="150"
:moveSpeed="3"
:hoverEffect="true"
hoverMode="grab"
:clickEffect="true"
clickMode="push"
>
</vue-particles>
<div class="footer">
<span style="font-weight: bold; color: white; margin-bottom: 10px">
登录页面切换
<!-- <i class="iconfont icon-haoyou " @click="goUser"></i> -->
</span>
<span>
<i class="iconfont icon-guanliyuan" @click="goManage"></i>
</span>
</div>
</div>
</template>
<script>
export default {
data() {
return {
//登录表单
loginForm: {
username: "yangzhen",
password: "123456",
},
//登录表单规则的验证对象
loginFormRules: {
username: [
{ required: true, message: "用户名不能为空", trigger: "blur" },
{
min: 3,
max: 20,
message: "长度在 3 到 20 个字符",
trigger: "blur",
},
],
password: [
{ required: true, message: "密码不能为空", trigger: "blur" },
{
min: 6,
max: 15,
message: "长度在 6 到 15 个字符",
trigger: "blur",
},
],
},
loginLoading: false,
};
},
methods: {
resetLoginForm() {
this.$refs.loginFormRef.resetFields();
},
login() {
this.$refs.loginFormRef.validate(async (valid) => {
// console.log(valid);
//如果表单验证无效,直接返回
if (!valid) {
return;
}
this.loginLoading = true;
// 进行md5加密
const salt = "xiaobaitiao";
const username = this.loginForm.username;
const password = this.loginForm.password;
//向数据库发送axios请求如果登录成功就跳转
const { data: res } = await this.$http.post("user/login", {
username,
password,
});
if (res.status !== 200) {
this.loginLoading = false;
return this.$message.error(res.msg);
}
// console.log(res);
this.$message.success("登录成功");
this.loginLoading = false;
window.sessionStorage.setItem("token", res.map.token);
window.sessionStorage.setItem("userId", res.map.id);
this.$router.push("/home"); //跳转到home页面下
});
},
goUser() {
this.$router.push("/login");
},
goManage() {
this.$router.push("/loginmanage");
},
},
};
</script>
<style lang="less" scoped>
.footer2 {
position: absolute;
bottom: 0px;
left: 35%;
color: #ccc;
a {
color: #ccc;
}
}
.login_container {
// background-color: #2b4b6b;
background: url(https://xxx.xiaobaitiao.icu/img/icu/202312211236280.jpg)
no-repeat 0px 0px;
background-size: cover;
height: 100%;
}
.login_box {
height: 300px;
width: 450px;
background-color: #fff;
border-radius: 3px;
position: absolute;
top: 50%;
left: 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;
}
}
}
.login_form {
position: absolute;
bottom: 0;
width: 100%;
padding: 0 20px;
box-sizing: border-box;
}
.btns {
display: flex;
justify-content: flex-end;
}
.login_title {
position: relative;
top: 5%;
font-size: 36px;
color: white;
text-align: center;
font-weight: 700;
//控制字体间距
letter-spacing: 10px;
}
.footer {
display: flex;
position: absolute;
flex-direction: column;
bottom: 0;
right: 0;
width: 100px;
height: 120px;
// background-color: pink;
span {
// width: 100%;
// background-color: red;
text-align: center;
}
}
</style>