seatonwan9
2025-08-14 a0fc5b1e703769a8936fd8671ec9cdd9adfda20a
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<template>
  <div class="menu-item-wrapper">
    <!-- 没有子菜单只有一级菜单 -->
    <template v-if="!item.children || item.children.length === 0">
      <el-menu-item   :index="item.url">
        <!-- <component v-if="item.icon != ''" :is="item.icon" class="icon-size" /> -->
        <svg-icon
          v-if="item.icon != ''"
          :name="item.icon || ''"
          color="#007CEE"
          size="20"
          class="ico"
        ></svg-icon>
        <template #title>
          {{ item.name }}
        </template>
      </el-menu-item>
    </template>
    <el-sub-menu v-else :index="item.id">
      <template #title>
        <!-- <component v-if="item.icon != ''" :is="item.icon" class="icon-size" /> -->
        <div class="icon-size" :class="{ 'only-icon': isCollapse }">
        <svg-icon
          v-if="item.icon != ''"
          :name="item.icon || ''"
          color="#007CEE"
          size="20"
        ></svg-icon>
      </div>
        <span :class="{ 'txt-hidden': isCollapse }">{{ item.name }}</span>
      </template>
      <sidebar-item
        v-for="child in item.children"
        :item="child"
        :key="child.id"
      ></sidebar-item>
    </el-sub-menu>
  </div>
</template>
 
<script lang="ts">
export default {
  name: 'SidebarItem',
}
</script>
 
<script setup lang="ts">
 
import { isExternal } from '@/utils/common'
import { useMenu } from '@/stores/modules/menu';
const menuStore = useMenu();
 
const props = defineProps({
  item: {
    type: Object,
    required: true,
  },
})
const isCollapse = computed((): boolean => menuStore.isCollapse);
 
</script>
 
<style scoped lang="scss">
.icon-size {
  width: 28px;
  padding-right: 5px;
}
.svg-icon {
  margin-right: 5px;
}
// .submenu-title-noDropdown {
:deep(.el-sub-menu__title) {
  font-size: 15px;
}
:deep(.el-menu-item) {
  font-size: 15px;
}
 
.menu-item-wrapper {
}
.only-icon {
  width: 40px;
  position: absolute;
    width: 28px;
    left: 18px;
}
.txt-hidden{
  width: 0;
  height: 0;
  overflow: hidden;
}
.txt-hidden + :deep(.el-sub-menu__icon-arrow){
  display: none;
}
</style>