Merge branch 'long-0507'

This commit is contained in:
2026-05-07 18:33:40 +08:00
4 changed files with 402 additions and 25 deletions
@@ -27,6 +27,8 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
{
use HasDataScopeFilter;
private const SCENE_DIAGNOSIS_EDIT = 'diagnosis_edit';
public function setSearch(): array
{
return [
@@ -101,9 +103,11 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
$this->applyExpressCompanyFilter($query);
$this->applyExpressKeywordFilter($query);
$this->applySupplyModeFilter($query);
$this->applyCreatorOrOwnPrescriptionVisibility($query);
$this->applyDataScopeForPrescriptionOrder($query);
// 业绩看板侧栏等:不展示履约已取消(4),与看板合计业绩 NULL 安全口径一致
if (!$this->shouldBypassListVisibilityForDiagnosisEdit()) {
$this->applyCreatorOrOwnPrescriptionVisibility($query);
$this->applyDataScopeForPrescriptionOrder($query);
}
// 业绩看板侧栏等:不展示履约已取消(4),与 stats 业绩统计口径一致
if ((int) ($this->params['exclude_fulfillment_cancelled'] ?? 0) === 1) {
YejiStatsLogic::applyPrescriptionOrderNotCancelledForPerformanceQuery($query, '');
}
@@ -269,6 +273,29 @@ class PrescriptionOrderLists extends BaseAdminDataLists implements ListsSearchIn
});
}
/**
* 仅诊单编辑页内的患者订单查询可跳过列表页权限,但必须显式带场景且保留患者/诊单范围收敛。
*/
private function shouldBypassListVisibilityForDiagnosisEdit(): bool
{
$scene = trim((string) ($this->params['scene'] ?? ''));
if ($scene !== self::SCENE_DIAGNOSIS_EDIT) {
return false;
}
$patientId = (int) ($this->params['patient_id'] ?? 0);
$contextDiagnosisId = (int) ($this->params['context_diagnosis_id'] ?? 0);
if ($patientId <= 0 || $contextDiagnosisId <= 0) {
return false;
}
$diagnosisPatientId = (int) Diagnosis::where('id', $contextDiagnosisId)
->whereNull('delete_time')
->value('patient_id');
return $diagnosisPatientId > 0 && $diagnosisPatientId === $patientId;
}
/**
* 医助:仅「诊单医助=本人」的订单计业绩
*/