百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

VUE3 你不知道的按钮与菜单权限(vue 弹出菜单)

zhezhongyun 2025-05-08 08:04 18 浏览

前几篇文章我们已经把后台的基础搭建好了,感兴趣的朋友可以看看之前的基础搭建

前言

上一篇文章我们获取了菜单以及路由的添加。今天我们就来说说菜单的数据结构,以及我们要怎么添加菜单权限和按钮权限

开始

在开始之前,我们先来设想一下菜单和按钮权限的设计。先说说菜单吧,菜单我们需要不同的用户登录,显示不同的菜单。我们可以通过后台把对应用户的菜单返回,我们在通过

router.addRoute添加的路由中。不清楚的同学可以查看一下上一章。这样我们的菜单就完成了。那我们的按钮权限呢?我们下面把主要精力放在按钮的权限上。我们先看看后台返回的数据吧

后台返回的菜单数据(包含按钮)

const data  = [
  {
    permissionId:1, // 权限id
    permissionName:"首页", // 权限名称
    parentId:0, // 父级
    menuUrl:"/home", // 路由
    hidden:false, // 是否隐藏
    component:'home/index.vue', // 组件
    buttonList:['/home/list'], // 按钮权限
    childrenList:[], // 子级数据
  },
  ...
];

我们假设后端返回给我们的数据就是这样的。下面我们就开始按钮的权限了。

按钮权限的设计

我们这里的按钮权限设计,安装最简单的模式来。就是判断当前的用户是否有当前按钮的权限。直接一点就是判断当前buttonList中是否有指定的按钮路由。

思路我们已经有了,下面我们就开始进行代码的编写了。我们分成两步来实现。

1、合并所有的按钮权限到一个数组中去。

不知道大家还记不记得,在上一章我们在Admin.vue页面中获取到了菜单。

//返回的按钮菜单
let data = store.state.global.menus;

下面我们就从菜单中提取按钮权限

//合并按钮权限
let btnList = filterMenusList(data);
store.commit('setAuthBtns', btnList);

在这里我们把处理后的菜单存放到了store中去了,
我把处理的函数filterMenusList,放到了utils.js文件中了

utils.js

/**
 * 处理菜单数组,返回按钮集合
 * menus 菜单数据
 */
export function filterMenusList(menus){
    const buttonList = [];
    menus.length > 0 && menus.map((vo, key) => {
        if(vo.buttonList.length == 0 && vo.childrenList.length > 0){
            buttonList[vo['path']] = (permissionList(vo.childrenList));
        }else{
            buttonList[vo['path']] = vo.buttonList;
        }
    });
    return buttonList;
}

这里按钮的数据我们已经获取到了,下面我们就是使用了

2、使用按钮权限

在util下创建permission.js

import store from '@/store';

// 用来控制按钮的显示
export function hasBtnPermission(permission) {
    const myBtns = store.state.authBtns;
    return myBtns.includes(permission);
}

在mian.js文件中调用

import { hasBtnPermission } from './util/permission' //引用按钮权限文件

//绑定到全局属性中去
app.config.globalProperties.hasPer = hasBtnPermission;

3、使用

<el-button type="primary" v-if="hasPer('about/add')">添加关于我们</el-button>


结束语

已经就是菜单与按钮权限的设计流程,这个也是最简单的。其实在实际应用中我们还有更复杂的设计。如果你有什么问题,或者有新的设计思路可以和大家一起交流一下。

相关推荐

不看必后悔!15个三星GoodLock隐藏小技巧~(上)

很多刚用三星手机的星粉们,一定对三星GoodLock这个宝藏App还不是很了解,今天就带大家一起详细去看看GoodLock这个大家族究竟有多少宝藏功能及成员呢?让我们一起来看看吧~由于Good...

惊魂幻象理智值监控WA!大字体+范围提示一目了然

一个WA助你轻松监控大幻象理智值,不再错过恢复时机这个WA用大字体实时同步我们的理智值下面的图标提示恢复宝珠的剩余次数上面的图标高亮则意味着我们在宝珠的恢复范围内我们可以将图标随意移动到适合自己观察的...

