­

Element NavMenu 无限级菜单

  • 2020 年 2 月 17 日
  • 笔记

数据结构 

menudata.json

{"data":[      {         "id": 1,          "path": "/home",          "menuName": "商业数据统计",          "component": "Home",          "childMenu":[{            "id": 2,            "path": "/commercial/dataAccount/Day",            "menuName": "日统计1",            "component": "DataAccountDay"          },          {            "id": 3,            "path": "/commercial/dataAccount/Month",            "menuName": "月统计1",            "component": "DataAccountMonth"          }]        },        {          "id": 4,          "path": "/home",          "menuName": "商业报表中心",          "component": "Home",          "childMenu":[{            "id": 5,            "path": "/commercial/baobiao/Day",            "menuName": "日报表1",            "component": "BaobiaoDay"          },          {            "id": 6,            "path": "/commercial/baobiao/Month",            "menuName": "月报表1",            "component": "BaobiaoMonth"          }]        }      ]}

Home.vue

<template>    <div>      <el-container :style="{height: containerHeight, border: '1px solid #eee'}" id="con">        <el-header style="background:#3c8dbc;">          header        </el-header>          <el-container>          <el-aside width="230px">            <el-menu              router              :default-active="routePath"              unique-opened              background-color="#1f3146"              text-color="#32acca"              active-text-color="#ffd04b"            >              <NavMenu :navMenus="menuData"></NavMenu>            </el-menu>          </el-aside>          <el-container>            <el-main>              <router-view></router-view>            </el-main>            <el-footer>              footer            </el-footer>          </el-container>        </el-container>      </el-container>    </div>  </template>    <script>  import NavMenu from "@/components/NavMenu.vue";  export default {    data() {      return {        containerHeight: "",        menuData: [],        routePath:"",        currentModuleChinese:"",        user: window.sessionStorage.getItem("user")      };    },    created() {      this.$axios.get("/mock/menudata + ".json").then(res => {-        this.menuData = res.data.data;      });    },    components: { NavMenu },    // watch:{    //  $route(){    //    console.log(this.$route.path)    //    this.routePath = this.$route.path    //  }    // },    mounted() {      console.log("mounted")      this.containerHeight = window.innerHeight + "px";      console.log($)      $(window).resize(function() {        console.log("hi")        $("#con").height($(window).height()-2);      });    }  };  </script>    <style>  .el-header {    background-color: #377fa9;    color: #fff;    height: 50px !important;    line-height: 50px !important;  }    .el-header .left img {    width: 120px;    vertical-align: middle;  }  .el-header .left span {    font-size: 20px;    color: #edf8ff;    margin-left: 15px;  }  .el-header .right {    float: right;  }  .el-header .right a {    color: #fff;  }  .el-aside {    /* color: #32acca !important; */    background: #1f3146 !important;  }  .el-menu {    border-right: none !important;    /* background: #1f3146 !important; */  }  .el-footer {    background: gray;    height: 40px !important;    line-height: 40px !important;  }  .el-footer {    border-top: 1px solid #ccc;    background: #f8fafd;    padding: 10px;    margin-left: 0;  }  .el-footer img {    vertical-align: middle;    width: 65px;    margin-right: 10px;  }  </style>

NavMenu.vue

<template>    <div>      <template v-for="(item,index) in navMenus">        <!-- 含有子菜单 -->        <el-submenu v-if="item.childMenu && item.childMenu.length>0" :key="index" :index="index+''">          <template slot="title">            <i class="el-icon-setting"></i>            <!-- <img :src="item.info.picUrl" alt=""> -->            <span>{{item.menuName}}</span>          </template>          <NavMenu :navMenus="item.childMenu"></NavMenu>        </el-submenu>        <!-- 最后一级 -->        <el-menu-item v-else :key="index" :index="item.path">{{item.menuName}}</el-menu-item>      </template>    </div>  </template>