代码拉取完成,页面将自动刷新
功能/流程:vue+elememtui
****在请求接口数据之前必须按照文档的要求:"需要授权的 API ,必须在请求头中使用 `Authorization` 字段提供 `token` 令牌"(login的时候保存的token令牌)
来设置axios请求拦截器:(请求接口数据,服务器会判断Authorization是否符合要求,不符合就会驳回此次请求)
在mian.js中: axios.interceptors.request.use(config=>{ //config就是请求对象
config.headers.Authorization=window.sessionStorage.getItem('token')
//最后必须retrun
return config
})
1.login.vue 登录功能:
1.1: // 路由重定向 在根路径时跳转login
{path:'/',redirect:'login'}
1.2: 表单数据验证:username password
1.3: 重置按钮 (使用了ref=’loginFromRef‘的实例对象的resetFields方法)
this.$refs.loginFromRef.resetFields()
1.4:登录按钮登陆前的预验证(vavliddate()方法)
this.$refs.loginFromRef.validate(bool=>{
if(!bool) return
})
1.5:根据预验证的结果是否发送请求
发送请求 :this.$axios.post('/login',this.login_form) //login_form参数是对象{用户名 密码}
###得到的结果是个promise,用async await解决
判断返回数据的状态码是不是200,相应相应的消息提示(this.$message({message:'登录失败',type:'err'}))
1.6:登录成功后保存到token
window.sessionStorage.setItem('token',res.data.data.token) //键:'token' ,值:res.data.data.token
1.7:最后跳转主页面/home
this.$router.push('/home')
2.路由守卫控制访问权限:(在router页面配置)
router.beforeEach((to,from,next)=>{
//to:将要访问的路径;from:从哪个路径来;
//next是一个函数,表示发行: next()放行 next('/login') 强制跳转'/login'
if(to.path==='/login'){return next()} //如果去登录页,直接放行
let tokenStr=window.sessionStorage.getItem('token')
if(!tokenStr){return next('/login')}else{next()} //没有token就是没有登陆,就跳转登录页
})
3.退出登录功能:
//清空token 跳转/login
window.sessionStorage.clear()
this.$router.push('/login')
主页面:/home
1.左侧菜单栏 数据获取
外循环显示一级菜单,内循环显示二级子菜单
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。