[CLAUDE] FE-User: PE khoa nut Xac nhan khi phai chon gia ma chua co gia nao (Mig 54 fix)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m12s

Empty-candidates edge: neu duyet cap cuoi ma priceCandidates rong, nut Xac
nhan van mo -> bam -> BE Conflict kho hieu. Khoa nut + giu message ro rang.
Phong-thu thuan (double-check xac nhan edge UNREACHABLE qua submit-guard
winnerQuoteTotal>0 :194) + sua mau thuan UX cu. fe-user/fe-admin SHA-identical
(4d6c89d9). 2 workflow review (Round1 schema 1/4 + Round2 free-text 2/3 PASS).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-06-18 16:21:31 +07:00
parent 1d86abcdc5
commit 6aa4dcb525
2 changed files with 8 additions and 2 deletions

View File

@ -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. // [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 isApproveAction = !isCancel && !isSendBack
const shouldPickPrice = isApproveAction && (currentIsFinalApprover || finalizeByCcm) 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 ( return (
<Dialog <Dialog
open open

View File

@ -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. // [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 isApproveAction = !isCancel && !isSendBack
const shouldPickPrice = isApproveAction && (currentIsFinalApprover || finalizeByCcm) 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 ( return (
<Dialog <Dialog
open open