2 09.侧边菜单开发 样式布局和路由跳转

src/layouts/components/FMain.vue

<template>
    <div class="f-menu">
        <el-menu default-active="2" class="border-0" @select="handleSelect">

        <template v-for="(item,index) in asideMenus" :key="index">
            <el-sub-menu v-if="item.child && item.child.length > 0" :index="item.name">
                <template #title>
                    <el-icon>
                        <component :is="item.icon"></component>
                    </el-icon>
                    <span>{{ item.name }}</span>
                </template>

                <el-menu-item v-for="(item2,index2) in item.child" :key="index2" :index="item2.frontpath">
                    <el-icon>
                        <component :is="item.icon"></component>
                    </el-icon>
                    <span>{{ item.name }}</span>
                </el-menu-item>
            </el-sub-menu>


            <el-sub-menu v-else :index="item.frontpath">
                    <el-icon>
                        <component :is="item.icon"></component>
                    </el-icon>
                    <span>{{ item.name }}</span>
            </el-sub-menu>
        </template>

        </el-menu>
</div>
</template>


<script setup> 
import { useRouter } from "vue-router"

const router = useRouter()
// 自定义一些测试路由
const asideMenus = [
    {
        "name": "后台面板",
        "icon": "help",
        "child": [{
            "name": "主控台",
            "icon": "home-filled",
            "frontpath": "/",
        }]
    },
    {
        "name": "商城管理",
        "icon": "shopping-bag",
        "child": [{
            "name": "商品管理",
            "icon": "home-filled",
            "frontpath": "/good/list",
        }]
    },
]


const handleSelect = (e)=> {
    // console.log(e)
    router.push(e)
}

</script>


<style>
.f-menu {
    width: 250px;
    height: 100%;
    top: 64px;
    left: 0;
    overflow: auto;
    @apply shadow-md fixed bg-light-50;
}
</style>

Last updated