DirectSurface UIDirectSurface UI
开始使用
文档/示例项目

示例:命令权限页面

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,})

页面命令

页面常见命令:

  • 查询。
  • 保存。
  • 删除。
  • 打印。
  • 导出。
  • 打开帮助。

全局命令和页面命令要分开。全局命令如切换主题、打开诊断面板;页面命令如保存当前病历、删除当前行。

权限和启用

权限回答“这个用户有没有这个功能”。启用状态回答“当前状态下能不能执行”。两者不要混用。

示例:

  • 用户有删除权限,但当前没有选中行,删除禁用。
  • 用户有保存权限,但当前表单校验失败,保存禁用。
  • 用户有打印权限,但当前文档未加载完成,打印禁用。

状态刷新

当页面状态变化时,命令状态需要重新求值。例如表格选中行变化、表单变脏、文档切换只读状态。

推荐在页面状态更新后统一刷新命令,而不是每个按钮单独计算。

审计接入

命令是业务操作审计的自然入口。命令执行时可以带上页面上下文、当前业务对象和触发来源。服务层再决定是否写正式审计。