Menus.vue 2.17 KB
<template>
    <Menu class="sidebar-menu" theme="light" width="auto">
        <template v-for="(menu, index) in menus">
            <Submenu v-if="menu.subMenus" :name="index">
                <template slot="title">
                    <Icon :type="menu.icon"></Icon>
                    {{menu.title}}
                </template>
                <template v-for="(subMenu, subIndex) in menu.subMenus">
                    <MenuItem :name="`${index}-${subIndex}`">
                        <a v-if="subMenu.isClassic" :href="subMenu.link">
                            <Icon :type="subMenu.icon"></Icon>
                            {{subMenu.title}}
                        </a>
                        <router-link v-else :to="subMenu.link">
                            {{subMenu.title}}
                        </router-link>
                    </MenuItem>
                </template>
            </Submenu>
            <MenuItem v-else :name="index">
                <a v-if="menu.isClassic" :href="menu.link">
                    <Icon :type="menu.icon"></Icon>
                    {{menu.title}}
                </a>
                <router-link v-else :to="menu.link">
                    <Icon :type="menu.icon"></Icon>
                    {{menu.title}}
                </router-link>
            </MenuItem>
        </template>
    </Menu>
</template>

<script>
import {
    normalMenus,
    masterMenus,
    businessMenus
} from '../../../../config/menus' // 考虑与原有业务复用

export default {
    props: ['user'],
    computed: {
         isMaster: function() {
            return this.user.role === '1000'
         },
         isBusiness: function() {
            return this.user.role === '3000'
         },
         menus: function() {
            if (this.isBusiness) {
                return businessMenus
            }
            if (this.isMaster) {
                return [...normalMenus, ...masterMenus]
            }
            return normalMenus
         }
    }
}
</script>

<style scoped lang="scss">
a {
    display: block;
    color: #495060;

    > i {
        margin-right: 6px;
    }
}

.ivu-menu-light.ivu-menu-vertical .ivu-menu-item-active {
    color: #495060;
}
</style>