Explorar el Código

feat (1.28.1 -> 1.29.0): 实现BusinessZone急诊按钮功能和权限控制

- 在权限映射表中添加急诊按钮类型和可用性控制
- 实现急诊按钮点击处理,与登录页面急诊功能一致
- 急诊按钮只在特定页面可用,其他页面不可用

改动文件:
- src/domain/permissionMap.ts
- src/layouts/BusinessZone.tsx
dengdx hace 2 semanas
padre
commit
305c5378a8
Se han modificado 4 ficheros con 43 adiciones y 8 borrados
  1. 24 0
      CHANGELOG.md
  2. 1 1
      package.json
  3. 9 1
      src/domain/permissionMap.ts
  4. 9 6
      src/layouts/BusinessZone.tsx

+ 24 - 0
CHANGELOG.md

@@ -2,6 +2,30 @@
 
 本项目的所有重要变更都将记录在此文件中。
 
+## [1.29.0] - 2025-12-25 20:29
+
+### 新增 (Added)
+- **BusinessZone急诊按钮功能** - 实现BusinessZone中的急诊按钮功能和权限控制
+  - 在权限映射表中添加急诊按钮类型和可用性控制
+  - 实现急诊按钮点击处理,与登录页面急诊功能一致
+  - 急诊按钮只在特定页面可用,其他页面不可用
+
+**核心功能实现:**
+- 权限控制:急诊按钮根据权限映射表控制可用性
+- 功能一致性:与登录页面急诊按钮功能完全一致
+- 用户体验:只在合适页面显示急诊按钮
+
+**技术实现:**
+- 权限映射表扩展:在 permissionMap.ts 中添加 emergency 按钮类型
+- 组件逻辑优化:在 BusinessZone.tsx 中实现急诊按钮的点击和显示逻辑
+- 类型安全:完整的 TypeScript 类型定义支持
+
+**改动文件:**
+- src/domain/permissionMap.ts
+- src/layouts/BusinessZone.tsx
+
+---
+
 ## [1.28.1] - 2025-12-25 17:59
 
 ### 修复 (Fixed)

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "zsis",
-  "version": "1.28.1",
+  "version": "1.29.0",
   "private": true,
   "description": "医学成像系统",
   "main": "main.js",

+ 9 - 1
src/domain/permissionMap.ts

@@ -11,7 +11,8 @@ export type BtnKey =
   | 'print'
   | 'settings'
   | 'me'
-  | 'patient_management';
+  | 'patient_management'
+  | 'emergency';
 
 // 页面 key 列表
 export type LocationKey =
@@ -46,6 +47,7 @@ const PERMISSION_MAP: Record<LocationKey, Record<BtnKey, boolean>> = {
     settings: false,
     me: false,
     patient_management: true,
+    emergency: true,
   },
   // eslint-disable-next-line
     worklist: {} as any, // 下面动态生成
@@ -64,6 +66,7 @@ const PERMISSION_MAP: Record<LocationKey, Record<BtnKey, boolean>> = {
     settings: true,
     me: true,
     patient_management: true,
+    emergency: true,
   },
   bin: {
     register: true,
@@ -78,6 +81,7 @@ const PERMISSION_MAP: Record<LocationKey, Record<BtnKey, boolean>> = {
     settings: true,
     me: true,
     patient_management: true,
+    emergency: true,
   },
   outputlist: {
     register: true,
@@ -92,6 +96,7 @@ const PERMISSION_MAP: Record<LocationKey, Record<BtnKey, boolean>> = {
     settings: true,
     me: true,
     patient_management: true,
+    emergency: true,
   },
   // eslint-disable-next-line
     exam: {} as any,
@@ -110,6 +115,7 @@ const PERMISSION_MAP: Record<LocationKey, Record<BtnKey, boolean>> = {
     settings: false,
     me: false,
     patient_management: true,
+    emergency: true,
   },
 };
 
@@ -128,6 +134,7 @@ const PERMISSION_MAP: Record<LocationKey, Record<BtnKey, boolean>> = {
     settings: true,
     me: true,
     patient_management: true,
+    emergency: true,
   };
   PERMISSION_MAP[loc] = base;
 });
@@ -147,6 +154,7 @@ const PERMISSION_MAP: Record<LocationKey, Record<BtnKey, boolean>> = {
     settings: false,
     me: false,
     patient_management: true,
+    emergency: false,
   };
   PERMISSION_MAP[loc] = base;
 });

+ 9 - 6
src/layouts/BusinessZone.tsx

@@ -10,6 +10,7 @@ import {
 import { RootState } from '@/states/store';
 import { IconButton } from '@/components/IconButton';
 import Icon from '@/components/Icon';
+import handleEmergencyOperation from '@/domain/patient/handleEmergencyOperation';
 
 interface BusinessZoneProps {
   onMenuClick?: (key: string) => void;
@@ -96,12 +97,12 @@ function useItems(btnAvailability: Record<string, boolean>, productName: 'DROS'
         },
       ],
     },
-    // {
-    //   key: 'emergency',
-    //   icon: 'Emergency',
-    //   label: '急诊',
-    //   disabled: false,
-    // },
+    {
+      key: 'emergency',
+      icon: 'Emergency',
+      label: '急诊',
+      disabled: !btnAvailability['emergency'],
+    },
     {
       key: 'exam',
       disabled:
@@ -257,6 +258,8 @@ const BusinessZone: React.FC<BusinessZoneProps> = ({ onMenuClick }) => {
               onClick={
                 item.key === 'patient_management'
                   ? handlePatientManagementClick
+                  : item.key === 'emergency'
+                  ? () => handleEmergencyOperation()
                   : () => onMenuClick?.(item.key ?? 'error')
               }
               iconSize={56}