permissionMap.ts.md 2.2 KB

permissionMap.ts

文件职责

定义按钮权限映射表,根据当前页面位置和数据状态动态计算各功能按钮的可用性。

实现方式

通过静态权限表动态计算逻辑相结合的方式,基于页面位置(LocationKey)和数据状态(DataState)返回各按钮的启用/禁用状态。

实现思路

  1. 类型定义:定义 BtnKey(按钮键)、LocationKey(页面位置键)、DataState(数据状态)类型
  2. 静态权限表:PERMISSION_MAP 定义了各页面下的按钮基础权限配置
  3. 动态填充:使用 forEach 为部分页面(worklist、historylist、exam、process)动态生成权限配置
  4. 状态计算:getBtnAvailability 函数根据页面位置和数据状态(hasSelection、hasExposedImage)动态调整按钮可用性
  5. 规则实现
    • worklist/historylist 页面:有选中项时才能进入 exam/process/print
    • exam 页面:有曝光图像时才能进入 process/print
    • process 页面:有曝光图像时才能进入 print

边界

输入边界

  • ✅ 接收 LocationKey(当前页面位置)
  • ✅ 接收 DataState(数据状态对象)
  • ❌ 不验证输入参数的有效性

输出边界

  • ✅ 返回各按钮的可用性映射对象
  • ❌ 不直接控制 UI 按钮状态
  • ❌ 不触发页面跳转

职责边界

  • ✅ 负责定义页面按钮权限规则
  • ✅ 负责根据数据状态计算按钮可用性
  • ❌ 不负责用户权限验证
  • ❌ 不负责页面路由管理
  • ❌ 不负责数据状态的维护

涉及概念

按钮权限映射:定义不同页面下各功能按钮是否可用的规则表

页面位置(LocationKey):当前用户所在的页面标识,如 register、worklist、exam 等

数据状态(DataState):影响按钮可用性的数据状态,包括 hasSelection(是否有选中项)和 hasExposedImage(是否有曝光图像)

动态权限计算:根据当前页面位置和数据状态实时计算按钮权限,而非完全静态配置

业务流程约束:通过权限控制实现业务流程的合理性,如必须先选中患者才能进入检查、必须有图像才能打印等