git
创建一个新的分支(每开发一个新功能,最好新建一个分支,开发完了以后再合并到主分支上面)git checkout -b login
,创建子分支login
,并且切换到该分支上git branch
login
组件当作重定向的组件,即:const routes = [
{path:'/', redirect: '/login'},
{path:'/login', component: Login}
]
global.css
,然后在入口文件main.js
中引入全局样式import '路径'
//引入全局样式文件
import '@/assets/css/global.css'
login
的正中间布局一个盒子element-ui
插件(安装完以后,别忘了在main.js
中引入,否则报错)el-form、el-form-item
组件,其中可以把两个按钮组件el-button
也放在组件el-form-item
中如果把
el-form
的宽度设置为100%
,然后在来个padding
,把输入框挤进去,发现右边的输入框会超出,原因是form
表单默认是content-box
,解决办法:改为border-box
即可。
在输入框中图标,用elementui
中输入框的属性加图标,而不要用加标签
的方法。即可以通过prefix-icon
和suffix-icon
属性在input
组件首部和尾部增加显示图标,也可以通过slot
来放置图标。
- 把下载的
font
文件夹放入资源目录assets
下- 在入口文件
main.js
中导入字体图标import '@/assets/fonts/iconfont.css'
- 使用:先添加基类
iconfont
,然后添加想要的图标的类名
instance.interceptors.request.use(config =>{
config.headers.Authorization = window.sessionStorage.getItem('token')
return config
})
validate
,校验输入框内容是否合法this.$refs.loginFormRef.validate(回调函数)
token
,保存到客户端的sessionStorage
中;token
只应在当前网站打开期间生效,所以将 token
保存在sessionStorage
中login(){
this.$refs.loginFormRef.validate(async valid =>{
if(!valid) return
const {data} = await requestLoginData({params:this.loginForm})
if(data.meta.status === 200){
this.$message.success('登录成功')
window.sessionStorage.setItem('token',data.data.token)
this.$router.push('/home')
}else{
this.$message.error('您输入的用户或者密码不正确')
}
})
router.beforeEach((to, from, to) =>{
if(to.path == '/login') return next();
const token = window.sessionStorage.getItem('token')
if(!token){
return next('/login')
}
next()
})
element
中自带的方法resetFields
preSet(){
this.$refs.loginFormRef.resetFields()
}
git status
git add
git commit -m "完成了登录功能"
git branch
git checkout master
git merge login
git push
master
推送到云端,如果想把login
分支也推送到云端,则需
login
分支git push -u origin login
<el-container>
<el-header>Header</el-header>
<el-container>
<el-aside>Aside</el-aside>
<el-main>Main</el-main>
</el-container>
</el-container>
头部中的退出功能实现
主要任务:点击退出后,因为是基于token
方式的登录,所以只需销毁本地token
即可。这样,后续的请求就不会携带token
,必须重新登录才能产生新的token
,再访问页面。
其中,销毁本地token
的语法为:window.sessionStorage.clear()
侧边栏区域的实现
el-aside
动态绑定宽度,而不是给el-menu
动态绑定。
el-meun、el-submenu
添加overflow:hidden
都可以。main
中展示Welcome
Welcome
组件{
path:'/home',
component: Home,
redirect: '/welcome',
children:[
{
path:'/welcome',
component: Welcome
}]
}
main
中设置路由占位符
path
信息,配置main
中的路由跳转。需要注意的是:路由中的path
信息要和返回数据中的path
要一致menu-item
也处于激活状态?在
menu
中有个属性:default-active
,保存的就是当前激活菜单的index
,也就是想要菜单中的某一项处于高亮激活状态,那就把那一项index
的值赋值给default-active
。
在点击某一个菜单后,就把当前菜单的index
存储进sessionStorage
中,刷新页面后,再把保存的值赋值给default-active
1. 给二级菜单都绑定一个单击事件
2. 注意一下是否要加'/'
的问题
3. 通过传递参数的形式,把当前激活菜单的path
存储进sessionStorage
中
4. 在生命周期函数create
中,获取sessionStorage
中的激活路径并赋值
5. 最后再把再次点击菜单的激活路径进行更新赋值,实现高亮效果的切换
<template slot-scope="scope">
</template>
el-switch
自带的change
事件v-model
值可以设置为:发送网络请求时,传递的参数query
,然后可以给输入框添加clearable
属性,紧接着就可以添加clear
事件,且事件响应函数都是网络请求函数getUserData
,这样就可以很快速的实现搜索
和清除输入框
的功能。v-model
的值绑定为发送网络请求时的参数data
中定义规则变量,注意是写在return
的上面// 验证邮箱的规则
var checkEmail = (rule, value, cb) => {
// 验证邮箱的正则表达式
const regEmail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
if (regEmail.test(value)) {
// 合法的邮箱
return cb()
}
cb(new Error('请输入合法的邮箱'))
}
// 验证手机号的规则
var checkMobile = (rule, value, cb) => {
// 验证手机号的正则表达式
const regMobile = /^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/
if (regMobile.test(value)) {
return cb()
}
cb(new Error('请输入合法的手机号'))
}
email:[
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' },
{validator: checkEmail, trigger: 'blur'}
],
mobile:[
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' },
{validator: checkMobile, trigger: 'blur'}
]
Dialog
对话框后,输入框中的数据要重置
Dialog
添加自带的close
事件函数Form
表单设置的ref
,在调用resetFields
方法,实现表单的重置Dialog
对话框里面的确定
按钮添加预校验,然后在发送网络请求,添加用户this.$refs.userDialogRef.validate(valid =>{
//首先判断是否校验通过
//如果通过了,才发送网络
})
Dialog
对话框在关闭后,也要进行重置表单方法的调用,这个时候的重置,不是重置表单信息,而是重置验证规则,它和添加用户信息的Dialog
里面的表单重置不一样。elementUI
中的弹框提示组件Message Box
,或者与其说是个弹框组件,不如说是个方法的调用
的expand
属性,就可以实现在表格中新建一个展开列Layout
布局实现的,并没有使用现成的组件,因为没有组件可用
- 先用作用域插槽获取当前行的数据(template)
- 然后就是一个行标签
el-row
,并在此标签上通过v-for
循环,渲染一级权限数据- 行标签
el-row
中有两列- 第一个列标签
el-col
中渲染出具体的数据- 第二个列标签
el-col
中,里面又嵌套了一个行标签el-row
- 第二个行标签
el-row
中又有两个列标签,通过在第二个行标签el-row
中通过v-for
的形式渲染数据- 第一个列标签
el-col
中渲染出具体的数据,即二级权限的数据- 第二个列标签
el-col
中,放的是el-tag
标签,并且直接在改标签上通过v-for
的形式渲染出三级权限的数据
el-tag
标签添加属性closable
,这样就能实现el-tag
标签的删除图标el-tag
标签的删除图标后,弹出MessageBox
弹框,并用于显示是否确认删除该权限el-tag
标签添加上边框线、下边框线的过程中,使用了动态绑定类名、类名数组以及三元表达式判断是否添加类名el-tag
标签居中,也是通过动态绑定类名实现的。