路由上传一个ui_control参数(uint32类型)控制页面UI显隐

前言:传一个uint32类型的值,通过 按位或操作符(|)来设置ui_control的值,通过按位与操作符(&)来检测是否显示或隐藏

简单介绍一下两个概念:

按位与操作符和按位或操作符都是二进制位运算符。

  1. 按位与操作符(&):对于每一个二进制位,只有当两个操作数的对应位都为1时,结果的对应位才为1,否则为0。例如,5(二进制101) & 3(二进制011)的结果是1(二进制001)。

  2. 按位或操作符(|):对于每一个二进制位,只要两个操作数的对应位有一个为1时,结果的对应位就为1,否则为0。例如,5(二进制101) | 3(二进制011)的结果是7(二进制111)。

这两种操作符在计算机编程中常用于位操作,如设置位标志、清除位标志、切换位标志等。

一、demo1:路由传一个ui_control,用高16位设置允许修改,修改位用第17位检测

var ui_control = 0;
ui_control = (ui_control | (1 << 17));
console.log(ui_control) // 131072

这时候ui_control参数传131072,在页面中做检测看是否允许修改

var uiControl = Number(new URLSearchParams(location.search).get('uiControl'))
if ((control & (1 << 17)) !== 0) {console.log("1 表示允许修改");
} else {console.log("0 表示不允许修改");
}

二、demo2:路由传一个ui_control,同时控制修改和导出权限,修改位用第17位检测,导出位用第16位检测

既允许修改也允许导出

var ui_control = 0;
ui_control = (ui_control | (1 << 17));
ui_control = (ui_control | (1 << 16));console.log(ui_control) // 196608

这时候ui_control参数传196608,通过与运算检测第16位导出是否为1,第17位修改是否为1,就能知道是否有对应权限了

咱们封装一个方法出来

