diff --git a/fe-admin/src/components/khkk/KhkkDetailContent.tsx b/fe-admin/src/components/khkk/KhkkDetailContent.tsx index fa1261a..d8d936c 100644 --- a/fe-admin/src/components/khkk/KhkkDetailContent.tsx +++ b/fe-admin/src/components/khkk/KhkkDetailContent.tsx @@ -452,12 +452,10 @@ export function KhkkDetailContent({ - {/* [S175 — anh: "hạng mục của Dự án, Duyệt NCC ấy"] Đây là HẠNG MỤC CÔNG VIỆC của - dự án, lấy từ phiếu Duyệt NCC nguồn (`PE.WorkItemId`). - 🔴 KHÁC hẳn `line.tenHangMuc` — cái đó là danh-mục SP-002 dùng phân loại HỢP - ĐỒNG (86 dòng, chọn ở mục 2). Hai thứ trùng tên tiếng Việt nhưng khác trục; - lượt trước lead bày nhầm cái SP-002 ở đây nên anh bảo "Bỏ đi". */} - + {/* 🧊 [S177 — anh: "Làm header dưới đây"] Ô **Hạng mục (dự án)** ĐÃ DỜI xuống làm + header của mục 2 (xem ngay dưới). Nó là gói việc mà CẢ BẢNG hạng mục thuộc về, + nên đứng đầu bảng thì đúng vai hơn là nằm lẫn giữa các ô meta ở đây. + 🔸 Chú thích S175 cũ ("xếp NGAY DƯỚI Dự án ở cột PHẢI") hết hiệu lực theo. */} @@ -489,6 +487,19 @@ export function KhkkDetailContent({ ) : undefined } > + {/* [S177 — anh: "Làm header dưới đây"] HẠNG MỤC (DỰ ÁN) = gói việc mà CẢ bảng dưới + thuộc về, dời từ mục 1 xuống đây làm header của mục 2. + 🔴 ĐẶT NGOÀI ternary `lines.length === 0`: phiếu chưa có NCC trúng thầu thì vẫn + phải biết mình đang lập kế hoạch cho gói việc nào — nhét vào nhánh có-dòng là + đúng ca "vắng-mặt trông giống ổn" (màn rỗng nhìn vẫn gọn nên không ai kêu). */} +
+ Hạng mục (dự án) + {plan.peWorkItemCode && ( + {plan.peWorkItemCode} + )} + {plan.peWorkItemName ?? '—'} +
+ {plan.lines.length === 0 ? (
Phiếu nguồn chưa có NCC trúng thầu.
) : ( @@ -608,6 +619,33 @@ export function KhkkDetailContent({ ))} + {/* [S177 — anh: "+ thêm hạng mục ở đây"] Nút thêm DỜI TỪ DƯỚI BẢNG vào + thành dòng cuối của `tbody` — ngay sau dòng dữ liệu cuối, TRÊN dòng TỔNG. + 🔴 `colSpan={4}` (không phải 3): bảng đã lên 4 cột từ đầu lượt S177. + 🔸 Panel nhập (`addFor`) VẪN Ở NGOÀI bảng — nó là form nhiều ô, nhét vào + trong `` thì vỡ lưới `table-fixed` đang giữ 3 cột số thẳng hàng. */} + {isDraft && ( + + + + )} {/* [S175 — anh: "chọn hạng mục tiền → thành tổng"] TỔNG = Σ giá các dòng. 🔴 KHÔNG có cột "giá tham chiếu" / "giá duyệt" nữa — anh chốt "ko cần so @@ -628,29 +666,11 @@ export function KhkkDetailContent({
+
+ Thêm hạng mục cho: + {[...new Map(plan.lines.map(l => [l.supplierId, l])).values()].map((l) => ( + + ))} +
+
- {/* [S175 — anh chốt] THÊM HẠNG MỤC cho 1 NCC. 1 NCC được N hạng mục: máy đã cho - phép từ Mig 71 (unique 3 cột `Plan × Supplier × CatalogEntry`), lượt này chỉ - bung UI — đúng khuôn "máy rộng, UI hẹp" anh chốt S164. - 🔴 CHỈ liệt kê NCC ĐÃ CÓ trên phiếu: NCC đến từ winner của phiếu Duyệt NCC; - đẻ NCC mới ở đây là ký với nhà thầu chưa ai chọn (BE cũng chặn, 409). */} - {isDraft && ( -
- Thêm hạng mục cho: - {[...new Map(plan.lines.map(l => [l.supplierId, l])).values()].map((l) => ( - - ))} -
- )} + {/* 🧊 [S177 — anh: "+ thêm hạng mục ở đây"] Khối "Thêm hạng mục cho:" ĐÃ DỜI vào + trong `tbody` (dòng cuối, trên TỔNG). Lý lẽ S175 vẫn đúng và đi theo lên trên: + 1 NCC được N hạng mục từ Mig 71, và CHỈ liệt kê NCC ĐÃ CÓ trên phiếu — đẻ NCC + mới ở đây là ký với nhà thầu chưa ai chọn (BE cũng chặn, 409). + 🔴 Giữ 1 dòng vết vì đây là chỗ người sau sẽ tìm khi hỏi "nút thêm đâu rồi". */} {addFor && (
diff --git a/fe-user/src/components/khkk/KhkkDetailContent.tsx b/fe-user/src/components/khkk/KhkkDetailContent.tsx index fa1261a..d8d936c 100644 --- a/fe-user/src/components/khkk/KhkkDetailContent.tsx +++ b/fe-user/src/components/khkk/KhkkDetailContent.tsx @@ -452,12 +452,10 @@ export function KhkkDetailContent({ - {/* [S175 — anh: "hạng mục của Dự án, Duyệt NCC ấy"] Đây là HẠNG MỤC CÔNG VIỆC của - dự án, lấy từ phiếu Duyệt NCC nguồn (`PE.WorkItemId`). - 🔴 KHÁC hẳn `line.tenHangMuc` — cái đó là danh-mục SP-002 dùng phân loại HỢP - ĐỒNG (86 dòng, chọn ở mục 2). Hai thứ trùng tên tiếng Việt nhưng khác trục; - lượt trước lead bày nhầm cái SP-002 ở đây nên anh bảo "Bỏ đi". */} - + {/* 🧊 [S177 — anh: "Làm header dưới đây"] Ô **Hạng mục (dự án)** ĐÃ DỜI xuống làm + header của mục 2 (xem ngay dưới). Nó là gói việc mà CẢ BẢNG hạng mục thuộc về, + nên đứng đầu bảng thì đúng vai hơn là nằm lẫn giữa các ô meta ở đây. + 🔸 Chú thích S175 cũ ("xếp NGAY DƯỚI Dự án ở cột PHẢI") hết hiệu lực theo. */}
@@ -489,6 +487,19 @@ export function KhkkDetailContent({ ) : undefined } > + {/* [S177 — anh: "Làm header dưới đây"] HẠNG MỤC (DỰ ÁN) = gói việc mà CẢ bảng dưới + thuộc về, dời từ mục 1 xuống đây làm header của mục 2. + 🔴 ĐẶT NGOÀI ternary `lines.length === 0`: phiếu chưa có NCC trúng thầu thì vẫn + phải biết mình đang lập kế hoạch cho gói việc nào — nhét vào nhánh có-dòng là + đúng ca "vắng-mặt trông giống ổn" (màn rỗng nhìn vẫn gọn nên không ai kêu). */} +
+ Hạng mục (dự án) + {plan.peWorkItemCode && ( + {plan.peWorkItemCode} + )} + {plan.peWorkItemName ?? '—'} +
+ {plan.lines.length === 0 ? (
Phiếu nguồn chưa có NCC trúng thầu.
) : ( @@ -608,6 +619,33 @@ export function KhkkDetailContent({ ))} + {/* [S177 — anh: "+ thêm hạng mục ở đây"] Nút thêm DỜI TỪ DƯỚI BẢNG vào + thành dòng cuối của `tbody` — ngay sau dòng dữ liệu cuối, TRÊN dòng TỔNG. + 🔴 `colSpan={4}` (không phải 3): bảng đã lên 4 cột từ đầu lượt S177. + 🔸 Panel nhập (`addFor`) VẪN Ở NGOÀI bảng — nó là form nhiều ô, nhét vào + trong `` thì vỡ lưới `table-fixed` đang giữ 3 cột số thẳng hàng. */} + {isDraft && ( + + + + )} {/* [S175 — anh: "chọn hạng mục tiền → thành tổng"] TỔNG = Σ giá các dòng. 🔴 KHÔNG có cột "giá tham chiếu" / "giá duyệt" nữa — anh chốt "ko cần so @@ -628,29 +666,11 @@ export function KhkkDetailContent({
+
+ Thêm hạng mục cho: + {[...new Map(plan.lines.map(l => [l.supplierId, l])).values()].map((l) => ( + + ))} +
+
- {/* [S175 — anh chốt] THÊM HẠNG MỤC cho 1 NCC. 1 NCC được N hạng mục: máy đã cho - phép từ Mig 71 (unique 3 cột `Plan × Supplier × CatalogEntry`), lượt này chỉ - bung UI — đúng khuôn "máy rộng, UI hẹp" anh chốt S164. - 🔴 CHỈ liệt kê NCC ĐÃ CÓ trên phiếu: NCC đến từ winner của phiếu Duyệt NCC; - đẻ NCC mới ở đây là ký với nhà thầu chưa ai chọn (BE cũng chặn, 409). */} - {isDraft && ( -
- Thêm hạng mục cho: - {[...new Map(plan.lines.map(l => [l.supplierId, l])).values()].map((l) => ( - - ))} -
- )} + {/* 🧊 [S177 — anh: "+ thêm hạng mục ở đây"] Khối "Thêm hạng mục cho:" ĐÃ DỜI vào + trong `tbody` (dòng cuối, trên TỔNG). Lý lẽ S175 vẫn đúng và đi theo lên trên: + 1 NCC được N hạng mục từ Mig 71, và CHỈ liệt kê NCC ĐÃ CÓ trên phiếu — đẻ NCC + mới ở đây là ký với nhà thầu chưa ai chọn (BE cũng chặn, 409). + 🔴 Giữ 1 dòng vết vì đây là chỗ người sau sẽ tìm khi hỏi "nút thêm đâu rồi". */} {addFor && (