1、在view文件夹下创建login文件夹,创建index.vue:代表登录的组件

配置router.js,导入登录组件

import Vue from "vue";
import Router from "vue-router";
// 导入登录组件’
import Login from './views/login/index.vue' Vue.use(Router); export default new Router({
// mode: "history",
//base: process.env.BASE_URL,
routes: [
{
path: '/login',
name: 'login', //路由名称
component: Login //组件对象
} ]
});

2、结合Element-UI编写index.vue,index.vue的目录为:views/login/index.vue

<template>
<div class="login-container">
<bubbles-effect :options="options"></bubbles-effect>
<el-form ref="form" :model="form" label-width="80px" class="login-form">
<h2 class="login-title" style="center">后台管理系统登录</h2>
<el-form-item label="账号" class="box">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="密码" class="box">
<el-input v-model="form.password" type="password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">登录</el-button>
<el-button class="cancle">取消</el-button>
</el-form-item>
</el-form> </div> <!-- <vue-canvas-nest></!--> </template> <script>
import vueCanvasNest from "vue-canvas-nest";
// import bubblesEffect from 'vue-canvas-effect' export default {
data() {
return {
form: {
username: "",
password: ""
},
options: {
color: "rgba(225,225,225,0.5)", //Bubble color
radius: 15, //Bubble radius
densety: 0.3, // The larger the bubble density, the greater the density (suggest no more than 1).
clearOffset: 0.2 // The larger the bubble disappears [0-1], the longer it disappears.
}
};
},
components: {
vueCanvasNest
// bubblesEffect
},
methods: {
onSubmit() {
console.log("submit!");
}
}
};
</script> <style scoped>
.login-form {
width: 350px;
/* 上下嫌隙 160px,左右自动居中 */
margin: 160px auto;
background-color: rgb(255, 255, 255, 0.8);
padding: 28px;
border-radius: 20px;
/* border: solid 1px black; */
box-shadow: 0 0 30px 3px rgba(119,118,118,0.33);
} .login-container {
position: absolute;
width: 100%;
height: 100%;
} .login-title {
color: #303133;
text-align: center;
} .cancle {
margin-left: 80px;
} .box {
margin-left: 0px;
}
</style>

3、表单验证

  1、在el-form中导入 :rules="rules",el-form-item导入pro=“属性名称”

在export的data中配置rules:

 rules: {
username: [
{ required: true, message: '密码不能为空', trigger: 'blur' }
],
password: [
{ required: true, message: '密码不能为空', trigger: 'blur' }
]
},

配置methods:

methods: {
submitForm(formName) {
//定位到表单,再进行校验
this.$refs[formName].validate(valid => {
// console.log(valid) //成功为true,失败为false
if(valid){
// 提交表单给后台进行验证是否正确
}else{
console.log('验证失败')
return false
}
})
},
// onSubmit() {
// console.log("submit!");
// }
// }
}

4、easyMock添加系统登录后台服务接口

  1、修改.env.develoment文件中的目标服务接口地址---------VUE_APP_SERVICE_URL

  2、配置 Mock.js,创建新的接口

    ①当登录成功后,响应状态码2000和token值,token用来认证(后面请求只要是成功的,状态码均为2000,这个是与后台接口的约定)

  *  请求URL:/user/login

  *  请求方式:post

  *  描述: 登录认证

  *  mock.js 接口配置:

{
"code": 2000, //状态码
"flag": true,
"message": '验证成功',
"data": {
"token": "admin"
}
}

    ②通过token获取用户信息:

      添加响应用户信息模拟接口:

      *  请求URL:/user/info/{token}

      *  请求方式:get

      *  描述:响应用户信息

      *  mock.js 配置

{
"code": 2000,
"flag": true,
"message": '成功获取用户信息',
"data": {
"id|1-10000": 1,
"name": "@cname",
"roles": ["manager"]
}
}

5、登录逻辑实现

在src/api 下创建login.js,导出两个方法

import request from '@/utils/request'

// 导出函数
export function login(username, password) {
return request({
url: '/user/login',
method: 'post',
data: {
username, //username: username
password
}
})
} // 获取返回的用户信息
export function getUserInfo(token) {
return request({
url: `/user/info/${token}`,
method: 'get'
})
}

表单校验:

methods: {
submitForm(formName) {
//定位到表单,再进行校验
this.$refs[formName].validate(valid => {
// console.log(valid) //成功为true,失败为false
if(valid){
// 提交表单给后台进行验证是否正确,then后面传入回调函数
login(this.form.username,this.form.password).then(response => {
const resp = response.data
console.log(resp,resp.flag,resp.data.token)
if (resp.flag) {
// 当resp.flag为true时,表示验证成功
// 通过token获取用户信息
getUserInfo(resp.data.token).then(response => {
const respUser = response.data
console.log(respUser)
if (respUser.flag){
// 获取到用户的数据
//成功
console.log('userInfo',respUser.data)
// 1.保存token,用户信息
localStorage.setItem('msm-user', JSON.stringify(respUser.data))
localStorage.setItem('msm-token', resp.data.token)
// 前往首页
this.$router.push('/')
}else{
this.$message.error(respUser.message);
} })
}else {
// 未通过,弹出警告
this.$message.error(resp.message);
}
}) }else{
console.log('验证失败')
return false
}
})
},
// onSubmit() {
// console.log("submit!");
// }
// }
}

