示例:命令权限页面
LIVE CANVAS可运行组件示例
ON-DEMAND RUNTIME交互式示例将在进入视区时启动避免文档首屏同时初始化多个 Canvas Runtime
import { CommandManager, RenderCommandButton } from 'ds-ui'
命令权限页面展示如何把按钮、菜单、快捷键和权限判断统一到命令系统中。目标是让同一个业务动作只有一份启用和执行逻辑。
基本结构
CommandManager
root scope
page scope
component scope
CommandToolbar
CommandButton
Menu
Shortcut
业务页面通常创建页面级命令范围。页面关闭时,页面级命令随页面释放。
最小示例
const manager = new CommandManager({ permissionService: { has: permission => permission === 'record.save', },}) manager.register({ id: 'record.save', title: '保存', permission: 'record.save', canExecute: () => canSave(), execute: () => save(),}) const button = new RenderCommandButton({ commandId: 'record.save', commandManager: manager,})
页面命令
页面常见命令:
- 查询。
- 保存。
- 删除。
- 打印。
- 导出。
- 打开帮助。
全局命令和页面命令要分开。全局命令如切换主题、打开诊断面板;页面命令如保存当前病历、删除当前行。
权限和启用
权限回答“这个用户有没有这个功能”。启用状态回答“当前状态下能不能执行”。两者不要混用。
示例:
- 用户有删除权限,但当前没有选中行,删除禁用。
- 用户有保存权限,但当前表单校验失败,保存禁用。
- 用户有打印权限,但当前文档未加载完成,打印禁用。
状态刷新
当页面状态变化时,命令状态需要重新求值。例如表格选中行变化、表单变脏、文档切换只读状态。
推荐在页面状态更新后统一刷新命令,而不是每个按钮单独计算。
审计接入
命令是业务操作审计的自然入口。命令执行时可以带上页面上下文、当前业务对象和触发来源。服务层再决定是否写正式审计。