Skip to content

Commit

Permalink
✨ 菜单上支持使用 el-icon 了
Browse files Browse the repository at this point in the history
  • Loading branch information
Cat7373 committed Mar 10, 2020
1 parent a45e64f commit 69bd4da
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 3 deletions.
39 changes: 39 additions & 0 deletions src/components/ElIcon/index.vue
@@ -0,0 +1,39 @@
<template>
<i :class="iconName" :style="appendStyle" />
</template>

<script>
export default {
name: 'ElIcon',
props: {
iconClass: {
type: String,
required: true
},
iconColor: {
type: String,
required: false,
default: ''
}
},
computed: {
iconName() {
return `sub-el-icon el-icon-${this.iconClass}`
},
appendStyle() {
if (this.iconColor) {
return 'color: ' + this.iconColor + ';'
} else {
return ''
}
}
}
}
</script>

<style scoped>
.sub-el-icon {
width: 1em;
height: 1em;
}
</style>
2 changes: 2 additions & 0 deletions src/icons/index.js
@@ -1,8 +1,10 @@
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component
import ElIcon from '@/components/ElIcon'

// register globally
Vue.component('svg-icon', SvgIcon)
Vue.component('el-icon', ElIcon)

const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
Expand Down
12 changes: 11 additions & 1 deletion src/layout/components/Sidebar/Item.vue
@@ -1,4 +1,6 @@
<script>
import variables from '@/styles/variables.scss'
export default {
name: 'MenuItem',
functional: true,
Expand All @@ -7,19 +9,27 @@ export default {
type: String,
default: ''
},
elicon: {
type: String,
default: ''
},
title: {
type: String,
default: ''
}
},
render(h, context) {
const { icon, title } = context.props
const { icon, elicon, title } = context.props
const vnodes = []
if (icon) {
vnodes.push(<svg-icon icon-class={icon}/>)
}
if (elicon) {
vnodes.push(<el-icon icon-class={elicon} icon-color={variables.menuText}/>)
}
if (title) {
vnodes.push(<span slot='title'>{(title)}</span>)
}
Expand Down
4 changes: 2 additions & 2 deletions src/layout/components/Sidebar/SidebarItem.vue
Expand Up @@ -3,14 +3,14 @@
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :elicon="onlyOneChild.meta.elicon||item.meta && item.meta.elicon" :title="onlyOneChild.meta.title" />
</el-menu-item>
</app-link>
</template>

<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
<template slot="title">
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :elicon="item.meta && item.meta.elicon" :title="item.meta.title" />
</template>
<sidebar-item
v-for="child in item.children"
Expand Down
13 changes: 13 additions & 0 deletions src/styles/sidebar.scss
Expand Up @@ -57,6 +57,11 @@
margin-right: 16px;
}

.sub-el-icon {
margin-right: 13px;
margin-left: -1px;
}

.el-menu {
border: none;
height: 100%;
Expand Down Expand Up @@ -105,6 +110,10 @@
.svg-icon {
margin-left: 20px;
}

.sub-el-icon {
margin-left: 19px;
}
}
}

Expand All @@ -118,6 +127,10 @@
margin-left: 20px;
}

.sub-el-icon {
margin-left: 19px;
}

.el-submenu__icon-arrow {
display: none;
}
Expand Down

0 comments on commit 69bd4da

Please sign in to comment.