6-项目左侧菜单栏显示

1、后台处理

查询主菜单和子菜单很简单,首先菜单类中要有自己的子类集合

然后,将菜单进行笛卡儿积查询两次,将查询后的结果进行如下筛选

m1.id=m2.parentId

m1.id!=1

m2.id in(这个根据一个个查询,最后查到该mid)

根据m1.id,m2.id 进行排序

select m1.`id`,m1.`path`,m1.`component`,m1.`iconCls`,m1.`name`,m1.`requireAuth`,m2.`component` as component2,m2.`iconCls` as iconCls2,m2.`keepAlive` as keepAlive2,m2.`name` as name2,m2.`path` as path2,m2.`requireAuth` as requireAuth2 from menu m1,menu m2 --笛卡尔积where m1.`id`=m2.`parentId`--查询父子关系and m1.`id`!=1  --去掉根节点and m2.`id` in(select mr.`mid` from hr_role h_r,menu_role mr where h_r.`rid`=mr.`rid` and h_r.`hrid`=#{hrId})--查询那个用户才具有该权限and m2.`enabled`=true order by m1.`id`,m2.`id` --进一步筛选、排序

2、前端处理

前端的处理稍微麻烦,为了想把后台传递来的json转化为Vue所需要的形状,所以要构建一个工具类来专门处理该过程

store中要定义一个数据来保存菜单数据

书写转换方法,转换后将数据保存到上面routes中,供后面调用

import {getRequest} from ‘./api‘
import {Message} from ‘element-ui‘
export const initMenu = (router, store)=> {
  if (store.state.routes.length > 0) {
    return;
  }

  getRequest("/config/sysmenu").then(resp=> {

    if (resp && resp.status == 200) {
      var fmtRoutes = formatRoutes(resp.data);
      router.addRoutes(fmtRoutes);
      store.commit(‘initMenu‘, fmtRoutes);
    }
  })
}

export const formatRoutes = (routes)=> {
  let fmRoutes = [];
  routes.forEach(router=> {
    let {
      path,
      component,
      name,
      meta,
      iconCls,
      children
    } = router;

    if (children && children instanceof Array) {
      children = formatRoutes(children);
    }

    let fmRouter = {
      path: path,
      component(resolve){
        if (component.startsWith("Home")) {
          require([‘../components/‘ + component + ‘.vue‘], resolve)
        } else if (component.startsWith("Emp")) {
          require([‘../components/emp/‘ + component + ‘.vue‘], resolve)
        } else if (component.startsWith("Per")) {
          require([‘../components/personnel/‘ + component + ‘.vue‘], resolve)
        } else if (component.startsWith("Sal")) {
          require([‘../components/salary/‘ + component + ‘.vue‘], resolve)
        } else if (component.startsWith("Sta")) {
          require([‘../components/statistics/‘ + component + ‘.vue‘], resolve)
        } else if (component.startsWith("Sys")) {
          require([‘../components/system/‘ + component + ‘.vue‘], resolve)
        }
      },
      name: name,
      iconCls: iconCls,
      meta: meta,
      children: children
    };
    fmRoutes.push(fmRouter);
  })
  return fmRoutes;
}

调用

面包栏中遇到的问题v-text="this.$router.currentRoute.name"来获取当前路由的名字

          <el-breadcrumb separator-class="el-icon-arrow-right">
            <el-breadcrumb-item :to="{ path: ‘/home‘ }">首页</el-breadcrumb-item>
            <el-breadcrumb-item v-text="this.$router.currentRoute.name">活动管理</el-breadcrumb-item>
          </el-breadcrumb>

至此,ok.

原文地址:https://www.cnblogs.com/gfbzs/p/12353261.html

时间: 2024-08-04 05:38:39

6-项目左侧菜单栏显示的相关文章

OA系统的左侧菜单栏的菜单项的处理

如图所示,OA系统的左侧是一个使用权限的菜单栏.根据权限来决定是否显示相应的权限功能. 在处理这类问题的时候,需要清楚左侧栏的数据是一进入系统内部后就一直要使用的.每个用户都要用到,而且也不需要对其进行增删改,并且也不准备修改左侧的权限菜单栏,所以,左侧栏的数据是固定不变的,不管谁进入系统内部都是一样的(这里的"一样的"不是说权限不同的人看到的内容是一样多的,指的是不管你权限多大多小,看到的内容肯定在这些内容以内,不会超出),所以,我们可以只对其查询一次,然后保存到applicatio

PHP系统左侧菜单栏的管理与实现

在日常的开发工作中,面对后台的日益增长的业务,以及后期业务的迭代开发,通常会选择添加菜单栏的形式来扩充业务功能,同样日益增长的后台菜单选项也为我们后期的维护,产生了一定的困难性.为此我总结出自己关于左侧菜单栏的管理模式或者方法.仅供参考. 在通常的开发中,对菜单栏的生成一般是通过以下几种方式: (1)模板文件对变量的遍历(接下来以thinkPHP5为例) (2)直接通过PHP进行组装 关于(2)直接通过PHP进行组装,不建议这样做,这样做会增大PHP代码与HTML的耦合与黏连,不利于代码的友好性

android(10) 左侧菜单栏

一.左侧菜单栏:     下载了一份源码,看见了这种效果,其实就是显示隐藏,以后肯定能用的到,稍微改了一下,加了点注释,所以记录一下(要代码的留下邮箱). 效果图: 主界面: public class MainActivity extends Activity implements MenuItemCallback { private MenuView rbmView; private Button button1; @Override protected void onCreate(Bundl

百度编辑器序号和项目符号不能显示解决

在做论坛.个人网站.办公OA,对于富文本编辑器的使用,业界使用最多.最好的应该是百度编辑器.在使用百度编辑器做富文本编辑,碰到序号.项目符号,在个性化页面展示不能显示的问题.简单分析下,将百度编辑器,编辑后的HTML存储,再用于个性化页面显示,对于指定序号和项目符号显示没有相关的样式.那解决起来就比较简单了,把相关的样式在个性化页面单独添加引用就可以了. 一.查看是什么样式: 二.个性化页面添加list-style-type样式 通过w3school 找到, list-style-type介绍,

intellj打开java项目后文件名显示红色

用intellj打开java项目后文件名显示红色 原因: 使用了版本控制工具导致 解决办法: 打开项目下的.idea文件夹,找到其中的vcs.xml打开,将<mapping directory="" vcs="" />中的vcs的值清空即可

visual studio 菜单栏显示异常 插件安装异常 扩展异常修复

这几天在使用Visual studio 的扩展插件的时候,遇见了菜单栏显示异常,解决方案显示异常的问题,如下: 经过自己的一顿摸索,解决方法如下,比如我在安装gitee或github插件之后就出现了这个问题: 先将其禁用,关闭VS,再打开VS 可以看到左边的菜单已经正常了,接下来重新启用插件,然后关闭VS,然后重启VS 这时可以看到,插件也正常了,然后菜单也正常了,不知道这是什么原因导致的BUG.直接修复整个VS也可以解决问题.

WebStorm设置左侧菜单栏背景色和样式

WebStrom一直以来都是默认的白色主题,今天想修改了下主题皮肤,结果导致左侧项目资源栏和顶部菜单栏也变成了黑色,结果无法改变回来,网上查了各种帖子,居然也没找到解决方法,自己研究了半天,终于搞定了,嘿嘿~ 网上大部分帖子貌似都是说在设置里面改,我找了半天也没有 最后在视图菜单下,有个快速切换方案里面找到了,哈哈,皇天不负有心人啊~~ 然后选择 4.切换外观与风格 选择对应的风格,原来默认的白色是:2.Ally. IDEA Theme

ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名

ABP默认的MVC启动模板在登录后, 右上角显示的是用户名: 如果想让它显示用户的姓名该如何做呢?这就需要用到ABP一个非常强大的功能------虚拟文件系统. 前期准备 使用ABP CLI创建一个名为AbpStudy的ASP.NET MVC项目: abp new AbpStudy 关于MVC的启动模板可以看文档, 这里就不赘述. 虚拟文件系统(VirtualFileSystem) 什么是虚拟文件系统(简称VFS)呢?来看一段官方文档的解释: 虚拟文件系统可以管理文件系统(磁盘)上实际不存在的文

QQ左侧滑动显示

对于新版的QQ界面,左侧增加了一个滑动效果,相信小伙伴们早已按耐不住激动的心情,这种效果是如何实现的呢?本篇我们就一起来探讨一二.既然是滑动效果这里就要使用到HorizontalScrollView类,一个水平滑动的效果. 对于这个效果我们可以分为一个Item Menu和Layout,通过对Item Menu设置padding值来隐藏和显示左侧的Menu菜单. 我们的Menu设计代码: <?xml version="1.0" encoding="utf-8"?