2021-08-23 1.2 模块菜单

作者: 自然框架 | 来源:发表于2021-08-23 19:16 被阅读0次

后台管理,一般需要一个菜单导航,有横向的,也有纵向的。如果项目非常复杂,可以把一级模块做成横向的导航,然后二级和三级模块做成纵向的导航。

菜单的 meta

参考 el-menu 的属性,我们可以设计一个这样的结构:

{
  "title": "演示项目",
  "menu": [
    {
      "id": 100,
      "parentId": 0,
      "title": "系统管理",
      "componentKind": "group",
      "icon": "el-icon-location"
    },
    {
      "id": 101,
      "parentId": 0,
      "title": "支持平台",
      "kind": "group",
      "componentKind": "group",
      "icon": "el-icon-location"
    },
    {
      "id": 120,
      "moduleFlag": "120-role",
      "parentId": 100,
      "title": "角色管理",
      "componentKind": "list",
      "icon": "el-icon-location"
    },
    {
      "id": 121,
      "moduleFlag1": "121-log",
      "parentId": 100,
      "title": "操作日志",
      "componentKind": "list",
      "icon": "el-icon-location"
    },
    {
      "id": 122,
      "moduleFlag1": "122-log",
      "parentId": 100,
      "title": "变更日志",
      "componentKind": "list",
      "icon": "el-icon-location"
    }
  ]
}
  • title
    因为 json 文件不能写注释,但是不写点啥有不容易看出来这个json是干啥的,所以就加了这个 title,说明一下这个json 是做啥用的。

  • menu
    存放菜单需要的属性,这里没有采用 “套娃”的方式,而是采用关系型数据库的 parentID 的形式,还是感觉这样方便一些。

  • menu.title
    菜单的标题。

  • menu.componentKind
    指的是要加载的组件的key,为了便于扩展,把需要加载的组件做成异步组件,做成 key-value 的形式,这里记录 key,然后就可以按照key动态加载组件了。

菜单的模板

  <el-menu
    ref="domMenu"
    :default-active="index"
    class="el-menu-vertical-demo"
    @select="select"
    @open="handleOpen"
    @close="handleClose"
  >
    <el-submenu
      v-for="item in menu.filter(a => a.parentId===0)"
      :key="'menu_' + item.id"
      :index="item.id"
    >
      <template #title>
        <i :class="item.icon"></i>
        <span>{{item.title}}</span>
      </template>
      <el-menu-item-group>
        <el-menu-item
          v-for="item2 in menu.filter(a => a.parentId===item.id)"
          :key="'submenu_' + item2.id"
          :index="item2.id"
        >{{item2.title}}
        </el-menu-item>
      </el-menu-item-group>
    </el-submenu>
  </el-menu>

一般做成二级菜单就可以了,所以代码也比较方便,写死二级就好。
先 v-for 出来第一级菜单,然后用 parentID 过滤出来二级菜单,两层 v-for 搞定。

原来使用 vue 的路由 router 实现功能,然后为了更好地保持状态,以及切换时的速度,做了一点修改,但是最后发现,有点麻烦,还不如来点简单粗暴的。

于是就做成了这样。于是无奈,还得自己做个路由。

模块的各种表现形式

编辑模块的时候希望有一个树状的表格,这样便于维护。

选择模块的时候,希望有一个可以递进的下拉列表,或者级联形式,那么就需要做一下结构转换。

我们可以写个函数来实现。

整理了一天的代码,进度基本原地没动。但是不整理又不行。。。

相关文章

  • 2021-08-23 1.2 模块菜单

    后台管理,一般需要一个菜单导航,有横向的,也有纵向的。如果项目非常复杂,可以把一级模块做成横向的导航,然后二级和三...

  • Unity 中文指导手册

    目录 3D模块篇 第一章Unity5界面介绍 1.1工具栏 1.2菜单栏 1.3项目(Project)视图 1.4...

  • ABP 增加菜单

    ABP支持模块化开发,每个模块都可能有自己的菜单,这些菜单需要在模块内部进行维护,调用模块的项目只需要通过Menu...

  • nginx的location规则和LNMP部署

    一、nginx状态模块及权限控制补充 1.2 nginx状态模块 通过监控软件查看nginx的状态 1.2 权限控...

  • Linux运维-day48/49-综合架构-nginx的loca

    一、nginx状态模块及权限控制补充 1.2 nginx状态模块 通过监控软件查看nginx的状态 1.2 权限控...

  • Python 面向对象 9: 模块和包

    一、内容总览 1.1、模块 1.2、包 1.3、发布模块 二、模块 2.1、模块的概念:模块是 Python 程序...

  • ansible 常用模块及应用

    1. 命令类型模块 1.1 command 模块 1.2 shell 模块 1.3 scripts模块 2. 文件...

  • Building a Process Model-Using t

    | 鼠标右键菜单 (在MIMO模块上) | | | Block Properties…(模块属性)–打开...

  • 常用库

    核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4...

  • python常用模块简记

    python常用模块简记 1.1. 核心模块 1.2. _ builtin _ 模块 1.3. excepti...

网友评论

    本文标题:2021-08-23 1.2 模块菜单

    本文链接:https://www.haomeiwen.com/subject/mzknbltx.html