# 手术室管理添加类型和所属科室字段功能说明 ## 概述 本次更新为手术室管理模块添加了"类型"和"所属科室"字段,优化了手术室信息的分类管理。 **数据库类型**:PostgreSQL ## 功能特点 ### 1. 手术室类型 支持四种手术室类型: - **急诊手术室**:用于急诊手术的手术室 - **择期手术室**:用于择期手术的手术室(默认类型) - **日间手术室**:用于日间手术的手术室 - **复合手术室**:用于复合手术的手术室 ### 2. 所属科室 每个手术室可以关联到具体的科室,便于科室级别的资源管理。 ## 修改内容 ### 前端修改(Vue3) #### 1. 手术室列表页面 (`operatingroom/index.vue`) **列表表格新增列**: - 类型列:显示手术室类型(急诊手术室、择期手术室等) - 所属科室列:显示手术室所属的科室名称 **新增/修改对话框新增字段**: - 类型选择器:下拉选择手术室类型 - 所属科室选择器:可搜索的科室下拉框 **查询表单保持原样**: - 仍支持按手术室名称和状态查询 **查看对话框新增显示**: - 类型信息 - 所属科室信息 #### 2. 表单数据结构 ```javascript const form = ref({ id: undefined, busNo: undefined, name: undefined, roomTypeEnum: undefined, // 新增:手术室类型 organizationId: undefined, // 已有:所属科室ID organizationName: undefined, // 已有:所属科室名称 locationDescription: undefined, equipmentConfig: undefined, capacity: 1, statusEnum: 1, displayOrder: 0, remark: undefined }) ``` #### 3. 类型选项配置 ```javascript const roomTypeOptions = ref([ { value: 1, label: '急诊手术室' }, { value: 2, label: '择期手术室' }, { value: 3, label: '日间手术室' }, { value: 4, label: '复合手术室' } ]) ``` ### 后端修改(Java) #### 1. 实体类 (`OperatingRoom.java`) **新增字段**: ```java /** 手术室类型 */ @Dict(dictCode = "operating_room_type") private Integer roomTypeEnum; private String roomTypeEnum_dictText; /** 所属机构ID */ private Long organizationId; /** 所属机构名称 */ private String organizationName; ``` #### 2. DTO类 (`OperatingRoomDto.java`) **新增字段**: ```java /** 手术室类型 */ @Dict(dictCode = "operating_room_type") private Integer roomTypeEnum; private String roomTypeEnum_dictText; /** 所属机构ID */ @JsonSerialize(using = ToStringSerializer.class) private Long organizationId; /** 机构名称 */ private String organizationName; ``` #### 3. Service实现类 (`OperatingRoomAppServiceImpl.java`) **查询列表方法优化**: - 添加类型字段的枚举值转换逻辑 - 根据类型编码设置对应的中文描述 **详情查询方法优化**: - 添加类型字段的枚举值转换 - 查询所属科室的名称并回显 ### 数据库修改 #### SQL脚本文件:`add_operating_room_type_fields.sql`(PostgreSQL版本) **1. 添加字段**: ```sql ALTER TABLE public.adm_operating_room ADD COLUMN room_type_enum INTEGER DEFAULT 2; COMMENT ON COLUMN public.adm_operating_room.room_type_enum IS '手术室类型:1-急诊手术室,2-择期手术室,3-日间手术室,4-复合手术室'; ``` **2. 更新现有数据**: ```sql UPDATE public.adm_operating_room SET room_type_enum = 2 WHERE room_type_enum IS NULL; ``` **3. 添加索引**: ```sql CREATE INDEX idx_room_type ON public.adm_operating_room(room_type_enum); CREATE INDEX idx_org_id ON public.adm_operating_room(organization_id); ``` **4. 字典数据**: - 新增字典类型:`operating_room_type`(手术室类型) - 新增字典项: - 急诊手术室(1) - 择期手术室(2) - 日间手术室(3) - 复合手术室(4) **PostgreSQL特定语法说明**: - 使用 `public.adm_operating_room` 替代 `` `adm_operating_room` `` - 使用 `COMMENT ON COLUMN` 替代 `COMMENT` 在 `ALTER TABLE` 中 - 使用 `nextval()` 和序列来生成字典类型ID - 使用 `information_schema.columns` 获取列信息 - 使用 `CASE WHEN` 语句进行条件判断 ## 部署步骤 ### 1. 数据库部署 执行SQL脚本(PostgreSQL): ```bash psql -U postgres -d his_database -f add_operating_room_type_fields.sql ``` 或者使用 pgAdmin 等图形化工具执行SQL脚本。 ### 2. 后端部署 重启后端服务,使新的代码生效。 ### 3. 前端部署 重新编译并部署前端代码: ```bash npm run build ``` ## 使用说明 ### 新增手术室 1. 进入手术室管理页面 2. 点击"新增手术室"按钮 3. 填写手术室信息: - 手术室名称(必填) - 类型(可选,默认为择期手术室) - 所属科室(必填) - 位置描述 - 设备配置 - 容纳人数 - 状态(默认为启用) - 显示顺序 - 备注 4. 点击"确定"保存 ### 修改手术室 1. 在手术室列表中找到要修改的记录 2. 点击"编辑"按钮 3. 修改相关信息(包括类型和所属科室) 4. 点击"确定"保存 ### 查看手术室详情 1. 在手术室列表中点击"查看"按钮 2. 查看完整的手术室信息,包括类型和所属科室 ### 查询手术室 - 按手术室名称模糊查询 - 按状态筛选(启用/停用) ## 注意事项 1. **数据迁移**:现有手术室的类型默认设置为"择期手术室"(2),可以根据实际需要调整。 2. **科室关联**:所属科室是必填字段,需要在科室管理中先配置好科室信息。 3. **类型字典**:手术室类型字典已自动创建,可以在系统字典管理中进行维护。 4. **索引优化**:已为类型和科室字段添加索引,提升查询性能。 5. **兼容性**:此次修改保持了向后兼容性,不影响现有功能。 ## 验证清单 - [ ] 数据库字段添加成功 - [ ] 字典数据创建成功 - [ ] 前端列表正确显示类型和所属科室 - [ ] 新增手术室时可选择类型和所属科室 - [ ] 修改手术室时可更新类型和所属科室 - [ ] 查看手术室详情时正确显示类型和所属科室 - [ ] 类型下拉选项显示正确 - [ ] 所属科室选择器可正常搜索和选择 - [ ] 查询功能正常工作 - [ ] 没有语法错误和运行时错误 ## 回滚方案 如需撤销本次修改,请执行SQL脚本中的回滚语句(PostgreSQL): ```sql DROP INDEX idx_room_type ON public.adm_operating_room; DROP INDEX idx_org_id ON public.adm_operating_room; DELETE FROM public.sys_dict_data WHERE dict_type = 'operating_room_type'; DELETE FROM public.sys_dict_type WHERE dict_type = 'operating_room_type'; ALTER TABLE public.adm_operating_room DROP COLUMN room_type_enum; ``` ## 技术支持 如有问题,请联系技术支持团队。