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.
149 lines
3.7 KiB
149 lines
3.7 KiB
<template>
|
|
<div class="main">
|
|
<div class="login-form">
|
|
<img :src="logo" class="logo" alt=""/>
|
|
<div class="title">长春黄金研究院有限公司</div>
|
|
<el-form :model="form" :rules="rules" ref="formRef" style="width: 100%">
|
|
<div class="input-title">用户名</div>
|
|
<el-form-item prop="username">
|
|
<el-input
|
|
v-model="form.username"
|
|
placeholder="请输入用户名"
|
|
prefix-icon="userIconSvg"
|
|
style="width: 100%"
|
|
size="large"
|
|
>
|
|
<template #prefix>
|
|
<img :src="userIconSvg" alt="" class="icon" />
|
|
</template>
|
|
</el-input>
|
|
</el-form-item>
|
|
<div class="input-title">密码</div>
|
|
<el-form-item prop="password">
|
|
<el-input
|
|
v-model="form.password"
|
|
placeholder="请输入密码"
|
|
prefix-icon="pwdIconSvg"
|
|
type="password"
|
|
style="width: 100%"
|
|
size="large"
|
|
>
|
|
<template #prefix>
|
|
<img :src="pwdIconSvg" alt="" class="icon"/>
|
|
</template>
|
|
</el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button style="width: 100%; margin-top: 10px" type="primary" @click="loginHandle" :loading="loading">登录</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
<span class="info">Changchun Gold Research Institute Co.,Ltd.</span>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { ref } from "vue";
|
|
import { useRouter } from "vue-router";
|
|
import logo from '@/assets/logo.svg'
|
|
import userIconSvg from '@/assets/user_icon.svg'
|
|
import pwdIconSvg from '@/assets/pwdw_icon.svg'
|
|
import { getCurrentUser, login, type User } from "@/services/user/userManager";
|
|
import { useUserStore } from "@/stores/user";
|
|
import {ElMessage} from "element-plus";
|
|
|
|
const form = ref({
|
|
username: "",
|
|
password: "",
|
|
});
|
|
|
|
const formRef = ref();
|
|
|
|
const rules = {
|
|
username: [
|
|
{ required: true, message: "请输入用户名", trigger: "blur" },
|
|
{ min: 3, max: 10, message: "长度在 3 到 10 个字符", trigger: "blur" },
|
|
],
|
|
password: [
|
|
{ required: true, message: "请输入密码", trigger: "blur" },
|
|
{ min: 3, max: 10, message: "长度在 3 到 10 个字符", trigger: "blur" },
|
|
]
|
|
}
|
|
|
|
const loading = ref(false);
|
|
const userStore = useUserStore();
|
|
const router = useRouter();
|
|
|
|
const loginHandle = () => {
|
|
formRef.value.validate(async(valid: any) => {
|
|
if (!valid) {
|
|
return;
|
|
}
|
|
loading.value = true;
|
|
const res = await login(form.value);
|
|
if(res.success) {
|
|
sessionStorage.setItem("token", res.data);
|
|
const response = await getCurrentUser();
|
|
if (response.success) {
|
|
const { username, nickname, role } = response.data;
|
|
userStore.setUser({ username, nickname, role } as User);
|
|
}
|
|
await router.push("/home");
|
|
loading.value = false;
|
|
}else {
|
|
ElMessage.error(res.msg);
|
|
loading.value = false;
|
|
}
|
|
})
|
|
}
|
|
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@media screen and (max-width: 1000px) {
|
|
.main {
|
|
.login-form {
|
|
width: 80%;
|
|
}
|
|
}
|
|
}
|
|
.main {
|
|
width: 100%;
|
|
height: 100vh;
|
|
background: #BDE2FE;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
.login-form {
|
|
width: 30%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
padding: 50px 50px 10px;
|
|
border-radius: 10px;
|
|
background: linear-gradient(180deg, rgba(250, 252, 255, 0.51) 0%, rgba(255, 255, 255, 0.52) 100%);
|
|
.logo {
|
|
width: 50px;
|
|
}
|
|
.title {
|
|
color: #8799AB;
|
|
margin: 20px 0 30px 0;
|
|
}
|
|
.info {
|
|
margin-top: 10px;
|
|
color: #8799AB;
|
|
font-size: 10px;
|
|
}
|
|
}
|
|
}
|
|
.icon {
|
|
width: 15px;
|
|
}
|
|
.input-title {
|
|
font-size: 14px;
|
|
color: #2C3E59;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
</style>
|