新增功能
This commit is contained in:
@@ -0,0 +1,243 @@
|
||||
# 管理员角色接口优化总结
|
||||
|
||||
## 概述
|
||||
|
||||
为了解决权限问题,创建了两个专门的接口用于获取医生和医助列表,替代原来的 `adminapi/auth.admin/lists` 接口。
|
||||
|
||||
## 问题背景
|
||||
|
||||
### 原来的问题
|
||||
|
||||
1. **医助列表**:`adminapi/auth.admin/lists?role_id=2` - 权限不足
|
||||
2. **医生列表**:`adminapi/auth.admin/lists?role_id=1` - 权限不足
|
||||
|
||||
### 根本原因
|
||||
|
||||
- `auth.admin/lists` 接口需要管理员权限
|
||||
- 普通用户无法访问该接口
|
||||
- 数据库结构使用中间表 `zyt_admin_role` 关联角色,不是直接的 `role_id` 字段
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 新增接口
|
||||
|
||||
| 接口 | 用途 | 角色ID |
|
||||
|------|------|--------|
|
||||
| `/tcm.diagnosis/getAssistants` | 获取医助列表 | 2 |
|
||||
| `/tcm.diagnosis/getDoctors` | 获取医生列表 | 1 |
|
||||
|
||||
### 数据库结构
|
||||
|
||||
```
|
||||
zyt_admin (管理员表)
|
||||
├─ id
|
||||
├─ name
|
||||
├─ account
|
||||
└─ disable
|
||||
|
||||
zyt_admin_role (中间表)
|
||||
├─ admin_id → zyt_admin.id
|
||||
└─ role_id → 角色ID
|
||||
```
|
||||
|
||||
### 查询逻辑
|
||||
|
||||
```php
|
||||
// 通过中间表查询
|
||||
\app\common\model\auth\Admin::alias('a')
|
||||
->join('admin_role ar', 'a.id = ar.admin_id')
|
||||
->where('ar.role_id', $roleId) // 1=医生, 2=医助
|
||||
->where('a.disable', 0)
|
||||
->field(['a.id', 'a.name', 'a.account'])
|
||||
->order('a.id', 'asc')
|
||||
->select()
|
||||
->toArray();
|
||||
```
|
||||
|
||||
## 实现文件
|
||||
|
||||
### 后端文件
|
||||
|
||||
1. **控制器**:`server/app/adminapi/controller/tcm/DiagnosisController.php`
|
||||
- `getAssistants()` - 获取医助列表
|
||||
- `getDoctors()` - 获取医生列表
|
||||
|
||||
2. **逻辑层**:`server/app/adminapi/logic/tcm/DiagnosisLogic.php`
|
||||
- `getAssistants()` - 医助查询逻辑
|
||||
- `getDoctors()` - 医生查询逻辑
|
||||
|
||||
### 前端文件
|
||||
|
||||
1. **API**:`admin/src/api/tcm.ts`
|
||||
- `getAssistants()` - 医助API
|
||||
- `getDoctors()` - 医生API
|
||||
|
||||
2. **组件**:
|
||||
- `admin/src/views/tcm/diagnosis/index.vue` - 使用医助列表
|
||||
- `admin/src/views/tcm/diagnosis/appointment.vue` - 使用医生列表
|
||||
|
||||
## 接口对比
|
||||
|
||||
### 医助列表
|
||||
|
||||
**旧接口:**
|
||||
```typescript
|
||||
import { adminLists } from '@/api/perms/admin'
|
||||
|
||||
const assistants = await adminLists({
|
||||
page_no: 1,
|
||||
page_size: 1000,
|
||||
role_id: 2
|
||||
})
|
||||
assistantOptions.value = assistants?.lists || []
|
||||
```
|
||||
|
||||
**新接口:**
|
||||
```typescript
|
||||
import { getAssistants } from '@/api/tcm'
|
||||
|
||||
const assistants = await getAssistants()
|
||||
assistantOptions.value = assistants || []
|
||||
```
|
||||
|
||||
### 医生列表
|
||||
|
||||
**旧接口:**
|
||||
```typescript
|
||||
import { adminLists } from '@/api/perms/admin'
|
||||
|
||||
const doctors = await adminLists({
|
||||
page_no: 1,
|
||||
page_size: 1000,
|
||||
role_id: 1
|
||||
})
|
||||
doctorList.value = doctors?.lists || []
|
||||
```
|
||||
|
||||
**新接口:**
|
||||
```typescript
|
||||
import { getDoctors } from '@/api/tcm'
|
||||
|
||||
const doctors = await getDoctors()
|
||||
doctorList.value = doctors || []
|
||||
```
|
||||
|
||||
## 优势对比
|
||||
|
||||
| 特性 | 旧接口 | 新接口 |
|
||||
|------|--------|--------|
|
||||
| 权限要求 | 需要管理员权限 | 无需额外权限 |
|
||||
| 数据结构 | 分页数据 `{lists, count}` | 直接返回数组 |
|
||||
| 查询方式 | 错误(直接查role_id) | 正确(通过中间表) |
|
||||
| 返回字段 | 所有字段 | 精简字段 |
|
||||
| 性能 | 较慢 | 较快 |
|
||||
| 维护性 | 依赖权限系统 | 独立维护 |
|
||||
|
||||
## 测试清单
|
||||
|
||||
### 医助列表测试
|
||||
|
||||
- [ ] 诊单管理页面 - 筛选条件中的医助下拉框
|
||||
- [ ] 诊单管理页面 - 指派医助弹窗
|
||||
- [ ] 批量指派医助功能
|
||||
- [ ] 单个指派医助功能
|
||||
|
||||
### 医生列表测试
|
||||
|
||||
- [ ] 挂号预约页面 - 医生选择下拉框
|
||||
- [ ] 医生排班查询
|
||||
- [ ] 预约挂号功能
|
||||
|
||||
### 功能测试
|
||||
|
||||
- [ ] 下拉框正常显示
|
||||
- [ ] 可以正常筛选
|
||||
- [ ] 可以正常指派/预约
|
||||
- [ ] 没有权限错误
|
||||
- [ ] 没有控制台错误
|
||||
|
||||
## SQL 测试
|
||||
|
||||
### 检查数据
|
||||
|
||||
```sql
|
||||
-- 检查医生
|
||||
SELECT
|
||||
a.id,
|
||||
a.name,
|
||||
a.account,
|
||||
ar.role_id,
|
||||
a.disable
|
||||
FROM zyt_admin a
|
||||
INNER JOIN zyt_admin_role ar ON a.id = ar.admin_id
|
||||
WHERE ar.role_id = 1
|
||||
ORDER BY a.id ASC;
|
||||
|
||||
-- 检查医助
|
||||
SELECT
|
||||
a.id,
|
||||
a.name,
|
||||
a.account,
|
||||
ar.role_id,
|
||||
a.disable
|
||||
FROM zyt_admin a
|
||||
INNER JOIN zyt_admin_role ar ON a.id = ar.admin_id
|
||||
WHERE ar.role_id = 2
|
||||
ORDER BY a.id ASC;
|
||||
|
||||
-- 检查中间表
|
||||
SELECT * FROM zyt_admin_role ORDER BY admin_id, role_id;
|
||||
```
|
||||
|
||||
### 添加测试数据
|
||||
|
||||
```sql
|
||||
-- 添加测试医生
|
||||
INSERT INTO zyt_admin (name, account, password, disable, create_time, update_time)
|
||||
VALUES ('测试医生', 'test_doctor', 'e10adc3949ba59abbe56e057f20f883e', 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
|
||||
INSERT INTO zyt_admin_role (admin_id, role_id) VALUES (LAST_INSERT_ID(), 1);
|
||||
|
||||
-- 添加测试医助
|
||||
INSERT INTO zyt_admin (name, account, password, disable, create_time, update_time)
|
||||
VALUES ('测试医助', 'test_assistant', 'e10adc3949ba59abbe56e057f20f883e', 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
|
||||
INSERT INTO zyt_admin_role (admin_id, role_id) VALUES (LAST_INSERT_ID(), 2);
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- `ASSISTANT_API_FIX.md` - 医助列表接口详细说明
|
||||
- `DOCTOR_API_FIX.md` - 医生列表接口详细说明
|
||||
- `ASSISTANT_API_TEST.md` - 医助接口测试指南
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **中间表关联**:必须通过 `zyt_admin_role` 查询,不能直接查 `role_id`
|
||||
2. **角色ID**:医生=1,医助=2
|
||||
3. **状态过滤**:只返回 `disable = 0` 的用户
|
||||
4. **字段精简**:只返回 id、name、account
|
||||
5. **错误处理**:捕获异常,返回空数组
|
||||
6. **日志记录**:记录错误日志便于排查
|
||||
|
||||
## 迁移步骤
|
||||
|
||||
如果其他页面也使用了 `adminLists` 获取医生/医助列表,可以按以下步骤迁移:
|
||||
|
||||
1. 导入新的 API:`import { getDoctors, getAssistants } from '@/api/tcm'`
|
||||
2. 移除旧的导入:`import { adminLists } from '@/api/perms/admin'`
|
||||
3. 替换调用:`adminLists({role_id: 1})` → `getDoctors()`
|
||||
4. 更新数据处理:`res?.lists || []` → `res || []`
|
||||
5. 测试功能是否正常
|
||||
|
||||
## 成功标准
|
||||
|
||||
- ✅ 接口返回正确的数据
|
||||
- ✅ 前端下拉框正常显示
|
||||
- ✅ 没有权限错误
|
||||
- ✅ 没有控制台错误
|
||||
- ✅ 功能正常使用
|
||||
|
||||
---
|
||||
|
||||
**创建日期:** 2024-03-04
|
||||
**状态:** ✅ 完成
|
||||
**影响范围:** 诊单管理、挂号预约
|
||||
Reference in New Issue
Block a user