vue实现三级页面跳转功能

 更新时间:2023年05月13日 11:41:46   作者:码到成功hy  
这篇文章主要介绍了vue实现三级页面跳转功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

问题描述:在二级页面点击按钮,打开新的标签页

实现:

在router目录下的index.js文件添加对应组件

{
    path: '/offices',
    component: <strong>'Layout'</strong><strong>,</strong>
    hidden: true,
    redirect: 'noRedirect',
    permission: 'sys:office:launch',
    meta: { title: '办公管理',roles: ['sys:office'] },
    children: [
      {
        path: '/flows',
        component: <strong>'/office/launch/flows'</strong><strong>,</strong>
        name: 'flows',
        hidden: true,
        meta: { title: '转正', activeMenu: '/office/launch' }
      },
    ]
  }

说明:上述黄色标记部分代码和以外自定义的component不一样,主要原因是自定义路由解析方法所致

修改store目录下permission.js

以下是之前定义的方法,该方法主要是生成从后端返回来的对应菜单的路由信息

export function filterAsyncRoutes(routes, roles) {
  const res = []
  routes.forEach(route => {
    const tmp = { ...route }
    if (hasPermission(roles, tmp)) {
      // 获取组件
      const component = tmp.component
      // 判断该路由使用组件
      if(route.component){
        // 判断是否是根组件
        if(component === 'Layout'){
          tmp.component = Layout
          tmp.redirect = 'noRedirect'
        }else{
          // 获取对应的具体组件信息
          tmp.component = (resolve) => require([`@/views${component}`],resolve)
        }
      }
      // 判断是否有子菜单
      if(tmp.children){
        const child = tmp.children
        child.forEach(e => {
          e.path = tmp.path + e.path
        })
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
       res.push(tmp)
    }
  })
  return res
}
const actions = {
  // 动态生成路由
  generateRoutes({ commit }, roles) {
    return new Promise((resolve,reject) => {
      getMenuList().then(res=>{
        let accessedRoutes;//存放对应权限的路由信息
        //如果状态码为200,则表示成功
        if(res.code === 200){
          accessedRoutes = filterAsyncRoutes(res.data, roles)
        }
        //将路由信息保存到store中
        commit("SET_ROUTES",accessedRoutes);
        resolve(accessedRoutes);
      }).catch(error=>{
        reject(error);
      });
    })
  }
}

修改之后的方法

export function filterAsyncRoutes(routes, roles, <strong>type = false</strong>) {
  const res = []
  routes.forEach(route => {
    const tmp = { ...route }
    if (hasPermission(roles, tmp)) {
      // 获取组件
      const component = tmp.component
      // 判断该路由使用组件
      if(route.component){
        // 判断是否是根组件
        if(component === 'Layout'){
          tmp.component = Layout
          tmp.redirect = 'noRedirect'
        }else{
          // 获取对应的具体组件信息
          tmp.component = (resolve) => require([`@/views${component}`],resolve)
        }
      }
      // 判断是否有子菜单
      if(tmp.children){
        const child = tmp.children
        child.forEach(e => {
          e.path = tmp.path + e.path
        })
        tmp.children = filterAsyncRoutes(tmp.children, roles, false)
      }
      if(type && roles.includes(tmp.permission) || tmp.permission === 'all'){
        res.push(tmp)
      }else if(!type){
        res.push(tmp)
      }
    }
  })
  return res
}
const actions = {
  // 动态生成路由
  generateRoutes({ commit }, roles) {
    return new Promise((resolve,reject) => {
      getMenuList().then(res=>{
        let accessedRoutes;//存放对应权限的路由信息
        //如果状态码为200,则表示成功
        if(res.code === 200){
          accessedRoutes = filterAsyncRoutes(res.data, roles, false)
          // asyncRoutes 该参数就是上面添加的路由信息
          accessedRoutes = accessedRoutes.concat(filterAsyncRoutes(asyncRoutes,roles,true))
        }
        //将路由信息保存到store中
        commit("SET_ROUTES",accessedRoutes);
        resolve(accessedRoutes);
      }).catch(error=>{
        reject(error);
      });
    })
  }
}

黄色部分就是新增部分

修改面包屑和标签名

title: view.query && view.query.metaTitle?view.query.metaTitle:(view.meta.title || 'no-name')

相关文章

  • vue router自动判断左右翻页转场动画效果

    vue router自动判断左右翻页转场动画效果

    最近公司项目比较少终于有空来记录一下自己对vue-router的一些小小的使用心得,本文给大家分享vue router自动判断左右翻页转场动画效果,感兴趣的朋友一起看看吧
    2017-10-10
  • 解决vue-seamless-scroll滚动加点赞衔接处数据不同步问题

    解决vue-seamless-scroll滚动加点赞衔接处数据不同步问题

    这篇文章主要介绍了解决vue-seamless-scroll滚动加点赞衔接处数据不同步问题,初步判断可能是因为下方悬接vue-seamless-scroll是静态的,没同步DOM,本文给大家分享解决方法,感兴趣的朋友一起看看吧
    2021-11-11
  • Vue用Export2Excel导出excel,多级表头数据方式

    Vue用Export2Excel导出excel,多级表头数据方式

    这篇文章主要介绍了Vue用Export2Excel导出excel,多级表头数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 讨论vue中混入mixin的应用

    讨论vue中混入mixin的应用

    这篇文章主要介绍了vue中混入mixin的理解和应用,对vue感兴趣的同学,可以参考下
    2021-05-05
  • Vue.js快速入门实例教程

    Vue.js快速入门实例教程

    vue是法语中视图的意思,Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。这篇文章主要介绍了Vue.js快速入门实例教程的相关资料,需要的朋友可以参考下
    2016-10-10
  • Vue中组件(Component)和插件(Plugin)的区别及说明

    Vue中组件(Component)和插件(Plugin)的区别及说明

    这篇文章主要介绍了Vue中组件(Component)和插件(Plugin)的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • axios异步提交表单数据的几种方法

    axios异步提交表单数据的几种方法

    这篇文章主要给大家介绍了关于axios异步提交表单数据的几种方法,文中通过示例代码介绍的非常详细,对各位大家学习或者使用axios具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • vue实现前端按钮组件权限管理

    vue实现前端按钮组件权限管理

    这篇文章主要为大家介绍了vue实现前端按钮组件权限管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • vue前端导出多级表头的excel表的示例代码

    vue前端导出多级表头的excel表的示例代码

    本文主要介绍了vue前端导出多级表头的excel表的示例代码,可以使用xlsx库来创建Excel文件,下面就来具体介绍一下,感兴趣的可以了解一下
    2024-06-06
  • vue+element tabs选项卡分页效果

    vue+element tabs选项卡分页效果

    这篇文章主要为大家详细介绍了vue+element tabs选项卡分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09

最新评论