Vuejs实战项目:登陆页面的更多相关文章

  1. Vuejs实战项目四:权限校验

    路由跳转参考文档:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html 在/src下创建permission.js进行权限 ...

  2. Vuejs实战项目步骤一

    1.使用vue初始化项目 vue create msm-demo #创建项目 npm run serve #部署 2.更改public文件夹下面的index文件,只留下 <div id=&quo ...

  3. Vuejs实战项目五:数据列表

    1.在EasyMock 中添加数据列表模拟接口 请求url:/suyuan/list 请求方式:get 描述:数据列表 mock.js配置: 例: { "code": 2000, ...

  4. Vuejs实战项目三:退出系统功能实现

    1.创建Mockjs接口 method:post url:/user/logout 描述:退出系统 response: { "code": 2000, //状态码 "fl ...

  5. SPA项目中,404页面 和 登陆页面 对应的路由,应该怎样控制?

    SPA项目中,404页面 和 登陆页面 对应的路由,应该怎样控制? 可以这样做: 登陆之前,所有页面跳到 登陆页面:包括随便输入的路由地址. 登陆后,跳到相应页面:随便输入的.不存在的路由地址,才跳到 ...

  6. 小KING教你做android项目(二)---实现登陆页面并跳转和简单的注册页面

    原文:http://blog.csdn.net/jkingcl/article/details/10989773       今天我们主要来介绍登陆页面的实现,主要讲解的就是涉及到的布局,以及简单的跳 ...

  7. 编写大型项目web页面 从写web登陆页面开始

    web页面搭建需要准备什么工具 首先我们会和设计师沟通 我们需要一些检验设计的工具 ps 自动裁图 自动测量工具 (我这里安利一下一个工具 我用的cutterman) sketch 可以使用阿里的工具 ...

  8. 前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍

    webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互依赖的文件打包在一起.webpack 本 ...

  9. vue+websocket+express+mongodb实战项目(实时聊天)

    继上一个项目用vuejs仿网易云音乐(实现听歌以及搜索功能)后,发现上一个项目单纯用vue的model管理十分混乱,然后我去看了看vuex,打算做一个项目练练手,又不想做一个重复的项目,这次我就放弃颜 ...

随机推荐

  1. 重写、super关键字、final关键字、多态、子类型转换、抽象的初步了解

    重写 含义 在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写.方法重写又称方法覆盖. 重写与重载的 ...

  2. Nand Flash 控制器中的硬件 ECC 介绍

    ECC 产生方法 ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件 ECC 和软件 ECC 算法两种,在 S3C2410 的 Nand Flash 控制器中实现了由硬件电路(ECC 生 ...

  3. Nand Flash 控制器工作原理

    对 Nand Flash 存储芯片进行操作, 必须通过 Nand Flash 控制器的专用寄存器才能完成.所以,不能对 Nand Flash 进行总线操作.而 Nand Flash 的写操作也必须块方 ...

  4. NBIS指纹特征提取与匹配软件使用

    1. docker 创建虚拟centos 环境 2. docker 安装wget 工具 3.wget下载源代码 wget http://nigos.nist.gov:8080/nist/nbis/nb ...

  5. 以代码的方式管理quartz定时任务的暂停、重启、删除、添加等

    [前言]在项目的管理功能中,对定时任务的管理有时会很常见.因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢? ...

  6. JavaWeb读取资源文件的四种方式

    1. ServletContext 1. 调用getResourcesAsStream方法获取输入流, 相对于webroot, 不用加/2. 读取任何类型的文件3. *只能在web环境下使用 Inpu ...

  7. 2016.11.5初中部上午NOIP普及组比赛总结

    2016.10.29初中部上午NOIP普及组 这次比赛算是考的最差的一次之一了,当中有四分之三是DP. 进度: 比赛:没分+0+没分+40=40 改题:AC+0+没分+40=140 TurnOffLi ...

  8. duilib教程之duilib入门简明教程5.自绘标题栏

    如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理.如果用duilib,就是小case啦.    duilib其实并没有区分标题栏和 ...

  9. php curl的隐藏BUG

    <?php $a = array( 'a' => 2, 'b' => 3, ); $curl = curl_init(); $b = $a; curl_setopt_array($c ...

  10. Android基础控件RatingBar星级评分条的使用

    1.简介 RatingBar继承ProgressBar,除了ProgressBar的属性外还有特有属性: android:isIndicator:是否用作指示,用户无法更改,默认false andro ...