fix(M02): 집계표 [저장] 뒤 새 열 도면 정보가 안 열리던 것 — 번호 다시 받고 카드 새로

- 원인: 새 열은 [저장] 때 서버가 구조물 · 면적산출 · 재료산출 파일과 번호를 만드는데 화면은 번호 목록을 처음 한 번만 받음 · 같은 열을 다시 고르면 카드를 안 다시 읽어 「도면 없음」 · 번호 빈칸이 다시 열 때까지 남음
- [저장] 뒤 번호 다시 받기 · 도면 · 면적산출 · 재료산출 줄 다시 그림 · 보던 열 카드 다시 읽음
- 같은 열을 다시 고르면 이름만 새로(머리 고친 열)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Kyw9qnkJ94pC1A4PfpDtA
This commit is contained in:
2026-09-28 14:39:39 +09:00
co-authored by Claude Opus 5.5
parent ccd9bc89c7
commit 789b62be9d
2 changed files with 17 additions and 3 deletions
@@ -237,8 +237,10 @@ export interface StructurePanelHandle {
numbers: () => ColumnNumbers;
/** 번호 목록 다시 받기 */
reload: () => Promise<void>;
/** 고른 열이 바뀜 — 같은 열이면 아무것도 안 함(CAD 를 다시 안 띄움) */
/** 고른 열이 바뀜 — 같은 열이면 이름만 새로(CAD 를 다시 안 띄움) */
show: (colId: string | null, columns: StructureColumn[]) => void;
/** 보던 열을 다시 읽음 — 집계표 [저장] 뒤(서버가 새 열 파일 · 번호를 만듦) */
refresh: (columns: StructureColumn[]) => void;
/** 집계표 조회 후 선택(`onPick`) — 일위대가 = 고른 키(「비움」 = 빈 글 · 닫으면 null) ·
* 도면 · 면적산출 · 재료산출 = 다른 열 것을 복사해 가져옴(돌려주는 글 없음) */
pick: (row: string, colId: string | null, columns: StructureColumn[]) => Promise<string | null>;
@@ -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<string | null> => {
@@ -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;
@@ -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?.(); // 좌측 목록의 판을 새 판으로