新增功能
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
# 医生排班管理 - 数据源更新说明
|
||||
|
||||
## 更新内容
|
||||
|
||||
医生数据已更新为从系统管理员表获取,不再使用独立的医生表。
|
||||
|
||||
## 数据来源
|
||||
|
||||
### 医生数据
|
||||
- **表名**: `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`。
|
||||
Reference in New Issue
Block a user