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

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

  1. import Vue from "vue";
  2. import Router from "vue-router";
  3. // 导入登录组件’
  4. import Login from './views/login/index.vue'
  5.  
  6. Vue.use(Router);
  7.  
  8. export default new Router({
  9. // mode: "history",
  10. //base: process.env.BASE_URL,
  11. routes: [
  12. {
  13. path: '/login',
  14. name: 'login', //路由名称
  15. component: Login //组件对象
  16. }
  17.  
  18. ]
  19. });

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

  1. <template>
  2. <div class="login-container">
  3. <bubbles-effect :options="options"></bubbles-effect>
  4. <el-form ref="form" :model="form" label-width="80px" class="login-form">
  5. <h2 class="login-title" style="center">后台管理系统登录</h2>
  6. <el-form-item label="账号" class="box">
  7. <el-input v-model="form.name"></el-input>
  8. </el-form-item>
  9. <el-form-item label="密码" class="box">
  10. <el-input v-model="form.password" type="password"></el-input>
  11. </el-form-item>
  12. <el-form-item>
  13. <el-button type="primary" @click="onSubmit">登录</el-button>
  14. <el-button class="cancle">取消</el-button>
  15. </el-form-item>
  16. </el-form>
  17.  
  18. </div>
  19.  
  20. <!-- <vue-canvas-nest></!-->
  21.  
  22. </template>
  23.  
  24. <script>
  25. import vueCanvasNest from "vue-canvas-nest";
  26. // import bubblesEffect from 'vue-canvas-effect'
  27.  
  28. export default {
  29. data() {
  30. return {
  31. form: {
  32. username: "",
  33. password: ""
  34. },
  35. options: {
  36. color: "rgba(225,225,225,0.5)", //Bubble color
  37. radius: 15, //Bubble radius
  38. densety: 0.3, // The larger the bubble density, the greater the density (suggest no more than 1).
  39. clearOffset: 0.2 // The larger the bubble disappears [0-1], the longer it disappears.
  40. }
  41. };
  42. },
  43. components: {
  44. vueCanvasNest
  45. // bubblesEffect
  46. },
  47. methods: {
  48. onSubmit() {
  49. console.log("submit!");
  50. }
  51. }
  52. };
  53. </script>
  54.  
  55. <style scoped>
  56. .login-form {
  57. width: 350px;
  58. /* 上下嫌隙 160px,左右自动居中 */
  59. margin: 160px auto;
  60. background-color: rgb(255, 255, 255, 0.8);
  61. padding: 28px;
  62. border-radius: 20px;
  63. /* border: solid 1px black; */
  64. box-shadow: 0 0 30px 3px rgba(119,118,118,0.33);
  65. }
  66.  
  67. .login-container {
  68. position: absolute;
  69. width: 100%;
  70. height: 100%;
  71. }
  72.  
  73. .login-title {
  74. color: #303133;
  75. text-align: center;
  76. }
  77.  
  78. .cancle {
  79. margin-left: 80px;
  80. }
  81.  
  82. .box {
  83. margin-left: 0px;
  84. }
  85. </style>

3、表单验证

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

在export的data中配置rules:

  1. rules: {
  2. username: [
  3. { required: true, message: '密码不能为空', trigger: 'blur' }
  4. ],
  5. password: [
  6. { required: true, message: '密码不能为空', trigger: 'blur' }
  7. ]
  8. },

配置methods:

  1. methods: {
  2. submitForm(formName) {
  3. //定位到表单,再进行校验
  4. this.$refs[formName].validate(valid => {
  5. // console.log(valid) //成功为true,失败为false
  6. if(valid){
  7. // 提交表单给后台进行验证是否正确
  8. }else{
  9. console.log('验证失败')
  10. return false
  11. }
  12. })
  13. },
  14. // onSubmit() {
  15. // console.log("submit!");
  16. // }
  17. // }
  18. }

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

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

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

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

  *  请求URL:/user/login

  *  请求方式:post

  *  描述: 登录认证

  *  mock.js 接口配置:

  1. {
  2. "code": 2000, //状态码
  3. "flag": true,
  4. "message": '验证成功',
  5. "data": {
  6. "token": "admin"
  7. }
  8. }

    ②通过token获取用户信息:

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

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

      *  请求方式:get

      *  描述:响应用户信息

      *  mock.js 配置

  1. {
  2. "code": 2000,
  3. "flag": true,
  4. "message": '成功获取用户信息',
  5. "data": {
  6. "id|1-10000": 1,
  7. "name": "@cname",
  8. "roles": ["manager"]
  9. }
  10. }

