上一篇我们讲解了科室管理功能,包括后台数据录入以及小程序端展示。有了科室之后,就需要在科室下边录入医生,医生录入之后还需要对其进行排班。我们需要自动的按照时间段来分配号源数量,提供小程序挂号的时候进行预约扣减,本篇我们就介绍一下详细的开发过程。
在这里插入图片描述

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;
}

方法调用成功后,我们切换到第二个页签
在这里插入图片描述
最后配置弹窗的确认按钮,设置点击事件,批量写入我们的号段数据
在这里插入图片描述

最终效果

点击医生管理,可以看到医生的列表
在这里插入图片描述
点击排班,先录入排班基础数据
在这里插入图片描述
提交之后,自动生成号段数据
在这里插入图片描述
点击确认完成医生的排班

总结

我们本篇介绍了医生管理以及排班功能,总体上低代码搭建就是创建数据模型,设计页面布局,然后绑定事件即可。

Logo

低代码爱好者的网上家园

更多推荐