mirror of
https://gitee.com/ssssssss-team/magic-boot.git
synced 2025-04-03 20:01:51 +08:00
234 lines
5.8 KiB
Vue
234 lines
5.8 KiB
Vue
<template>
|
|
<div class="magic-login">
|
|
<div class="magic-login-box">
|
|
<!-- <div class="magic-login-logo"></div>-->
|
|
<div class="magic-login-text">{{ $global.title }}</div>
|
|
<div class="magic-login-row error" v-if="error"><mb-icon icon="error"/><span>{{ error }}</span></div>
|
|
<div class="magic-login-row">
|
|
<mb-icon icon="user"/>
|
|
<input ref="username" class="magic-input" v-model="loginForm.username" placeholder="用户名" name="username" type="text" tabindex="1" auto-complete="on" />
|
|
</div>
|
|
<div class="magic-login-row">
|
|
<mb-icon icon="password"/>
|
|
<input class="magic-input" ref="password" v-model="loginForm.password" type="password" placeholder="密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" />
|
|
</div>
|
|
<div class="magic-login-row">
|
|
<mb-icon icon="verification-code"/>
|
|
<input class="magic-input code" ref="code" v-model="loginForm.code" placeholder="验证码" name="code" tabindex="3" @keyup.enter.native="handleLogin" />
|
|
<img class="code-img" :src="codeImg" @click="refreshCode">
|
|
</div>
|
|
<div class="magic-login-row">
|
|
<button :loading="loading" class="magic-button" type="primary" size="medium" @click.native.prevent="handleLogin">登录</button>
|
|
</div>
|
|
</div>
|
|
<div class="magic-login-copyright">Copyright © 2020-{{new Date().getYear() + 1900}} <a href="https://ssssssss.org.cn" target="_blank">ssssssss.org.cn</a> All rights reserved.</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { reactive, ref, getCurrentInstance } from 'vue'
|
|
import { login } from '@/scripts/auth'
|
|
const { proxy } = getCurrentInstance()
|
|
const codeImg = ref(import.meta.env.VITE_APP_BASE_API + '/security/verification/code')
|
|
const loginForm = reactive({
|
|
username: '',
|
|
password: '',
|
|
code: ''
|
|
})
|
|
const loading = ref(false)
|
|
function refreshCode(){
|
|
proxy.$get('/system/security/verification/code').then(res => {
|
|
codeImg.value = 'data:image/png;base64,' + res.data.img
|
|
loginForm.uuid = res.data.uuid
|
|
})
|
|
}
|
|
refreshCode()
|
|
function handleLogin() {
|
|
if(!loginForm.username){
|
|
proxy.$message({
|
|
message: '请输入用户名',
|
|
type: 'error',
|
|
duration: 2000,
|
|
showClose: true
|
|
})
|
|
return
|
|
}else if(!loginForm.password){
|
|
proxy.$message({
|
|
message: '请输入密码',
|
|
type: 'error',
|
|
duration: 2000,
|
|
showClose: true
|
|
})
|
|
return
|
|
}else if(!loginForm.code){
|
|
proxy.$message({
|
|
message: '请输入验证码',
|
|
type: 'error',
|
|
duration: 2000,
|
|
showClose: true
|
|
})
|
|
return
|
|
}else{
|
|
loading.value = true
|
|
login(loginForm).then((res) => {
|
|
proxy.$router.push({ path: '/home' })
|
|
loading.value = false
|
|
}).catch(() => {
|
|
refreshCode()
|
|
loading.value = false
|
|
})
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
*{
|
|
box-sizing: border-box;
|
|
}
|
|
.code{
|
|
width: 283px;
|
|
float: left;
|
|
margin-right: 15px;
|
|
}
|
|
.code-img{
|
|
border: 1px solid #D9D9D9;
|
|
border-radius: 4px;
|
|
}
|
|
input{
|
|
width: 100%;
|
|
}
|
|
label {
|
|
width: 60px;
|
|
text-align: right;
|
|
display: inline-block;
|
|
}
|
|
.magic-login{
|
|
position: fixed;
|
|
background: #fff;
|
|
width: 100%;
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background-image: url(../assets/images/login-bg.svg);
|
|
}
|
|
.magic-login .magic-login-box{
|
|
border-radius: 5px;
|
|
width: 450px;
|
|
box-shadow: 0 7px 25px rgba(0,0,0,.08);
|
|
position: absolute;
|
|
box-sizing: border-box;
|
|
/*padding-top:60px;*/
|
|
padding-top:30px;
|
|
top:33.333333%;
|
|
margin-top: -125px;
|
|
background-color: #fff;
|
|
}
|
|
.magic-login-logo{
|
|
background-image: url(../assets/images/logo-magic-boot.png);
|
|
width: 128px;
|
|
height: 128px;
|
|
background-size: 90px 90px;
|
|
background-repeat: no-repeat;
|
|
background-position: center center;
|
|
position: absolute;
|
|
top: -64px;
|
|
left: 50%;
|
|
margin-left: -64px;
|
|
border-radius: 64px;
|
|
box-shadow: 0 0 20px 5px rgba(0,0,0,.08);
|
|
padding: 10px;
|
|
background-color: #fff;
|
|
}
|
|
.magic-login-text{
|
|
height: 70px;
|
|
line-height: 70px;
|
|
display: block;
|
|
text-align: center;
|
|
font-family: PoetsenOne;
|
|
font-size: 28px;
|
|
color: #808080;
|
|
}
|
|
.magic-login-text span{
|
|
font-size: 16px;
|
|
}
|
|
.magic-login-copyright{
|
|
text-align: center;
|
|
color: #999;
|
|
font-size: 18px;
|
|
font-family: Avenir,Helvetica,Arial,sans-serif;
|
|
position: absolute;
|
|
bottom: 50px;
|
|
}
|
|
.magic-login-copyright a{
|
|
text-decoration: none;
|
|
color: #2196f3;
|
|
outline: 0;
|
|
}
|
|
.magic-login-row{
|
|
width: 400px;
|
|
margin:25px auto;
|
|
position: relative;
|
|
}
|
|
.magic-login-row.error{
|
|
background-color: #fff1f0;
|
|
border: 1px solid #ffa39e;
|
|
color: #000;
|
|
border-radius: 4px;
|
|
padding:10px 0;
|
|
padding-left: 40px;
|
|
}
|
|
.magic-login-row.error span{
|
|
font-size: 14px;
|
|
word-break: break-all;
|
|
}
|
|
.magic-login-row svg{
|
|
position: absolute;
|
|
width: 20px;
|
|
height: 20px;
|
|
top: 15px;
|
|
left: 15px;
|
|
}
|
|
.magic-login-row :deep(.magic-icon-error){
|
|
fill: red;
|
|
}
|
|
.magic-login-box .magic-input{
|
|
height: 50px;
|
|
line-height: 50px;
|
|
background-color: transparent;
|
|
display: block;
|
|
border: 1px solid #D9D9D9;
|
|
border-radius: 4px;
|
|
padding-left: 40px;
|
|
color: rgba(0,0,0,.65);
|
|
transition: all .3s;
|
|
font-size: 16px;
|
|
outline: 0;
|
|
}
|
|
.magic-login-box .magic-input:focus{
|
|
border-color:#0784de;
|
|
}
|
|
.magic-login-box .magic-button{
|
|
width: 100%;
|
|
height: 50px;
|
|
line-height: 50px;
|
|
background-color: #2196f3;
|
|
color: #fff;
|
|
border-radius: 4px;
|
|
font-size: 18px;
|
|
border: 1px solid #ADADAD;
|
|
border-color: #2196f3;
|
|
transition: all .3s;
|
|
cursor: pointer;
|
|
}
|
|
.magic-login-box .magic-button:hover,
|
|
.magic-login-box .magic-button:focus{
|
|
background-color: #4db5ff !important;
|
|
border-color: #4db5ff !important;
|
|
}
|
|
.magic-login-box .magic-button:active{
|
|
background-color: #1272cc;
|
|
border-color: #1272cc;
|
|
}
|
|
</style>
|