# 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(是否有曝光图像) **动态权限计算**:根据当前页面位置和数据状态实时计算按钮权限,而非完全静态配置 **业务流程约束**:通过权限控制实现业务流程的合理性,如必须先选中患者才能进入检查、必须有图像才能打印等