数字督察一体化平台-前端
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.
 
 
 
 

150 lines
4.5 KiB

<template>
<div class="wrapper">
<header class="text-center">
<img src="/imgs/login_header.png" alt="">
</header>
<div class="box flex v-center">
<div class="left text-center">
<img src="/imgs/pic.png" alt="" />
</div>
<div class="right mb-40">
<el-form
ref="formRef"
:model="formData"
size="large"
:rules="rules"
>
<h1>用户登录</h1>
<el-form-item prop="account">
<el-input
v-model.trim="formData.account"
placeholder="请输入身份证/警号"
size="large"
@input="errMsg = ''"
style="--el-input-height: 50px"
>
<template #prefix>
<icon name="el-icon-UserFilled" :size="33" color="#c0c5e2" />
</template>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
ref="passwordRef"
v-model="formData.password"
show-password
placeholder="请输入密码"
@keyup.enter="handleLogin"
@input="errMsg = ''"
style="--el-input-height: 50px"
>
<template #prefix>
<icon name="local-icon-lock-fill" :size="36" />
</template>
</el-input>
</el-form-item>
<div class="err-msg">{{ errMsg }}</div>
<div class="mt-10 mb-20">
<el-button
type="primary"
size="large"
:loading="isLock"
@click="handleLogin"
style="
width: 100%;
--el-button-size: 54px;
--el-font-size-base: 18px;
"
>登录</el-button>
</div>
</el-form>
</div>
</div>
</div>
</template>
<script setup>
import useUserStore from '@/stores/modules/user'
const formData = reactive({})
const formRef = ref(null)
const rules = {
account: [
{
required: true,
message: "请输入身份证/警号",
trigger: ["blur", "change"],
},
],
password: [
{
required: true,
message: "请输入密码",
trigger: ["blur", "change"],
},
],
};
const isLock = ref(false)
const userStore = useUserStore()
const router = useRouter()
const errMsg = ref('')
function handleLogin() {
formRef.value.validate((flag) => {
if (flag) {
isLock.value = true
userStore.login(formData).then(() => {
router.push('/home')
}).catch((err) => {
isLock.value = false
errMsg.value = err.message
})
}
})
}
</script>
<style lang="scss" scoped>
.wrapper {
height: 100vh;
background-image: url("/imgs/bg.png");
background-size: cover;
background-color: #003aea;
header {
padding-top: 3.2vh;
margin-bottom: 8vh;
height: 91px;
img {
height: 91px;
}
}
.box {
--login-box-width: 576px;
width: 80%;
margin: auto;
.left {
width: calc(100% - var(--login-box-width));
height: calc(100vh - 200px);
img {
width: 33vw;
}
}
.right {
background-color: #fff;
border: 18px solid #4169ea;
width: var(--login-box-width);
padding: 40px;
box-sizing: border-box;
h1 {
color: var(--primary-color);
font-size: 32px;
margin-top: 0;
margin-bottom: 32px;
}
}
}
}
.err-msg {
height: 20px;
color: var(--danger-color);
}
</style>