SideMenu.vue 2.29 KB
Newer Older
wb-ct393452's avatar
wb-ct393452 committed
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
<template>
    <a-layout-sider :theme="sideTheme" :class="['side-menu', 'beauty-scroll', isMobile ? null : 'shadow']" width="256px" :collapsible="collapsible" v-model="collapsed" :trigger="null">
        <div :class="['logo', theme]">
            <router-link to="/dashboard/workplace">
                <img src="@/assets/img/logo.png">
                <h1>{{systemName}}</h1>
            </router-link>
        </div>
        <i-menu :theme="theme" :collapsed="collapsed" :options="menuData" @select="onSelect" class="menu" />
    </a-layout-sider>
</template>

<script>
import IMenu from './menu';
import { mapState } from 'vuex';
export default {
    name: 'SideMenu',
    components: { IMenu },
    props: {
        collapsible: {
            type: Boolean,
            required: false,
            default: false,
        },
        collapsed: {
            type: Boolean,
            required: false,
            default: false,
        },
        menuData: {
            type: Array,
            required: true,
        },
        theme: {
            type: String,
            required: false,
            default: 'dark',
        },
    },
    computed: {
        sideTheme() {
            return this.theme == 'light' ? this.theme : 'dark';
        },
        ...mapState('settingModule', ['isMobile', 'systemName']),
    },
    methods: {
        onSelect(obj) {
            this.$emit('menuSelect', obj);
        },
    },
};
</script>

<style lang="less" scoped>
.shadow {
    box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
}
.side-menu {
    min-height: 100vh;
    overflow-y: auto;
    z-index: 10;
    .logo {
        height: 64px;
        position: relative;
        line-height: 64px;
        padding-left: 24px;
        -webkit-transition: all 0.3s;
        transition: all 0.3s;
        overflow: hidden;
        background-color: @layout-trigger-background;
        &.light {
            background-color: #fff;
            h1 {
                color: @primary-color;
            }
        }
        h1 {
            color: @menu-dark-highlight-color;
            font-size: 20px;
            margin: 0 0 0 12px;
            display: inline-block;
            vertical-align: middle;
        }
        img {
            width: 32px;
            vertical-align: middle;
        }
    }
}
.menu {
    padding: 16px 0;
}
</style>