vue aside从router中获取label和name

本文介绍了如何使用 Vue.js 实现响应式的一级和二级菜单,同时结合Vuex和路由管理,实现基于用户权限的菜单显示。通过递归结构展示了如何根据路由和元数据动态生成菜单,并且隐藏了未授权的子菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
    <el-menu :default-active="defaultPath" :collapse="props.isCollapse" router>
        <template v-for="(item1, index1) in menus" :key="index1">
            <!-- 一级菜单 -->
            <el-sub-menu :index="item1.path" v-if="(item1.children || []).length">
                <template #title>
                    <el-icon>
                        <component :is="item1.icon"></component>
                    </el-icon>
                    <span>{{item1.title}}</span>
                </template>
                <template v-for="(item2, index2) in (item1.children || [])" :key="index2">
                    <!-- 二级菜单 -->
                    <el-menu-item :index="item2.path">{{item2.title}}</el-menu-item>
                </template>
            </el-sub-menu>
            <!-- 一级菜单 -->
            <el-menu-item :index="item1.path" v-else>
                <el-icon>
                    <component :is="item1.icon"></component>
                </el-icon>
                <template #title>{{item1.title}}</template>
            </el-menu-item>
        </template>
    </el-menu>
</template>

<script setup>
    import { defineProps, computed } from 'vue'
    import { useStore } from 'vuex'
    import { useRoute } from 'vue-router'
    import { routes } from '@/router/routes'

    const { getters } = useStore()

    const hasPermission = computed(() => getters['login/hasPermission'])

    const props = defineProps({
        isCollapse: {
            type: Boolean,
            required: true
        }
    })

    const getMenus = (base = '/', list = []) => {
        return list.
            filter(i => (i.meta || {}).isMenu === true).
            map(i => {
                if (i.meta && i.meta.permissions && !hasPermission.value(...i.meta.permissions)) {
                    return {}
                }
                let obj = {
                    path: base + i.path,
                    title: i.meta.title,
                    icon: i.meta.icon || 'Operation'
                }
                if (i.children && i.children.length) {
                    let children = getMenus(base + i.path + '/', i.children)
                    if (!children.length) {
                        return {}
                    }
                    obj.children = children
                }
                return obj
            }).filter(i => i.path !== undefined)
    }
    const menus = getMenus((routes[0] || {}).path, (routes[0] || {}).children || [])


    const route = useRoute()
    const defaultPath = route.path ? route.path : ((menus[0] || {}).path || '')
</script>

<style lang="scss" scoped>
    .el-menu {
        border-right: none;
    }
</style>

创建一个基于Vue.jsElement UI的仓库管理系统操作页面,首先需要安装Vue CLI作为项目构建工具,并引入Element UI库提供丰富的组件。以下是一个简化的步骤代码片段: 1. **设置环境**: - 使用`npm init`初始化一个新项目,然后安装Vue CLI: `npm install -g @vue/cli` - 创建一个新的Vue项目: `vue create your_project_name` 2. **安装Element UI**: - 安装Element UI: `npm install element-ui --save` - 添加到main.js中并注册组件库: ```javascript import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 3. **设计操作页面结构**: 使用`<template>`创建基本布局,包含标题、表单、列表等元素。例如,一个库存列表页可以这样设计: ```html <template> <div> <el-header>仓库管理系统 - 操作页面</el-header> <el-container> <el-aside>侧边栏菜单...</el-aside> <el-main> <el-row> <el-col :span="24" class="content"> <!-- 根据需求添加库存列表 --> <el-table :data="items"> <el-table-column prop="name" label="商品名称"></el-table-column> <el-table-column prop="quantity" label="库存数量"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button size="small" @click="handleEdit(scope.$index)">编辑</el-button> <el-button size="small" type="danger" @click="handleDelete(scope.$index)">删除</el-button> </template> </el-table-column> </el-table> <!-- 表单区... --> </el-col> </el-row> </el-main> </el-container> </div> </template> ``` 4. **定义数据方法**: 在`methods`里编写处理增删改查的方法,如`handleEdit``handleDelete`。 5. **样式定制**: 使用CSS或SCSS进行美化,让界面更简洁美观。Element UI提供了预设的主题颜色样式,可以根据需要调整。 6. **路由配置**: 如果有多个操作页面,可以配置Vue Router进行导航。 记得这只是一个基础示例,实际应用中还需要考虑状态管理数据持久化等问题。完成上述步骤后,你将有一个基本的Vue+Element UI仓库管理系统操作页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值