位置: IT常识 - 正文

(二) Vue3 + Element-Plus 实现动态菜单栏

编辑:rootadmin
(二) Vue3 + Element-Plus 实现动态菜单栏 系列文章目录系列介绍:Vue3 + Vite + TS 从零开始学习项目搭建:(一) Vue3 + Vite + TS 项目搭建实现动态菜单栏:(二) Vue3 + Element-Plus 实现动态菜单栏实现动态面包屑:(三) Vue3 + Element-Plus 实现动态面包屑实现动态标签页:(四) Vue3 + Element-Plus 实现动态标签页实现动态主题色切换(demo):(五) Vue3 + Element-Plus 实现动态主题色切换踩坑记录(持续更新):(六) Vue3 踩坑记录文章目录系列文章目录一、引入依赖二、目录结构三、核心代码1. auth-api.js2. permission.js3.sidebar.vue4.router.js四、最终效果一、引入依赖

推荐整理分享(二) Vue3 + Element-Plus 实现动态菜单栏,希望有所帮助,仅作参考,欢迎阅读内容。

(二) Vue3 + Element-Plus 实现动态菜单栏

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

开始前请确保已经安装以下依赖:

VueX$ npm i vuex --saveVue-Router$ npm i vue-router --saveNProgress$ npm i nprogress --save二、目录结构|-src -- 主目录---|api -- Ajax请求统一存放目录------|auth-api.js -- 路由数据获取接口---|js -- JS脚本------|permission.js -- NProgress进度条数据处理---|layout -- 页面布局组件------|sidebar.vue -- 侧边栏布局组件---|store -- VueX------|router.js -- 路由全局常量三、核心代码1. auth-api.jsimport request from '@/js/request'export default { routers(data) { return request.post('/routers', data) }}2. permission.jsimport router from '../router'import store from '../store'import NProgress from 'nprogress'import 'nprogress/nprogress.css'import { getCookie } from './cookie'import Layout from '../layout/index.vue'import ParentView from '../components/ParentView/index.vue'NProgress.configure({ showSpinner: false })const whiteList = ['/login', '/register']router.beforeEach((to, from, next) => { NProgress.start() if (getCookie()) { if (to.path === '/login') { next({ path: '/' }) NProgress.done() } else { if (store.state.user.menus.length === 0) { store.dispatch('GetInfo').then(res => { const menuIds = res.data.menuIds store.dispatch('GenerateRoutes', menuIds).then(routes => { filterRoutes(routes) routes.forEach(route => { router.addRoute(route) }) next({ ...to, replace: true }) }) }).catch(() => { next() }) } else { next() } } } else { if (whiteList.indexOf(to.path) !== -1) { next() } else { next(`/login?redirect=${to.fullPath}`) NProgress.done() } }})router.afterEach(() => { NProgress.done()})const filterRoutes = (routes) => { const accessRoutes = routes.filter(route => { let modules = import.meta.glob('../views/**/*.vue') if (route.component) { if (route.component === 'ParentView') { route.component = ParentView } else if (route.component === 'Layout') { route.component = Layout } else { route.component = modules[`../views/${route.component}.vue`] } } if (route.children && route.children.length) { filterRoutes(route.children) } return true }) return accessRoutes}3.sidebar.vue<template> <el-aside width="210px" class="aside-wrapper"> <el-scrollbar> <el-menu :default-active="route.path" mode="vertical" :collapse-transition="false" router class="menu-wrapper"> <el-sub-menu v-for="menu in menus" :key="menu.path" :index="menu.path"> <template #title> <el-icon><component :is="menu.meta.icon" /></el-icon> <span>{{ menu.name }}</span> </template> <el-menu-item v-for="child in menu.children" :key="child.path" :index="child.path"> <template #title> <el-icon><component :is="child.meta.icon" /></el-icon> <span>{{ child.name }}</span> </template> </el-menu-item> </el-sub-menu> </el-menu> </el-scrollbar> </el-aside></template><script lang="ts" setup>import { computed } from 'vue'import { useStore } from 'vuex'import { useRoute } from 'vue-router'const store = useStore()const route = useRoute()const menus = store.state.router.accessRoutes</script>4.router.jsimport { authApi } from '@/api'import constantRoutes from '@/router/routes'const router = { state: { routes: [], accessRoutes: [] }, mutations: { SET_ROUTES: (state, routes) => { state.routes = routes }, SET_ACCESSROUTES: (state, accessRoutes) => { state.accessRoutes = accessRoutes } }, actions: { GenerateRoutes({ commit }, roleIds) { return new Promise(resolve => { authApi.routers(roleIds).then(res => { const accessRoutes = res.data filterRoutes('', accessRoutes) const routes = constantRoutes.concat(accessRoutes) commit('SET_ROUTES', routes) commit('SET_ACCESSROUTES', accessRoutes) resolve(routes) }) }) } }}const filterRoutes = (path, routes) => { routes.forEach(route => { const routePath = route.path if (route.parentId !== '0') { route.path = path + "/" + routePath } if (route.children && route.children.length) { filterRoutes(routePath, route.children) } })}export default router四、最终效果

