feat(732-1): M02 실무문서 칸 · 복사 탭 · 서버 길 걷음

- 왼쪽 「실무문서」 칸(Practice.ts) · 일위대가 가져오기 「실무문서」 탭 · 복사 원본 고르기 · 낱 CSS · locale 열쇠 걷음
- 서버 `from_layer=practice`(_copy_practice) · `DELETE /api/m02/practice`(drop_practice) · 조합 목록 · 키 하나 읽기 길 걷음 · 조합 길 시스템 관리자 문 걷음(담을 로직 읽기는 그대로)
- 옛 마스터 조합 파일 `일위대가조합.json`(UA 37) = 쓰는 곳 있음(구조물집계표 일위대가 칸 · labor 본뜬키 · 프로젝트 초기값 사본 · 불러오기 맞춤 씨앗) → 파일 · 읽기 길 유지 · 지우지 않음
- 낡은 시험: test_m02_practice 지움(화면 · 길 없음) · 조합 길 읽던 시험(combo · combo_inputs · combo_layers)은 저장소 함수로 · 실무문서 복사 시험(labor_copy · pair_copy) 줄 지움 · 탭 · 차례 단정(layer_screen · structure_options · structure_panel · 720 · precombo_scope · ui_loading) 고침

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-02 13:17:24 +09:00
co-authored by Claude Sonnet 5.5
parent 23b9757cea
commit e1b17a523c
27 changed files with 79 additions and 701 deletions
@@ -449,7 +449,7 @@ def copy_from(
"""다른 열(`source`) 내용을 받는 열(`column`)로 가져옴 — 번호 · 열은 받는 쪽 그대로(두 열은
따로 움직임) · 통합문서는 알약 `연결` 도 같이 오고 계산값은 서버가 다시 풂 ·
`source_root` = 원본 층 폴더(없으면 지금 층 · 권한은 부르는 쪽) · `body` = 원본 문서를 바로 줌
(실무문서 조합 → 일위대가 · 39-1b)."""
(예: 문서를 만들어 바로 담음)."""
if kind not in _KEY:
raise StoreError(404, f"없는 종류 「{kind}」")
target = read(kind, column)["문서"]
@@ -472,18 +472,17 @@ def copy_pair(
column: str,
source: str,
source_root: Path | None = None,
labor_body: dict[str, Any] | None = None,
) -> dict[str, Any]:
"""일위대가 ↔ 면적산출 함께 가져오기(43-9a) — 같은 원본 열의 면적산출(시트 · 알약 `연결`)과
일위대가(담은로직 · 입력값 · 수량 · 자재)로 둘 다 덮어씀 · 도면은 안 건드림 ·
원본에 면적산출이 없으면(실무문서 `labor_body` 포함) 일위대가만 · 면적 먼저(일위대가 계산값이
원본에 면적산출이 없으면 일위대가만 · 면적 먼저(일위대가 계산값이
새 면적 칸 값을 읽음 · 면적 계산이 막히면 일위대가도 안 씀)."""
with at(source_root or root()):
has_area = labor_body is None and _path("area", source).is_file()
has_area = _path("area", source).is_file()
out: dict[str, Any] = {}
if has_area:
out["area"] = copy_from("area", column, source, source_root)
out["labor"] = copy_from("labor", column, source, source_root, labor_body)
out["labor"] = copy_from("labor", column, source, source_root)
return out