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 相关文章推荐
基于jQuery的360图片展示实现代码
Jun 14 Javascript
JQuery的$命名冲突详细解析
Dec 28 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
jQuery实现点击水纹波动动画
Apr 10 Javascript
微信小程序 数据访问实例详解
Oct 08 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
JS传参及动态修改页面布局
Apr 13 Javascript
React 实现拖拽功能的示例代码
Jan 06 Javascript
微信小程序实现渐入渐出动画效果
Jun 13 Javascript
js在HTML的三种引用方式详解
Aug 29 Javascript
vue修饰符.capture和.self的区别
Apr 22 Vue.js
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数组应该有多大的分析
2009/07/30 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
Python新手实现2048小游戏
2015/03/31 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python语言异常处理测试过程解析
2020/01/08 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
数据库测试通常都包括哪些方面
2015/11/30 面试题
为什么需要版本控制?
2013/08/08 面试题
经理职责范文
2013/11/08 职场文书
异地年检委托书范本
2014/09/24 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python