前端开发那些事儿每天学一点Vue3

2021-08-23 1.2 模块菜单

2021-08-23  本文已影响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"
    }
  ]
}

菜单的模板

  <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 实现功能,然后为了更好地保持状态,以及切换时的速度,做了一点修改,但是最后发现,有点麻烦,还不如来点简单粗暴的。

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

模块的各种表现形式

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读