找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2021-10-21 18:16  /   查看:3095  /  回复:0
本帖最后由 Winny 于 2021-11-12 13:10 编辑

在实际项目中,对于同一个模板,不同用户登录之后,能编辑的区域可能并不相同,针对当前权限的用户,需要动态的去控制其无法编辑的区域。本文提供有一种根据用户登记来切换可编辑范围的实现方案。要实现此需求,首先要了解SpreadJS中如何进行单元格保护,具体可以参考SpreadJS设置单元格保护 。本文根据权限改变编辑状态的步骤为:
step1: 设置模板单元格标签
image.png610290221.png

右键选中需要根据权限切换编辑状态的单元格,选择标签项,输入对应的标签。这里我将系统用户分为一级用户和二级用户,对应的值都为true。
用于用户不可编辑时,对应的单元格锁定状态需要变为true,因此这里表明,一级用户和二级用户都无法编辑当前单元格。
image.png470799560.png
上方截图表明,二级用户无法编辑当前选中区域。当模板中只有少量单元格用户无法编辑时,其实只需要给这些单元格添加标签即可,对应的标签中输入无法编辑的权限等级。这里其实用数组也可以实现,但是在正式项目中,业务逻辑可能比较复杂,因此用json来表示。

Step2: 设置当前sheet启用保护状态,且所有单元格默认不锁定。
  1. let sheet = spread.getActiveSheet()
  2. let defaultStyle = sheet.getDefaultStyle()
  3. defaultStyle.locked = false
  4. sheet.setDefaultStyle(defaultStyle)
  5. sheet.options.isProtected = true
复制代码


Step3:解析标签内容,根据标签具体内容设置锁定状态。
  1. for (let i = 0; i < sheet.getRowCount(); i++) {
  2.                     for (let j = 0; j < sheet.getColumnCount(); j++) {
  3.                         //没有tag信息跳过
  4.                         if (sheet.getTag(i, j)) {
  5.                             let info = JSON.parse(sheet.getTag(i, j))
  6.                             //当前tag是否存在key值为当前用户的数据项
  7.                             if (info[currentUser]) {
  8.                                 let range = sheet.getRange(i, j, 1, 1)
  9.                                 range.backColor('#9cf')
  10.                                 range.locked(true)
  11.                             }
  12.                         }
  13.                     }
  14.                 }
复制代码


至此,一个简单的根据权限设置编辑状态的例子就基本完成,需要本地测试时,建议下载附件Demo,因为Demo中还有设置内容时的优化点,并且提供了在用户切换时编辑范围的切换。
image.png71029051.png

如上图所示,用户可以点击红色区域中的下拉框,来模拟权限的切换。
测试文件见附件。


权限保护.zip

2.23 KB, 下载次数: 125

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部