NavMenu2.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <template v-for="navMenu in navMenus">
  3. <el-menu-item
  4. class="rush"
  5. v-if="!hasChildren(navMenu)"
  6. :key="navMenu.path"
  7. :index="navMenu.path || navMenu.meta.id"
  8. >
  9. <a
  10. v-if="navMenu.meta && navMenu.meta.target == 'link'"
  11. :href="toURL(navMenu.path)"
  12. target="_blank"
  13. @click.stop="() => {}"
  14. ></a>
  15. <el-icon v-if="navMenu.meta && navMenu.meta.icon"
  16. ><component :is="navMenu.meta.icon || 'menu'"
  17. /></el-icon>
  18. <template #title>
  19. <span>{{ $t2(navMenu.meta.code) || navMenu.meta.title }}</span>
  20. </template>
  21. </el-menu-item>
  22. <el-sub-menu
  23. class="rush"
  24. :popper-class="popperClass"
  25. v-else
  26. :key="navMenu.meta.id"
  27. :index="navMenu.path || navMenu.meta.id"
  28. >
  29. <template #title>
  30. <el-icon v-if="navMenu.meta && navMenu.meta.icon"
  31. ><component :is="navMenu.meta.icon || 'el-icon-menu'"
  32. /></el-icon>
  33. <span>{{ $t2(navMenu.meta.code) || navMenu.meta.title }}</span>
  34. </template>
  35. <NavMenu :navMenus="navMenu.children"></NavMenu>
  36. </el-sub-menu>
  37. </template>
  38. </template>
  39. <script>
  40. import { isURL } from "@/utils/validate";
  41. export default {
  42. name: "NavMenu",
  43. props: ["navMenus", "popperClass"],
  44. setup() {
  45. return {
  46. apiUrl: import.meta.env.VITE_APP_BASE,
  47. };
  48. },
  49. data() {
  50. return {};
  51. },
  52. methods: {
  53. toURL(path) {
  54. return isURL(path) ? path : this.apiUrl + path;
  55. },
  56. hasChildren(item) {
  57. return (
  58. item.children &&
  59. !item.children.every((item) => item.meta.isShow != "1")
  60. );
  61. },
  62. },
  63. };
  64. </script>
  65. <style lang="less">
  66. .rush .el-sub-menu__title {
  67. padding: 0 5px;
  68. }
  69. .adminui-header .nav li.rush {
  70. padding: 0;
  71. }
  72. </style>