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({