Blame view

Yi.Vben5.Vue3/packages/@core/ui-kit/menu-ui/src/sub-menu.vue 1.57 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  <script setup lang="ts">
  import type { MenuRecordRaw } from '@vben-core/typings';
  
  import { computed } from 'vue';
  
  import { MenuBadge, MenuItem, SubMenu as SubMenuComp } from './components';
  // eslint-disable-next-line import/no-self-import
  import SubMenu from './sub-menu.vue';
  
  interface Props {
    /**
     * 菜单项
     */
    menu: MenuRecordRaw;
  }
  
  defineOptions({
    name: 'SubMenuUi',
  });
  
  const props = withDefaults(defineProps<Props>(), {});
  
  /**
   * 判断是否有子节点,动态渲染 menu-item/sub-menu-item
   */
  const hasChildren = computed(() => {
    const { menu } = props;
    return (
      Reflect.has(menu, 'children') && !!menu.children && menu.children.length > 0
    );
  });
  </script>
  
  <template>
    <MenuItem
      v-if="!hasChildren"
      :key="menu.path"
      :active-icon="menu.activeIcon"
      :badge="menu.badge"
      :badge-type="menu.badgeType"
      :badge-variants="menu.badgeVariants"
      :icon="menu.icon"
      :path="menu.path"
    >
      <template #title>
        <span>{{ menu.name }}</span>
      </template>
    </MenuItem>
    <SubMenuComp
      v-else
      :key="`${menu.path}_sub`"
      :active-icon="menu.activeIcon"
      :icon="menu.icon"
      :path="menu.path"
    >
      <template #content>
        <MenuBadge
          :badge="menu.badge"
          :badge-type="menu.badgeType"
          :badge-variants="menu.badgeVariants"
          class="right-6"
        />
      </template>
      <template #title>
        <span>{{ menu.name }}</span>
      </template>
      <template v-for="childItem in menu.children || []" :key="childItem.path">
        <SubMenu :menu="childItem" />
      </template>
    </SubMenuComp>
  </template>