<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Vue登录示例</title>
<!-- 引入Vue.js -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<style>
.login-container {
max-width: 400px;
margin: 50px auto;
padding: 20px;
border: 1px solid #ddd;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
}
.error-message {
color: #ff4444;
font-size: 0.9em;
margin-top: 5px;
}
button {
width: 100%;
padding: 10px;
background-color: #42b983;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #3aa876;
}
</style>
</head>
<body>
<div id="app">
<div class="login-container">
<h2>用户登录</h2>
<form @submit.prevent="handleSubmit">
<!-- 用户名输入 -->
<div class="form-group">
<label>用户名:</label>
<input
type="text"
v-model="username"
placeholder="请输入用户名"
@input="clearError"
>
<div v-if="errors.username" class="error-message">
{{ errors.username }}
</div>
</div>
<!-- 密码输入 -->
<div class="form-group">
<label>密码:</label>
<input
type="password"
v-model="password"
placeholder请输入密码"
@input="clearError"
>
<div v-if="errors.password" class="error-message">
{{ errors.password }}
</div>
</div>
<!-- 登录按钮 -->
<button type="submit" :disabled="loading">
{{ loading ? '登录中...' : '立即登录' }}
</button>
<!-- 错误提示 -->
<div v-if="errorMessage" class="error-message" style="margin-top: 15px;">
{{ errorMessage }}
</div>
</form>
</div>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
username: '',
password: '',
errors: {
username: '',
password: ''
},
errorMessage: '',
loading: false
}
},
methods: {
validateForm() {
let isValid = true
// 验证用户名
if (!this.username.trim()) {
this.errors.username = '用户名不能为空'
isValid = false
}
// 验证密码
if (!this.password) {
this.errors.password = '密码不能为空'
isValid = false
} else if (this.password.length < 6) {
this.errors.password = '密码长度不能少于6位'
isValid = false
}
return isValid
},
clearError() {
this.errors.username = ''
this.errors.password = ''
this.errorMessage = ''
},
handleSubmit() {
if (!this.validateForm()) return
this.loading = true
this.errorMessage = ''
// 模拟API调用
setTimeout(() => {
// 模拟登录成功
if (this.username === 'admin' && this.password === '123456') {
alert('登录成功!')
// 实际开发中可跳转到主页
// this.$router.push('/home')
} else {
this.errorMessage = '用户名或密码错误'
}
this.loading = false
}, 1500)
}
}
})
</script>
</body>
</html>
功能说明:
-
表单验证:
-
用户名不能为空
-
密码不能为空且长度至少6位
-
实时错误提示
-
-
交互特性:
-
输入时自动清除旧错误提示
-
登录按钮禁用状态管理
-
加载状态提示
-
-
样式特性:
-
响应式布局
-
友好的错误提示样式
-
按钮悬停效果
-
-
模拟登录流程:
-
1.5秒模拟API请求
-
用户名
admin密码123456为测试账号 -
成功提示和失败错误显示
-
使用说明:
-
将代码保存为
.html文件 -
用浏览器直接打开即可运行
-
测试账号:admin / 123456
主要技术点:
-
Vue基础语法:
-
v-model双向数据绑定 -
v-if条件渲染 -
@submit.prevent事件修饰符
-
-
表单验证逻辑:
-
分层验证(空值检查、格式验证)
-
错误消息管理
-
-
状态管理:
-
加载状态控制
-
错误状态管理
-
-
样式设计:
-
CSS布局技巧
-
响应式容器设计
-
错误提示样式
-
进阶扩展建议:
-
添加记住密码功能
-
实现验证码功能
-
集成真实API调用
-
添加路由跳转(需配合Vue Router)
-
实现JWT认证存储
-
添加第三方登录(微信、GitHub等)
这个示例可以直接在浏览器中运行,无需构建步骤,适合Vue新手学习和快速实现基础登录功能。实际项目中可根据需求添加更多安全措施和功能模块。

被折叠的 条评论
为什么被折叠?



