<template>
|
<div class="contant">
|
<!-- <CommonHeader :isLogined="false" /> -->
|
<div class="login-content">
|
<div class="wrap">
|
|
<div class="introduce">
|
<h2>滨湖自行车租赁系统</h2>
|
</div>
|
<div class="login">
|
<h1>账号登录</h1>
|
<div class="info-input">
|
<div class="login-title">用户名</div>
|
<el-input v-model="username" placeholder="请输入用户名" maxlength="50" v-trim/>
|
<div class="login-title">密码</div>
|
<el-input v-model="password" placeholder="请输入密码" type="password" maxlength="30" show-password/>
|
<div class="login-title">验证码</div>
|
<div class="captcha-input">
|
<el-input v-model="captcha.value" placeholder="图片验证码" maxlength="4" @keypress.enter.native="login"/>
|
<img v-if="!captcha.loading" :src="captcha.uri" @click="refreshCaptcha">
|
<span v-else><i class="el-icon-loading"></i></span>
|
</div>
|
</div>
|
<div class="loginBtn"><el-button :loading="loading" @click="login">立即登录</el-button></div>
|
</div>
|
</div>
|
</div>
|
<div class="copyright">
|
<!-- <div>技术支持:<el-button type="text" style="color: red">豆米科技</el-button></div> -->
|
<div class="copyright" @click="gotoWeb">Copyright © 2022 - 2027 豆米科技. All Rights Reserved. 版权所有</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { mapMutations } from 'vuex'
|
import CommonHeader from '@/components/common/CommonHeader'
|
import { getCaptcha, loginByPassword } from '@/api/system/common'
|
|
export default {
|
name: 'Login',
|
components: {
|
CommonHeader
|
},
|
data () {
|
return {
|
loading: false,
|
username: '',
|
password: '',
|
// 验证码
|
captcha: {
|
loading: false,
|
value: '',
|
uuid: '',
|
uri: ''
|
}
|
}
|
},
|
methods: {
|
...mapMutations(['setUserInfo']),
|
// 登录
|
login () {
|
if (this.loading) {
|
return
|
}
|
if (!this.__check()) {
|
return
|
}
|
this.loading = true
|
loginByPassword({
|
username: this.username.trim(),
|
password: this.password,
|
code: this.captcha.value.trim(),
|
uuid: this.captcha.uuid
|
})
|
.then(() => {
|
window.location.href = process.env.VUE_APP_CONTEXT_PATH
|
})
|
.catch(e => {
|
this.refreshCaptcha()
|
this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
this.loading = false
|
})
|
},
|
// 刷新验证码
|
refreshCaptcha () {
|
this.captcha.loading = true
|
getCaptcha()
|
.then(data => {
|
this.captcha.uri = data.image
|
this.captcha.uuid = data.uuid
|
})
|
.catch(e => {
|
this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
setTimeout(() => {
|
this.captcha.loading = false
|
}, 150)
|
})
|
},
|
// 登录前验证
|
__check () {
|
if (this.username.trim() === '') {
|
this.$tip.error('请输入用户名')
|
return false
|
}
|
if (this.password === '') {
|
this.$tip.error('请输入密码')
|
return false
|
}
|
if (this.captcha.value.trim() === '') {
|
this.$tip.error('请输入图片验证码')
|
return false
|
}
|
return true
|
},
|
gotoWeb() {
|
window.open('http://www.doumee.com', '_blank')
|
}
|
},
|
created () {
|
this.refreshCaptcha()
|
}
|
}
|
</script>
|
|
<style scoped lang="scss">
|
@import "@/assets/style/variables.scss";
|
$input-gap: 30px;
|
.contant {
|
height: 100%;
|
background-color: #F3F7FA;
|
position: relative;
|
.copyright {
|
position: absolute;
|
margin: auto;
|
bottom: 10px;
|
right: 0;
|
left: 0;
|
text-align: center;
|
width: 372px;
|
height: 12px;
|
line-height: 12px;
|
color: #828d9e;
|
cursor: pointer;
|
}
|
}
|
.login-content {
|
height: calc(100% - 70px);
|
background-image: url("../assets/images/login_bg.png");
|
background-repeat: no-repeat;
|
// background-size: auto 180%;
|
background-clip: content-box;
|
background-position: center;
|
position: relative;
|
}
|
.wrap {
|
display: flex;
|
width: 900px;
|
height: 570px;
|
position: absolute;
|
margin: auto;
|
left: 0;
|
right: 0;
|
top: 0;
|
bottom: 0;
|
// background-image: url("../assets/images/login.jpg");
|
// background-repeat: no-repeat;
|
// background-size: auto 180%;
|
// background-clip: content-box;
|
// background-position: center;
|
box-shadow: 0px 20px 60px 0px rgba(0,0,0,0.11);
|
border-radius: 8px;
|
// 左边介绍
|
.introduce {
|
// padding-left: 10%;
|
width: 420px;
|
height: 100%;
|
box-sizing: border-box;
|
background-image: url("../assets/images/login_img.jpg");
|
background-repeat: no-repeat;
|
background-size: 100% 100%;
|
// background-clip: content-box;
|
background-position: center;
|
color: #fff;
|
// background: rgba(0, 0, 0, 0.4);
|
// display: flex;
|
// flex-direction: column;
|
// justify-content: center;
|
h2 {
|
text-align: center;
|
font-size:28px;
|
// font-style: italic;
|
font-weight: 900;
|
margin-top: 75px;
|
line-height: 34px;
|
text-shadow: 0px 2px 14px rgba(0,0,0,0.17);
|
}
|
|
}
|
// 右边登录
|
.login {
|
height: 100%;
|
width: 480px;
|
// max-width: 560px;
|
// min-width: 460px;
|
flex-shrink: 0;
|
box-sizing: border-box;
|
// text-align: center;
|
background: #fff;
|
padding: 120px 90px;
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
box-sizing: border-box;
|
h1 {
|
font-size: 26px;
|
font-weight: 600;
|
color: #222222;
|
}
|
.info-input {
|
margin-top: 46.5px;
|
margin-bottom: 30px;
|
::v-deep .el-input {
|
margin-top: 10px;
|
margin-bottom: 18px;
|
.el-input__inner {
|
height: 30px;
|
// background-color: #fff;
|
// border: 1px solid transparent;
|
&:focus {
|
border: 1px solid $primary-color;
|
}
|
}
|
}
|
}
|
// 验证码输入
|
.captcha-input {
|
display: flex;
|
margin-top: 12px;
|
height: 30px;
|
.el-input {
|
width: 100%;
|
margin-top: 0;
|
}
|
span, img {
|
width: 45%;
|
height: 100%;
|
flex-shrink: 0;
|
margin-left: 16px;
|
background-color: #f7f7f7;
|
}
|
span {
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
background: #f7f7f7;
|
border-radius: 8px;
|
}
|
}
|
.loginBtn {
|
.el-button {
|
height: 35px;
|
width: 100%;
|
color: #fff;
|
font-size: 12px;
|
background: linear-gradient(130deg, $primary-title-start-color 0%, $primary-title-color 100%);
|
}
|
}
|
}
|
}
|
.copyright {
|
text-align: center;
|
width: 100%;
|
height: 12px;
|
font-size: 12px;
|
font-family: PingFangSC-Regular, PingFang SC;
|
font-weight: 400;
|
color: #828D9E;
|
line-height: 12px;
|
position: absolute;
|
bottom: 20px;
|
}
|
.login-title {
|
height: 14px;
|
font-size: 14px;
|
font-family: PingFangSC-Regular, PingFang SC;
|
font-weight: 400;
|
color: #222222;
|
line-height: 14px;
|
|
}
|
.register {
|
margin-top: 18px;
|
height: 14px;
|
width: 100%;
|
margin: 0 auto;
|
text-align: center;
|
font-size: 12px;
|
font-family: PingFangSC-Regular, PingFang SC;
|
font-weight: 400;
|
// color: #DFE2E8;
|
color: #333;
|
// font-weight: 600;
|
line-height: 14px;
|
|
}
|
</style>
|