|
1 | 1 | <template> |
2 | 2 | <div v-if="!item.hidden&&item.children" class="menu-wrapper"> |
3 | 3 |
|
4 | | - <router-link v-if="hasOneShowingChild(item.children) && !onlyOneChild.children&&!item.alwaysShow" :to="resolvePath(onlyOneChild.path)"> |
5 | | - <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> |
6 | | - <svg-icon v-if="onlyOneChild.meta&&onlyOneChild.meta.icon" :icon-class="onlyOneChild.meta.icon"/> |
7 | | - <span v-if="onlyOneChild.meta&&onlyOneChild.meta.title" slot="title">{{ generateTitle(onlyOneChild.meta.title) }}</span> |
8 | | - </el-menu-item> |
9 | | - </router-link> |
| 4 | + <template v-if="hasOneShowingChild(item.children) && !onlyOneChild.children&&!item.alwaysShow"> |
| 5 | + <a v-if="isExternalLink(onlyOneChild.path)" :href="onlyOneChild.path" target="blank"> |
| 6 | + apple |
| 7 | + <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> |
| 8 | + <item v-if="onlyOneChild.meta" :icon="onlyOneChild.meta.icon" :title="generateTitle(onlyOneChild.meta.title)" /> |
| 9 | + </el-menu-item> |
| 10 | + </a> |
| 11 | + <router-link v-else :to="resolvePath(onlyOneChild.path)"> |
| 12 | + <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> |
| 13 | + <item v-if="onlyOneChild.meta" :icon="onlyOneChild.meta.icon" :title="generateTitle(onlyOneChild.meta.title)" /> |
| 14 | + </el-menu-item> |
| 15 | + </router-link> |
| 16 | + </template> |
10 | 17 |
|
11 | 18 | <el-submenu v-else :index="item.name||item.path"> |
12 | 19 | <template slot="title"> |
13 | | - <svg-icon v-if="item.meta&&item.meta.icon" :icon-class="item.meta.icon"/> |
14 | | - <span v-if="item.meta&&item.meta.title" slot="title">{{ generateTitle(item.meta.title) }}</span> |
| 20 | + <item v-if="item.meta" :icon="item.meta.icon" :title="generateTitle(item.meta.title)" /> |
15 | 21 | </template> |
16 | 22 |
|
17 | 23 | <template v-for="child in item.children" v-if="!child.hidden"> |
18 | 24 | <sidebar-item v-if="child.children&&child.children.length>0" :is-nest="true" :item="child" :key="child.path" :base-path="resolvePath(child.path)" class="nest-menu"/> |
19 | 25 |
|
20 | 26 | <router-link v-else :to="resolvePath(child.path)" :key="child.name"> |
21 | 27 | <el-menu-item :index="resolvePath(child.path)"> |
22 | | - <svg-icon v-if="child.meta&&child.meta.icon" :icon-class="child.meta.icon"/> |
23 | | - <span v-if="child.meta&&child.meta.title" slot="title">{{ generateTitle(child.meta.title) }}</span> |
| 28 | + <item v-if="child.meta" :icon="child.meta.icon" :title="generateTitle(child.meta.title)" /> |
24 | 29 | </el-menu-item> |
25 | 30 | </router-link> |
26 | 31 | </template> |
|
32 | 37 | <script> |
33 | 38 | import path from 'path' |
34 | 39 | import { generateTitle } from '@/utils/i18n' |
| 40 | +import { validateURL } from '@/utils/validate' |
| 41 | +import Item from './Item' |
35 | 42 |
|
36 | 43 | export default { |
37 | 44 | name: 'SidebarItem', |
| 45 | + components: { Item }, |
38 | 46 | props: { |
39 | 47 | // route object |
40 | 48 | item: { |
@@ -71,11 +79,13 @@ export default { |
71 | 79 | } |
72 | 80 | return false |
73 | 81 | }, |
74 | | - resolvePath(...paths) { |
75 | | - return path.resolve(this.basePath, ...paths) |
| 82 | + resolvePath(routePath) { |
| 83 | + return path.resolve(this.basePath, routePath) |
| 84 | + }, |
| 85 | + isExternalLink(routePath) { |
| 86 | + return validateURL(routePath) |
76 | 87 | }, |
77 | 88 | generateTitle |
78 | 89 | } |
79 | 90 | } |
80 | 91 | </script> |
81 | | - |
|
0 commit comments