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 相关文章推荐
js中生成map对象的方法
Jan 09 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
ExtJS4 表格的嵌套 rowExpander应用
May 02 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
Mar 04 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
Jun 12 Javascript
创建一般js对象的几种方式
Jan 19 Javascript
vue-router跳转页面的方法
Feb 09 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
Aug 25 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 Javascript
jQuery 选择器用法基础入门示例
Jan 04 jQuery
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
Zend公司全球首推PHP认证
2006/10/09 PHP
PHP文件下载类
2006/12/06 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
php命令行用法入门实例教程
2014/10/27 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
小程序实现列表倒计时功能
2021/01/29 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python中使用Inotify监控文件实例
2015/02/14 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
python版本的读写锁操作方法
2016/04/25 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python实现飞机大战游戏
2020/10/26 Python
谈谈python垃圾回收机制
2020/09/27 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
社区班子对照检查材料
2014/08/27 职场文书
团结友爱主题班会
2015/08/13 职场文书
一文搞懂Java中的注解和反射
2022/06/21 Java/Android