当前位置:首页 > VUE

vue怎么实现登录界面

2026-02-22 13:59:32VUE

实现登录界面的基础结构

使用Vue CLI或Vite创建一个Vue项目,确保已安装vue-router和状态管理库(如Pinia或Vuex)。登录界面通常包含以下基础元素:

  • 用户名/邮箱输入框
  • 密码输入框
  • 登录按钮
  • 可选:记住我、忘记密码等辅助功能
<template>
  <div class="login-container">
    <form @submit.prevent="handleLogin">
      <input v-model="form.username" type="text" placeholder="用户名/邮箱" required>
      <input v-model="form.password" type="password" placeholder="密码" required>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

表单数据绑定与验证

通过Vue的v-model实现双向数据绑定,配合计算属性或验证库(如VeeValidate)进行表单验证:

vue怎么实现登录界面

<script setup>
import { ref } from 'vue'

const form = ref({
  username: '',
  password: ''
})

const validateForm = () => {
  return form.value.username.trim() && form.value.password.length >= 6
}
</script>

登录逻辑实现

调用API接口处理登录请求,通常使用axiosfetch发送POST请求。处理成功响应后存储token并跳转页面:

import { useRouter } from 'vue-router'
import { useAuthStore } from '@/stores/auth'

const router = useRouter()
const authStore = useAuthStore()

const handleLogin = async () => {
  if (!validateForm()) return

  try {
    const { data } = await axios.post('/api/login', form.value)
    authStore.setToken(data.token)
    router.push('/dashboard')
  } catch (error) {
    alert('登录失败: ' + error.response?.data?.message)
  }
}

路由守卫配置

在路由配置中添加元字段,通过全局前置守卫保护需要认证的路由:

vue怎么实现登录界面

// router/index.js
router.beforeEach((to) => {
  const isAuthenticated = useAuthStore().isAuthenticated
  if (to.meta.requiresAuth && !isAuthenticated) {
    return { path: '/login', query: { redirect: to.fullPath } }
  }
})

样式优化

使用CSS或UI框架(如Element Plus、Ant Design Vue)美化登录界面。建议添加加载状态和错误提示:

<button :disabled="loading" type="submit">
  {{ loading ? '登录中...' : '登录' }}
</button>
<div v-if="error" class="error-message">{{ error }}</div>

安全增强措施

实现基础安全功能:

  • 密码输入框添加显示/隐藏切换功能
  • 提交时禁用按钮防止重复提交
  • 对网络错误进行友好提示
  • 在Pinia/Vuex中存储的token应设置为httpOnly的cookie

完整组件示例

<template>
  <div class="login-container">
    <form @submit.prevent="handleLogin">
      <div class="form-group">
        <label>用户名</label>
        <input v-model="form.username" type="text" required>
      </div>
      <div class="form-group">
        <label>密码</label>
        <div class="password-input">
          <input v-model="form.password" :type="showPassword ? 'text' : 'password'" required>
          <button type="button" @click="showPassword = !showPassword">
            {{ showPassword ? '隐藏' : '显示' }}
          </button>
        </div>
      </div>
      <button :disabled="loading" type="submit">
        {{ loading ? '登录中...' : '登录' }}
      </button>
      <div v-if="error" class="error">{{ error }}</div>
    </form>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { useAuthStore } from '@/stores/auth'

const form = ref({ username: '', password: '' })
const showPassword = ref(false)
const loading = ref(false)
const error = ref('')

const router = useRouter()
const authStore = useAuthStore()

const handleLogin = async () => {
  if (!form.value.username || !form.value.password) {
    error.value = '请输入用户名和密码'
    return
  }

  loading.value = true
  error.value = ''

  try {
    await authStore.login(form.value)
    router.push('/dashboard')
  } catch (err) {
    error.value = err.message || '登录失败'
  } finally {
    loading.value = false
  }
}
</script>

<style scoped>
.login-container {
  max-width: 400px;
  margin: 0 auto;
  padding: 2rem;
}
.form-group {
  margin-bottom: 1rem;
}
.password-input {
  display: flex;
}
.error {
  color: red;
  margin-top: 1rem;
}
</style>

标签: 界面vue
分享给朋友:

相关文章

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…