[]
设计器支持查看模式权限控制。当用户权限设置为查看模式时,默认上下文菜单项将被隐藏,功能区项将被禁用。
如果当前用户的权限设置为查看模式,设计器的功能区和上下文菜单将相应调整。
当用户权限处于查看模式时,默认情况下,上下文菜单项将被隐藏,功能区项将被禁用。如果用户需要使自定义上下文菜单项或功能区项在查看模式下可用,必须向ICommand添加属性:
功能区项:需要设置属性viewModeEnableContext
上下文菜单项:需要设置属性viewModeVisibleContext
metaData:需要向该项执行的命令添加metaData属性,在其中设置viewModePermission属性以控制命令在哪些权限类型下可用。
默认情况下,当当前用户权限为仅查看时,内置功能区项和上下文菜单项的行为如下:
功能区:功能区项将根据权限设置为不可用。默认情况下,仅启用复制、查找、查找…和转到…。


当用户的viewModePermission包含allowNonDataModifyingOperations时,功能区上的复制、查找、查找…和转到…将被启用。
当用户的viewModePermission包含allowHideRowsOrColumns时,功能区上的复制、查找、查找…和转到…将被启用。
当用户的viewModePermission包含allowResizeRowsOrColumns时,功能区上的复制、查找、查找…和转到…将被启用。
当用户的viewModePermission包含allowFilter时,功能区上的复制、查找、查找…、转到…、排序和筛选、筛选、清除筛选和重新应用将被启用。


当用户的viewModePermission包含allowSort时,功能区上的复制、查找、查找…、转到…、排序和筛选、升序排序、降序排序和自定义排序…将被启用。


上下文菜单:菜单项将根据权限隐藏。
当用户的viewModePermission包含allowNonDataModifyingOperations时,上下文菜单将显示复制。

当用户的viewModePermission包含allowHideRowsOrColumns时,上下文菜单将显示复制、隐藏和取消隐藏。

当用户的viewModePermission包含allowResizeRowsOrColumns时,上下文菜单将显示复制、行高…和列宽…。

当用户的viewModePermission包含allowFilter时,上下文菜单将显示复制和筛选。

当用户的viewModePermission包含allowSort时,上下文菜单将显示复制、排序、升序排序和降序排序。

interface GC.Spread.Sheets.Designer.ICommand {
...,
viewModeVisibleContext?: string; // 用于上下文菜单项
viewModeEnableContext?: string; // 用于功能区项
}假设需要向设计器功能区添加新的功能区项“自动调整所有”。单击它可以自动调整当前工作表的所有行和列。当用户处于编辑模式或处于查看模式但allowResizeRowsOrColumns时可用。
要完成此功能:
获取用户的权限信息,并记录用户是否allowsResizeRowsOrColumns。
将命令添加到config的commandMap中。请注意,该命令需要设置viewModeEnableContext属性。
添加命令组,将命令放入组中,并将此命令组添加到功能区config中。
将config设置到设计器。
// 更新当前用户权限信息。
// 1. 需要获取用户的权限信息,并记录用户是否为allowsResizeRowsOrColumns。
const user = spread.collaboration.getUser(),
permission = user && user.permission,
browsingMode = permission && permission.mode,
viewModePermissions = permission && permission.viewModePermissions;
const AllowViewModeResizeRowsOrColumnsFlag = "allowViewModeResizeRowsOrColumns";
if (browsingMode === GC.Spread.Sheets.Collaboration.BrowsingMode.view && viewModePermissions & GC.Spread.Sheets.Collaboration.PermissionTypes.allowResizeRowsOrColumns) {
designer.setData(AllowViewModeResizeRowsOrColumnsFlag , true);
}
// 添加自定义命令“AutoFitAll”
// 2. 将命令添加到config的commandMap中。请注意,该命令需要设置viewModeEnableContext属性。
const autoFitAllCommand = {
text: "AutoFitAll",
commandName: "autoFitAll",
iconClass: "ribbon-button-autofit-all",
bigButton: true,
viewModeEnableContext: AllowViewModeResizeRowsOrColumnsFlag, // 如果用户不在查看模式,或者用户在查看模式但viewModePermissions包含allowResizeRowsOrColumns
execute: (context) => {
const spread = context.Spread, sheet = spread.getActiveSheet(), rowCount = sheet.getRowCount(), colCount = sheet.getColumnCount();
spread.collaboration.startBatchOp();
sheet.suspendPaint();
for (let i = 0; i < rowCount; i++) {
sheet.autoFitRow(i);
}
for (let i = 0; i < colCount; i++) {
sheet.autoFitColumn(i);
}
sheet.resumePaint();
spread.collaboration.endBatchOp();
}
}
const config = GC.Spread.Sheets.Designer.DefaultConfig;
config.commandMap = {
autoFitAll: autoFitAllCommand
};
// 3. 添加命令组,将命令放入组中,并将此命令组添加到功能区config中。
const autoFitCommandGroup = {
label: "AutoFit",
thumbnailClass: "AutoFit",
commandGroup: {
children: [{
direction: "vertical",
commands: ["autoFitAll"]
}]
}
}
config.ribbon[0].buttonGroups.unshift(autoFitCommandGroup);
// 4. 将config设置到设计器。
designer.setConfig(config);