当前位置:首页 > 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>

关键功能说明

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

vue实现登录代码

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

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

vue实现登录代码

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

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

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

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

相关文章

vue 移动端实现签名

vue 移动端实现签名

Vue 移动端签名实现方法 在移动端实现签名功能,可以通过HTML5的Canvas结合触摸事件完成。以下是具体实现步骤: 使用Canvas绘制签名 安装vue-signature-pad插件或直接使…

vue实现div

vue实现div

Vue 实现 DIV 元素的方法 在 Vue 中实现 DIV 元素可以通过多种方式,以下是几种常见的实现方法: 使用模板语法 在 Vue 的模板中直接使用 HTML 的 <div> 标…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 sl…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } }…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind…