permissionMap.ts
文件职责
定义按钮权限映射表,根据当前页面位置和数据状态动态计算各功能按钮的可用性。
实现方式
通过静态权限表和动态计算逻辑相结合的方式,基于页面位置(LocationKey)和数据状态(DataState)返回各按钮的启用/禁用状态。
实现思路
- 类型定义:定义 BtnKey(按钮键)、LocationKey(页面位置键)、DataState(数据状态)类型
- 静态权限表:PERMISSION_MAP 定义了各页面下的按钮基础权限配置
- 动态填充:使用 forEach 为部分页面(worklist、historylist、exam、process)动态生成权限配置
- 状态计算:getBtnAvailability 函数根据页面位置和数据状态(hasSelection、hasExposedImage)动态调整按钮可用性
- 规则实现:
- worklist/historylist 页面:有选中项时才能进入 exam/process/print
- exam 页面:有曝光图像时才能进入 process/print
- process 页面:有曝光图像时才能进入 print
边界
输入边界
- ✅ 接收 LocationKey(当前页面位置)
- ✅ 接收 DataState(数据状态对象)
- ❌ 不验证输入参数的有效性
输出边界
- ✅ 返回各按钮的可用性映射对象
- ❌ 不直接控制 UI 按钮状态
- ❌ 不触发页面跳转
职责边界
- ✅ 负责定义页面按钮权限规则
- ✅ 负责根据数据状态计算按钮可用性
- ❌ 不负责用户权限验证
- ❌ 不负责页面路由管理
- ❌ 不负责数据状态的维护
涉及概念
按钮权限映射:定义不同页面下各功能按钮是否可用的规则表
页面位置(LocationKey):当前用户所在的页面标识,如 register、worklist、exam 等
数据状态(DataState):影响按钮可用性的数据状态,包括 hasSelection(是否有选中项)和 hasExposedImage(是否有曝光图像)
动态权限计算:根据当前页面位置和数据状态实时计算按钮权限,而非完全静态配置
业务流程约束:通过权限控制实现业务流程的合理性,如必须先选中患者才能进入检查、必须有图像才能打印等