policeSecurity/superManagement/src/components/login/TelephoneLogin.vue

133 lines
3.1 KiB
Vue
Raw Normal View History

2024-08-29 17:06:00 +08:00
<template>
<a-form
ref="formRef"
:model="loginParams"
:rules="loginParamsRule"
@finish="login"
layout="vertical"
size="large"
class="login-form"
>
<a-form-item name="telephone">
<a-input
v-model:value="loginParams.telephone"
placeholder="请输入账号/手机号"
:max-length="64"
allow-clear
/>
</a-form-item>
<a-form-item name="password">
<a-input-password
v-model:value="loginParams.password"
placeholder="请输入密码"
:max-length="32"
/>
</a-form-item>
<div class="remember-me">
<a-checkbox disabled>
记住我
</a-checkbox>
</div>
<a-button
class="btn"
type="primary"
html-type="submit"
>立即登录
</a-button>
</a-form>
</template>
<script lang="ts" setup>
import {ref} from 'vue'
import {FormInstance, message, notification} from "ant-design-vue";
import {Rule} from "ant-design-vue/es/form";
import {LoginParams} from "@/types/views/login.ts";
import api from "@/axios";
import {CLIENT_TYPE} from "@/config";
import rsaUtil from "@/utils/rsaUtil.ts";
import {TokenInfo} from "@/types/stores/userStore.ts";
import {useUserStore} from "@/stores/modules/userStore.ts";
import {useRouter} from "vue-router";
const userStore = useUserStore()
const router = useRouter()
const formRef = ref<FormInstance>(null!)
const loginParamsRule: Record<keyof LoginParams, Rule[]> = {
telephone: [
{required: true, message: '请输入手机号', trigger: 'change'},
{len: 11, message: "长度不够", trigger: 'blur'},
],
password: [
{required: true, message: '请输入密码', trigger: 'change'},
{min: 6, max: 20, message: '密码长度最小为6最长为20', trigger: 'blur'},
],
}
const loginParams = ref<LoginParams>({
telephone: __APP_ENV.VITE_APP_ENV === "development" ? '15576404472' : '',
password: __APP_ENV.VITE_APP_ENV === "development" ? '123456' : ''
});
/**
* 登录
*/
const login = async () => {
//校验表单
await formRef.value.validate()
//执行登录逻辑
const resp = await api.post<TokenInfo>('/login', {
clientType: CLIENT_TYPE,
loginParams: {
telephone: loginParams.value.telephone,
password: rsaUtil.encryptStr(loginParams.value.password)
}
})
//保存token
userStore.saveTokenInfo(resp.data as TokenInfo)
//跳转页面
router.push("/index").then(() => {
notification.success({
message: '登录成功',
duration: 2,
description: '欢迎来到本系统!',
placement: 'topRight'
})
})
}
</script>
<style lang="scss" scoped>
.login-form {
box-sizing: border-box;
padding: 0 5px;
margin-top: 16px;
:deep(.ant-input-group-addon) {
padding: 0;
overflow: hidden;
}
.ant-form-item {
margin-bottom: 20px;
}
.remember-me {
display: flex;
justify-content: space-between;
}
.btn {
border-radius: 4px;
box-shadow: 0 0 0 1px #05f,
0 2px 1px rgba(0, 0, 0, 0.15);
font-size: 14px;
font-weight: 500;
height: 40px;
line-height: 22px;
margin: 20px 0 12px;
width: 100%;
}
}
</style>