diff --git a/fe-admin/src/components/pe/PeDetailTabs.tsx b/fe-admin/src/components/pe/PeDetailTabs.tsx
index c2a6775..568eb51 100644
--- a/fe-admin/src/components/pe/PeDetailTabs.tsx
+++ b/fe-admin/src/components/pe/PeDetailTabs.tsx
@@ -98,10 +98,22 @@ export function PeDetailTabs({
onError: e => toast.error(getErrorMessage(e)),
})
+ const forwardPhase = evaluation.workflow.nextPhases.find(p =>
+ p !== PurchaseEvaluationPhase.TuChoi && p !== PurchaseEvaluationPhase.TraLai)
const canSubmitForApproval = mode === 'workspace'
&& canEditPhase
&& !readOnly
- && evaluation.workflow.nextPhases.some(p => p !== PurchaseEvaluationPhase.TuChoi && p !== PurchaseEvaluationPhase.TraLai)
+ && forwardPhase != null
+
+ // Tooltip reason cho button disabled (giúp diagnose tại sao "Lưu & Gửi Duyệt"
+ // không bấm được — user feedback 2026-05-07).
+ const submitDisabledReason = !canEditPhase
+ ? `Phiếu đã ở phase ${PurchaseEvaluationPhaseLabel[evaluation.phase]} — chỉ Bản nháp / Trả lại mới sửa + gửi được.`
+ : readOnly
+ ? 'Chế độ chỉ đọc.'
+ : !forwardPhase
+ ? `Workflow không có phase tiếp theo từ ${PurchaseEvaluationPhaseLabel[evaluation.phase]}. Liên hệ admin kiểm tra cấu hình quy trình.`
+ : null
return (
@@ -213,11 +225,13 @@ export function PeDetailTabs({