From 1c8fb6ab94b1f84217a424733761e2b4d19becaa Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Wed, 1 Jul 2026 18:05:49 +0700 Subject: [PATCH] =?UTF-8?q?[CLAUDE]=20PurchaseEvaluation:=20badge=20"kh?= =?UTF-8?q?=C3=B4ng=20tr=C3=ACnh=20t=E1=BB=9Bi"=E2=86=92"K=E1=BA=BFt=20th?= =?UTF-8?q?=C3=BAc=20t=E1=BA=A1i=20{c=E1=BA=A5p}"=20+=20=C4=91=E1=BA=A3o?= =?UTF-8?q?=20default=20=C3=B4-tick=20finalize=20sang=20opt-in=20(anh=20Ki?= =?UTF-8?q?=E1=BB=87t=20FDC=20UAT)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix 1: badge cấp-sau-finalize "không trình tới" → "Kết thúc tại {finalizeLevelName}" (động, hiện "Kết thúc tại CCM") + tooltip template-literal - Fix 2: đảo default checkbox "Cấp này KẾT THÚC quy trình" opt-out→opt-in (useState true→false + reset onSuccess) — mặc định TRÌNH TIẾP CEO, tick mới KẾT THÚC; helper text reword - FE-only, mirror 2 app SHA-identical, no BE/mig/test; workflow implement+review PASS 0 issue Co-Authored-By: Claude Opus 4.8 --- fe-admin/src/components/pe/PeWorkflowPanel.tsx | 16 ++++++++-------- fe-user/src/components/pe/PeWorkflowPanel.tsx | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/fe-admin/src/components/pe/PeWorkflowPanel.tsx b/fe-admin/src/components/pe/PeWorkflowPanel.tsx index a92c9db..c07859b 100644 --- a/fe-admin/src/components/pe/PeWorkflowPanel.tsx +++ b/fe-admin/src/components/pe/PeWorkflowPanel.tsx @@ -52,9 +52,9 @@ export function PeWorkflowPanel({ // [Mig 54 2026-06-18 — anh Kiệt FDC] ③ CCM tích "Duyệt done miễn CEO" + ① người duyệt // cuối chọn 1 giá chốt (Ncc / ProMin / ProMax / Ccm). const [finalizeByCcm, setFinalizeByCcm] = useState(false) - // [S96 2026-07-01 — anh Kiệt FDC] Cấp cấu hình KẾT THÚC (AllowApproverFinalize) NAY là ô-tick - // BỎ được: default checked (giữ hành vi finalize), bỏ tick → trình tiếp CEO thay vì kết thúc. - const [applyLevelFinalize, setApplyLevelFinalize] = useState(true) + // [S97 2026-07-01 — anh Kiệt FDC] Cấp cấu hình KẾT THÚC (AllowApproverFinalize) = ô-tick OPT-IN: + // default UNCHECKED → trình tiếp CEO/cấp sau; TÍCH mới KẾT THÚC tại cấp này. Đảo opt-out S96. + const [applyLevelFinalize, setApplyLevelFinalize] = useState(false) const [approvedPriceSource, setApprovedPriceSource] = useState(null) const qc = useQueryClient() const { user: currentUser } = useAuth() @@ -218,7 +218,7 @@ export function PeWorkflowPanel({ setReturnTargetUserId(null) setSkipToFinalApprover(false) setFinalizeByCcm(false) - setApplyLevelFinalize(true) + setApplyLevelFinalize(false) setApprovedPriceSource(null) setApproveFiles([]) if (!wasReject) onApproved?.() @@ -326,9 +326,9 @@ export function PeWorkflowPanel({ {isStepAfterFinalize(step.order) && ( - không trình tới + Kết thúc tại {evaluation.finalizeLevelName ?? evaluation.finalizeStepName ?? 'cấp trên'} )} @@ -667,8 +667,8 @@ export function PeWorkflowPanel({ Cấp này KẾT THÚC quy trình {applyLevelFinalize - ? 'Được cấu hình sẵn trong Quy trình duyệt — duyệt xong là phiếu "Đã duyệt", KHÔNG trình tiếp CEO. Nhớ chọn 1 giá chốt bên dưới. BỎ tick nếu muốn vẫn trình CEO.' - : 'Đã BỎ tick — phiếu sẽ TRÌNH TIẾP lên CEO/cấp sau thay vì kết thúc tại đây (không cần chọn giá chốt).'} + ? 'Đã tích — duyệt xong là phiếu "Đã duyệt", KẾT THÚC tại cấp này, KHÔNG trình tiếp CEO. Nhớ chọn 1 giá chốt bên dưới.' + : 'Mặc định: duyệt xong phiếu TRÌNH TIẾP lên CEO/cấp sau. TÍCH vào nếu muốn KẾT THÚC ngay tại cấp này (không lên CEO — không cần chọn giá chốt).'} diff --git a/fe-user/src/components/pe/PeWorkflowPanel.tsx b/fe-user/src/components/pe/PeWorkflowPanel.tsx index a92c9db..c07859b 100644 --- a/fe-user/src/components/pe/PeWorkflowPanel.tsx +++ b/fe-user/src/components/pe/PeWorkflowPanel.tsx @@ -52,9 +52,9 @@ export function PeWorkflowPanel({ // [Mig 54 2026-06-18 — anh Kiệt FDC] ③ CCM tích "Duyệt done miễn CEO" + ① người duyệt // cuối chọn 1 giá chốt (Ncc / ProMin / ProMax / Ccm). const [finalizeByCcm, setFinalizeByCcm] = useState(false) - // [S96 2026-07-01 — anh Kiệt FDC] Cấp cấu hình KẾT THÚC (AllowApproverFinalize) NAY là ô-tick - // BỎ được: default checked (giữ hành vi finalize), bỏ tick → trình tiếp CEO thay vì kết thúc. - const [applyLevelFinalize, setApplyLevelFinalize] = useState(true) + // [S97 2026-07-01 — anh Kiệt FDC] Cấp cấu hình KẾT THÚC (AllowApproverFinalize) = ô-tick OPT-IN: + // default UNCHECKED → trình tiếp CEO/cấp sau; TÍCH mới KẾT THÚC tại cấp này. Đảo opt-out S96. + const [applyLevelFinalize, setApplyLevelFinalize] = useState(false) const [approvedPriceSource, setApprovedPriceSource] = useState(null) const qc = useQueryClient() const { user: currentUser } = useAuth() @@ -218,7 +218,7 @@ export function PeWorkflowPanel({ setReturnTargetUserId(null) setSkipToFinalApprover(false) setFinalizeByCcm(false) - setApplyLevelFinalize(true) + setApplyLevelFinalize(false) setApprovedPriceSource(null) setApproveFiles([]) if (!wasReject) onApproved?.() @@ -326,9 +326,9 @@ export function PeWorkflowPanel({ {isStepAfterFinalize(step.order) && ( - không trình tới + Kết thúc tại {evaluation.finalizeLevelName ?? evaluation.finalizeStepName ?? 'cấp trên'} )} @@ -667,8 +667,8 @@ export function PeWorkflowPanel({ Cấp này KẾT THÚC quy trình {applyLevelFinalize - ? 'Được cấu hình sẵn trong Quy trình duyệt — duyệt xong là phiếu "Đã duyệt", KHÔNG trình tiếp CEO. Nhớ chọn 1 giá chốt bên dưới. BỎ tick nếu muốn vẫn trình CEO.' - : 'Đã BỎ tick — phiếu sẽ TRÌNH TIẾP lên CEO/cấp sau thay vì kết thúc tại đây (không cần chọn giá chốt).'} + ? 'Đã tích — duyệt xong là phiếu "Đã duyệt", KẾT THÚC tại cấp này, KHÔNG trình tiếp CEO. Nhớ chọn 1 giá chốt bên dưới.' + : 'Mặc định: duyệt xong phiếu TRÌNH TIẾP lên CEO/cấp sau. TÍCH vào nếu muốn KẾT THÚC ngay tại cấp này (không lên CEO — không cần chọn giá chốt).'}