From 789b62be9d2109acb615aa4ee47c7ace5e513407 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 28 Sep 2026 14:39:39 +0900 Subject: [PATCH] =?UTF-8?q?fix(M02):=20=EC=A7=91=EA=B3=84=ED=91=9C=20[?= =?UTF-8?q?=EC=A0=80=EC=9E=A5]=20=EB=92=A4=20=EC=83=88=20=EC=97=B4=20?= =?UTF-8?q?=EB=8F=84=EB=A9=B4=20=EC=A0=95=EB=B3=B4=EA=B0=80=20=EC=95=88=20?= =?UTF-8?q?=EC=97=B4=EB=A6=AC=EB=8D=98=20=EA=B2=83=20=E2=80=94=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=8B=A4=EC=8B=9C=20=EB=B0=9B=EA=B3=A0=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EC=83=88=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 원인: 새 열은 [저장] 때 서버가 구조물 · 면적산출 · 재료산출 파일과 번호를 만드는데 화면은 번호 목록을 처음 한 번만 받음 · 같은 열을 다시 고르면 카드를 안 다시 읽어 「도면 없음」 · 번호 빈칸이 다시 열 때까지 남음 - [저장] 뒤 번호 다시 받기 · 도면 · 면적산출 · 재료산출 줄 다시 그림 · 보던 열 카드 다시 읽음 - 같은 열을 다시 고르면 이름만 새로(머리 고친 열) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019Kyw9qnkJ94pC1A4PfpDtA --- M02_MasterTemplete/M02_MasterTemplete_Structure.ts | 13 ++++++++++--- M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts | 7 +++++++ 2 files changed, 17 insertions(+), 3 deletions(-) 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?.(); // 좌측 목록의 판을 새 판으로