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

148 lines
3.5 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.
# 医生排班管理 - 数据源更新说明
## 更新内容
医生数据已更新为从系统管理员表获取,不再使用独立的医生表。
## 数据来源
### 医生数据
- **表名**: `zyt_admin`
- **筛选条件**: `role_id = 1`(医生角色)
- **字段映射**:
- `id` → 医生ID
- `name``account` → 医生姓名
### 排班数据
- **表名**: `la_doctor_roster`
- **关联字段**: `doctor_id` 对应 `zyt_admin.id`
## 数据库表结构
只需要一张排班表:
```sql
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 调用
### 获取医生列表
```typescript
import { adminLists } from '@/api/perms/admin'
// 获取所有医生(role_id=1
const res = await adminLists({
page_no: 1,
page_size: 1000,
role_id: 1
})
```
### 获取排班数据
```typescript
import { rosterLists } from '@/api/doctor'
const res = await rosterLists({
start_date: '2024-03-04',
end_date: '2024-03-10'
})
```
### 保存排班
```typescript
import { rosterSave } from '@/api/doctor'
await rosterSave({
id: 1, // 可选,有则更新,无则新增
doctor_id: 1,
date: '2024-03-04',
period: 'morning',
status: 1,
quota: 20
})
```
## 前端实现
### 加载医生列表
```typescript
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: {}
}))
}
```
### 加载排班数据
```typescript
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
}
}
})
})
}
```
## 注意事项
1. 确保 `zyt_admin` 表中有 `role_id=1` 的用户(医生)
2. 排班表的 `doctor_id` 必须对应 `zyt_admin` 表中存在的医生ID
3. 删除排班时使用软删除(设置 `delete_time`
4. 同一医生同一天同一时段只能有一条排班记录(通过唯一索引保证)
## 后端接口要求
后端需要实现以下接口:
1. `GET /doctor.roster/lists` - 获取排班列表
2. `POST /doctor.roster/save` - 保存排班(新增或更新)
3. `POST /doctor.roster/delete` - 删除排班
详细接口文档请参考 `DOCTOR_ROSTER.md`