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

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <t…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue导航实现

vue导航实现

Vue 导航实现方法 在 Vue 中实现导航功能通常涉及路由配置、组件设计和状态管理。以下是几种常见的实现方式: 使用 Vue Router 实现基础导航 安装 Vue Router: npm i…