|
|
@ -3,20 +3,26 @@ |
|
|
|
<el-row> |
|
|
|
<el-row> |
|
|
|
<el-col :span="12" :xs="0"></el-col> |
|
|
|
<el-col :span="12" :xs="0"></el-col> |
|
|
|
<el-col :span="12" :xs="24"> |
|
|
|
<el-col :span="12" :xs="24"> |
|
|
|
<el-form class="login_form"> |
|
|
|
<el-form |
|
|
|
|
|
|
|
class="login_form" |
|
|
|
|
|
|
|
:model="loginForm" |
|
|
|
|
|
|
|
:rules="rules" |
|
|
|
|
|
|
|
ref="loginforms" |
|
|
|
|
|
|
|
> |
|
|
|
<h1>Hello</h1> |
|
|
|
<h1>Hello</h1> |
|
|
|
<h2>欢迎登录</h2> |
|
|
|
<h2>欢迎登录</h2> |
|
|
|
<el-form-item> |
|
|
|
<el-form-item prop="username"> |
|
|
|
<el-input |
|
|
|
<el-input |
|
|
|
:prefix-icon="User" |
|
|
|
:prefix-icon="User" |
|
|
|
v-model="loginForm.username" |
|
|
|
v-model="loginForm.username" |
|
|
|
></el-input> |
|
|
|
></el-input> |
|
|
|
</el-form-item> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-form-item prop="password"> |
|
|
|
<el-input |
|
|
|
<el-input |
|
|
|
:prefix-icon="Lock" |
|
|
|
:prefix-icon="Lock" |
|
|
|
type="password" |
|
|
|
type="password" |
|
|
|
v-model="loginForm.password" |
|
|
|
v-model="loginForm.password" |
|
|
|
|
|
|
|
show-password |
|
|
|
></el-input> |
|
|
|
></el-input> |
|
|
|
</el-form-item> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-form-item> |
|
|
@ -25,6 +31,7 @@ |
|
|
|
type="primary" |
|
|
|
type="primary" |
|
|
|
size="large" |
|
|
|
size="large" |
|
|
|
@click="loginHandle" |
|
|
|
@click="loginHandle" |
|
|
|
|
|
|
|
:loading="loading" |
|
|
|
> |
|
|
|
> |
|
|
|
登录 |
|
|
|
登录 |
|
|
|
</el-button> |
|
|
|
</el-button> |
|
|
@ -37,21 +44,88 @@ |
|
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts"> |
|
|
|
<script setup lang="ts"> |
|
|
|
import { User, Lock } from '@element-plus/icons-vue' |
|
|
|
import { User, Lock } from '@element-plus/icons-vue' |
|
|
|
import { reactive } from 'vue' |
|
|
|
import { reactive, ref } from 'vue' |
|
|
|
import { useRouter } from 'vue-router' |
|
|
|
import { useRouter } from 'vue-router' |
|
|
|
|
|
|
|
const $router = useRouter() |
|
|
|
|
|
|
|
import { ElNotification } from 'element-plus' |
|
|
|
//引入用户相关的小仓库 |
|
|
|
//引入用户相关的小仓库 |
|
|
|
import useUserStore from '@/store/modules/user' |
|
|
|
import useUserStore from '@/store/modules/user' |
|
|
|
|
|
|
|
import { getTime } from '@/utils/time' |
|
|
|
let useStore = useUserStore() |
|
|
|
let useStore = useUserStore() |
|
|
|
|
|
|
|
let loading = ref(false) |
|
|
|
|
|
|
|
//获取el-form组件 |
|
|
|
|
|
|
|
let loginforms = ref() |
|
|
|
//收集账号和密码的数据 |
|
|
|
//收集账号和密码的数据 |
|
|
|
const loginForm = reactive({ |
|
|
|
const loginForm = reactive({ |
|
|
|
username: 'admin', |
|
|
|
username: 'admin', |
|
|
|
password: '111111', |
|
|
|
password: '111111', |
|
|
|
}) |
|
|
|
}) |
|
|
|
const loginHandle = () => { |
|
|
|
const loginHandle = async () => { |
|
|
|
|
|
|
|
//保证全部表单项校验通过 |
|
|
|
|
|
|
|
await loginforms.value.validate() |
|
|
|
|
|
|
|
//开始加载 |
|
|
|
|
|
|
|
loading.value = true |
|
|
|
//通知仓库发登录请求 |
|
|
|
//通知仓库发登录请求 |
|
|
|
//请求成功后跳转到首页(展示数据的home页面) |
|
|
|
//请求成功后跳转到首页(展示数据的home页面) |
|
|
|
//登录失败弹出登录失败信息 |
|
|
|
//登录失败弹出登录失败信息 |
|
|
|
useStore.userLogin(loginForm) //传形参loginForm |
|
|
|
try { |
|
|
|
|
|
|
|
await useStore.userLogin(loginForm) //传形参loginForm |
|
|
|
|
|
|
|
ElNotification({ |
|
|
|
|
|
|
|
type: 'success', |
|
|
|
|
|
|
|
message: '登陆成功', |
|
|
|
|
|
|
|
title: `Hi!${getTime()}好!`, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
// 登录成功后设置一个2秒的延迟来跳转页面 |
|
|
|
|
|
|
|
setTimeout(() => { |
|
|
|
|
|
|
|
// 跳转到首页 |
|
|
|
|
|
|
|
$router.push('/home') |
|
|
|
|
|
|
|
// 结束加载效果 |
|
|
|
|
|
|
|
loading.value = false |
|
|
|
|
|
|
|
}, 1000) // 2000 毫秒 = 2 秒 |
|
|
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
|
|
loading.value = false |
|
|
|
|
|
|
|
ElNotification({ |
|
|
|
|
|
|
|
type: 'error', |
|
|
|
|
|
|
|
message: (error as Error).message, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//自定义表单校正规则 |
|
|
|
|
|
|
|
const validatorUserName = (rule: any, value: any, callback: any) => { |
|
|
|
|
|
|
|
//rule:即为校验规则对象 |
|
|
|
|
|
|
|
// value:即为表单元素文本内容 |
|
|
|
|
|
|
|
// 函数:如果符合条件callBack放行通过即可 |
|
|
|
|
|
|
|
// 如果不符合条件callBack方法,注入错误提示信息 |
|
|
|
|
|
|
|
if (value.length >= 5) { |
|
|
|
|
|
|
|
callback() |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
callback(new Error('账号长度至少五位!')) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
const validatorUserPassword = (rule: any, value: any, callback: any) => { |
|
|
|
|
|
|
|
//rule:即为校验规则对象 |
|
|
|
|
|
|
|
// value:即为表单元素文本内容 |
|
|
|
|
|
|
|
// 函数:如果符合条件callBack放行通过即可 |
|
|
|
|
|
|
|
// 如果不符合条件callBack方法,注入错误提示信息 |
|
|
|
|
|
|
|
if (value.length >= 6) { |
|
|
|
|
|
|
|
callback() |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
callback(new Error('账号长度至少六位!')) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//表单校验配置 |
|
|
|
|
|
|
|
const rules = { |
|
|
|
|
|
|
|
username: [ |
|
|
|
|
|
|
|
// { required: true, message: '用户名不能为空!', trigger: 'change' }, |
|
|
|
|
|
|
|
// { min: 1, max: 5, message: '用户名长度不大于5位', trigger: 'change' }, |
|
|
|
|
|
|
|
{ trigger: 'change', validator: validatorUserName }, //表单自定义写法 |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
password: [ |
|
|
|
|
|
|
|
// { required: true, message: '密码不能为空!', trigger: 'change' }, |
|
|
|
|
|
|
|
// { min: 1, max: 6, message: '密码长度不大于6位', trigger: 'change' }, |
|
|
|
|
|
|
|
{ trigger: 'change', validator: validatorUserPassword }, //表单自定义写法 |
|
|
|
|
|
|
|
], |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
@ -68,7 +142,10 @@ const loginHandle = () => { |
|
|
|
position: relative; //相对 |
|
|
|
position: relative; //相对 |
|
|
|
background: url('@/assets/images/login_form.png') no-repeat; |
|
|
|
background: url('@/assets/images/login_form.png') no-repeat; |
|
|
|
background-size: cover; |
|
|
|
background-size: cover; |
|
|
|
padding: 40px; |
|
|
|
padding-right: 150px; |
|
|
|
|
|
|
|
padding-left: 150px; |
|
|
|
|
|
|
|
padding-top: 50px; |
|
|
|
|
|
|
|
padding-bottom: 20px; |
|
|
|
h1 { |
|
|
|
h1 { |
|
|
|
color: white; |
|
|
|
color: white; |
|
|
|
font-size: 40px; |
|
|
|
font-size: 40px; |
|
|
|