feat(M02): 50-3③ 일위대가 조합 서고 화면 틀 — 좌측 컨테이너 · 단가승격 · 사전조합 목록 · 상세 서고 모드

- 구조물 조합 아래 「일위대가 조합」 컨테이너 · 층 단추(진입 open=일위대가조합) · 새로 · 복사 · 지우기
- 단가승격 새로 = 로직 고르기 → SP- 키 저장 · 사전조합 새로 = 이름만 → SC- 키
- 상세 = 일위대가 상세 서고 모드(이름 칸 · 로직 표 · 원문만 · 자재 · 면적 · 다이어그램 없음)
- 낡은 글 찾기 시험 셋을 지금 코드에 맞춤

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
This commit is contained in:
2026-10-05 18:42:50 +09:00
co-authored by Claude Opus 5.5
parent 5dfffa980b
commit b1a5f38a16
12 changed files with 350 additions and 35 deletions
@@ -31,6 +31,7 @@ import { buildAreaPanel, type AreaPanel } from "./M02_MasterTemplete_AreaPanel";
import { createAreaToDrawing } from "./M02_MasterTemplete_AreaToDrawing";
import { detailHelp, HELP_TITLE } from "./M02_MasterTemplete_CardHelp";
import { helpParts } from "./M02_MasterTemplete_CardShell";
import { isPrecombo } from "./M02_MasterTemplete_UI_Side_Precombo";
import type { SpreadsheetHandle } from "../A00_Common/spreadsheet/spreadsheet";
import type { LinkOptions } from "../A00_Common/spreadsheet/spreadsheet_links";
export interface Selection {
@@ -378,19 +379,24 @@ export function createMain(
editor = { getDoc: () => comboMerge(loaded, shown.getDoc()), destroy: shown.destroy };
return;
}
if (at.kind === "labor") {
// 일위대가 상세(39-3) — 구조물 열마다 하나 · 고침은 이 화면 [저장]으로
if (at.kind === "labor" || isPrecombo(at.kind)) {
// 일위대가 상세(39-3) — 구조물 열마다 하나 · 고침은 이 화면 [저장]으로 ·
// 단가승격 · 사전조합(50-3) = 같은 상세 모드(도면 · 면적 · 자재 없음 · 이름 = 키)
const { mountLaborDetail } = await import("./M02_MasterTemplete_Labor_Detail");
const mode = isPrecombo(at.kind) ? at.kind : undefined;
const labor = mountLaborDetail(host, doc, {
layer: at.layer,
column: at.name,
readOnly,
onChanged: (d) => (dirty = d && !readOnly),
goArea: async () => {
if (!(await confirmLeave())) return false; // 취소 — 입력 모달 그대로
void open({ ...at, kind: "area" });
return true;
},
goArea: mode
? null
: async () => {
if (!(await confirmLeave())) return false; // 취소 — 입력 모달 그대로
void open({ ...at, kind: "area" });
return true;
},
...(mode ? { mode } : {}),
});
// [저장] = 엑셀에서 고른 칸 연결(면적 문서) 먼저 · 그다음 일위대가(서버가 새 칸 값으로 계산값)
editor = {