You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
4.0 KiB
189 lines
4.0 KiB
<template>
|
|
<div class="background">
|
|
<div class="login_box">
|
|
<div class="box_Central">
|
|
<div><img /></div>
|
|
|
|
<el-form
|
|
:rules="rules"
|
|
:model="loginForm"
|
|
ref="loginFormRef"
|
|
label-width="80px"
|
|
>
|
|
<el-form-item label="用户名" prop="username">
|
|
<el-input
|
|
v-model="loginForm.username"
|
|
style="width: 200px"
|
|
></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="密码" prop="password">
|
|
<el-input
|
|
v-model="loginForm.password"
|
|
style="width: 200px"
|
|
show-password
|
|
></el-input>
|
|
</el-form-item>
|
|
<div class="cl">
|
|
<div class="box_cn">
|
|
<el-row>
|
|
<el-button type="primary" @click="login">登录</el-button>
|
|
</el-row>
|
|
</div>
|
|
<div class="box_cv">
|
|
<el-row>
|
|
<el-button
|
|
type="info"
|
|
style="background-color: orange; border-color: orange"
|
|
@click="resetBtn"
|
|
>重置</el-button
|
|
>
|
|
</el-row>
|
|
</div>
|
|
</div>
|
|
</el-form>
|
|
</div>
|
|
<!-- 外层 -->
|
|
<div class="face face2">欢迎使用</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
loginForm: {
|
|
username: "",
|
|
password: "",
|
|
},
|
|
rules: {
|
|
// key:value
|
|
username: [
|
|
{ required: true, message: "请输入用户名", trigger: "blur" },
|
|
{
|
|
min: 3,
|
|
max: 30,
|
|
message: "长度在 3 到 30 个字符",
|
|
trigger: "blur",
|
|
},
|
|
],
|
|
password: [
|
|
{ required: true, message: "请输入密码", trigger: "blur" },
|
|
{
|
|
min: 3,
|
|
max: 30,
|
|
message: "长度在 3 到 30 个字符",
|
|
trigger: "blur",
|
|
},
|
|
],
|
|
},
|
|
};
|
|
},
|
|
methods: {
|
|
resetBtn() {
|
|
// 获取当前表单对象 之后重置数据
|
|
this.$refs.loginFormRef.resetFields();
|
|
},
|
|
login() {
|
|
this.$refs.loginFormRef.validate(async (valid) => {
|
|
if (!valid) return;
|
|
|
|
const { data: result } = await this.$http.post(
|
|
"/user/login",
|
|
this.loginForm
|
|
);
|
|
if (result.status !== 200)
|
|
return this.$message.error("用户名或密码错误!");
|
|
this.$message.success("用户登录成功!");
|
|
const token = result.data;
|
|
console.log(token);
|
|
window.sessionStorage.setItem("token", token);
|
|
this.$router.push("/home");
|
|
});
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style>
|
|
.background {
|
|
/* 渐变背景 */
|
|
background: linear-gradient(90deg, #00aaff, #ffffff, #4eecec);
|
|
height: 100%;
|
|
width: 100%;
|
|
}
|
|
|
|
.box_Central {
|
|
margin-top: 60px;
|
|
margin-left: 60px;
|
|
}
|
|
.box_cn {
|
|
float: left;
|
|
margin-left: 80px;
|
|
}
|
|
.box_cv {
|
|
float: left;
|
|
|
|
margin-left: 50px;
|
|
}
|
|
.cl {
|
|
clear: both;
|
|
}
|
|
.login_box {
|
|
width: 450px;
|
|
height: 330px;
|
|
background-color: #ffffff;
|
|
border-radius: 10px;
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
right: 50%;
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
.face {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: absolute;
|
|
bottom: 0;
|
|
left: 0;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
color: white;
|
|
font-size: 50px;
|
|
}
|
|
|
|
.login_box .face2 {
|
|
background: #111;
|
|
transition: 0.5s;
|
|
}
|
|
/* 经过外层高度变小 */
|
|
.login_box:hover .face2 {
|
|
height: 60px;
|
|
}
|
|
/* 经过字体变小 */
|
|
.login_box:hover .face2 h2 {
|
|
font-size: 2em;
|
|
}
|
|
/* 三个卡片外层渐变色 */
|
|
.login_box:nth-child(1) .face2 {
|
|
background: linear-gradient(45deg, #00aaff, #4eeaea);
|
|
}
|
|
|
|
.login_box .face2::before {
|
|
content: "";
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 50%;
|
|
height: 100%;
|
|
background: rgba(255, 255, 255, 0.1);
|
|
}
|
|
.login_box .face2 h2 {
|
|
margin: 0;
|
|
padding: 0;
|
|
font-size: 10em;
|
|
color: #fff;
|
|
transition: 0.5s;
|
|
}
|
|
</style>
|
|
|