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.
227 lines
5.3 KiB
227 lines
5.3 KiB
<template> |
|
<div class="login-content"> |
|
<div class="login-form" v-if="status"> |
|
<div class="login-title">登录</div> |
|
<div class="form"> |
|
<el-form :model="form" label-width="80"> |
|
<el-form-item label="账号"> |
|
<el-input v-model="form.account" style="height: 0.2344rem" /> |
|
</el-form-item> |
|
<el-form-item label="密码"> |
|
<el-input |
|
v-model="form.password" |
|
style="height: 0.2344rem" |
|
type="password" |
|
show-password |
|
/> |
|
</el-form-item> |
|
<el-form-item label="验证码"> |
|
<div class="captcha"> |
|
<el-input |
|
v-model="form.captcha" |
|
style="height: 0.2344rem" |
|
maxlength="4" |
|
/> |
|
<div class="code" @click="getcodeinfo"> |
|
<img :src="codeUrl" alt="" srcset="" /> |
|
</div> |
|
</div> |
|
</el-form-item> |
|
</el-form> |
|
<!-- <div class="submit gradient" @click="submit">登录</div> --> |
|
<div class="btn"> |
|
<div @click="Router.push('/')">返回首页</div> |
|
<div class="gradient" @click="submit">登录</div> |
|
</div> |
|
</div> |
|
<div class="registered"> |
|
还没账号? |
|
<span @click="registered">立即注册</span> |
|
</div> |
|
</div> |
|
<RegisTered v-else @backLogin="backLoginEvent" /> |
|
</div> |
|
</template> |
|
|
|
<script lang="ts" setup> |
|
import { onMounted, reactive, ref, toRefs, watch } from 'vue' |
|
import { getCode } from '@/api/user' |
|
import userStore from '@/store/module/user' |
|
import { ElMessage } from 'element-plus' |
|
import { useRouter, useRoute } from 'vue-router' |
|
import RegisTered from './registered.vue' |
|
const route = useRoute() |
|
const useUserStore = userStore() |
|
const form = ref({ |
|
account: '', |
|
password: '', |
|
captcha: '', |
|
}) |
|
const codeUrl = ref('') |
|
const getcodeinfo = async () => { |
|
const res: any = await getCode(1629428467008) |
|
codeUrl.value = res.result |
|
console.log(codeUrl.value) |
|
} |
|
getcodeinfo() |
|
const Router = useRouter() |
|
const submit = async () => { |
|
console.log(111, useUserStore) |
|
if (!form.value.account) { |
|
return ElMessage('账号不能为空') |
|
} else if (!form.value.password) { |
|
return ElMessage('密码不能为空') |
|
} else if (!form.value.captcha) { |
|
return ElMessage('验证码不能为空') |
|
} |
|
let data = { |
|
captcha: form.value.captcha, |
|
checkKey: 1629428467008, |
|
password: form.value.password, |
|
username: form.value.account, |
|
} |
|
try { |
|
const res = await useUserStore.login(data) |
|
console.log(res) |
|
if (res === 0) { |
|
ElMessage('验证码错误') |
|
getcodeinfo() |
|
} else if (res === 1) { |
|
ElMessage('账号或密码错误') |
|
getcodeinfo() |
|
} else { |
|
Router.push('/') |
|
} |
|
} catch (error: any) { |
|
ElMessage(error.data.message) |
|
} |
|
} |
|
onMounted(() => { |
|
window.addEventListener('keyup', keyDown) |
|
// setTimeout(() => { |
|
// getcodeinfo() |
|
// },6000) |
|
if (route.query.registered) { |
|
registered() |
|
} |
|
}) |
|
const keyDown = (e: any) => { |
|
//如果是回车则执行登录方法 |
|
if (e.keyCode == 13) { |
|
//需要执行的登录方法 |
|
submit() |
|
} |
|
} |
|
|
|
const status = ref(true) |
|
const registered = () => { |
|
console.log(111) |
|
status.value = false |
|
} |
|
const backLoginEvent = () => { |
|
status.value = true |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.login-content { |
|
width: 100%; |
|
height: 100vh; |
|
background: url('../../assets/images/bg.png') no-repeat; |
|
background-size: cover; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
.login-form { |
|
width: 640px; |
|
height: 820px; |
|
border-radius: 15px; |
|
background-color: #ffffff1a !important; |
|
padding: 70px 60px; |
|
backdrop-filter: blur(10px); |
|
box-shadow: 0 4px 8px 1px rgba(0, 0, 0, 0.2); |
|
.login-title { |
|
font-size: 32px; |
|
font-weight: 700; |
|
} |
|
.form { |
|
margin-top: 35px; |
|
padding: 0 40px; |
|
.captcha { |
|
width: 100%; |
|
height: 100%; |
|
position: relative; |
|
.code { |
|
width: 100%; |
|
height: 100%; |
|
position: absolute; |
|
top: 0; |
|
right: 0; |
|
width: 105px; |
|
height: 100%; |
|
// background-color: pink; |
|
display: flex; |
|
align-items: center; |
|
img { |
|
width: 100%; |
|
height: 100%; |
|
} |
|
} |
|
} |
|
.submit { |
|
width: 399px; |
|
height: 50px; |
|
text-align: center; |
|
line-height: 50px; |
|
font-size: 20px; |
|
font-weight: 600; |
|
cursor: pointer; |
|
color: #fff; |
|
border-radius: 10px; |
|
margin-top: 35px; |
|
} |
|
} |
|
} |
|
.registered { |
|
margin-top: 25px; |
|
text-align: center; |
|
color: #666666; |
|
font-size: 12px; |
|
span { |
|
color: #0bd7c6; |
|
cursor: pointer; |
|
} |
|
} |
|
} |
|
.btn { |
|
display: flex; |
|
justify-content: space-between; |
|
margin-top: 45px; |
|
div { |
|
width: 210px; |
|
height: 42px; |
|
text-align: center; |
|
line-height: 42px; |
|
font-size: 14px; |
|
cursor: pointer; |
|
border-radius: 10px; |
|
} |
|
div:nth-child(1) { |
|
border: 1px solid #dbdbdb; |
|
color: #3c3c3c; |
|
} |
|
div:nth-child(2) { |
|
color: #fff; |
|
} |
|
} |
|
:deep(.el-form-item) { |
|
display: flex; |
|
flex-direction: column; |
|
} |
|
:deep(.el-input__wrapper) { |
|
box-shadow: none; |
|
} |
|
:deep(.el-form-item__label) { |
|
justify-content: start; |
|
} |
|
</style>
|
|
|