215 lines
5.3 KiB
Markdown
215 lines
5.3 KiB
Markdown
# 批量排班功能使用指南
|
||
|
||
## 功能概述
|
||
|
||
批量排班功能允许管理员一次性为多个医生、多个日期、多个时段创建排班记录,大大提高排班效率。
|
||
|
||
## 使用场景
|
||
|
||
1. 新周期排班:为下周或下月批量创建排班
|
||
2. 多医生排班:为多个医生同时设置相同的排班规则
|
||
3. 节假日调整:批量设置节假日休息
|
||
4. 临时调整:批量修改某段时间的排班状态
|
||
|
||
## 操作步骤
|
||
|
||
### 1. 打开批量排班弹窗
|
||
|
||
点击排班管理页面右上角的"批量排班"按钮。
|
||
|
||
### 2. 选择医生
|
||
|
||
- 可以选择一个或多个医生
|
||
- 支持搜索医生姓名
|
||
- 必填项
|
||
|
||
### 3. 选择日期范围
|
||
|
||
- 选择开始日期和结束日期
|
||
- 系统会在这个范围内生成排班
|
||
- 必填项
|
||
|
||
### 4. 选择时段
|
||
|
||
- 上午:morning
|
||
- 下午:afternoon
|
||
- 可以同时选择两个时段
|
||
- 必填项
|
||
|
||
### 5. 选择星期
|
||
|
||
- 周一至周日可多选
|
||
- 只有选中的星期才会生成排班
|
||
- 例如:只选周一至周五,则周末不会生成排班
|
||
- 必填项
|
||
|
||
### 6. 设置排班状态
|
||
|
||
- 出诊:正常出诊,需要设置号源数
|
||
- 停诊:临时停诊
|
||
- 休息:正常休息日
|
||
- 请假:医生请假
|
||
|
||
### 7. 设置号源数(出诊时)
|
||
|
||
- 号源数:可预约的号源数量
|
||
- 最大接诊数:最多可接诊的患者数
|
||
- 只有状态为"出诊"时才需要设置
|
||
|
||
### 8. 添加备注(可选)
|
||
|
||
可以为这批排班添加统一的备注信息。
|
||
|
||
### 9. 确认创建
|
||
|
||
点击"确定"按钮,系统会自动生成所有符合条件的排班记录。
|
||
|
||
## 计算规则
|
||
|
||
生成的排班记录数 = 医生数 × 符合条件的日期数 × 时段数
|
||
|
||
### 示例1:工作日排班
|
||
|
||
- 医生:张医生、李医生(2人)
|
||
- 日期:2024-03-04 至 2024-03-10(7天)
|
||
- 时段:上午、下午(2个)
|
||
- 星期:周一至周五(5天)
|
||
- 结果:2 × 5 × 2 = 20条记录
|
||
|
||
### 示例2:单医生全周排班
|
||
|
||
- 医生:张医生(1人)
|
||
- 日期:2024-03-04 至 2024-03-10(7天)
|
||
- 时段:上午(1个)
|
||
- 星期:周一至周日(7天)
|
||
- 结果:1 × 7 × 1 = 7条记录
|
||
|
||
### 示例3:周末休息
|
||
|
||
- 医生:张医生、李医生、王医生(3人)
|
||
- 日期:2024-03-09 至 2024-03-10(2天)
|
||
- 时段:上午、下午(2个)
|
||
- 星期:周六、周日(2天)
|
||
- 状态:休息
|
||
- 结果:3 × 2 × 2 = 12条记录
|
||
|
||
## 注意事项
|
||
|
||
### 1. 重复排班处理
|
||
|
||
如果某个医生在某天某时段已有排班,批量操作会更新该排班记录,而不是创建新记录。
|
||
|
||
### 2. 数据验证
|
||
|
||
- 所有必填项必须填写
|
||
- 日期范围不能为空
|
||
- 至少选择一个时段
|
||
- 至少选择一个星期
|
||
|
||
### 3. 性能考虑
|
||
|
||
- 一次批量操作建议不超过100条记录
|
||
- 如需创建大量排班,建议分批操作
|
||
- 操作过程中请勿关闭页面
|
||
|
||
### 4. 权限要求
|
||
|
||
需要有 `doctor.roster/batchSave` 权限才能使用批量排班功能。
|
||
|
||
## 常见问题
|
||
|
||
### Q1: 批量排班后发现错误怎么办?
|
||
|
||
A: 可以通过以下方式修改:
|
||
1. 单个修改:点击对应的排班单元格进行修改
|
||
2. 批量删除:暂不支持,需要逐个删除
|
||
3. 重新批量:再次批量排班会覆盖已有的排班
|
||
|
||
### Q2: 如何快速设置工作日排班?
|
||
|
||
A:
|
||
1. 选择所有需要排班的医生
|
||
2. 选择日期范围(如一个月)
|
||
3. 选择上午和下午
|
||
4. 只选择周一至周五
|
||
5. 设置为出诊状态
|
||
|
||
### Q3: 如何批量设置节假日休息?
|
||
|
||
A:
|
||
1. 选择所有医生
|
||
2. 选择节假日日期范围
|
||
3. 选择上午和下午
|
||
4. 选择所有星期
|
||
5. 设置为休息状态
|
||
|
||
### Q4: 批量排班会覆盖已有排班吗?
|
||
|
||
A: 是的,如果某个时段已有排班,批量操作会更新该排班的状态和号源数。
|
||
|
||
## 最佳实践
|
||
|
||
### 1. 月度排班流程
|
||
|
||
1. 每月月底为下月创建基础排班
|
||
2. 使用批量排班设置工作日出诊
|
||
3. 使用批量排班设置周末休息
|
||
4. 根据实际情况单独调整特殊日期
|
||
|
||
### 2. 新医生入职
|
||
|
||
1. 在管理员表中添加医生账号(role_id=1)
|
||
2. 使用批量排班为新医生创建排班
|
||
3. 根据医生专长调整排班时段
|
||
|
||
### 3. 临时调整
|
||
|
||
1. 医生请假:单独修改对应日期的排班状态
|
||
2. 临时加班:单独添加额外的排班时段
|
||
3. 节假日调整:使用批量排班统一设置
|
||
|
||
## 技术实现
|
||
|
||
### 前端逻辑
|
||
|
||
```typescript
|
||
// 生成排班数据
|
||
const rosters: any[] = []
|
||
const startDate = dayjs(batchForm.value.dateRange[0])
|
||
const endDate = dayjs(batchForm.value.dateRange[1])
|
||
|
||
// 遍历日期范围
|
||
let currentDate = startDate
|
||
while (currentDate.isBefore(endDate) || currentDate.isSame(endDate, 'day')) {
|
||
const weekday = currentDate.day() // 0-6,0是周日
|
||
|
||
// 检查是否在选中的星期内
|
||
if (batchForm.value.weekdays.includes(weekday)) {
|
||
// 遍历医生
|
||
batchForm.value.doctorIds.forEach(doctorId => {
|
||
// 遍历时段
|
||
batchForm.value.periods.forEach(period => {
|
||
rosters.push({
|
||
doctor_id: doctorId,
|
||
date: currentDate.format('YYYY-MM-DD'),
|
||
period: period,
|
||
status: batchForm.value.status,
|
||
quota: batchForm.value.quota,
|
||
max_patients: batchForm.value.maxPatients
|
||
})
|
||
})
|
||
})
|
||
}
|
||
|
||
currentDate = currentDate.add(1, 'day')
|
||
}
|
||
```
|
||
|
||
### 后端处理
|
||
|
||
后端使用事务处理批量插入,如果某条记录已存在(根据唯一索引),则更新该记录。
|
||
|
||
## 更新日志
|
||
|
||
- 2024-03-02: 初始版本,支持基本的批量排班功能
|