4.3 KiB
4.3 KiB
医助列表接口优化
问题描述
在诊单管理页面中,获取医助列表时调用了 adminapi/auth.admin/lists 接口,该接口需要管理员权限,可能导致权限不足的问题。
解决方案
创建一个专门的接口 adminapi/tcm.diagnosis/getAssistants 用于获取医助列表,不需要额外的权限验证。
实现细节
1. 后端实现
控制器方法
文件: server/app/adminapi/controller/tcm/DiagnosisController.php
/**
* @notes 获取医助列表
* @return \think\response\Json
*/
public function getAssistants()
{
$result = DiagnosisLogic::getAssistants();
return $this->data($result);
}
逻辑层方法
文件: server/app/adminapi/logic/tcm/DiagnosisLogic.php
/**
* @notes 获取医助列表
* @return array
*/
public static function getAssistants()
{
try {
// 查询角色ID为2的管理员(医助)
$assistants = \app\common\model\auth\Admin::where('role_id', 2)
->where('disable', 0)
->field(['id', 'name', 'account'])
->order('id', 'asc')
->select()
->toArray();
return $assistants;
} catch (\Exception $e) {
\think\facade\Log::error('获取医助列表失败: ' . $e->getMessage());
return [];
}
}
2. 前端实现
API 方法
文件: admin/src/api/tcm.ts
// 获取医助列表
export function getAssistants() {
return request.get({ url: '/tcm.diagnosis/getAssistants' })
}
组件更新
文件: admin/src/views/tcm/diagnosis/index.vue
// 导入新的 API
import { tcmDiagnosisLists, tcmDiagnosisDelete, tcmDiagnosisAssign, getAssistants } from '@/api/tcm'
// 移除旧的导入
// import { adminLists } from '@/api/perms/admin'
// 更新获取医助列表的方法
const getDictOptions = async () => {
try {
const [diagnosisType, syndromeType, assistants] = await Promise.all([
getDictData({ type: 'diagnosis_type' }),
getDictData({ type: 'syndrome_type' }),
getAssistants() // 使用新的 API
])
diagnosisTypeOptions.value = diagnosisType?.diagnosis_type || []
syndromeTypeOptions.value = syndromeType?.syndrome_type || []
assistantOptions.value = assistants || [] // 直接使用返回的数组
} catch (error) {
console.error('获取字典数据失败:', error)
}
}
接口说明
请求
GET /adminapi/tcm.diagnosis/getAssistants
响应
{
"code": 1,
"msg": "success",
"data": [
{
"id": 1,
"name": "医助张三",
"account": "assistant1"
},
{
"id": 2,
"name": "医助李四",
"account": "assistant2"
}
]
}
返回字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 医助ID |
| name | string | 医助姓名 |
| account | string | 医助账号 |
优势
- 权限独立:不依赖管理员列表接口的权限
- 数据精简:只返回必要的字段(id、name、account)
- 性能优化:直接查询医助角色,不需要额外的权限判断
- 易于维护:专门的接口更容易理解和维护
查询条件
role_id = 2:只查询医助角色disable = 0:只查询启用状态的医助- 按
id升序排列
测试
测试步骤
- 登录管理后台
- 访问诊单管理页面
- 查看医助下拉列表是否正常显示
- 尝试筛选和指派医助
预期结果
- ✅ 医助列表正常加载
- ✅ 下拉框显示所有启用的医助
- ✅ 不会出现权限不足的错误
- ✅ 可以正常筛选和指派医助
已修改的文件
- ✅
server/app/adminapi/controller/tcm/DiagnosisController.php - ✅
server/app/adminapi/logic/tcm/DiagnosisLogic.php - ✅
admin/src/api/tcm.ts - ✅
admin/src/views/tcm/diagnosis/index.vue
注意事项
- 角色ID:确保医助的
role_id为 2 - 状态检查:只返回
disable = 0的医助 - 字段精简:只返回必要的字段,减少数据传输
- 错误处理:捕获异常并记录日志,返回空数组而不是抛出错误
修复日期: 2024-03-04 状态: ✅ 完成