v-has 全局按钮权限设置(Vue2)

需求:一些操作按钮默认打开是隐藏的,发送后台请求返回当前登录人的人员类别,前端控制操作按钮权限,动态显示或者隐藏 操作按钮。

首先想到v-has自定义指令,因为当前只是一部分的权限控制,所以就没有放到全局main.js文件中控制,放到页面入口文件定义v-has

首先:store中新增auth.js 。 vuex的好处就是一处更新,全局状态响应式自动更新,所以是必须用到的。auth的值是接口返回的,只需要请求一次,全局使用。

const Auth = {state: {auth: '',},mutations: {FAULT_AUTH: (state, data) => {if (!data) {state.auth = ''return;}state.auth = data;},},actions: {},
}export default Auth;

下面是js代码:发起权限接口,获取当前登录人是什么类别

getPermissions() {const that = this;this.resAuth = "";// 开始之前置空,为了触发v-model 响应式// axios//   .get("/xxx")//   .then((res) => {//     console.log(res);setTimeout(() => {let res = {success: true,message: "操作成功!",code: 0,result: 2, //1 ,2  ,3  分别代表不同的人员分类timestamp: 1720514437782,};that.$nextTick(() => {that.$set(that, "resAuth", res.result + "");//更新 that.$store.commit("FAULT_AUTH", res.result + "");// 把登陆人类别放到vuex中});}, 1000);// })// .catch((err) => {//   console.log(err);//   that.$nextTick(() => {//     that.resAuth = "";//     that.$store.commit("FAULT_AUTH", "");//   });// });}

在 template中:

<van-buttonv-has="[resAuth, '1,2,3']"size="mini"type="info"plain>关闭</van-button>
resAuth是一个变量,目的是为了后台请求返回权限数据的时候,更新resAuth的值,从而触发directives中的update方法进行控制显隐。
1,2,3 代表这三类人都可以操作,否则没权限,隐藏掉。入口vue文件:
```javascriptdirectives: {has: {// bind:function (params) {//第一次绑定执行//   console.log('bind----');// },inserted: function (el, binding) {let hasAuth = judgeAuth(binding.value[1]);//首次加载后端没返回权限字段的时候,先给按钮隐藏掉。因为是后台异步返回,所以不能在inserted中控制显示。需要在update中显示。在这里发起请求,控制也能实现,弊端就是每一个按钮都要发送一次请求。浪费if (!hasAuth) {el.style.display = "none";}},update: function (el, binding, vnode) {//当绑定的v-has参数有发生变更的时候,触发update方法 // const that = vnode.context;//如果要访问当前vue实例的this,用这个let hasAuth = judgeAuth(binding.value[1]);if (!hasAuth) {el.parentNode && el.parentNode.removeChild(el);} else {el.style.display = "block";}},},},

当前是h5页面,列表需要支持下拉刷新,每次下拉刷新一次,都要执行一遍directives方法,第一次加载正常,下拉刷新一遍,原本有权限的又给隐藏掉了。

刚开始想的是 在store中添加一个hasPermission字段,在update中commit更新,然后在 inserted中 判断store中的hasPermission字段,控制是否隐藏。但是问题是,按钮的操作权限是不同的,有些可以操作,有些不能操作,所以这个不行。只好每次在执行到inserted方法执行中judgeAuth方法判断一次。

judgeAuth方法:

function judgeAuth(authStr) {const currentAuth = store.state.faultAuth.auth;if (!currentAuth || currentAuth == 0) {return false;}let arr1 = authStr.split(',')if (!arr1 || arr1.length == 0) {return false;}let hasAuth = false;for (let i = 0; i < arr1.length; i++) {if (arr1[i] == currentAuth) {hasAuth = true;break;}}return hasAuth;
}

到此就正确实现了按钮按人员类别控制显隐了。
不知道还有没其他更简单的方法可以实现,有的话,欢迎一起讨论噢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AutoSAR自适应平台架构总览--AP的初认识

AutoSAR自适应平台架构总览:AP 基础设施层&#xff08;Foundation Layer&#xff09;核心操作系统&#xff08;Core OS&#xff09;通信管理&#xff08;Communication Management&#xff09; 服务层&#xff08;Services Layer&#xff09;诊断服务&#xff08;Diagnostics S…

rust 生命周期(八)

生命周期定律和原则 1.借用检查器: Rust 编译器使用借用检查器来验证所有引用在其使用的整个过程中都是有效的。借用检查器通过生命周期来跟踪引用。 2.显式生命周期注解: 当涉及多个引用时&#xff0c;可能需要显式地指定生命周期&#xff0c;以帮助编译器理解引用之间的关…

MySQL窗口函数详解

MySQL窗口函数详解 MySQL从8.0版本开始引入了窗口函数&#xff0c;这是一个强大的特性&#xff0c;可以大大简化复杂的数据分析任务。本文将详细介绍MySQL窗口函数的概念、语法和常见用法&#xff0c;并结合实际应用场景进行说明。 什么是窗口函数? 窗口函数是一种能够对结…

day03 swagger

导入swagger3的步骤&#xff1a; pom.xml&#xff08;只需要子模块配置&#xff09;配置&#xff1a; <!--springdoc 集成了 swagger3--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</a…

谷粒商城实战笔记-高效工作经验积累

当然&#xff0c;我会提供一个更具体的例子来说明这两个原则的重要性及其背后的惨痛经历。 1. 先理解需求&#xff0c;后写代码 惨痛经历 几年前&#xff0c;我所在的团队负责为开发一个在线预订系统。 项目启动之初&#xff0c;我们急于展示成果&#xff0c;没有充分理解客…

UE5+OpenCV配置(Windows11系统)

一、概述 因为需要在UE5中使用OpenCV这些工具进行配置&#xff0c;所以在网络上参考借鉴一些资料进行配置。查询到不少的资料&#xff0c;最后将其配置成功。在这里顺便记录一下自己的配置成功的过程。 二、具体过程 &#xff08;一&#xff09;版本 使用Windows11系统、UE5.…

CSS(九)——CSS 轮廓(outline)

CSS 轮廓&#xff08;outline&#xff09; 轮廓&#xff08;outline&#xff09;是绘制于元素周围的一条线&#xff0c;位于边框边缘的外围&#xff0c;可起到突出元素的作用。 轮廓&#xff08;outline&#xff09;属性指定元素轮廓的样式、颜色和宽度。 让我们用一个图来看…

基于Java中的SSM框架实现高校心理评测与分析系统项目【项目源码+论文说明】

基于Java中的SSM框架实现高校心理评测与分析系统演示 摘要 为了让学校和教师方面更好的深入了解学生的心理&#xff0c;有助于加强学生心理建设。该系统使用Java语言开发&#xff0c;系统架构采用SSM技术来实现功能性开发&#xff0c;MySQL数据库存放数据&#xff0c;实现了进…

springAOP理解及事务

AOP&#xff1a; springAOP是什么&#xff1a; AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程。 使用场景&#xff1a; 比如你想统计业务中每个方法的执行耗时&#xff0c;那我们最…

git cherry-pick用法

git cherry-pick 如何将我另一个分支上的某个提交合并到新的分支上 首先切换到新分支上git cherry-pick <commit_hash>例如&#xff1a;git cherry-pick f8a70c9

python实现接缝雕刻算法

python实现接缝雕刻算法 接缝雕刻算法步骤详解Python实现详细解释优缺点应用领域接缝雕刻算法(Seam Carving Algorithm)是一种内容感知的图像缩放技术,可以智能地改变图像的尺寸,而不会明显影响其重要内容。它通过动态规划的方式寻找图像中的“接缝”,即在图像中从上到下或…

jenkins自动化持续集成

一、持续集成优势 1.1 解放重复劳动 一次设置&#xff0c;多次复用。持续集成任务可以解放集成、测试、部署等重复性劳动&#xff0c;通过自动化任务能够显著提升集成频率。 1.2 更快解决问题 接入持续集成任务后&#xff0c;能够更早地感知变更后效果&#xff0c;及时进入…

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压&#xff0c;解压之后还要配置环境变量&#xff08;把allure目录下bin目录配置到系统变量的path路径&#xff09;&#xff0c;下…

树形dp例题2

洛谷p2015绿 题意&#xff1a;有一棵苹果树&#xff0c;如果树枝有分叉&#xff0c;一定是分二叉&#xff08;就是说没有只有一个儿子的结点&#xff09;这棵树共有 N个结点&#xff08;叶子点或者树枝分叉点&#xff09;&#xff0c;编号为 1∼&#x1d441;&#xff0c;树根…

mysql语法介绍

MySQL 语法主要基于 SQL&#xff08;Structured Query Language&#xff09;标准&#xff0c;用于管理和操作关系型数据库。以下是一些基本的 MySQL 语句&#xff1a; 1.创建数据库&#xff1a; CREATE DATABASE database_name; 1.选择数据库&#xff1a; USE database_name;…

WPF使用TouchSocket实现Tcp client

文章目录 前言1、页面展示2、主页面UI代码2、TCP client的UI代码3、Tcp client后台代码实现4、UI与后台代码的关联 前言 在该篇的Demo中&#xff0c;您可以找到以下内容&#xff1a; 1、TouchSocket的使用&#xff1b; 2、CommunityToolkit.Mvvm的使用&#xff1b; 3、AvalonD…

GPT-4o Mini:探索最具成本效益的小模型在软件开发中的应用

随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域也取得了显著的进步。OpenAI 最新发布的 GPT-4o Mini 模型&#xff0c;以其卓越的性能和极具竞争力的价格&#xff0c;成为了广大开发者关注的焦点。作为一名长期关注人工智能及其在软件开发…

破局产品同质化:解锁3D交互式营销新纪元!

近年来&#xff0c;随着数字体验经济的蓬勃发展&#xff0c;3D交互式营销作为一种创新手段迅速崛起&#xff0c;它巧妙地解决了传统产品展示中普遍存在的缺乏差异性和互动性的问题&#xff0c;使您的产品在激烈的市场竞争中独树一帜&#xff0c;脱颖而出。 若您正面临产品营销…

【Python数据结构与算法】枚举----特殊密码锁

题目&#xff1a;特殊密码锁 描述 有一种特殊的二进制密码锁&#xff0c;由n个相连的按钮组成&#xff08;1<n<30&#xff09;&#xff0c;按钮有凹/凸两种状态&#xff0c;用手按按钮会改变其状态。 然而让人头疼的是&#xff0c;当你按一个按钮时&#xff0c;跟它相邻…

自定义协议(应用层协议)——网络版计算机基于TCP传输协议

应用层&#xff1a;自定义网络协议&#xff1a;序列化和反序列化&#xff0c;如果是TCP传输的&#xff1a;还要关心区分报文边界&#xff08;在序列化设计的时候设计好&#xff09;——粘包问题 1、首先想要使用TCP协议传输的网络&#xff0c;服务器和客户端都应该要创建自己…