更新
This commit is contained in:
@@ -19,11 +19,15 @@ use app\common\lists\ListsExcelInterface;
|
||||
use app\common\lists\ListsExtendInterface;
|
||||
use app\common\lists\ListsSearchInterface;
|
||||
use app\common\lists\ListsSortInterface;
|
||||
use app\common\lists\Traits\HasDataScopeFilter;
|
||||
use app\common\model\auth\Admin;
|
||||
use app\common\model\auth\AdminRole;
|
||||
use app\common\model\auth\SystemRole;
|
||||
use app\common\model\dept\Dept;
|
||||
use app\common\model\dept\Jobs;
|
||||
use app\common\model\doctor\Appointment;
|
||||
use app\common\model\tcm\Diagnosis;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 管理员列表
|
||||
@@ -32,6 +36,7 @@ use app\common\model\dept\Jobs;
|
||||
*/
|
||||
class AdminLists extends BaseAdminDataLists implements ListsExtendInterface, ListsSearchInterface, ListsSortInterface,ListsExcelInterface
|
||||
{
|
||||
use HasDataScopeFilter;
|
||||
/**
|
||||
* @notes 设置导出字段
|
||||
* @return string[]
|
||||
@@ -116,9 +121,37 @@ class AdminLists extends BaseAdminDataLists implements ListsExtendInterface, Lis
|
||||
|
||||
if ($progressBoard) {
|
||||
// 面诊进度:固定只拉「医生」角色且未禁用,忽略客户端篡改的 role_id
|
||||
$adminIds = AdminRole::where('role_id', 1)->column('admin_id');
|
||||
$adminIds = array_map('intval', AdminRole::where('role_id', 1)->column('admin_id'));
|
||||
|
||||
// 数据范围:医生与业务/医助通常不在同一部门,按 admin id 直接取交集会全空。
|
||||
// 这里改为「按当前账号可见的挂号反查涉及的医生」,与 AppointmentLists 的可见性一致:
|
||||
// 可见挂号 = a.doctor_id ∈ visible OR diagnosis.assistant_id ∈ visible
|
||||
$visibleIds = $this->getDataScopeVisibleAdminIds();
|
||||
if ($visibleIds !== null) {
|
||||
if ($visibleIds === [] || $adminIds === []) {
|
||||
$adminIds = [];
|
||||
} else {
|
||||
$aTbl = (new Appointment())->getTable();
|
||||
$dTbl = (new Diagnosis())->getTable();
|
||||
$inList = implode(',', array_map('intval', $visibleIds));
|
||||
$rows = Db::query(
|
||||
"SELECT DISTINCT a.doctor_id FROM `{$aTbl}` a "
|
||||
. "LEFT JOIN `{$dTbl}` u ON a.patient_id = u.id "
|
||||
. "WHERE (a.doctor_id IN ({$inList}) "
|
||||
. " OR (u.id IS NOT NULL AND u.delete_time IS NULL AND u.assistant_id IN ({$inList})))"
|
||||
);
|
||||
$apptDoctorIds = array_filter(array_map(static function ($r): int {
|
||||
return (int) ($r['doctor_id'] ?? 0);
|
||||
}, $rows ?: []));
|
||||
$adminIds = array_values(array_intersect($adminIds, $apptDoctorIds));
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($adminIds)) {
|
||||
$where[] = ['id', 'in', $adminIds];
|
||||
} else {
|
||||
// 数据范围下没有可见医生:强制空集
|
||||
$where[] = ['id', '=', 0];
|
||||
}
|
||||
$where[] = ['disable', '=', 0];
|
||||
} else {
|
||||
@@ -134,6 +167,19 @@ class AdminLists extends BaseAdminDataLists implements ListsExtendInterface, Lis
|
||||
}
|
||||
}
|
||||
|
||||
// 数据范围:仅当调用方主动传 apply_data_scope=1 时启用
|
||||
// (管理员表被多场景共用:医生/医助选择器、看板、组织架构等;不主动启用避免误伤)
|
||||
if ((int) ($this->params['apply_data_scope'] ?? 0) === 1) {
|
||||
$visibleIds = $this->getDataScopeVisibleAdminIds();
|
||||
if ($visibleIds !== null) {
|
||||
if ($visibleIds === []) {
|
||||
$where[] = ['id', '=', 0]; // 强制空
|
||||
} else {
|
||||
$where[] = ['id', 'in', $visibleIds];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $where;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user