vue vuex vue-rouert后台项目——权限路由(适合初学)


Posted in Javascript onDecember 29, 2017

项目地址: vue-simple-template

共三个角色:adan barbara carrie 密码全是:123456

adan 拥有 最高权限A 他可以看到 red , yellow 和 blue 页面(共三个页面)

barbara 拥有 权限B 他可以看到 red 和 yellow 页面

carrie 拥有 权限C 他可以看到 red 和 blue 页面

vue vuex vue-rouert后台项目——权限路由(适合初学)

技术栈

webpack ---- 打包神器
vue ---- JavaScript 框架
vuex ---- 实现不同组件间的状态共享
vue-router ---- 页面路由
babel-polyfill ---- 将ES6代码转为ES5代码
normalize.css ---- 重置掉该重置的样式
element-ui ---- UI组件库

项目初始化

# cd 到项目文件夹
cd weven-simple-template
# 安装依赖 (本项目还安装了其他依赖详情 请见 package.json 文件)
npm install
# 运行项目
npm run dev

项目结构

vue-cil 脚手架初始化项目后,我只修改过src文件夹

src
├── App.vue  ---- 页面入口
├── api  ---- api请求
│ └── login.js ---- 模拟json对象数据
├── assets  ---- 主题 字体等静态资源
│ └── logo.png
├── components ---- 组件
│ ├── index.vue
│ └── login.vue 
├── main.js  ---- 初始化组件 加载路由
├── router  ---- 路由
│ └── index.js
└── store  ---- vuex状态管理
 ├── getters.js
 ├── index.js
 └── modules
 └── login.js

重点:

动态路由的关键在于router配置的 meta字段 和vuex的 状态共存 (不懂可以先查看官方文档)

router/index.js

// 初始化路由
export default new Router({ 
 routes: [
 {
 path: '/login',
 name: 'Login',
 component: Login
 }
 ] 
});
// 动态路由 meta 定义了role
export const powerRouter =[ 
 { path: '/',redirect:'/red', name: 'index',component: Index,hidden:false,
 children: [
 { path: '/red', name: 'red', component: red,},
 { path: '/yellow', name: 'yellow', component: yellow, meta: {role: 'B'}},
 { path: '/blue', name: 'blue', component: blue, meta: {role: 'C'}}
 ]
 }
];

store/modules/lo

Logins({ commit }, info){
  return new Promise((resolve, reject) => {
  let data={};
  loginByUserInfo.map(function (item) { //获取所以用户信息
   if(info.username === item.username || info.pew === item.pew){
   commit('SET_USERNAME',item.username); //将username和role进行存储
   sessionStorage.setItem('USERNAME', item.username); //存入 session 
   commit('SET_ROLE',item.role);
   sessionStorage.setItem('ROLE', item.role);
   return data={username:item.username,introduce:item.introduce};
   }else{
   return data;
   }
  }); 
  resolve(data);
 }).catch(error => {
  reject(error);
 });
 },
 Roles({ commit }, newrouter){
 return new Promise((resolve, reject) => {
  commit('SET_NEWROUER',newrouter); //存储最新路由
  resolve(newrouter);
 }).catch(error => {
  reject(error);
 });
 },

gin.js  actions部分

Logins({ commit }, info){
  return new Promise((resolve, reject) => {
  let data={};
  loginByUserInfo.map(function (item) { //获取所以用户信息
   if(info.username === item.username || info.pew === item.pew){
   commit('SET_USERNAME',item.username); //将username和role进行存储
   sessionStorage.setItem('USERNAME', item.username); //存入 session 
   commit('SET_ROLE',item.role);
   sessionStorage.setItem('ROLE', item.role);
   return data={username:item.username,introduce:item.introduce};
   }else{
   return data;
   }
  }); 
  resolve(data);
 }).catch(error => {
  reject(error);
 });
 },
 Roles({ commit }, newrouter){
 return new Promise((resolve, reject) => {
  commit('SET_NEWROUER',newrouter); //存储最新路由
  resolve(newrouter);
 }).catch(error => {
  reject(error);
 });
 },

main.js

router.beforeEach((to, from, next) => {
 if(store.getters.role){ //判断role 是否存在
 
 if(store.getters.newrouter.length !== 0){ 
  next() //resolve 钩子
 }else{
  let newrouter
  if (store.getters.role == 'A') { //判断权限
  newrouter = powerRouter
  } else {
  let newchildren = powerRouter[0].children.filter(route => {
   if(route.meta){
   if(route.meta.role == store.getters.role){
    return true
   }
   return false
   }else{
   return true
   }
  });
  newrouter = powerRouter
  newrouter[0].children = newchildren
  }
  router.addRoutes(newrouter) //添加动态路由
  store.dispatch('Roles',newrouter).then(res => { 
  next({ ...to })
  }).catch(() => { 

  })
 } 
 }else{
  if (['/login'].indexOf(to.path) !== -1) { 
  next()
 } else {
  next('/login')
 }
 }
})

components/index.vue

// mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性
...mapGetters([
 'newrouter'
 ])

此项目拿去 捋清楚 vue+vuex+vue-router 的关系是没问题的,这可以说的超级简单的版本,适合初学。上面的内容说的重点,其实也算是项目的全部啦

项目地址: vue-simple-template

总结

以上所述是小编给大家介绍的vue vuex vue-rouert后台项目——权限路由(适合初学),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
jquery.validate使用攻略 第二部
Jul 01 Javascript
javascript 伪数组实现方法
Oct 11 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
js中document.write的那点事
Dec 12 Javascript
直接拿来用的15个jQuery代码片段
Sep 23 Javascript
深入理解node exports和module.exports区别
Jun 01 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
Jul 06 Javascript
图解prototype、proto和constructor的三角关系
Jul 31 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 Javascript
基于input框覆盖掉数字英文的实例讲解
Jul 21 Javascript
vue配置接口域名方法总结
May 12 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
Dec 29 #Javascript
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 #Javascript
Angular实现点击按钮控制隐藏和显示功能示例
Dec 29 #Javascript
js实现手机web图片左右滑动效果
Dec 29 #Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
Dec 29 #Javascript
浅谈react-router HashRouter和BrowserRouter的使用
Dec 29 #Javascript
javaScript 连接打印机,打印小票的实例
Dec 29 #Javascript
You might like
PHP文本数据库的搜索方法
2006/10/09 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
实例讲解JavaScript截取字符串
2018/11/30 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
《燕子专列》教学反思
2014/02/21 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
Django框架中视图的用法
2022/06/10 Python