feat(M02): 집계표 조회 후 선택 — 일위대가 목록 · 다른 열 도면 · 산출근거 복사해 가져오기 · 산출근거 줄 표번

- 일위대가 칸 = M01 일위대가 목록(fetchCombos)에서 찾아 고름 · 「비움」
- 도면 · 산출근거 칸 = 다른 열(번호 + 이름) 골라 덮어쓰기 확인 뒤 copyStructure · copyBasis(sub4) — 번호 · 열은 그대로
- 집계표 산출근거 줄 칸 글 = 표번

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 09:57:34 +09:00
co-authored by Claude Opus 5.5
parent dde6f0c2f8
commit 04f2476741
3 changed files with 238 additions and 14 deletions
@@ -161,18 +161,26 @@ export function createMain(isAdmin: boolean, onSaved?: () => void): MainHandle {
"createSheet",
);
if (!create) return empty(L("M02_NoSheet"));
// 구조물집계표(시스템 층)만 — 도면 줄에 도번 · 칸을 고르면 아래 컨테이너
// 구조물집계표(시스템 층)만 — 도면 · 산출근거 줄에 도번 · 표번 · 칸을 고르면 아래 컨테이너 ·
// 고칠 수 있으면 일위대가 · 도면 · 산출근거 칸은 조회 후 선택
const struct = at.layer === "system" && at.name === STRUCTURE_TABLE ? buildPanel() : null;
if (struct) await struct.reload();
panel = struct;
const columns = (): StructureColumn[] => sheet?.getDoc().열 ?? [];
editor = create(host, doc, {
mode: at.layer === "project" ? "project" : "master",
onChange: () => (dirty = !readOnly),
...(struct
? {
drawingLabel: (colId: string) => struct.numbers()[colId] ?? "",
onSelect: (s: { colId: string | null }) =>
struct.show(s.colId, sheet?.getDoc().열 ?? []),
drawingLabel: (colId: string) => struct.numbers()[colId]?.도번 ?? "",
basisLabel: (colId: string) => struct.numbers()[colId]?.표번 ?? "",
onSelect: (s: { colId: string | null }) => struct.show(s.colId, columns()),
...(readOnly
? {}
: {
onPick: (s: { row: string; colId: string | null }) =>
struct.pick(s.row, s.colId, columns()),
}),
}
: {}),
});