// keys 传一个检测权限的key,比如下面Edit编辑,Export导出
const getUiControlBinaryContent = (keys) => {var uicontrol = Number(new URLSearchParams(location.search).get('uiControl'))let uint32 = new Uint32Array(1);uint32[0] = uicontrol;const action = new Map<string, any>([['Edit', checkUnitBuffer(uint32[0], 17)], // 第17位['Export', checkUnitBuffer(uint32[0], 16)], // 第16位]);return keys ? action.get(keys) : 0;
};// 与或位控制
const checkUnitBuffer = (control: number, idx: number) => {if (!idx) return 0; if ((control & (1 << idx)) !== 0) {return 1; // 表示有该操作权限} else {return 0; // 表示没有该操作权限}
};

这样的话在这些操作的地方就直接能调用getUiControlBinaryContent方法传对应key值就可以知道是否有权限了

上面的demo1和demo2是高16位的检测,接下来我们简单说一下低16位的检测

三、举个例子:低0,1,2,3,4位控制,高16,17位控制总结

1、设置ui_control:我这里用简单的html元素来展示,你们按照自己的库来做就行,最终的UI_Control就是路由上要传的参数

/*** unit32 生成 ui_control*  ● 是否修改:ui_control & (1 << 17)● 是否导出:ui_control & (1 << 16)● 是否显示思维导图:ui_control & (1 << 4)● 是否显示原文:ui_control & (1 << 3)● 是否显示章节概率:ui_control & (1 << 2)● 是否显示全文总结:ui_control & (1 << 1)● 是否显示视频:ui_control & 1*/
function onCreateUiControl() {var ui_control = 0;const Edit = document.getElementById("Edit");const Export1 = document.getElementById("Export");const VideoPre = document.getElementById("VideoPre");const MindMap = document.getElementById("MindMap");const AllText = document.getElementById("AllText");const ChapterOverviewt = document.getElementById("ChapterOverviewt");const FullTextSummary = document.getElementById("FullTextSummary");if (Edit.checked) ui_control = (ui_control | (1 << 17));if (Export1.checked) ui_control = (ui_control | (1 << 16));if (VideoPre.checked) ui_control = (ui_control | 1);if (MindMap.checked) ui_control = (ui_control | (1 << 4));if (AllText.checked) ui_control = (ui_control | (1 << 3));if (ChapterOverviewt.checked) ui_control = (ui_control | (1 << 2));if (FullTextSummary.checked) ui_control = (ui_control | (1 << 1));document.getElementById("ui_control").value = ui_control;// TODO 这个最终的ui_control就是你设置的上面某些功能的权限了console.log("ui_control", ui_control);
}

2、检测ui_control权限:调用getUiControlBinaryContent(key)传对应keys值做检测

/*** UI控制使用16位位运算 https://tool.oschina.net/hexconvert* 每一位可以看作一个开关,1表示开,0表示关。* 右移操作符>>和按位与操作符&来获取每一位的值。如果某一位的值为1,那么对应的开关就是开,如果某一位的值为0,那么对应的开关就是关。* 	● 是否修改:ui_control & (1 << 17)● 是否导出:ui_control & (1 << 16)● 是否显示思维导图:ui_control & (1 << 4)● 是否显示原文:ui_control & (1 << 3)● 是否显示章节概率:ui_control & (1 << 2)● 是否显示全文总结:ui_control & (1 << 1)● 是否显示视频:ui_control & 1*/
const getUiControlBinaryContent = (keys) => {var uicontrol = Number(new URLSearchParams(location.search).get('uiControl'))let uint32 = new Uint32Array(1);uint32[0] = uicontrol;const action = new Map<string, any>([['Edit', checkUnitBuffer(uint32[0], 17)],['Export', checkUnitBuffer(uint32[0], 16)],['VideoPre', checkUnitVideo(uint32[0], 1)],['MindMap', checkUnitBuffer(uint32[0], 4)],['AllText', checkUnitBuffer(uint32[0], 3)],['ChapterOverviewt', checkUnitBuffer(uint32[0], 2)],['FullTextSummary', checkUnitBuffer(uint32[0], 1)]]);return keys ? action.get(keys) : 0;
};// 与或位控制
const checkUnitBuffer = (control: number, idx: number) => {if (!idx) return 0; if ((control & (1 << idx)) !== 0) {return 1;} else {return 0;}
};

总结:路由上设置ui_control,通过第几位用按位或来设置具体值,用按位与来解析是否有权限

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

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

相关文章

etcd的备份与恢复

一 为什么使用etcd 与ZooKeeper相比&#xff0c;etcd更简单&#xff0c;安装、部署和使用更加容易&#xff0c;并且etcd的某些功能是ZooKeeper所没有的。因此&#xff0c;在很多场景下&#xff0c;etcd 比ZooKeeper更受用户的青&#xff0c;具体表现在如下几个方面: 1 etcd更…

鑫创SSS1700USB音频桥芯片USB转IIS芯片

鑫创SSS1700支持IIC初始外部编&#xff08;EEPROM选项),两线串行总线&#xff08;I2C总线&#xff09;用于外部MCU控制整个EEPROM空间可以通过MCU访问用于主机控制同步的USB HID外部串行EEPROM&#xff08;24C02~24C16&#xff09;接口&#xff0c;用于客户特定的USB视频、PID、…

jmeter之变量随机参数化以及解决多线程不会随机变化

参考链接&#xff1a; https://www.cnblogs.com/Testing1105/p/12743475.html jmeter 使用random函数多线程运行时数据不会随机变化&#xff1f;_jmeter 线程组循环执行时 变量不变-CSDN博客 1、如下图所示&#xff0c;需要对请求参数 autor 和phone进行随机参数化 2、目前有…

MyBatis源码中的设计模式2

组合模式的应用 组合模式介绍 组合模式(Composite Pattern) 的定义是&#xff1a;将对象组合成树形结构以表示整体和部分的层次结构。组合模式可以让用户统一对待单个对象和对象的组合。 比如&#xff1a;Windows操作系统中的目录结构&#xff0c;通过tree命令实现树形结构展…

【系统架构设计师】十二、系统质量属性与架构评估(开发期质量属性|运行期质量属性|面向架构评估的质量属性|质量属性效用树|质量属性场景)

目录 一、软件系统质量属性 1.1 开发期质量属性 1.2 运行期质量属性 1.3 面向架构评估的质量属性 1.4 质量属性效用树 1.5 质量属性场景 1.5.1 可用性质量属性场景描述 1.5.2 可修改性质量属性场景描述 1.5.3 性能质量属性场景描述 相关推荐 历年真题练习 历…

【vue】输入框和文本域切换

输入框的样子 文本域的样子 当输入框出现滚动条的时候&#xff0c;就自动切换成文本域&#xff1b;当文本域到1行并且宽度小于输入框宽度时切换成输入框 <div class"left_box_inpt"><divclass"right_box_inpt":class"{notclickable: inputd…

Open3D 最小二乘法拟合点云平面

目录 一、概述 1.1最小二乘法原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2matplotlib可视化 3.3平面拟合方程 前期试读&#xff0c;后续会将博客加入该专栏&#xff0c;欢迎订阅 Open3D点云算法与点云深度学习…

【学术会议征稿】第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024)

第四届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 第四届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2024&#xff09;将…

简约唯美的404HTML源码

源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…

第二证券:市场估值依然处于较低区域 适合中长期布局

A股中报成绩预告显示相比2024Q1&#xff0c;2024Q2企业产品销量或订单已有回暖&#xff0c;但价格反转暂未大面积到来&#xff0c;“量增价平、部分板块以价换量”是2024H1 A股成绩预告较显着的量价特征&#xff0c;这与微观库存周期有待回暖相匹配。此外中游部分环节出现不同程…

新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff1b;支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#xff0…

【Linux】进程信号 --- 信号产生

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【转型Web3开发第二课】Dapp开发入门基础 | 02 | MetaMask配置网络

本文首发于公众号&#xff1a;Keegan小钢 前言 完成了《转型 Web3 开发第一课》之后&#xff0c;得到了不少读者的认可&#xff0c;很多都在问什么时候开始下一课&#xff0c;近期终于抽出了时间开始搞起这第二课。 这第二课的主题为「Dapp开发入门基础」&#xff0c;即想要转…

浅谈Visual Studio 2022

Visual Studio 2022&#xff08;VS2022&#xff09;提供了众多强大的功能和改进&#xff0c;旨在提高开发者的效率和体验。以下是一些关键功能的概述&#xff1a;12 64位支持&#xff1a;VS2022的64位版本不再受内存限制困扰&#xff0c;主devenv.exe进程不再局限于4GB&#xf…

【ffmpeg命令入门】重新编码媒体流、设置码率、设置帧速率

文章目录 前言ffmpeg的描述重新编码媒体流重新编码媒体流的命令ffmpeg支持的媒体流 设置视频码率视频码率是什么设置视频的码率 设置文件帧数率帧数率是什么ffmpeg设置帧数率 总结 前言 在数字媒体处理领域&#xff0c;ffmpeg是一款非常强大的工具&#xff0c;它可以用来进行媒…

自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection

文章目录 1. 摘要概述2. 背景介绍3. 方法3.1 俯视图投影3.2 网络结构3.2.1 投影变换层3.2.2 投影变换层3.2.3 道路投影预测分支 3.3 车道预测头3.4 训练和真实值关联 4. 实验4.1 合成 3D 车道数据集4.2 真实世界 3D 车道数据集4.3 评估结果4.4 评估图像仅车道检测 5. 总结和讨论…

windows下gcc编译C、C++程序 MinGW编译器

文章目录 1、概要2、MinGW安装2.1 编译器下载2.2 编译器安装2.3 设置环境变量2.4 查看gcc版本信息 3、编译C、C程序3.1 编写Hello World.c3.2 编译C程序3.3 运行程序3.4 编译C程序 1、概要 GCC原名为GNU C语言编译器&#xff08;GNU C Compiler&#xff09;&#xff0c;只能处…

Linux系统下weblogic10.3.6版本打补丁步骤

linux系统 weblogic补丁压缩包&#xff1a;p35586779_1036_Generic.zip 链接&#xff1a;https://pan.baidu.com/s/1EEz_zPX-VHp5EU5LLxfxjQ 提取码&#xff1a;XXXX &#xff08;补丁压缩包中包含以下东西&#xff09; 打补丁步骤&#xff1a; 1.备份原weblogic(需要先确保服…

Langchain[3]:Langchain架构演进与功能扩展:流式事件处理、事件过滤机制、回调传播策略及装饰器应用

Langchain[3]:Langchain架构演进与功能扩展&#xff1a;流式事件处理、事件过滤机制、回调传播策略及装饰器应用 1. Langchain的演变 v0.1: 初始版本&#xff0c;包含基本功能。 从0.1~0.2完成的特性&#xff1a; 通过事件流 API 提供更好的流式支持。标准化工具调用支持Tool…

哪些基于 LLMs 的产品值得开发?从用户体验和市场接受度的角度探讨

编者按&#xff1a;在大语言模型&#xff08;LLMs&#xff09;相关技术高速发展的今天&#xff0c;哪些基于 LLMs 的产品真正值得我们投入精力开发&#xff1f;如何从用户体验和市场接受度的角度评估这些产品的潜力&#xff1f; 今天为大家分享的这篇文章&#xff0c;作者的核心…