feat(M02): 일위대가 수량산출 열 — 위 결과단위 기준 수량 · 아래 지금 수량 · 누르면 손 입력 / 엑셀에서 고르기(면적 칸 연결 · [저장] 때 면적 문서 함께) · 버튼 공용 양식(40-1 ④ ⑤)

- Labor_Rows 수량산출 칸(qtyCell) · 결과 단위 왼쪽 · 좁은 칸은 윗줄
- Labor_Input 수량 칸에 [엑셀에서 고르기](sub3 pickAreaCell) · 이으면 손 수량 지움 · 모달 닫음
- Labor_Detail: 면적 문서 · 판을 들고 linkAreaCell · recalcWorkbook · 저장 안 한 연결은 calc 에 칸 값으로 · saveArea
- UI_Main labor 갈래: [저장] = 면적 문서 먼저 → 일위대가 판 다시 읽음 → 일위대가(서버가 면적 저장 때 일위대가 계산값을 다시 적어 판이 바뀜)
- 로직 추가 · 자재 추가 · 올리기 · 내리기 · 빼기 = 기본 크기 버튼(sm 알약 꼴 아님)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MgChuAcyBqUkhHMTXomQC7
This commit is contained in:
2026-10-04 22:39:46 +09:00
co-authored by Claude Opus 5.5
parent e70fc184ae
commit 35ccc26afa
6 changed files with 219 additions and 16 deletions
@@ -365,7 +365,7 @@ export function createMain(
if (at.kind === "labor") {
// 일위대가 상세(39-3) — 구조물 열마다 하나 · 고침은 이 화면 [저장]으로
const { mountLaborDetail } = await import("./M02_MasterTemplete_Labor_Detail");
editor = mountLaborDetail(host, doc, {
const labor = mountLaborDetail(host, doc, {
layer: at.layer,
column: at.name,
readOnly,
@@ -376,6 +376,16 @@ export function createMain(
return true;
},
});
// [저장] = 엑셀에서 고른 칸 연결(면적 문서) 먼저 · 그다음 일위대가(서버가 새 칸 값으로 계산값)
editor = {
getDoc: async () => {
// 면적 저장이 일위대가 계산값을 다시 적어 판이 바뀜 — 판을 다시 읽어 409 를 막음
if (await labor.saveArea())
version = (await readTemplate(at.layer, "labor", at.name, at.projectId)).판 ?? "";
return labor.getDoc();
},
destroy: labor.destroy,
};
return;
}
if (at.kind === "area") {