5、登录逻辑实现

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

  1. import request from '@/utils/request'
  2.  
  3. // 导出函数
  4. export function login(username, password) {
  5. return request({
  6. url: '/user/login',
  7. method: 'post',
  8. data: {
  9. username, //username: username
  10. password
  11. }
  12. })
  13. }
  14.  
  15. // 获取返回的用户信息
  16. export function getUserInfo(token) {
  17. return request({
  18. url: `/user/info/${token}`,
  19. method: 'get'
  20. })
  21. }

表单校验:

  1. methods: {
  2. submitForm(formName) {
  3. //定位到表单,再进行校验
  4. this.$refs[formName].validate(valid => {
  5. // console.log(valid) //成功为true,失败为false
  6. if(valid){
  7. // 提交表单给后台进行验证是否正确,then后面传入回调函数
  8. login(this.form.username,this.form.password).then(response => {
  9. const resp = response.data
  10. console.log(resp,resp.flag,resp.data.token)
  11. if (resp.flag) {
  12. // 当resp.flag为true时,表示验证成功
  13. // 通过token获取用户信息
  14. getUserInfo(resp.data.token).then(response => {
  15. const respUser = response.data
  16. console.log(respUser)
  17. if (respUser.flag){
  18. // 获取到用户的数据
  19. //成功
  20. console.log('userInfo',respUser.data)
  21. // 1.保存token,用户信息
  22. localStorage.setItem('msm-user', JSON.stringify(respUser.data))
  23. localStorage.setItem('msm-token', resp.data.token)
  24. // 前往首页
  25. this.$router.push('/')
  26. }else{
  27. this.$message.error(respUser.message);
  28. }
  29.  
  30. })
  31. }else {
  32. // 未通过,弹出警告
  33. this.$message.error(resp.message);
  34. }
  35. })
  36.  
  37. }else{
  38. console.log('验证失败')
  39. return false
  40. }
  41. })
  42. },
  43. // onSubmit() {
  44. // console.log("submit!");
  45. // }
  46. // }
  47. }

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. 第四周——重新clone项目后maven问题

    重新clone项目后,一直报错,"类重复..." clean后install也无效果. 原因是idea在重启项目时会更改maven为默认的idea自带的maven配置,要重新设置

  2. 【LGP5350】序列

    题目 可能\(\operatorname{fhq\ treap}\)能做,但是珂朵莉树显然更好写 珂朵莉树是个很玄学的东西啊,就是直接使用\(\operatorname{std::set}\)维护每一 ...

  3. Idea 2018.2.5创建springboot项目依赖包没有的错误

  4. more 和less 命令简单介绍以及使用

    一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...

  5. Nand flash 芯片工作原理

    Nand flash 芯片型号为 Samsung K9F1208U0B,数据存储容量为 64MB,采用块页式存储管理.8 个 I/O 引脚充当数据.地址.命令的复用端口. 芯片内部存储布局及存储操作特 ...

  6. 建立 CRAMFS 包

    下载 cramfs 工具 从 http://prdownloads.sourceforge.net/cramfs/cramfs­1.1.tar.gz下载源代码包. 把下载包拷贝到 dev_home/t ...

  7. nginx i.com.conf

    server { listen 9090; server_name i.com; root /Users/chong/Documents/www; # Load configuration files ...

  8. Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器

    前言 在Android里获取视频的信息主要依靠MediaMetadataRetriever实现 获取最佳视频预览图 所谓的最佳就是MediaMetadataRetriever自己计算的 /** * 获 ...

  9. sql.xml大于小于号处理的方法

    <if test="startTime != null and startTime != ''"> AND i_DataTime <![CDATA[ >= ...

  10. [POI2014]KAR-Cards

    题目链接: 传送门 题目分析: 线段树妙题,感觉思路奇奇怪怪的,虽然对我来说不是"线段树菜题"(\(ldx\)神仙\(blog\)原话)\(QAQ\) 考虑怎么样维护可合并的信息解 ...