diff --git a/fe-admin/src/components/pe/PeWorkflowPanel.tsx b/fe-admin/src/components/pe/PeWorkflowPanel.tsx index df2975a..edb1a3f 100644 --- a/fe-admin/src/components/pe/PeWorkflowPanel.tsx +++ b/fe-admin/src/components/pe/PeWorkflowPanel.tsx @@ -358,7 +358,10 @@ export function PeWorkflowPanel({ // [Mig 54] ① bộ chọn giá chốt khi duyệt CUỐI hoặc CCM tích done — bắt buộc chọn. const isApproveAction = !isCancel && !isSendBack const shouldPickPrice = isApproveAction && (currentIsFinalApprover || finalizeByCcm) - const priceMissing = shouldPickPrice && priceCandidates.length > 0 && !approvedPriceSource + // [Mig 54 fix] Khoá "Xác nhận" khi PHẢI chọn giá mà: chưa có giá nào (candidates + // rỗng — buộc nhập PRO/CCM hoặc chọn NCC thắng thầu trước) HOẶC chưa chọn giá. Tránh + // người duyệt bấm rồi nhận lỗi BE "Chọn 1 giá chốt" khó hiểu (empty-candidates edge). + const priceMissing = shouldPickPrice && (priceCandidates.length === 0 || !approvedPriceSource) return ( 0 && !approvedPriceSource + // [Mig 54 fix] Khoá "Xác nhận" khi PHẢI chọn giá mà: chưa có giá nào (candidates + // rỗng — buộc nhập PRO/CCM hoặc chọn NCC thắng thầu trước) HOẶC chưa chọn giá. Tránh + // người duyệt bấm rồi nhận lỗi BE "Chọn 1 giá chốt" khó hiểu (empty-candidates edge). + const priceMissing = shouldPickPrice && (priceCandidates.length === 0 || !approvedPriceSource) return (