当前位置:首页 > VUE

vue实现登录代码

2026-01-18 08:08:20VUE

以下是一个基于 Vue.js 的登录功能实现示例,包含表单验证和异步请求处理:

基础组件结构

<template>
  <div class="login-container">
    <form @submit.prevent="handleSubmit">
      <div class="form-group">
        <label for="username">用户名</label>
        <input 
          type="text" 
          id="username" 
          v-model="form.username" 
          @blur="validateField('username')"
        >
        <span class="error" v-if="errors.username">{{ errors.username }}</span>
      </div>

      <div class="form-group">
        <label for="password">密码</label>
        <input 
          type="password" 
          id="password" 
          v-model="form.password"
          @blur="validateField('password')"
        >
        <span class="error" v-if="errors.password">{{ errors.password }}</span>
      </div>

      <button type="submit" :disabled="isSubmitting">
        {{ isSubmitting ? '登录中...' : '登录' }}
      </button>
    </form>
  </div>
</template>

脚本部分

<script>
import { reactive, ref } from 'vue'
import axios from 'axios'
import { useRouter } from 'vue-router'

export default {
  setup() {
    const form = reactive({
      username: '',
      password: ''
    })

    const errors = reactive({
      username: '',
      password: ''
    })

    const isSubmitting = ref(false)
    const router = useRouter()

    const validateField = (field) => {
      if (field === 'username' && !form.username.trim()) {
        errors.username = '请输入用户名'
      } else if (field === 'password' && !form.password.trim()) {
        errors.password = '请输入密码'
      } else {
        errors[field] = ''
      }
    }

    const handleSubmit = async () => {
      validateField('username')
      validateField('password')

      if (errors.username || errors.password) return

      isSubmitting.value = true
      try {
        const response = await axios.post('/api/login', {
          username: form.username,
          password: form.password
        })

        localStorage.setItem('token', response.data.token)
        router.push('/dashboard')
      } catch (error) {
        alert(error.response?.data?.message || '登录失败')
      } finally {
        isSubmitting.value = false
      }
    }

    return {
      form,
      errors,
      isSubmitting,
      handleSubmit,
      validateField
    }
  }
}
</script>

样式部分

<style scoped>
.login-container {
  max-width: 400px;
  margin: 0 auto;
  padding: 20px;
}

.form-group {
  margin-bottom: 15px;
}

label {
  display: block;
  margin-bottom: 5px;
}

input {
  width: 100%;
  padding: 8px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.error {
  color: red;
  font-size: 12px;
}

button {
  background-color: #42b983;
  color: white;
  padding: 10px 15px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

button:disabled {
  opacity: 0.7;
  cursor: not-allowed;
}
</style>

关键功能说明

表单验证 在输入框失去焦点时触发验证,确保必填字段不为空。错误信息会实时显示在对应字段下方。

登录状态管理 使用 isSubmitting 状态防止重复提交,并在请求过程中禁用按钮。

API请求 使用 axios 发送 POST 请求到 /api/login 端点,处理成功响应和错误情况。

路由跳转 登录成功后使用 vue-router 跳转到 dashboard 页面。

Token存储 将服务器返回的 token 存储在 localStorage 中,便于后续请求的身份验证。

vue实现登录代码

这个实现可以根据实际需求进行扩展,例如添加记住密码功能、验证码验证等。

标签: 代码vue
分享给朋友:

相关文章

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

antd vue 实现

antd vue 实现

使用 Ant Design Vue 实现功能 Ant Design Vue 是基于 Vue.js 的 UI 组件库,提供了丰富的组件和设计规范。以下是一些常见功能的实现方法。 安装 Ant Desi…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖进…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…

vue实现搜索提示

vue实现搜索提示

Vue实现搜索提示的方法 使用v-model绑定输入框 通过v-model将输入框的值与Vue实例中的数据进行双向绑定,实时获取用户输入内容。 <input v-model="searchQu…