在急救转运任务创建页面中,转出医院和转入医院的科室需要改为选择器,从系统字典中加载科室数据,方便用户快速选择常用科室,确保数据规范统一。
文件: sql/hospital_department_dict.sql
INSERT INTO sys_dict_type(dict_name, dict_type, status, create_by, create_time, remark)
VALUES('医院科室', 'hospital_department', '0', 'admin', SYSDATE(), '医院科室列表');
共配置30个常用科室,包括:
急诊相关(2个)
- 急诊科(默认选项)
- 急救中心
内科系统(8个)
- 心内科
- 呼吸内科
- 消化内科
- 神经内科
- 肾内科
- 内分泌科
- 血液科
- 风湿免疫科
外科系统(6个)
- 普外科
- 骨科
- 神经外科
- 心胸外科
- 泌尿外科
- 烧伤科
专科(14个)
- ICU(重症监护室)
- CCU(冠心病监护病房)
- 肿瘤科
- 感染科
- 儿科
- 妇产科
- 眼科
- 耳鼻喉科
- 口腔科
- 皮肤科
- 康复科
- 中医科
- 精神科
- 其他科室
-- 急诊科(默认选项)
INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
VALUES(1, '急诊科', '急诊科', 'hospital_department', '', 'danger', 'Y', '0', 'admin', SYSDATE(), '急诊科室');
-- 心内科
INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
VALUES(3, '心内科', '心内科', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '心血管内科');
danger(红色):急诊相关科室primary(蓝色):内科系统success(绿色):外科系统warning(橙色):重症监护info(灰色):其他专科default(默认):其他科室-- 在MySQL中执行
source sql/hospital_department_dict.sql;
-- 或直接执行
mysql -u root -p database_name < sql/hospital_department_dict.sql
文件: app/pages/task/create-emergency.vue
import { getDicts } from "@/api/dict"
data() {
return {
// ... 其他字段
departmentOptions: [], // 科室字典数据
}
}
onLoad(options) {
// ... 其他初始化代码
// 加载科室字典数据
this.loadDepartments()
}
// 加载科室字典数据
loadDepartments() {
getDicts('hospital_department').then(response => {
this.departmentOptions = response.data || []
}).catch(error => {
console.error('加载科室字典失败:', error)
this.departmentOptions = []
})
}
<view class="form-item">
<view class="form-label">科室</view>
<picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalOutDepartmentChange">
<view class="form-input picker-input">
{{ taskForm.hospitalOut.department || '请选择科室' }}
<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
</view>
</picker>
</view>
<view class="form-item">
<view class="form-label">科室</view>
<picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalInDepartmentChange">
<view class="form-input picker-input">
{{ taskForm.hospitalIn.department || '请选择科室' }}
<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
</view>
</picker>
</view>
// 转出医院科室选择
onHospitalOutDepartmentChange(e) {
const index = e.detail.value
this.taskForm.hospitalOut.department = this.departmentOptions[index].dictValue
}
// 转入医院科室选择
onHospitalInDepartmentChange(e) {
const index = e.detail.value
this.taskForm.hospitalIn.department = this.departmentOptions[index].dictValue
}
页面加载 (onLoad)
↓
调用 loadDepartments()
↓
请求后端 getDicts('hospital_department')
↓
获取科室字典数据
↓
保存到 departmentOptions
↓
选择器显示科室列表
用户点击科室选择器
↓
显示科室列表(30个选项)
↓
用户选择某个科室
↓
触发 @change 事件
↓
调用 onHospitalOutDepartmentChange 或 onHospitalInDepartmentChange
↓
根据索引获取科室的 dictValue
↓
更新 taskForm.hospitalOut.department 或 taskForm.hospitalIn.department
↓
选择器显示已选科室名称
用户点击保存按钮
↓
收集表单数据(包括科室)
↓
调用 submitTask()
↓
构建提交数据 buildSubmitData()
↓
提交到后端 addTask()
↓
保存到 sys_task_emergency 表
mode="selector":单选模式:range="departmentOptions":数据源绑定range-key="dictLabel":显示字段为 dictLabel@change:选择事件绑定字典数据返回格式:javascript [ { dictCode: 1, dictSort: 1, dictLabel: "急诊科", dictValue: "急诊科", dictType: "hospital_department", cssClass: "", listClass: "danger", isDefault: "Y", status: "0" }, // ... 更多科室 ]
dictLabel(例如:急诊科)dictValue(例如:急诊科)dictSort 字段排序系统管理 > 字典管理 > 数据字典
可以考虑增加科室分类字典,实现二级联动: 一级:内科/外科/专科 二级:具体科室
可以关联医院和科室,不同医院显示不同的科室列表。
可以记录用户常用科室,优先显示在列表顶部。
科室较多时,可以添加搜索功能快速定位。
hospital_department,与代码中保持一致is_default='Y' 的科室会作为默认选项(目前是急诊科)sql/hospital_department_dict.sql - 科室字典SQL脚本app/pages/task/create-emergency.vue - 急救转运任务创建页面app/api/dict.js - 字典API接口sys_dict_type - 字典类型表sys_dict_data - 字典数据表