医疗小程序09排班管理
我们本篇介绍了医生管理以及排班功能,总体上低代码搭建就是创建数据模型,设计页面布局,然后绑定事件即可。
目录
上一篇我们讲解了科室管理功能,包括后台数据录入以及小程序端展示。有了科室之后,就需要在科室下边录入医生,医生录入之后还需要对其进行排班。我们需要自动的按照时间段来分配号源数量,提供小程序挂号的时候进行预约扣减,本篇我们就介绍一下详细的开发过程。
1 设计数据模型
为了满足排班的需要,我们设计了三张表,分别是医生表、排班表和号段表
1.1 doctors(医生表)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | bigint PK | 医生ID |
| name | varchar(50) | 医生姓名 |
| avatar | varchar(255) | 头像URL |
| 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 | 排班ID |
| doctor_id | bigint FK | 医生ID |
| date | date | 出诊日期 |
| shift_type | enum | 班次类型:morning / afternoon / evening |
| start_time | time | 班次开始时间 |
| end_time | time | 班次结束时间 |
| total_slots | int | 总号源数量 |
| remaining | int | 剩余号源 |
| fee | decimal(10,2) | 挂号费 |
| status | enum | open / full / closed |
| created_at | datetime | 创建时间 |
| updated_at | datetime | 更新时间 |
1.3 schedule_slots(排班号段表)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | bigint PK | 号段ID |
| 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
添加顶部选项卡组件,设置标签,打开切换标签显示不同组件配置
将表单容器移入第一个标签
第二个页签里添加数组嵌套表单
嵌套表单模板改为web表格
修改列名称,改为我们号段的列名称
4.2 初始化号段信息
布局搭建好之后,排班信息写入数据库成功,我们需要根据排班信息来生成号段信息。在代码区添加一个javascript方法
添加一个自定义变量用来保存排班表写入的id
配置表单容器的提交方法,出参赋值给id
变量赋值成功后调用我们的自定义方法
自定义方法贴入如下代码,主要是根据排班信息自动生成号段信息
export default function({ event, data }) {
const id = $w.page.dataset.state.id;
const docterid = $w.modal3.openInfo;
const startMs = Number($w.time3.value);
const endMs = Number($w.time4.value);
const total = Number($w.inputNumber4.value);
const fee = Number($w.inputNumber6.value);
const step = 30 * 60 * 1000;
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;
}
方法调用成功后,我们切换到第二个页签
最后配置弹窗的确认按钮,设置点击事件,批量写入我们的号段数据
最终效果
点击医生管理,可以看到医生的列表
点击排班,先录入排班基础数据
提交之后,自动生成号段数据
点击确认完成医生的排班
总结
我们本篇介绍了医生管理以及排班功能,总体上低代码搭建就是创建数据模型,设计页面布局,然后绑定事件即可。
更多推荐


所有评论(0)