feat(M02): 일위대가 · 면적산출 함께 가져오기 길 (43-9a)

- copy 길 pair=true — 같은 원본 열의 면적산출(시트 · 알약 연결) + 일위대가(담은로직 · 입력값 · 수량 · 자재) 함께 덮어씀 · 도면 그대로
- 면적 먼저(일위대가 계산값이 새 칸 값 읽음) · 원본 면적 없음 · 실무문서 = 일위대가만
- 권한 · 남의 층 감사 기록은 기존 _root 그대로
- 화면 함수 copyLaborAreaFrom(열, 원본, from) — 카드 잇기는 43-9b
- 새 항목 칸 셋 자동 생성은 기존 집계표 저장 길 확인 · 시험 test_m02_pair_copy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYJJRCfHfdCGNhmXTjQKV7
This commit is contained in:
2026-10-05 00:36:54 +09:00
co-authored by Claude Opus 5.5
parent bcedbbc118
commit 9d42cb065b
4 changed files with 132 additions and 3 deletions
@@ -224,16 +224,27 @@ export const copyPartFrom = async (
column: string,
source: string,
from: { layer: Layer | "practice"; owner: string | null } | null,
pair = false,
): Promise<void> => {
const q = new URLSearchParams({ from: source });
if (from) q.set("from_layer", from.layer);
if (from?.owner) q.set("from_owner", from.owner);
if (pair) q.set("pair", "true");
const part = kind === "structure" ? "structures" : kind;
await call(owned(activeLayer, `/layers/${activeLayer}/${part}/${enc(column)}/copy?${q}`), {
method: "POST",
});
};
/** 일위대가 · 면적산출 함께 가져오기(43-9a · 카드 [가져오기]) — 원본 열의 면적산출(시트 · 알약 연결)과
* 일위대가(담은로직 · 입력값 · 수량 · 자재)로 둘 다 덮어씀 · 도면은 안 건드림 ·
* 원본에 면적산출이 없으면(실무문서) 일위대가만 · 인자는 `copyPartFrom` 과 같음 */
export const copyLaborAreaFrom = (
column: string,
source: string,
from: { layer: Layer | "practice"; owner: string | null } | null,
): Promise<void> => copyPartFrom("labor", column, source, from, true);
/** 항목 하나 비우기(40-4 · 카드 [삭제]) — 새 열과 같은 빈 문서 · 번호 · 열 그대로 · 지금 층 */
export const clearPart = (
kind: "structure" | "labor" | "area",