我是靠谱客的博主 懵懂乐曲,最近开发中收集的这篇文章主要介绍Vue+element 登录业务实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先项目初始化+安装element-ui、在之前的文章当中已经介绍的很详细

vue+element实现单选多选 答题的打分demo(从0-1全过程)_benlalagang的博客-CSDN博客_element 答题系统答题: vue+element答题demo 包含单选 多选 判断、打分页面https://blog.csdn.net/benlalagang/article/details/125927798之后我们进行下列步骤的操作

布局页面

没有什么难度、login页面默认宽高都是页面的100%,登录盒子定位left:50%,top:50%,再返回自身的50%  transform: translate(-50%,-50%);

获取表单数据

登录盒子用到组件 el-form  el-form-item  el-input 根据官网固定用法  v-model 数据双向绑定 便于获取数据post 到服务器 这里还有一个小点:组件库提供的表单预计验证

组件data种定义好:

      LoginRules: {

        username: [

          { required: true, message: '请输入用户名', trigger: 'blur' }

        ],

        password: [

          { min: 6, max: 16, message: '长度在 6 到 16 个字符', trigger: 'blur' },

          { required: true, message: '请输入登录密码', trigger: 'blur' }

        ]

      }

required 必填 min max最大值最小值 message 未通过验证时提示的消息  trigger 触发方式

el-from 绑定 :rules="LoginRules"

el-form-item 使用具体的prop="username"

<template>
  <div id="login">
    <div class="login-box">
      <div class="avatar-box">
        <img src="http://www.wsg3096.com/gangback/pub/ava.jpg" alt="">
      </div>
      <el-form id="login-form" :model="loginPost" :rules="LoginRules" ref="login">
        <el-form-item prop="username">
          <el-input prefix-icon="iconfont icon-user"
                    placeholder="请输入用户名"
                    v-model="loginPost.username"></el-input>
        </el-form-item>
        <el-form-item prop="password">
          <el-input prefix-icon="iconfont icon-3702mima"
                    type="password"
                    v-model="loginPost.password"
                    placeholder="请输入密码"></el-input>
        </el-form-item>
        <el-form-item class="btns">
          <el-button type="primary" @click="loginIn">登录</el-button>
          <el-button plain @click="loginRs">重置</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
export default {
  name: 'login',
  data () {
    return {
      loginPost: {
        username: '',
        password: ''
      },
      LoginRules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' }
        ],
        password: [
          { min: 6, max: 16, message: '长度在 6 到 16 个字符', trigger: 'blur' },
          { required: true, message: '请输入登录密码', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    loginRs () {
      // 点击重置按钮 重置登录表单 resetFields()ele重置方法 用refs找到这个表单
      // console.log(this.$refs)
      this.$refs.login.resetFields()
    },
    loginIn () {
      // 点击登录按钮 先看验证结果 通过预验证后 再发起POST请求 valid返回布尔值
      // async额森特在前   await额威特在内 简化promise 再用对象结构 接收data
      this.$refs.login.validate(async valid => {
        if (!valid) return
        const { data: res } = await this.$http.post(
          'login',
          this.loginPost
        )
        if (res.meta.status !== 200) return this.$Msg.error('登录失败!')
        await this.$Msg.success('登录成功!')
        /*
        *将登录成功的令牌 存到 浏览器会话存储当中(只在打开期间生效)
        * 再跳转路由到首页
        * */
        window.sessionStorage.setItem('token', res.data.token)
        // 这里因为是异步 所以this 划线了 但是效果没有影响
        await this.$router.push('/home')
      })
    }
  }
}

</script>

<style lang="less" scoped>
#login{
  background: url("http://www.wsg3096.com/articleSystem/assets/img/index1.jpg") no-repeat center;
  width: 100%;
  height: 100%;
  position: relative;
}
  .login-box{
    width: 450px;
    height: 300px;
    background: white;
    border-radius: 6px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
    box-shadow: 2px 8px 20px rgba(30,30,30,0.3);
  }
  .avatar-box{
    height: 130px;
    width: 130px;
    border: 1px solid #eee;
    border-radius: 50%;
    padding: 10px;
    box-shadow: 0 0 10px #ddd;
    position: absolute;
    left: 50%;
    transform: translate(-50%,-50%);
    background: #fff;
    img{
      width: 100%;
      height: 100%;
      border-radius: 50%;
      background: #eee;
    }
  }
  .btns{
    display: flex;
    justify-content: flex-end;
  }
  #login-form{
    box-sizing: border-box;
    padding: 100px 20px 0px;
  }
</style>

在router种使用导航守卫加以验证

// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
  /** to 将要访问的路径
   *  from 代表从哪个路径跳转而来
   *  next 表示放行
   * **/
  if (to.path === '/login') return next()// 去访问登录页面 直接放行

  const tokenStr = window.sessionStorage.getItem('token')

  if (!tokenStr) return next('/login')// 访问其他页面 检验有没有 token 没有就跳转到 login
  next()
})

最后

以上就是懵懂乐曲为你收集整理的Vue+element 登录业务实现的全部内容,希望文章能够帮你解决Vue+element 登录业务实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部