video_delegate/src/views/common/login.vue

384 lines
10 KiB
Vue

<template>
<div class="site-wrapper site-page--login">
<div class="site-content__wrapper">
<div class="site-content">
<div class="login-main">
<h3 class="login-title">{{ entryName }}</h3>
<el-form
:model="dataForm"
:rules="dataRule1"
ref="dataForm"
@keyup.enter.native="dataFormSubmit()"
status-icon
>
<div v-if="!isLogin">
<el-form-item prop="mobile">
<div class="flex" style="display: flex">
<el-input v-model.trim="dataForm.mobile" placeholder="手机号">
</el-input>
<el-button
style="margin-left: 20px"
type="primary"
size="medium"
@click="sendMsg()"
>
{{ msgTime >= 60 ? "发送验证码" : msgTime }}</el-button
>
</div>
</el-form-item>
<el-form-item prop="code">
<el-input
v-model.trim="dataForm.code"
placeholder="验证码"
></el-input>
</el-form-item>
<el-form-item prop="email">
<el-input
v-model.trim="dataForm.email"
placeholder="邮箱"
></el-input>
</el-form-item>
</div>
<el-form-item prop="userName">
<el-input
v-model.trim="dataForm.userName"
placeholder="帐号"
></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
type="password"
v-model.trim="dataForm.password"
placeholder="密码"
></el-input>
</el-form-item>
<el-form-item prop="password1" v-if="!isLogin">
<el-input
v-model.trim="dataForm.password1"
type="password"
placeholder="密码"
></el-input>
</el-form-item>
<el-form-item prop="captcha" v-if="isLogin">
<el-row :gutter="20">
<el-col :span="14">
<el-input
v-model.trim="dataForm.captcha"
placeholder="验证码"
>
</el-input>
</el-col>
<el-col :span="10" class="login-captcha">
<img :src="captchaPath" @click="getCaptcha()" alt="" />
</el-col>
</el-row>
</el-form-item>
<el-form-item v-if="isLogin">
<div class="btn-box">
<div class="" style="margin-top: 38px">
<el-button
class="login-btn-submit"
type="primary"
@click="dataFormSubmit()"
>登录</el-button
>
</div>
<!-- <div>
<el-button
class="login-btn-submit"
plain
type="text"
@click="isLogin = false"
>注册</el-button
>
</div> -->
</div>
</el-form-item>
<el-form-item v-if="!isLogin">
<div class="btn-box">
<div class="" style="margin-top: 38px">
<el-button
class="login-btn-submit"
type="primary"
@click="register()"
>立即注册</el-button
>
</div>
<div>
<el-button
class="login-btn-submit"
plain
type="text"
@click="isLogin = true"
>返回登录</el-button
>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</div>
</div>
</template>
<script>
import { getUUID } from "@/utils";
import { entryName } from "@/utils/httpRequest";
export default {
data() {
return {
isLogin: true,
timer: null,
msgTime: 60,
dataForm: {
mobile: "",
email: "",
userName: "",
password: "",
password1: "",
uuid: "",
captcha: "",
entryName: "",
code: "",
},
dataRule1: {
mobile: [
{ required: true, message: "手机号不能为空", trigger: "blur" },
],
email: [{ required: true, message: "邮箱不能为空", trigger: "blur" }],
code: [{ required: true, message: "验证码不能为空", trigger: "blur" }],
userName: [
{ required: true, message: "帐号不能为空", trigger: "blur" },
],
password: [
{ required: true, message: "密码不能为空", trigger: "blur" },
],
password1: [
{ required: true, message: "密码不能为空", trigger: "blur" },
],
captcha: [
{ required: true, message: "验证码不能为空", trigger: "blur" },
],
},
captchaPath: "",
};
},
watch: {
isLogin(newval) {
this.$refs.dataForm.resetFields();
if (newval) {
this.getCaptcha();
}
},
},
created() {
this.entryName = entryName;
this.getCaptcha();
},
methods: {
sendMsg() {
if (this.msgTime < 60) {
return;
}
this.$http({
// url: this.$http.adornUrl('app/Login/sendMsg/'+this.tableData.mobile+'/regis'),
url: this.$http.adornUrl(
"app/Login/sendMsg/" + this.dataForm.mobile + "/regis"
),
method: "get",
}).then((res) => {
console.log(res);
if (res.data.code == 0) {
this.$message({
message: "发送成功",
type: "success",
});
this.msgTime--;
this.timer = setInterval(() => {
this.msgTime--;
if (this.msgTime == 0) {
clearInterval(this.timer);
this.msgTime = 60;
}
}, 1000);
} else {
this.$message({
message: "发送失败",
type: "error",
});
}
});
},
reset() {
this.dataForm.code = "";
this.timer = null;
cleartimeout(this.timer);
this.msgTime = 60;
},
register() {
if (this.dataForm.password != this.dataForm.password1) {
this.$notify({
title: "提示",
duration: 1800,
message: "两次密码不一致",
type: "warning",
});
this.$message.error("两次密码不一致");
return;
}
this.$refs["dataForm"].validate((valid) => {
if (valid) {
this.$http({
url: this.$http.adornUrl(
"sys/registered?msg=" + this.dataForm.code
),
method: "post",
data: this.$http.adornData({
mobile: this.dataForm.mobile,
username: this.dataForm.userName,
password: this.dataForm.password,
email: this.dataForm.email,
}),
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success("注册成功,请登录");
this.isLogin = true;
// this.$cookie.set("token", data.token);
// this.$router.replace({ name: "home" });
} else {
// this.getCaptcha();
this.$message.error(data.msg);
}
});
}
});
},
// 提交表单
dataFormSubmit() {
this.$refs["dataForm"].validate((valid) => {
if (valid) {
this.$http({
url: this.$http.adornUrl("sys/login"),
method: "post",
data: this.$http.adornData({
username: this.dataForm.userName,
password: this.dataForm.password,
uuid: this.dataForm.uuid,
captcha: this.dataForm.captcha,
adminType: 2,
}),
}).then(({ data }) => {
if (data && data.code === 0) {
this.$cookie.set("token", data.token);
this.$router.replace({ name: "home" });
} else {
this.getCaptcha();
this.$message.error(data.msg);
}
});
}
});
},
// 获取验证码
getCaptcha() {
this.dataForm.uuid = getUUID();
this.captchaPath = this.$http.adornUrl(
`/captcha.jpg?uuid=${this.dataForm.uuid}`
);
},
},
};
</script>
<style lang="scss" scoped>
.btn-box {
display: flex;
gap: 20px;
flex-direction: column;
}
.site-wrapper.site-page--login {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(38, 50, 56, 0.2);
overflow: hidden;
&:before {
position: fixed;
top: 0;
left: 0;
z-index: -1;
width: 100%;
height: 100%;
content: "";
background-image: url(~@/assets/img/login_bg.jpg);
background-size: cover;
}
.site-content__wrapper {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 0;
margin: 0;
overflow-x: hidden;
overflow-y: auto;
background-color: transparent;
}
.site-content {
min-height: 100%;
// padding: 30px 500px 30px 30px;
}
.brand-info {
margin: 220px 100px 0 90px;
color: #fff;
}
.brand-info__text {
margin: 0 0 22px 0;
font-size: 48px;
font-weight: 400;
text-transform: uppercase;
}
.brand-info__intro {
margin: 10px 0;
font-size: 16px;
line-height: 1.58;
opacity: 0.6;
}
.login-main {
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
// margin-left: -200px;
// margin-top: -150px;
padding: 20px 30px;
width: 400px;
border-radius: 8px;
background-color: #fff;
}
.login-title {
font-size: 20px;
text-align: center;
margin-top: 10px;
}
.login-captcha {
overflow: hidden;
> img {
width: 100%;
cursor: pointer;
}
}
.login-btn-submit {
width: 100%;
// margin-top: 38px;
}
}
</style>