diff --git a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts index e1124bdc..a174cf9a 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts @@ -237,8 +237,10 @@ export interface StructurePanelHandle { numbers: () => ColumnNumbers; /** 번호 목록 다시 받기 */ reload: () => Promise; - /** 고른 열이 바뀜 — 같은 열이면 아무것도 안 함(CAD 를 다시 안 띄움) */ + /** 고른 열이 바뀜 — 같은 열이면 이름만 새로(CAD 를 다시 안 띄움) */ show: (colId: string | null, columns: StructureColumn[]) => void; + /** 보던 열을 다시 읽음 — 집계표 [저장] 뒤(서버가 새 열 파일 · 번호를 만듦) */ + refresh: (columns: StructureColumn[]) => void; /** 집계표 조회 후 선택(`onPick`) — 일위대가 = 고른 키(「비움」 = 빈 글 · 닫으면 null) · * 도면 · 면적산출 · 재료산출 = 다른 열 것을 복사해 가져옴(돌려주는 글 없음) */ pick: (row: string, colId: string | null, columns: StructureColumn[]) => Promise; @@ -423,8 +425,8 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane /** 글 열(NO · 측점 · 비고)은 구조물이 아니라 컨테이너를 닫음 */ const show = (colId: string | null, columns: StructureColumn[]): void => { const col = columns.find((c) => c.id === colId && isStructureColumn(c)) ?? null; - if ((col?.id ?? null) === column) return; - void load(col); + if ((col?.id ?? null) !== column) return void load(col); + if (col) columnName.textContent = columnLabel = columnHead(col); // 머리를 고쳤을 수 있음 }; const pickPrice = async (colId: string, columns: StructureColumn[]): Promise => { @@ -507,6 +509,11 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane numbers = await fetchStructureNumbers().catch(() => ({})); }, show, + refresh: (columns) => { + const at = column; + column = null; + show(at, columns); + }, pick, destroy: () => { seq += 1; diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts index 47ae312c..fa5777cd 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts @@ -297,6 +297,13 @@ export function createMain(isAdmin: boolean, onSaved?: () => void): MainHandle { version = info.판; loaded = doc; dirty = false; + // 구조물집계표 — 서버가 새 열 파일 · 번호를 만듦 · 번호를 다시 받아 도면 줄 · 카드를 새로 + // (안 하면 새 열은 다시 열 때까지 「도면 없음」 · 번호 빈칸) + if (panel && sheet) { + await panel.reload(); + sheet.recalc(); + panel.refresh(sheet.getDoc()?.열 ?? []); + } showNotice([]); showToast(L("M02_Saved"), "success"); onSaved?.(); // 좌측 목록의 판을 새 판으로