index.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <el-menu
  3. class="el-menu-demo el-menu--horizontal el-menu"
  4. :default-active="$route.path"
  5. background-color="rgb(4,12,11)"
  6. text-color="#fff"
  7. active-text-color="#05bb4c"
  8. mode="horizontal"
  9. router
  10. >
  11. <template v-for="(pItem, pIndex) in menu" :key="pIndex">
  12. <el-menu-item :index="pItem.path" v-if="!pItem.children?.length">
  13. <template #title>
  14. <i :class="pItem.icon" v-if="pItem.icon"></i>
  15. <span style="margin-left: 8px">{{ pItem.name }}</span>
  16. </template>
  17. </el-menu-item>
  18. <el-sub-menu :index="pItem.path" v-else>
  19. <template #title>
  20. <i :class="pItem.icon" v-if="pItem.icon"></i>
  21. <span style="margin-left: 8px">{{ pItem.name }}</span>
  22. </template>
  23. <el-menu-item
  24. v-for="(cItem, cIndex) in pItem.children"
  25. :index="pItem.path + '/' + cItem.path"
  26. :key="cIndex"
  27. >
  28. <template #title>
  29. <i :class="cItem.icon" v-if="cItem.icon"></i>
  30. <span style="margin-left: 8px">{{ cItem.name }}</span>
  31. </template>
  32. </el-menu-item>
  33. </el-sub-menu>
  34. </template>
  35. </el-menu>
  36. </template>
  37. <script>
  38. export default {
  39. data() {
  40. return {
  41. menu: [],
  42. };
  43. },
  44. created() {
  45. this.renderRouter(["/", "/:catchAll(.*)"]);
  46. },
  47. mounted() {},
  48. methods: {
  49. // 渲染页面路由,所传参数为不需展示在菜单中供用户点击的菜单 path
  50. renderRouter(exclude) {
  51. let menu = [];
  52. this.$router.options.routes.forEach((ele) => {
  53. const findEle = exclude.some((excludePath) => {
  54. return excludePath === ele.path;
  55. });
  56. if (!findEle) menu.push(ele);
  57. });
  58. this.menu = menu;
  59. },
  60. },
  61. };
  62. </script>
  63. <style>
  64. .el-menu--collapse .el-menu .el-submenu,
  65. .el-menu--popup {
  66. min-width: 150px !important;
  67. }
  68. </style>