使用vue编写登录页面详细过程

首先,创建项目login

vue create login
cnpm install elementui vue-router vuex axios

结构如下

在这里插入图片描述

具体操作过程

在main.js中写入:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue'
import router from './router'
import store from './store'
//导入全局样式表
import './assets/css/globe.css'
Vue.use(ElementUI)
Vue.config.productionTip = false

//配置axios全局使用
import axios from 'axios'
axios.defaults.baseURL='http://127.0.0.1:8000/api/'
// 将vue的原型http对象设置未axios,以后用这个原型就可以直接使用
Vue.prototype.$http = axios

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

assets下新建css文件夹再创建一个globe.css用于存储全局变量,css同级目录下还有一张默认的vue图标图片文件

/*全局样式表*/
html,
body,
#app{
  height: 100%;
  margin: 0;
  padding: 0;
}

components下新建login.vue

<template>
  <div class="login_container">
    <div class="login_box">
      <!-- 头像区域 -->
      <div class="avatar_box">
        <img src="../assets/logo.png" alt="">
      </div>
      <!-- 登录表单区域 -->
      <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
        <!--        用户名-->
        <el-form-item prop="username">
          <el-input v-model="loginForm.username" prefix-icon="el-icon-user"></el-input>
        </el-form-item>
        <!--        密码-->
        <el-form-item prop="password">
          <el-input v-model="loginForm.password" prefix-icon="el-icon-key" type="password"></el-input>
        </el-form-item>
        <!--        按钮区域-->
        <el-form-item class="btns">
          <el-button type="primary" @click="Login">登录</el-button>
          <el-button type="info" @click="resetLoginForm">重置</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>

  export default {
    data() {
      return {
        // 数据绑定对象
        loginForm: {
          username: 'hzw',
          password: '123'
        },
        // 验证规则对象
        loginFormRules: {
          //验证用户
          username: [
            {required: true, message: '请输入用户名', trigger: 'blur'},
            {min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur'}
          ],
          password: [
            {required: true, message: '请输入登录密码', trigger: 'blur'},
            {min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur'}
          ]
        }
      }
    },
    methods: {
      Login() {
        // 预验证
        this.$refs.loginFormRef.validate(async valid => {
          //未验证通过则直接return
          if (!valid) return;
          //不加await的化不会打印出数据,await只能用于async修饰的函数
          const response = await this.$http.post('pro/login', this.loginForm).catch(() => this.$message.error("登录失败,请联系Tel:"))
          // {data:res}解构,将得到的返回值的data解构为res
          console.log(response.data)
          // console.log(res.meta.statusText)
          //从res的元数据中得到返回状态
          if (response.status !== 200) return;
          if (response.data.token) return this.$message.success("登录成功")
          if (response.data.error) return this.$message.error(response.data.error)
        });
      },
      //重置登录表单
      resetLoginForm() {
        // console.log(this)
        // ui框架自带的form表单方法
        this.$refs.loginFormRef.resetFields();
      }

    }
  }
</script>
<!--加上scoped是将样式应用于此组件,不加是全局-->
<style lang="less" scoped>
  .login_container {
    background-color: rgba(21, 35, 242, 0.25);
    height: 100%;
  }

  .login_box {
    width: 450px;
    height: 300px;
    background-color: white;
    border-radius: 3px;
    /*容器内居中*/
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);

    .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-color: #fff;

      img {
        width: 100%;
        height: 100%;
        border-radius: 50%;
        background-color: #eee;
      }
    }

    .login_form {
      position: absolute;
      bottom: 0;
      width: 100%;
      padding: 0 20px;
      box-sizing: border-box;
    }

    .btns {
      display: flex;
      justify-content: flex-end;
    }
  }
</style>

route文件夹下index.js编写路由:

import Vue from 'vue'
import VueRouter from 'vue-router'

import login from "../components/login";

Vue.use(VueRouter)

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

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

项目运行如图:

  • 登录界面:
    登录界面
  • 成功提示

成功提示 - 若是用户名和密码错误,则按服务器返回的错误提示显示
若是用户名和密码错误,则按服务器返回的错误提示显示 - 若是请求接口错误,提示登录失败并提供联系方式
若是请求接口错误,提示登录失败并提供联系方式

开启之前文章中建立的接口进行验证:文章链接

下一步根据得到的数据(权限)进行路由跳转控制

  • 19
    点赞
  • 217
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
### 回答1: 好的,我可以回答这个问题。使用 Vue 编写登录界面,可以先创建一个 Vue 组件,包含用户名和密码的输入框以及登录按钮。在组件中使用 Vue 的双向数据绑定来获取用户输入的用户名和密码,然后通过 Ajax 请求将用户名和密码发送到后端进行验证。如果验证通过,就跳转到主页面,否则提示用户输入错误。同时,可以使用 Vue 的路由功能来实现页面的跳转和管理。 ### 回答2: 使用Vue编写登录界面可以分为以下几个步骤: 1. 引入Vue库。在HTML文件的头部中引入Vue.js文件。 2. 创建Vue实例。在script标签中,使用new Vue()方法创建一个Vue实例。 3. 定义data属性。在Vue实例内部,定义data属性来存储表单中的用户名和密码。 4. 定义methods方法。在Vue实例内部,定义一个methods对象,其中包含一个用于处理表单提交的方法。 5. 编写HTML模板。在body部分,使用Vue的模板语法编写登录界面的HTML结构,并与Vue实例中的data属性进行绑定。 6. 绑定事件。在表单的提交按钮上添加@click事件来触发Vue实例中定义的方法。 7. 样式设计。使用CSS来设计登录界面的样式,可以使用Vue提供的class和style绑定来动态改变元素的样式。 通过以上步骤,我们就能够使用Vue编写一个简单的登录界面。在用户在输入用户名和密码后,点击提交按钮,Vue实例中定义的方法将被触发,我们可以在该方法中进行登录验证或跳转到其他页面等操作。同时,使用Vue的双向数据绑定机制,输入框中的内容会与Vue实例中的data属性相互同步,从而实现动态更新和交互。 ### 回答3: 使用Vue编写一个登录界面是非常简单的。首先,我们需要安装Vue的开发环境,并创建一个Vue项目。 在Vue项目的src文件夹下创建一个Login.vue组件,这个组件包含一个表单,用于用户输入用户名和密码。我们可以使用Vue的双向数据绑定来获取用户输入的值。在data对象中定义一个username和password属性,然后在input元素中使用v-model指令与这两个属性进行绑定。 接着,我们为登录按钮绑定一个点击事件,可以使用v-on指令或者@符号来监听点击事件,并调用登录函数。这个函数可以在methods对象中定义,可以在这个函数中实现登录逻辑,比如验证用户名和密码是否匹配等。 如果登录成功,我们可以使用Vue的路由功能进行页面跳转,也就是在methods中调用this.$router.push(),跳转到下一个页面。 最后,在App.vue中,使用<router-view></router-view>来渲染Login组件。 以上就是一个简单的使用Vue编写登录界面过程。虽然这只是一个基本的示例,但Vue的特性使得编写登录界面变得非常简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值