• wanli's avatar
    update · 3b01a086
    wanli authored
    3b01a086
TreeMenu.vue 2.1 KB
<template>
    <li v-if="!data.hidden" role="menuitem" :class="[data.children && data.children.length ? 'menu-submenu' : 'menu-item', `/${data.path}` == $route.path ? 'selected' : '', isCollapsed ? 'collapsed' : '']">
        <template v-if="data.children">
            <div :class="['menu-submenu-title', isCollapsed ? 'collapsed' : '']" @click="toggle">
                <span>
                    <i aria-label="图标:form" class="webicon">
                        <IconFont :icon="data.icon" />
                    </i>{{ data.title }}
                </span>
                <i v-show="!isCollapsed" :class="['menu-submenu-arrow', flag ? 'up' : 'down']"></i>
            </div>
            <collapse-transition>
                <ul role="menu" class="menu menu-sub" style="padding-left: 24px;" v-show="flag">
                    <TreeMenu v-for="(child, index) in data.children" :key="index" :data="child"></TreeMenu>
                </ul>
            </collapse-transition>
        </template>
        <template v-else>
            <router-link :to="{ name: data.name }">
                <i aria-label="图标: ant-design" :class="['webicon', isCollapsed ? 'collapsed' : '']">
                    <IconFont :icon="data.icon" />
                </i>{{ data.title }}
            </router-link>
        </template>
    </li>
</template>

<script>
    import collapseTransition from './collapseTransition';

    export default {
        name: "TreeMenu",
        props: {
            data: {
                type: Object,
                default: () => ({})
            },
            isCollapsed: {
                type: Boolean,
                default: false
            },
        },
        watch: {
            isCollapsed() {
                this.flag = false
            }
        },
        components: {
            collapseTransition
        },
        data() {
            return {
                flag: false
            }
        },
        methods: {
            toggle() {
                if (this.data.children && this.data.children.length) this.flag = !this.flag
            },
        },
        created() {}
    }
</script>