From 7d67a5ab1d706c994360422d0a48608b7da694a2 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Wed, 13 May 2026 12:28:38 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=9C=EB=B0=9C=EA=B4=80=EB=A6=AC>PART=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=C2=B7=EC=A1=B0=ED=9A=8C=20+=20E-BOM=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=EA=B2=80=EC=83=89=20=ED=8F=BC=20select2-p?= =?UTF-8?q?art=20=EC=9E=90=EB=8F=99=EC=99=84=EC=84=B1=20(=EC=9A=B4?= =?UTF-8?q?=EC=98=81=ED=8C=90=201:1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 3 페이지 검색 폼이 단순 Input + 품번/품명 LIKE 였음. 운영판 wace 는 class="select2-part" 자동완성 (initPartSelect2Ajax) + 한쪽 선택 시 다른 쪽 자동 채움. 수정 페이지 (모두 DevPartSelect 적용): - part-regist/page.tsx (M1 PART 등록 — wace partMngTempList.jsp) - part-search/page.tsx (M2 PART 조회 — wace partMngList.jsp) - ebom-regist/page.tsx (M3 E-BOM 등록 — wace structureList.jsp) 동작: - 품번/품명 양쪽 DevPartSelect (part_mng IS_LAST='1' 캐시) - 품번 선택 → 품명 자동 채움 (row.part_name) - 품명 선택 → 품번 자동 채움 (row.part_no) - setFilter 함수형 업데이트로 동시 setState 충돌 방지 ebom-search 와 동일 패턴 통일 — DevPartSelect 1개 컴포넌트로 4 페이지 공유. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../development/ebom-regist/page.tsx | 26 +++++++++------- .../development/part-regist/page.tsx | 30 +++++++++++-------- .../development/part-search/page.tsx | 30 +++++++++++-------- 3 files changed, 52 insertions(+), 34 deletions(-) diff --git a/frontend/app/(main)/COMPANY_16/development/ebom-regist/page.tsx b/frontend/app/(main)/COMPANY_16/development/ebom-regist/page.tsx index df1cf2a9..a5a76a02 100644 --- a/frontend/app/(main)/COMPANY_16/development/ebom-regist/page.tsx +++ b/frontend/app/(main)/COMPANY_16/development/ebom-regist/page.tsx @@ -17,6 +17,7 @@ import { DataGrid, DataGridColumn } from "@/components/common/DataGrid"; import { CommCodeSelect } from "@/components/common/CommCodeSelect"; import { devBomApi, BomReportListFilter, BomReportRow } from "@/lib/api/devBom"; import { BomReportStatusDialog } from "@/components/development/BomReportStatusDialog"; +import { DevPartSelect } from "@/components/development/DevPartSelect"; import { BomReportExcelImportDialog } from "@/components/development/BomReportExcelImportDialog"; import { BomReportTreeDialog } from "@/components/development/BomReportTreeDialog"; @@ -135,19 +136,24 @@ export default function EbomRegistPage() { )} + {/* wace structureList.jsp 1:1 — select2-part 자동완성 (양방향 동기) */} - setFilter({ ...filter, search_part_no: e.target.value })} - placeholder="품번 LIKE" - /> + setFilter((prev) => ({ + ...prev, + search_part_no: v, + search_part_name: row?.part_name ?? prev.search_part_name, + }))} /> - setFilter({ ...filter, search_part_name: e.target.value })} - placeholder="품명 LIKE" - /> + setFilter((prev) => ({ + ...prev, + search_part_name: v, + search_part_no: row?.part_no ?? prev.search_part_no, + }))} />
diff --git a/frontend/app/(main)/COMPANY_16/development/part-regist/page.tsx b/frontend/app/(main)/COMPANY_16/development/part-regist/page.tsx index a5e3be52..47f976f3 100644 --- a/frontend/app/(main)/COMPANY_16/development/part-regist/page.tsx +++ b/frontend/app/(main)/COMPANY_16/development/part-regist/page.tsx @@ -18,6 +18,7 @@ import { devPartApi, PartListFilter, PartRow } from "@/lib/api/devPart"; import { PartFormDialog } from "@/components/development/PartFormDialog"; import { PartDetailDialog } from "@/components/development/PartDetailDialog"; import { PartExcelImportDialog } from "@/components/development/PartExcelImportDialog"; +import { DevPartSelect } from "@/components/development/DevPartSelect"; // wace 23셀 + 부속 (PARENT_PART_INFO/PARTNER_TITLE/Q_QTY) const GRID_COLUMNS: DataGridColumn[] = [ @@ -157,21 +158,26 @@ export default function PartRegistPage() { {/* 검색폼 — wace partMngTempList.jsp 활성 2필드 */}
-
+ {/* wace partMngTempList.jsp 1:1 — select2-part 자동완성 (양방향 동기) */} +
- setFilter({ ...filter, search_part_no: e.target.value })} - placeholder="품번 LIKE" - /> + setFilter((prev) => ({ + ...prev, + search_part_no: v, + search_part_name: row?.part_name ?? prev.search_part_name, + }))} />
-
+
- setFilter({ ...filter, search_part_name: e.target.value })} - placeholder="품명 LIKE" - /> + setFilter((prev) => ({ + ...prev, + search_part_name: v, + search_part_no: row?.part_no ?? prev.search_part_no, + }))} />