当前位置:首页 > VUE

vue-cli实现登录

2026-01-21 04:32:42VUE

vue-cli 实现登录功能

创建登录组件

src/components 目录下创建 Login.vue 文件,包含表单和基础样式:

<template>
  <div class="login-container">
    <form @submit.prevent="handleSubmit">
      <input v-model="username" placeholder="用户名" />
      <input v-model="password" type="password" placeholder="密码" />
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    handleSubmit() {
      this.$emit('login', {
        username: this.username,
        password: this.password
      })
    }
  }
}
</script>

配置路由

src/router/index.js 中添加登录路由:

import Login from '@/components/Login'

const routes = [
  {
    path: '/login',
    name: 'Login',
    component: Login
  }
]

实现认证逻辑

创建 src/services/auth.js 处理认证逻辑:

export default {
  login(credentials) {
    return axios.post('/api/login', credentials)
  },
  logout() {
    return axios.post('/api/logout')
  }
}

状态管理

在 Vuex store (src/store/index.js) 中管理登录状态:

const store = new Vuex.Store({
  state: {
    isAuthenticated: false,
    user: null
  },
  mutations: {
    SET_AUTH(state, payload) {
      state.isAuthenticated = payload.isAuthenticated
      state.user = payload.user
    }
  },
  actions: {
    async login({ commit }, credentials) {
      try {
        const response = await authService.login(credentials)
        commit('SET_AUTH', {
          isAuthenticated: true,
          user: response.data.user
        })
        router.push('/dashboard')
      } catch (error) {
        console.error('Login failed:', error)
      }
    }
  }
})

路由守卫

src/router/index.js 中添加全局前置守卫:

router.beforeEach((to, from, next) => {
  const isAuthenticated = store.state.isAuthenticated
  if (to.name !== 'Login' && !isAuthenticated) {
    next({ name: 'Login' })
  } else {
    next()
  }
})

表单验证

为登录表单添加基础验证:

<template>
  <form @submit.prevent="handleSubmit">
    <div v-if="errors.length">
      <p v-for="error in errors" :key="error">{{ error }}</p>
    </div>
    <!-- 表单内容 -->
  </form>
</template>

<script>
export default {
  data() {
    return {
      errors: []
    }
  },
  methods: {
    validateForm() {
      this.errors = []
      if (!this.username) this.errors.push('用户名必填')
      if (!this.password) this.errors.push('密码必填')
      return this.errors.length === 0
    },
    handleSubmit() {
      if (this.validateForm()) {
        this.$emit('login', {
          username: this.username,
          password: this.password
        })
      }
    }
  }
}
</script>

样式优化

添加基础样式增强用户体验:

vue-cli实现登录

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

input {
  display: block;
  width: 100%;
  margin-bottom: 10px;
  padding: 8px;
}

button {
  width: 100%;
  padding: 10px;
  background-color: #42b983;
  color: white;
  border: none;
}

标签: vuecli
分享给朋友:

相关文章

vue 移动端实现签名

vue 移动端实现签名

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

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成当…

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

vue实现hexo

vue实现hexo

Vue 集成 Hexo 的实现方法 Hexo 是一个静态博客框架,而 Vue 是一个前端框架。将 Vue 集成到 Hexo 中可以通过以下方式实现: 在 Hexo 中使用 Vue 组件 通过 Hex…

vue前端实现权限

vue前端实现权限

Vue 前端权限实现方案 路由权限控制 通过 Vue Router 的 beforeEach 钩子实现路由拦截,结合用户角色和权限列表进行校验。在路由配置中添加 meta 字段定义所需权限: con…

vue 实现条件搜索

vue 实现条件搜索

Vue 实现条件搜索的方法 在 Vue 中实现条件搜索功能,可以通过以下方法完成: 使用计算属性过滤数据 通过计算属性结合 filter 方法,可以轻松实现条件搜索功能。定义一个搜索输入框,绑定到…