Files
zyt/admin/BATCH_ROSTER_GUIDE.md
2026-03-04 15:32:30 +08:00

215 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 批量排班功能使用指南
## 功能概述
批量排班功能允许管理员一次性为多个医生、多个日期、多个时段创建排班记录,大大提高排班效率。
## 使用场景
1. 新周期排班:为下周或下月批量创建排班
2. 多医生排班:为多个医生同时设置相同的排班规则
3. 节假日调整:批量设置节假日休息
4. 临时调整:批量修改某段时间的排班状态
## 操作步骤
### 1. 打开批量排班弹窗
点击排班管理页面右上角的"批量排班"按钮。
### 2. 选择医生
- 可以选择一个或多个医生
- 支持搜索医生姓名
- 必填项
### 3. 选择日期范围
- 选择开始日期和结束日期
- 系统会在这个范围内生成排班
- 必填项
### 4. 选择时段
- 上午:morning
- 下午:afternoon
- 可以同时选择两个时段
- 必填项
### 5. 选择星期
- 周一至周日可多选
- 只有选中的星期才会生成排班
- 例如:只选周一至周五,则周末不会生成排班
- 必填项
### 6. 设置排班状态
- 出诊:正常出诊,需要设置号源数
- 停诊:临时停诊
- 休息:正常休息日
- 请假:医生请假
### 7. 设置号源数(出诊时)
- 号源数:可预约的号源数量
- 最大接诊数:最多可接诊的患者数
- 只有状态为"出诊"时才需要设置
### 8. 添加备注(可选)
可以为这批排班添加统一的备注信息。
### 9. 确认创建
点击"确定"按钮,系统会自动生成所有符合条件的排班记录。
## 计算规则
生成的排班记录数 = 医生数 × 符合条件的日期数 × 时段数
### 示例1:工作日排班
- 医生:张医生、李医生(2人)
- 日期:2024-03-04 至 2024-03-107天)
- 时段:上午、下午(2个)
- 星期:周一至周五(5天)
- 结果:2 × 5 × 2 = 20条记录
### 示例2:单医生全周排班
- 医生:张医生(1人)
- 日期:2024-03-04 至 2024-03-107天)
- 时段:上午(1个)
- 星期:周一至周日(7天)
- 结果:1 × 7 × 1 = 7条记录
### 示例3:周末休息
- 医生:张医生、李医生、王医生(3人)
- 日期:2024-03-09 至 2024-03-102天)
- 时段:上午、下午(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-60是周日
// 检查是否在选中的星期内
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: 初始版本,支持基本的批量排班功能