医生及排班管理系统开发指南
上一篇我们探讨了科室管理的功能实现,涵盖后台数据的录入与小程序端的展示。随着科室的建立,接下来的关键步骤是录入医生信息,并对医生进行合理的排班安排。本文将详细介绍如何通过自动化的时间段分配,确保号源数量的有效管理,从而支持小程序的挂号预约功能。
1. 数据模型设计
为了有效地管理医生的排班,我们构建了三个核心的数据表:医生信息表、排班信息表以及排班时段表。
1.1 医生信息表 (doctors)
| 字段名 | 类型 | 说明 |
| id | bigint PK | 医生唯一标识符 |
| name | varchar(50) | 医生的名字 |
| avatar | varchar(255) | 医生头像的网络地址 |
| department_id | bigint FK | 医生所属的科室 |
| title | varchar(50) | 医生的职位等级,如主任或副主任等 |
| expertise | varchar(255) | 医生的专业特长领域 |
| status | tinyint | 医生当前的工作状态,1表示在职,0表示已离职 |
| created_at | datetime | 记录创建的时间戳 |
| updated_at | datetime | 最近一次更新的时间戳 |
1.2 排班信息表 (schedules)
| 字段名 | 类型 | 说明 |
| id | bigint PK | 排班记录的唯一标识符 |
| doctor_id | bigint FK | 关联医生的信息表 |
| date | date | 医生出诊的具体日期 |
| shift_type | enum | 班次类型,例如早晨、下午或晚上 |
| start_time | time | 班次开始的具体时间点 |
| end_time | time | 班次结束的具体时间点 |
| total_slots | int | 该班次总的号源数量 |
| remaining | int | 该班次剩余可用的号源数量 |
| fee | decimal(10,2) | 挂号费用 |
| status | enum | 排班状态,开放预约、已约满或关闭预约 |
| created_at | datetime | 记录创建的时间戳 |
| updated_at | datetime | 最近一次更新的时间戳 |
1.3 排班时段表 (schedule_slots)
| 字段名 | 类型 | 说明 |
| id | bigint PK | 排班时段的唯一标识符 |
| schedule_id | bigint FK | 关联排班信息表 |
| start_time | time | 该时段开始的具体时间点 |
| end_time | time | 该时段结束的具体时间点 |
| total_slots | int | 该时段内的总号源数量 |
| remaining | int | 该时段内剩余可用的号源数量 |
| created_at | datetime | 记录创建的时间戳 |
| updated_at | datetime | 最近一次更新的时间戳 |
2. 数据模型的创建
在MySQL数据库环境中,依次创建上述提到的三张数据表。
3. 医生管理界面的搭建
完成数据模型的构建后,接下来是搭建医生管理界面,以便能够便捷地录入医生的相关信息。进入后台应用程序,通过点击创建新页面的按钮开始。
设置页面标题,并选择左侧导航的布局方式。
转到布局设计模式,点击添加同级菜单项。
从选项中选择医生管理页面。
添加必要的布局组件。
随后,加入数据表格组件。
选择医生信息表,并确保所有使用场景都被选中。
最后,配置相关的查询条件。
4. 排班管理界面的搭建
4.1 布局设计
在医生列表中添加排班操作按钮。
选中页面元素,然后添加弹出窗口组件。
在弹出窗口内添加表单容器,选择医生排班表。
调整表单容器在PC端的列数至2。
添加顶部选项卡组件,设定标签,并启用切换标签时显示不同的组件配置。
将表单容器移动到第一个标签下。
在第二个标签页内添加数组嵌套表单。
将嵌套表单的模板更改为网页表格样式。
更新列名称,使其与号段表的列相匹配。
4.2 号段信息的初始化
完成布局设计后,当排班信息被成功写入数据库时,需要生成相应的号段信息。为此,在代码区域添加JavaScript方法。
引入一个自定义变量,用于存储排班表写入的ID。
配置表单容器的提交方法,将输出参数赋值给ID变量。
在变量赋值成功后,调用之前定义的方法。
在自定义方法中插入以下代码,主要目的是基于排班信息自动生成号段信息:
export default function({ event, data }) {
const id = $w.page.dataset.state.id;
const doctorId = $w.modal3.openInfo;
const startTime = Number($w.time3.value);
const endTime = Number($w.time4.value);
const totalSlots = Number($w.inputNumber4.value);
const fee = Number($w.inputNumber6.value);
const timeStep = 30 * 60 * 1000; // 30分钟的时间间隔转换成毫秒
}
总结
通过本文的介绍,您应该已经了解了如何设计和实现医生及其排班管理系统的各个组成部分。从数据模型的设计到界面的搭建,每一步都至关重要,确保了系统的高效运行和用户的良好体验。希望这些内容能为您的项目开发提供有价值的参考。
首先计算起始时间并确保其与步长对齐,然后确定需要分割的段数。如果段数小于或等于零,则返回空数组。接下来,基于总时长和段数计算每段的基础时长和额外时长。根据这些信息生成一个包含医生排班信息的对象数组。
const start = Math.floor(startMs / step) * step;
const segs = Math.ceil((endMs - start) / step);
if (segs <= 0) return [];
const base = Math.floor(total / segs);
const extra = total % segs;
const arr = Array.from({ length: segs }, (_, i) => {
const s = start + i * step;
const e = i === segs - 1 ? endMs : s + step;
const cnt = base + (i < extra ? 1 : 0);
return {doctor_id: {_id: docterid}, schedule_id: {_id: id}, start_time: s, end_time: e, total_slots: cnt, remaining: cnt, fee };
});
console.log(arr);
$w.page.dataset.state.slots = arr;
return arr;
当上述方法调用成功后,界面会自动跳转到第二个标签页。
接着,配置弹窗中的确认按钮,为其添加点击事件,以便批量插入号段数据。
最终效果展示如下:
- 点击“医生管理”选项,可以查看医生列表。
- 点击“排班”选项,开始输入排班的基本信息。
- 提交后,系统将自动生成号段数据。
- 点击“确认”按钮,完成医生的排班设置。
总结
本文详细介绍了医生管理和排班功能的实现过程。整体来说,使用低代码平台构建这些功能主要涉及创建数据模型、设计页面布局以及绑定相关事件等步骤。