go18/devcloud/web/src/pages/LoginPage.vue
2025-08-03 17:29:14 +08:00

95 lines
2.8 KiB
Vue

<template>
<div class="login">
<!-- form登录表单 -->
<div :style="{ width: '480px', height: '400px' }">
<div style="display: flex; height: 40px;justify-content: center;align-items:center;margin-bottom: 12px;">
<h2>欢迎登录</h2>
</div>
<a-form :model="form" size="large" @submit="handleSubmit">
<a-form-item hide-label field="parameter.username" :rules="{
required: true,
message: '请输入用户名'
}">
<a-input v-model="form.parameter.username" placeholder="请输入用户名">
<template #prefix>
<icon-user />
</template>
</a-input>
</a-form-item>
<a-form-item hide-label field="parameter.password" required :rules="{
required: true,
message: '请输入密码'
}">
<a-input-password :invisible-button="false" v-model="form.parameter.password" placeholder="请输入密码" allow-clear>
<template #prefix>
<icon-lock />
</template>
</a-input-password>
</a-form-item>
<a-form-item hide-label field="remember">
<a-checkbox v-model="form.remember"> 记住 </a-checkbox>
</a-form-item>
<a-form-item hide-label>
<a-button type="primary" :style="{ width: '100%' }" html-type="submit">登录</a-button>
</a-form-item>
</a-form>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
import mcenter from '@/api/mcenter'
import token from '@/storage/token'
import { useRouter } from 'vue-router';
// 表单对象
const form = ref({
issuer: 'password',
parameter: {
username: '',
password: ''
},
remember: false,
})
// 获取router对象
const router = useRouter()
// 表单的提交
const handleSubmit = async (data) => {
// 判断表单是否验证成功
if (data.errors == null) {
// 通过HttpClient把数据提交给后端
const resp = await mcenter.Login(data.values)
// 用户登录后,这些用户信息我们怎么保存喃 1. cookie, session storage, localstorage
// localStorage.setItem('token', JSON.stringify(resp))
// localStorage.getItem('token')
// 把 localStorage 做成响应式的
// https://cn.vuejs.org/guide/reusability/composables.html
token.value = resp
// 登录完成后,需要跳转到后台页面
// location.assign('/users/eduardo')
// vue router对象, 提供路由跳转的功能
// 字符串路径
// router.push('/users/eduardo')
// 指定到组件名称
router.push({ name: 'HomePage' })
}
}
</script>
<style lang="css" scoped>
.login {
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
height: 100%;
width: 100%;
}
</style>