vue实现登录页面
Vue 登录页面实现步骤
创建Vue项目
使用Vue CLI或Vite初始化项目:
npm init vue@latest vue-login-demo
cd vue-login-demo
npm install
安装必要依赖
如需要表单验证或UI组件库:
npm install axios vue-router pinia
npm install element-plus # 示例使用Element UI
登录页面组件
在src/views/LoginView.vue中创建基础登录表单:
<template>
<div class="login-container">
<el-form :model="form" :rules="rules" ref="loginForm">
<el-form-item prop="username">
<el-input v-model="form.username" placeholder="用户名"/>
</el-form-item>
<el-form-item prop="password">
<el-input v-model="form.password" type="password" placeholder="密码"/>
</el-form-item>
<el-button type="primary" @click="handleLogin">登录</el-button>
</el-form>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
const form = ref({
username: '',
password: ''
})
const rules = {
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
}
const router = useRouter()
const handleLogin = async () => {
try {
// 替换为实际API调用
// const res = await axios.post('/api/login', form.value)
ElMessage.success('登录成功')
router.push('/dashboard')
} catch (error) {
ElMessage.error(error.message)
}
}
</script>
<style scoped>
.login-container {
width: 100%;
max-width: 400px;
margin: 0 auto;
padding: 20px;
}
</style>
配置路由
在src/router/index.js中设置路由:
import { createRouter, createWebHistory } from 'vue-router'
import LoginView from '../views/LoginView.vue'
const routes = [
{
path: '/login',
name: 'login',
component: LoginView
}
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router
状态管理(可选)
使用Pinia存储登录状态:
// src/stores/auth.js
import { defineStore } from 'pinia'
export const useAuthStore = defineStore('auth', {
state: () => ({
token: localStorage.getItem('token') || null
}),
actions: {
setToken(token) {
this.token = token
localStorage.setItem('token', token)
}
}
})
表单验证增强
可引入VeeValidate进行复杂验证:
npm install @vee-validate/rules @vee-validate/yup
示例验证规则:
import { useField, useForm } from 'vee-validate'
import * as yup from 'yup'
const { handleSubmit } = useForm({
validationSchema: yup.object({
username: yup.string().required().min(3),
password: yup.string().required().min(6)
})
})
安全注意事项
- 密码传输需使用HTTPS
- 服务端应实现CSRF防护
- 敏感数据避免存储在localStorage
- 实现自动退出机制
扩展功能
- 添加验证码组件
- 第三方登录(OAuth2.0)
- 密码强度检测
- 记住密码功能(需加密存储)
通过以上步骤可构建基础登录功能,实际项目需根据业务需求调整接口调用和错误处理逻辑。