盘点十个超炫的jQuery插件(jquery插件是干什么的)

“DevExpress14.2新版发布会”即将推出。心动不如行动,赶快报名吧!我们期待与您相约。今天小编为大家搜罗了十个超酷的jQuery插件,这可以使你的网站界面更加友好。jQuery创造了令人难...

Google官方梳理,Android 多返回栈技术详解

用户通过系统返回按钮导航回去的一组页面,在开发中被称为返回栈(backstack)。多返回栈即一堆"返回栈",对多返回栈的支持是在Navigation2.4.0-alpha0...

说三星手机系统不好用,因为没有玩明白三星,三星Diy功能超强大

都说三星手机系统不好用,其实真正用起来,挺好用的三星手机系统像块没打磨的玉,默认设置是基础款,用着普通。但你要是肯花点时间,它能变得特别顺手。关键就在一个叫GoodLock的工具,它是三星自家出的...

Sam Helper三星手机用户必装神器(三星手机必装app)

SamHelper这款软件集合了三星手机主题工具当前主题o主题路径o主题安装系统设置屏幕模式o状态栏o文件o频段o暗码Lock&LabsGoodLockoGalaxyLa...

外卖套餐搭配的探索和应用(外卖套餐搭配技巧)

本文系外卖美食知识图谱系列的第三篇文章,从技术层面我们会介绍外卖套餐搭配的技术方案,包括离线、实时的套餐搭配的迭代,套餐质量评估方案,同时会介绍套餐搭配的业务应用。1.背景让用户更方便快捷地选购到满...

用几行原生JS就可以实现丝滑的元素过渡效果

作者:ConardLi大家可以看下下面这个应用的页面切换体验,是不是很丝滑~做过体验优化的朋友应该都清楚,如果用原生的CSS或者JS动画去实现,想要实现出类似的效果,不会特别简单,而且也要考...

速腾车主RNS315固件及2016年6月地图升级详细教程

本来打算买个大众原厂的地图卡,后来在网上看其实不需要原厂地图卡也可以升级,于是开始在网上收集资料,开始天真的以为只要有密匙文件修改一下就可以免费升级了,其实最主要的还是破解的固件,不知道为什么,网上找...

学习一个母词act,一次解析一串关联、复合、衍生词族

首先形义解读一下act的原始意象,A是力量与行动的开始C是范围的覆盖T是目标目的的接触与刻度合在一起,行动行为艺术力量的复合行为以下是关于act的复合词、词根词缀衍生词及其变形后的词根衍生词的详细...

优迈系统(一体化控制柜)快车调试(八)

逻辑故障和驱动故障分析段码管上显示警告码和故障码对照表警告码操作模式故障码操作模式或驱动故障AL000EPC(紧急电源管制模式)ER100DTC(门在设定时间内不能关到位)AL001COR(复位模式)...

Layui简单实现左侧菜单和Tab选项卡动态操作

<!DOCTYPEhtml><html><head><metacharset="utf-8">...

码农如何快速打造一个有设计感的网站

像我这样的程序员来说经常被“设计”这个词吓到,因为我是一名程序员而不是设计师,我拥有的是计算机学位证,另外我对ComicSans字体并不介意。(注:ComicSans字体是Win95附带...

vue3 新特性 computed、watch、watchEffect 看完就会

1、watchEffectwatchEffect侦听器是一个副作用函数,不需要指定监听的某个属性,监视的回调中用到哪个属性,就会监听哪个属性,一旦运行就会立即执行。watchEffect与com...

10个冷门但非常实用前端开发者很少用的CSS规则

许多开发者只学了基础——比如修改颜色、设置字体或创建弹性布局——就止步不前。但CSS是一门精深而多用途的语言,掌握后能帮你构建优雅、高效且无障碍的界面。无论你是从零搭建还是微调设计系统,掌握一些高...