panoramaDetailsMenu.vue 931 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <template>
  2. <el-submenu
  3. v-if="item.children && item.children.length"
  4. :index="item.id.toString()"
  5. :popper-append-to-body="false"
  6. >
  7. <template #title>
  8. <span>{{ item.label }}</span>
  9. </template>
  10. <!-- 递归渲染子菜单 -->
  11. <panorama-details-menu
  12. v-for="child in item.children"
  13. :key="child.id"
  14. :item="child"
  15. />
  16. </el-submenu>
  17. <!-- 无子菜单:渲染 el-menu-item -->
  18. <el-menu-item
  19. v-else
  20. :index="item.component"
  21. >
  22. <span>{{ item.label }}</span>
  23. </el-menu-item>
  24. </template>
  25. <script>
  26. export default {
  27. name: 'panoramaDetailsMenu',
  28. props: {
  29. item: {
  30. type: Object,
  31. default: () => ({})
  32. }
  33. }
  34. }
  35. </script>
  36. <style lang="scss" scoped>
  37. ::v-deep .el-menu-item {
  38. height: 40px;
  39. display: flex;
  40. align-content: center;
  41. &.is-active {
  42. background-color: rgb(236, 245, 255)
  43. }
  44. &:hover {
  45. background-color: #f5f7fa;
  46. }
  47. }
  48. </style>