如何能够高效实现表格中的分权限编辑功能

news/2024/10/16 18:59:33/

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

在表格类填报需求中,根据当前登录用户的不同等级,能填报的区域会有所不同。本文基于前端表格控件SpreadJS,介绍一种实现前端分权限编辑的实现方案。

(SpreadJS在浏览器端的展示效果)

先来看看SpreadJS是什么?

SpreadJS是一款类Excel的前端表格控件,操作及功能与Excel高度类似,但又完全脱离对Office的依赖。将SpreadJS集成到前端项目并部署发布后,用户只需要在PC上安装了满足H5标准的浏览器(Chrome、Firefox、Edge等),即可在浏览器端打开SpreadJS。

如果想更加深入的了解SpreadJS,可以打开官方在线体验地址及学习指南进行学习,接下来我们来介绍分权限编辑的具体实现方案。

为什么会想到使用SpreadJS呢?

之所以选择SpreadJS来做权限编辑的底层表格组件,主要是受业务人员启发。在Excel中,有一种机制叫做表单保护。表单保护是结合单元格锁定状态和工作表的保护状态,可以用来控制单元格是否可以编辑,这种可编辑控制的最小粒度可以达到单元格级别。

该如何来实现呢?

SpreadJS是一款类Excel的表格控件,具备表单保护的功能。实现编辑控制的核心API主要有单元格锁定及表单保护。我们将编辑权限控制整体分为三类,分别如下:

(1)整个工作表不可编辑

一个Excel文件我们称为一个工作簿,一个工作簿会包含多个工作表。默认状态下,工作表的锁定状态为true,此时如果想要设置整个工作表不可编辑,只要执行工作表保护相关代码即可。

(通过SpreadJS实现整个工作表不可编辑)

通过上图中红框所示的代码,Sheet1中所有单元格就不能再编辑了。如果设置完之后,发现单元格还是可以编辑,可能是因为原来的excel文件中默认单元格的锁定状态被修改成false了,此时可以用代码或右键设置单元格格式→保护来查看单元格的锁定状态。

如果需要整个工作簿都不可编辑,只需要循环去设置工作簿中每个工作表的保护状态即可。

(2)实现部分单元格可以编辑

之前讲到,不可编辑的原则是单元格锁定&表单保护同时生效。只要目标能够编辑的单元格不满足这个与条件,即可进行编辑。表单保护是在工作表上的控制参数,无法对应的单元格,因此想要与条件不成立,只需要将对应单元格的锁定状态设置为false即可。

(通过SpreadJS实现部分单元格可以编辑)

通过上图中黄色区域的代码即可实现设置A1:C6单元格可以编辑,其它单元格不能编辑的需求,这里文件默认单元格锁定状态为true,如果不生效,则需要检查其它单元格的锁定状态是否被修改为false,如果是的话,需要将其它单元格的锁定状态变为true。

(3)实现部分单元格不能编辑

默认单元格锁定状态为true,如果需要少量的单元格不能编辑,建议先将工作表的默认单元格锁定状态改为false,之后设置部分不能编辑的单元格锁定状态为true即可。

(通过SpreadJS实现部分单元格不能编辑)

通过上图红框中的代码,即可实现橙色区域可以编辑,区域区域不能编辑的需求。如果需要设置多个区域可以编辑,可以继续调用区域锁定(locked)相关的API即可,更加详细的UI实现设置及代码可以参考SpreadJS官方论坛相关教程链接。

简单总结一下

了解完单元格编辑的控制之后,接下来需要做的就是将用户权限与单元格打通,实现基于登录用户权限的编辑控制。SpreadJS为了迎合Web端需求,支持了单元格标签(Tag)属性,用于记录一些和单元格相关的额外不需要展示的信息,我们就可以将单元格编辑权限的相关信息记录在单元格Tag中。整体实现思路如下:

(1)预先在单元格Tag中设置和权限相关的信息。本方案中,将可以编辑的用户以字符串的形式写入单元格当中。例如单元格tag为’user1’,则代表当前单元格一级用户可以编辑,如果单元格tag为’user1,user2’则代表当前单元格一级用户与二级用户均可编辑。

(2)遍历查询当前单元格Tag中是否包含用户等级标记信息,若包含,表明当前用户可以编辑此单元格,将单元格对应的锁定状态变为false。

完整的实现Demo点击此处,跳转了解详细的代码。本文提供的是权限编辑的一种参考实现思路,如果大家有更好的实现方式,欢迎在评论区讨论。

扩展链接:

Spring Boot框架下实现Excel服务端导入导出

项目实战:在线报价采购系统(React +SpreadJS+Echarts)

React + Springboot + Quartz,从0实现Excel报表自动化


http://www.ppmy.cn/news/998293.html

相关文章

企业电子招投标采购系统源码之电子招投标的组成 tbms

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&…

YOLOv8-pose姿态模型笔记1

YOLOv8-pose关键点模型输出,每个框输出51个信息,即17个关键点以及每个关键点的得分 COCO的annotation一共有17个关节点。 分别是:“nose”,“left_eye”, “right_eye”,“left_ear”, “right_ear”,“left_shoulder”, “right_shoulder”…

Elasticsearch 全文检索 分词检索-Elasticsearch文章四

文章目录 官方文档地址refercence文档全文搜索体系match简单查询match 多词/分词单字段分词match多个词的逻辑控制match的匹配精度match_pharse_prefix分词前缀方式match_bool_prefixmulti_match多字段匹配 query string类型Interval类型DSL查询之Term详解聚合查询之Bucket聚合…

lc1074.元素和为目标值的子矩阵数量

创建二维前缀和数组 两个for循环,外循环表示子矩阵的左上角(x1,y1),内循环表示子矩阵的右下角(x2,y2) 两个for循环遍历,计算子矩阵的元素总和 四个变量,暴力破解的时间复杂度为O(…

ubuntu git操作记录设置ssh key

用到的命令: 安装git sudo apt-get install git配置git用户和邮箱 git config --global user.name “用户名” git config --global user.email “邮箱地址”安装ssh sudo apt-get install ssh然后查看安装状态: ps -e | grep sshd4. 查看有无ssh k…

今年嵌入式行情怎么样?

我不了解其它行业可能描述有些片面,但总的来说,我对嵌入式是很看好的,因为你可以感受到你能实际的做出产品而不是类似前端和互联网只是数字数据。 并且嵌入式的学习过程充满乐趣,你可以接触到从沙子到开关管到逻辑门到芯片架构到…

如何与 Dillard‘s 建立 EDI 连接?

Dillards 是主营时装、化妆品和家居用品的零售商,为顾客提供高质量的商品和优质的购物体验。2022年,Dillards 公司位列当年《财富》美国 500 强排行榜第 488 名。本文将为大家介绍 Dillards 的 EDI 需求,了解如何快速对接 Dillards EDI。 Dil…

Gartner:2022年全球IaaS公有云服务市场增长30%,首次突破1000亿美元

根据Gartner的统计结果,2022年全球基础设施即服务(IaaS)市场从2021年的928亿美元增长到1203亿美元,同比增长29.7%。亚马逊在2022年继续排在IaaS市场的第一名,其次是微软、阿里巴巴、谷歌和华为。 最新消息,…