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.
188 lines
4.1 KiB
188 lines
4.1 KiB
<!-- @format -->
|
|
|
|
<template>
|
|
<div id="login-container">
|
|
<a-layout>
|
|
<a-layout-header>
|
|
<img class="logo-img" src="/asset/image/login/logo-paas.png" />
|
|
</a-layout-header>
|
|
<a-layout-content>
|
|
<div class="login-content">
|
|
<div class="login-header">
|
|
<p class="english">NERV STACK</p>
|
|
<p class="chinese">管理平台</p>
|
|
</div>
|
|
<div class="login-user-info">
|
|
<span class="error-info" v-if="errorMsg">{{ errorMsg }}</span>
|
|
<a-input
|
|
class="input"
|
|
placeholder="用户名"
|
|
v-model:value="userName"
|
|
@keyup.enter="submit" />
|
|
<a-input-password placeholder="密码" v-model:value="password" @keyup.enter="submit" />
|
|
</div>
|
|
<div class="login-btn">
|
|
<a-button :loading="loading" @click="submit" type="primary">登录 </a-button>
|
|
</div>
|
|
</div>
|
|
</a-layout-content>
|
|
</a-layout>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { defineComponent, ref } from 'vue';
|
|
|
|
import { http } from '/nerv-lib/util/http';
|
|
import Cookies from 'js-cookie';
|
|
import { useRouter } from 'vue-router';
|
|
|
|
export default defineComponent({
|
|
name: 'UserLogin',
|
|
setup() {
|
|
const userName = ref<string>('');
|
|
const password = ref<string>('');
|
|
const errorMsg = ref<string>('');
|
|
const router = useRouter();
|
|
const loading = ref<boolean>(false);
|
|
|
|
const submit = async function () {
|
|
try {
|
|
if (userName.value == '') {
|
|
return;
|
|
}
|
|
if (password.value == '') {
|
|
return;
|
|
}
|
|
let data = JSON.stringify({ name: userName.value, password: password.value });
|
|
loading.value = true;
|
|
const result = await http.post('/api/passport/objs/login', data);
|
|
if (result && result['nervsid']) {
|
|
Cookies.set('nervsid', result['nervsid']);
|
|
}
|
|
loading.value = false;
|
|
|
|
router.replace({ name: 'root' });
|
|
} catch {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
return {
|
|
userName,
|
|
password,
|
|
loading,
|
|
errorMsg,
|
|
submit,
|
|
};
|
|
},
|
|
});
|
|
</script>
|
|
|
|
<style lang="less" scoped>
|
|
#login-container {
|
|
background: url('/asset/image/login/login-background.jpeg') no-repeat center #f5f6f9;
|
|
height: 100%;
|
|
background-size: auto 100%;
|
|
}
|
|
|
|
.ant-layout {
|
|
background: transparent;
|
|
}
|
|
|
|
.ant-layout-header {
|
|
height: auto;
|
|
background-color: transparent;
|
|
padding: 0;
|
|
}
|
|
|
|
.logo-img {
|
|
margin-top: 24px;
|
|
margin-left: 24px;
|
|
max-width: 130px;
|
|
height: auto;
|
|
}
|
|
|
|
.ant-layout-content {
|
|
background-color: transparent;
|
|
margin: 0 auto;
|
|
text-align: center;
|
|
|
|
.login-content {
|
|
top: 50%;
|
|
position: absolute;
|
|
left: 50%;
|
|
transform: translate(-50%, -66%);
|
|
}
|
|
|
|
.login-content .login-header p {
|
|
color: #00acff;
|
|
font-weight: 400;
|
|
line-height: 30px;
|
|
|
|
&.english {
|
|
font-size: 25px;
|
|
margin: 30px 0 10px 0;
|
|
}
|
|
|
|
&.chinese {
|
|
font-size: 16px;
|
|
}
|
|
}
|
|
|
|
.login-content .login-user-info {
|
|
width: 422px;
|
|
margin: 0 auto;
|
|
|
|
.error-info {
|
|
color: #e4393c;
|
|
font-size: 14px;
|
|
display: block;
|
|
text-align: left;
|
|
width: 300px;
|
|
margin: 0 auto;
|
|
padding-left: 2px;
|
|
}
|
|
|
|
.ant-input,
|
|
.ant-input-password {
|
|
height: 48px;
|
|
margin-bottom: 20px;
|
|
width: 300px;
|
|
}
|
|
|
|
.ant-input::-webkit-input-placeholder,
|
|
.ant-input-password::-webkit-input-placeholder {
|
|
font-size: 14px;
|
|
}
|
|
.ant-input-password::-webkit-input-placeholder {
|
|
font-size: 14px;
|
|
}
|
|
}
|
|
.login-btn {
|
|
.ant-btn {
|
|
width: 300px;
|
|
margin-top: 10px;
|
|
height: 40px;
|
|
font-size: 16px;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (min-width: 768px) {
|
|
.ant-layout-content {
|
|
width: 750px;
|
|
}
|
|
}
|
|
|
|
@media (min-width: 992px) {
|
|
.ant-layout-content {
|
|
width: 970px;
|
|
}
|
|
}
|
|
|
|
@media (min-width: 1200px) {
|
|
.container {
|
|
width: 1170px;
|
|
}
|
|
}
|
|
</style>
|
|
|