3.5 KiB
3.5 KiB
医生排班管理 - 数据源更新说明
更新内容
医生数据已更新为从系统管理员表获取,不再使用独立的医生表。
数据来源
医生数据
- 表名:
zyt_admin - 筛选条件:
role_id = 1(医生角色) - 字段映射:
id→ 医生IDname或account→ 医生姓名
排班数据
- 表名:
la_doctor_roster - 关联字段:
doctor_id对应zyt_admin.id
数据库表结构
只需要一张排班表:
CREATE TABLE `la_doctor_roster` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`doctor_id` int(11) NOT NULL COMMENT '医生ID(对应 zyt_admin.id)',
`date` date NOT NULL COMMENT '日期',
`period` varchar(20) NOT NULL COMMENT '时段 morning/afternoon',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1-出诊 2-停诊 3-休息 4-请假',
`quota` int(11) DEFAULT '0' COMMENT '号源数',
`max_patients` int(11) DEFAULT '0' COMMENT '最大接诊数',
`booked_count` int(11) DEFAULT '0' COMMENT '已预约数',
`remark` varchar(500) DEFAULT '',
`create_time` int(11) NOT NULL,
`update_time` int(11) NOT NULL,
`delete_time` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_doctor_date_period` (`doctor_id`,`date`,`period`,`delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
API 调用
获取医生列表
import { adminLists } from '@/api/perms/admin'
// 获取所有医生(role_id=1)
const res = await adminLists({
page_no: 1,
page_size: 1000,
role_id: 1
})
获取排班数据
import { rosterLists } from '@/api/doctor'
const res = await rosterLists({
start_date: '2024-03-04',
end_date: '2024-03-10'
})
保存排班
import { rosterSave } from '@/api/doctor'
await rosterSave({
id: 1, // 可选,有则更新,无则新增
doctor_id: 1,
date: '2024-03-04',
period: 'morning',
status: 1,
quota: 20
})
前端实现
加载医生列表
const loadDoctors = async () => {
const res = await adminLists({
page_no: 1,
page_size: 1000,
role_id: 1
})
// 转换为表格数据
tableData.value = (res?.lists || []).map((doctor: any) => ({
doctorId: doctor.id,
doctorName: doctor.name || doctor.account,
rosters: {}
}))
}
加载排班数据
const loadRosterData = async () => {
const res = await rosterLists({
start_date: currentWeekStart.value.format('YYYY-MM-DD'),
end_date: currentWeekStart.value.add(6, 'day').format('YYYY-MM-DD')
})
// 填充排班数据到医生行
const rosters = res?.lists || []
tableData.value.forEach(doctor => {
doctor.rosters = {}
rosters.forEach((roster: any) => {
if (roster.doctor_id === doctor.doctorId) {
const key = `${roster.date}_${roster.period}`
doctor.rosters[key] = {
id: roster.id,
status: roster.status,
quota: roster.quota
}
}
})
})
}
注意事项
- 确保
zyt_admin表中有role_id=1的用户(医生) - 排班表的
doctor_id必须对应zyt_admin表中存在的医生ID - 删除排班时使用软删除(设置
delete_time) - 同一医生同一天同一时段只能有一条排班记录(通过唯一索引保证)
后端接口要求
后端需要实现以下接口:
GET /doctor.roster/lists- 获取排班列表POST /doctor.roster/save- 保存排班(新增或更新)POST /doctor.roster/delete- 删除排班
详细接口文档请参考 DOCTOR_ROSTER.md。