本文链接地址:https://www.jiuchutong.com/zhishi/285057.html 转载请保留说明!

上一篇:Linux basename命令的使用详解(linux-base)

下一篇:石楠花丛中的一只欧亚红松鼠,英格兰 (© Christopher Drabble/Alamy)(石楠花 开花)

  • 电子商务网站推广用什么方法,网站推广的10个方法(电子商务网站推广论文)

    电子商务网站推广用什么方法,网站推广的10个方法(电子商务网站推广论文)

  • 表格怎么让日期自动顺序排(表格怎么让日期每天自动更新)

    表格怎么让日期自动顺序排(表格怎么让日期每天自动更新)

  • 怎么设置苹果手机电量百分比(怎么设置苹果手机不黑屏)

    怎么设置苹果手机电量百分比(怎么设置苹果手机不黑屏)

  • 无人机是干什么的(无人机是干什么用的)

    无人机是干什么的(无人机是干什么用的)

  • 苹果无法购买腾讯会员(苹果无法购买腾讯游戏)

    苹果无法购买腾讯会员(苹果无法购买腾讯游戏)

  • 微信图片打不开怎么回事(为什么企业微信图片打不开)

    微信图片打不开怎么回事(为什么企业微信图片打不开)

  • 6分钟的视频怎么发微信群里(6分钟的视频怎么发微信朋友圈)

    6分钟的视频怎么发微信群里(6分钟的视频怎么发微信朋友圈)

  • 华为p40多少hz(华为p40多少hz触控采样率)

    华为p40多少hz(华为p40多少hz触控采样率)

  • 苹果充电ic故障表现(iphone 充电ic)

    苹果充电ic故障表现(iphone 充电ic)

  • soul男生为什么只有3次语音(soul男生为什么匹配限制次数了)

    soul男生为什么只有3次语音(soul男生为什么匹配限制次数了)

  • 华为镜头膜有必要贴吗(华为镜头膜有必要贴膜吗)

    华为镜头膜有必要贴吗(华为镜头膜有必要贴膜吗)

  • oppoa8手机什么时候出来的(oppoa8什么时候降价)

    oppoa8手机什么时候出来的(oppoa8什么时候降价)

  • 抖音拉黑了对方还能发信息吗(抖音拉黑了对方还能看到我直播吗?)

    抖音拉黑了对方还能发信息吗(抖音拉黑了对方还能看到我直播吗?)

  • 电视怎么增加蓝牙功能(电视上面的蓝牙怎么设置)

    电视怎么增加蓝牙功能(电视上面的蓝牙怎么设置)

  • 华为nova3手机有多长(华为nova3手机有没有红外线功能)

    华为nova3手机有多长(华为nova3手机有没有红外线功能)

  • 荣耀9xpro防水吗(荣耀x9防水吗?)

    荣耀9xpro防水吗(荣耀x9防水吗?)

  • 怎样打开电脑手写功能(怎样打开电脑手写板)

    怎样打开电脑手写功能(怎样打开电脑手写板)

  • 抖音自己转发的在哪找(抖音自己转发的视频别人能看到吗)

    抖音自己转发的在哪找(抖音自己转发的视频别人能看到吗)

  • 电脑下面怎么不显示(电脑下面怎么不显示图标了)

    电脑下面怎么不显示(电脑下面怎么不显示图标了)

  • 8p玩王者不流畅原因(苹果8p玩王者越来越卡)

    8p玩王者不流畅原因(苹果8p玩王者越来越卡)

  • 地铁乘车码可以刷两个人吗(地铁乘车码可以坐公交吗)

    地铁乘车码可以刷两个人吗(地铁乘车码可以坐公交吗)

  • windows7旗舰版系统查看CPU处理器的方法(windows7旗舰版最新版本)

    windows7旗舰版系统查看CPU处理器的方法(windows7旗舰版最新版本)

  • 减免税流程
  • 进项税额不允许抵扣怎么计算
  • 残保基金怎么算
  • 个税系统设置在哪里
  • 盘盈固定资产属于企业的会计差错
  • 工程资金占用计算利率是多少
  • 开发间接费什么时候计提
  • 建筑公司现金日记账怎么填写
  • 上月营业外收入少报入了怎么办
  • 研发折旧会计分录
  • 纳税人是非开业户是什么意思
  • 建筑合同通用条款
  • 个人名义去税务局开票
  • 商业企业成本核算内容包括
  • 1697509029
  • 出口报关单中有哪些内容
  • 银行融资成本计算方法
  • 支付借款利息怎么做账
  • 无形资产出租的账务处理
  • 职工教育经费会计准则最新规定
  • windows11 beta渠道
  • 开发间接费用会计分录
  • 物流中的代收货款是什么意思
  • 房改转移什么意思
  • 销售方红字发票的账务处理?
  • 一借多贷的会计分录格式
  • import vue from vue报错
  • php取二维数组的一组内容
  • vscode怎么看错误提示
  • 对于企业无法支付的应付账款
  • html动画教程
  • 开源ei
  • python怎么求列表里的和
  • 增值税申报表填错不影响税额
  • 劳动仲裁支付的赔偿金怎么入账
  • 企业财务准则最新
  • 其他应付款个人在贷方表示什么
  • java基础运算符有哪些
  • jquery ui table
  • 进项税认证抵扣流程
  • 运输发票抵扣税额怎么算
  • 绩效是否需要交税
  • sql 列数
  • 应交税费账户的用途和结构是怎样的
  • 赠送给客户的礼品税法
  • sql 获取指定字符位置
  • 长期待摊费用好处
  • 汽车销售和租赁业务描述
  • 应税消费品含税吗
  • 固定资产盘亏所得税清算时怎么处理
  • 固定资产累计折旧会计科目
  • 收到赞助费如何开发票
  • 小规模纳税人购入固定资产怎么做账
  • 检测费专用发票会计分录
  • win8系统怎么关机
  • win10 更新 蓝屏
  • unix系统命令大全
  • 一台OpenSuSE系统的服务器的网络配置
  • 如何在win7系统中查看系统信息
  • linux获取主目录的命令
  • reg.exe是什么东西?
  • win8电脑背景变成黑色的了是为什么
  • windows无法完成配置若要尝试恢复配置
  • linux网络设置在哪里
  • win8.1界面如何改为win7
  • 免费获取验证码
  • win10事件查看器好多错误
  • linux br0配置
  • css并集
  • python2与python3中的区别
  • 实现点击下箭头的方法
  • excite引擎
  • python嵌套列表生成
  • html焦点图
  • javascript解码与编码
  • node搭建博客
  • android 启动器 设置
  • javascript教程chm
  • python中的类怎样理解
  • 养猪场环保税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设