3.1 登录概述

image.png
如果不存在跨域问题,就用cookie和session维持登录状态
如果存在,就用token方式。

3.2 登录 —token原理分析

image.png

3.3 梳理项目结构

main.js是整个项目的入口文件
image.png

App.vue文件的结构
image.pngimage.png

创建Login.vue,写好UI,行为,css
然后再路由里面配置好路径。
最后去App.vue里面使用路由占位符。

在assets下新建css文件夹,新建global.css当做全局css文件

在main.js下要导入这个全局css

如何让一个盒子居中?

  1. <template>
  2. <div class="login_container">
  3. <div class="login_box"></div>
  4. </div>
  5. </template>
  6. <style lang="less" scoped>
  7. .login_container {
  8. background-color: #2b4b6b;
  9. height: 100%;
  10. }
  11. .login_box {
  12. width: 450px;
  13. height: 300px;
  14. background-color: #fff;
  15. border-radius: 3px;
  16. position: absolute;
  17. left: 50%;
  18. top: 50%;
  19. transform: translate(-50%, -50%);
  20. }
  21. </style>

让头像放在盒子的中上方,怎么放?

  1. <template>
  2. <div class="login_container">
  3. <div class="login_box">
  4. <div class="avatar_box">
  5. <img src="../assets/logo.png" alt="" />
  6. </div>
  7. </div>
  8. </div>
  9. </template>
  10. <style lang="less" scoped>
  11. // 省略上面盒子的代码
  12. .avatar_box {
  13. height: 130px;
  14. width: 130px;
  15. border: 1px solid #eee;
  16. border-radius: 50%;
  17. padding: 10px;
  18. box-shadow: 0 0 10px #ddd;
  19. position: absolute;
  20. left: 50%;
  21. transform: translate(-50%, -50%);
  22. background-color: #fff;
  23. img {
  24. width: 100%;
  25. height: 100%;
  26. border-radius: 50%;
  27. background-color: #eee;
  28. }
  29. }
  30. </style>

总结:调位置都是通过 position:absolution(left,right,top,bottom) transform: translate 来调的

Element UI

element ui 是按需导入,所以用到Form,FormItem的时候要手动导入。

plugins 已经在main.js里导入了,所以这个需要导入有关element的内容,直接在这里导入就可以了。

image.png

添加前后图标

image.png

  1. 赋值fonts文件夹到assets下
  2. 在main.js里导入这个模块
  3. 使用基类 图标名字来引用图标

数据绑定、表单验证

  1. v-bind:value=”test”
  2. :model
  3. v-model

vue一般自己new一个实例,然后通过el标签和前面html元素绑定。接下来就可以使用vue里的data数据。
image.pngimage.png

重置功能

image.png
image.png
image.png

表单验证函数(如果通过了发送请求)

image.png
image.pngimage.png

配置ajax请求

在main.js 把axios挂载到vue实例上
image.png

实现登录(await是为了简化返回结果。 data:res也是为了解构await简化后的结果(相当于又简化一次))

image.png

导入element-ui的 弹框提示组件

这个和前面的略微有些不同,这个组件需要挂载到vue原型上
image.png

image.png
存储token,并且通过路由跳转页面

image.png
挂载路由守卫,实现没有token返回登录页面

image.pngimage.png

两层for循环,渲染出侧边菜单栏
image.png

设置一二级菜单的图标
image.pngimage.png

侧边收起
image.pngimage.png

用户侧边栏连接改造

用index,并开启路由模式
image.png

设置卡片的长度和组件的间隙距离(el-row :gutter负责间隙)

image.png

把状态渲染成开关

image.png

分析添加用户、编辑用户、删除用户,数据验证逻辑

image.png
image.png
先说添加:

  1. 给模板区按钮 添加点击事件,实现显示添加面板。 是否显示添加面板数据在data区

行为区分成:data()数据区、生命周期函数created()、methods()方法。

image.pngimage.png

  1. 当 是否显示属性 改变后,会双向绑定到视图端。视图端的添加用户面板通过:visiable感知到变化,然后显示或隐藏自己

image.png

: visible指的是属性绑定,表示弹框的显示隐藏,当:visible的值为ture的时候,弹框显示,当为false的时候,弹框隐藏 后面的.sync是什么意思呢,指的就是同步动态双向的来表示visible的值,当我们关闭窗口的时候,这个弹框隐藏了,visible的值发生了变化,但是关闭窗口这个动作,我们没法用确定的动作去判断这个值,所以用到了vue中的双向绑定的原则,在vue中统一加上了.sync来表示同步的修改了visible的值。

  1. 添加面板里: @close=”关闭函数”、 :model、v-model和data()区里的对象属性双向绑定、 : rules用来绑定验证规则、ref这个面板对象的名字(以后可以用这个名字来指代这个面板)

image.png
关闭函数在method()里,关闭的时候重置 文本框里的值

image.png
addForm在data()区

image.png
addUser()在method()区

image.png
表单验证规则对象在 数据区,而且这里面又调用了数据区里的具体的验证规则。
image.png

为什么在项目中data需要使用return返回数据呢?

image.png
image.png

分页逻辑

image.png
当 size改变、或者当前页改变的时候 调用methods()区里的函数。
其他调用 数据区里的数据即可。
很简单,不说了

渲染一二三四级权限

image.png

打包

image.png