<template>
  <!-- 如果菜单有子菜单且数量大于等于1，则显示为子菜单 -->
  <el-submenu v-if="menu.list && menu.list.length >= 1" :index="menu.menuId + ''">
    <!-- 子菜单标题 -->
    <template slot="title">
      <span>{{ menu.name }}</span> <!-- 显示菜单名称 -->
    </template>
    <!-- 递归渲染子菜单 -->
    <sub-menu
      v-for="item in menu.list" <!-- 遍历子菜单列表 -->
      :key="item.menuId" <!-- 设置唯一标识符 -->
      :menu="item" <!-- 传递当前子菜单数据 -->
      :dynamicMenuRoutes="dynamicMenuRoutes" <!-- 传递动态路由数据 -->
    ></sub-menu>
  </el-submenu>
  <!-- 如果没有子菜单，则显示为普通菜单项 -->
  <el-menu-item v-else :index="menu.menuId + ''" @click="gotoRouteHandle(menu)">
    <span>{{ menu.name }}</span> <!-- 显示菜单名称 -->
  </el-menu-item>
</template>

<script>
import SubMenu from "./IndexAsideSub"; // 导入子菜单组件

export default {
  name: "sub-menu", // 定义组件名称
  props: {
    menu: { // 定义菜单数据的属性
      type: Object, // 数据类型为对象
      required: true // 必须传入
    },
    dynamicMenuRoutes: { // 定义动态路由数据的属性
      type: Array, // 数据类型为数组
      required: true // 必须传入
    }
  },
  components: {
    SubMenu // 注册子菜单组件
  },
  methods: {
    // 跳转到指定路由的方法
    gotoRouteHandle(menu) {
      var route = this.dynamicMenuRoutes.filter( // 过滤动态路由，匹配当前菜单的menuId
        item => item.meta.menuId === menu.menuId
      );
      if (route.length >= 1) { // 如果找到匹配的路由
        if (route[0].component != null) { // 如果路由有对应的组件
          this.$router.replace({ name: route[0].name }); // 替换路由到指定名称的页面
        } else { // 如果路由没有对应的组件
          this.$router.push({ name: "404" }); // 跳转到404页面
        }
      }
    }
  }
};
</script>
