<template>
|
<div class="wrap" :style="{
|
'background': `url(${$store.state.VUE_APP_CONFIG.BG_IMAGE})`,
|
'background-repeat': 'no-repeat',
|
'background-size': 'cover',
|
'background-clip': 'content-box',
|
'background-position': 'center',
|
}"
|
>
|
<div class="introduce">
|
<div v-if="$store.state.VUE_APP_CONFIG.LOGO">
|
<img :src="$store.state.VUE_APP_CONFIG.LOGO" alt="">
|
</div>
|
<h2>{{ $store.state.VUE_APP_CONFIG.COMPANY_NAME }}</h2>
|
</div>
|
<div class="login">
|
<h1>系统登录 / LOGIN IN</h1>
|
<h3>{{test}}</h3>
|
<div class="info-input">
|
<!-- <el-input v-if="$store.state.VUE_APP_CONFIG.COMPANY_INPUT" v-model="companyId" placeholder="公司id" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/> -->
|
<el-input v-model="username" placeholder="请输入用户名" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/>
|
<div style="height: 15px;"></div>
|
<el-input v-model="password" placeholder="请输入密码" type="password" prefix-icon="eva-icon-password" maxlength="30" show-password/>
|
<div class="captcha-input">
|
<el-input v-model="captcha.value" placeholder="图片验证码" prefix-icon="eva-icon-shield" 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>
|
<el-button :loading="loading" @click="login">登 录</el-button>
|
</div>
|
</div>
|
</template>
|
|
<script type="text/javascript">
|
import { mapMutations } from 'vuex'
|
import { getCaptcha, loginByPassword } from '@/api/system/common'
|
|
export default {
|
name: 'Login',
|
|
data () {
|
return {
|
test:'',
|
loading: false,
|
username: '',
|
password: '',
|
companyId: 8,
|
// 验证码
|
captcha: {
|
loading: false,
|
value: '',
|
uuid: '',
|
uri: ''
|
}
|
}
|
},
|
created () {
|
this.refreshCaptcha()
|
// this.$route.params.companyId
|
this.companyId = this.$route.query.companyId || this.$store.state.companyId
|
console.log(this.companyId);
|
},
|
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(),
|
companyId: this.companyId,
|
uuid: this.captcha.uuid
|
})
|
.then(() => {
|
// window.location.href = process.env.VUE_APP_CONTEXT_PATH
|
window.location.reload()
|
})
|
.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)
|
})
|
},
|
/**
|
* 登录前验证
|
*
|
* @returns {boolean}
|
* @private
|
*/
|
__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
|
},
|
|
},
|
|
|
}
|
</script>
|
|
<style scoped lang="scss">
|
@import "@/assets/style/variables.scss";
|
$input-gap: 30px;
|
.wrap {
|
display: flex;
|
width: 100%;
|
height: 100vh;
|
background-repeat: no-repeat;
|
background-size: cover;
|
background-clip: content-box;
|
background-position: center;
|
// 左边介绍
|
.introduce {
|
// padding-left: 10%;
|
position: relative;
|
width: 100%;
|
height: 100%;
|
box-sizing: border-box;
|
color: #fff;
|
background: rgba(0, 0, 0, 0.4);
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
div {
|
position: absolute;
|
top: 60px;
|
left: 60px;
|
width: 300px;
|
height: 60px;
|
img {
|
max-width: 100%;
|
// margin: auto;
|
height: 100%;
|
}
|
}
|
h2 {
|
align-items: center;
|
padding-left: 60px;
|
font-size:45px;
|
font-style: italic;
|
font-weight: 900;
|
margin-top: 50px;
|
}
|
// h3 {
|
// font-size: 49px;
|
// font-weight: 300;
|
// margin: 25px 0;
|
// }
|
}
|
// 右边登录
|
.login {
|
height: 100%;
|
width: 38%;
|
max-width: 560px;
|
min-width: 460px;
|
flex-shrink: 0;
|
text-align: center;
|
background: #fff;
|
padding: 0 80px;
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
box-sizing: border-box;
|
h1 {
|
font-size: 28px;
|
font-weight: 500;
|
}
|
.info-input {
|
margin-top: $input-gap;
|
margin-bottom: 60px;
|
::v-deep .el-input {
|
margin-top: 30px;
|
.el-input__inner {
|
// height: 50px;
|
background: #F9F9F9;
|
border: 1px solid transparent;
|
&:focus {
|
border: 1px solid $primary-color;
|
}
|
}
|
}
|
}
|
// 验证码输入
|
.captcha-input {
|
display: flex;
|
margin-top: $input-gap;
|
height: 30px;
|
.el-input {
|
width: 100%;
|
margin-top: 0;
|
}
|
span, img {
|
width: 40%;
|
height: 100%;
|
flex-shrink: 0;
|
margin-left: 16px;
|
}
|
span {
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
background: #f7f7f7;
|
border-radius: 8px;
|
}
|
}
|
.el-button {
|
height: 50px;
|
width: 100%;
|
color: #fff;
|
font-size: 16px;
|
background: linear-gradient(130deg, $primary-title-start-color 0%, $icon-background-color 100%);
|
}
|
}
|
}
|
</style>
|