From 4db230bfffd1d6fedadc7da99e94e353f963b3ed Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 4 Oct 2026 22:53:25 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix(M02):=20=EC=9D=BC=EC=9C=84=EB=8C=80?= =?UTF-8?q?=EA=B0=80=20[=EC=97=91=EC=85=80=EC=97=90=EC=84=9C=20=EA=B3=A0?= =?UTF-8?q?=EB=A5=B4=EA=B8=B0]=20=E2=80=94=20=EA=B3=A0=EB=A5=B4=EA=B8=B0?= =?UTF-8?q?=20=EB=8B=B5=EC=9D=98=20=EB=B0=94=EA=BE=B8=EA=B8=B0=EB=A5=BC=20?= =?UTF-8?q?linkAreaCell=20=EB=8B=A4=EC=84=AF=EC=A7=B8=20=EC=9D=B8=EC=9E=90?= =?UTF-8?q?=EB=A1=9C(=EA=B8=B0=EB=B3=B8=20=ED=95=A8=EA=BB=98=20=C2=B7=20?= =?UTF-8?q?=EB=B0=94=EA=BE=B8=EA=B8=B0=EB=A9=B4=20=EA=B7=B8=20=EC=B9=B8=20?= =?UTF-8?q?=EB=8B=A4=EB=A5=B8=20=EC=95=8C=EC=95=BD=20=EB=BA=8C=20=C2=B7=20?= =?UTF-8?q?40=20=EC=9D=B4=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01MgChuAcyBqUkhHMTXomQC7 --- .../M02_MasterTemplete_Labor_Detail.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/M02_MasterTemplete/M02_MasterTemplete_Labor_Detail.ts b/M02_MasterTemplete/M02_MasterTemplete_Labor_Detail.ts index 21fc12072..b72958ff9 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Labor_Detail.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Labor_Detail.ts @@ -196,10 +196,16 @@ export function mountLaborDetail( }); if (!got || !alive) return false; const info = pills.get(pill); - const next = linkAreaCell(area.doc, pill, got.칸, { - ...(info?.이름 ? { 이름: info.이름 } : {}), - ...(info?.단위 ? { 단위: info.단위 } : {}), - }); + const next = linkAreaCell( + area.doc, + pill, + got.칸, + { + ...(info?.이름 ? { 이름: info.이름 } : {}), + ...(info?.단위 ? { 단위: info.단위 } : {}), + }, + got.바꾸기 === true, // 그 칸 다른 알약 — 기본 함께 · [바꾸기]면 뺌(물음은 고르기 모달 안) + ); if (!next) { showToast(tc("Labor_BadCell"), "error"); return false; From 48a746d5b7f219f156f62ece220d3e066be5429d Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 4 Oct 2026 23:00:05 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix(M02):=20=EB=8F=84=EB=A9=B4=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=B4=EB=82=B4=EA=B8=B0=20=EB=B2=94=EC=9C=84=20?= =?UTF-8?q?=E2=80=94=20=EB=A9=B4=EC=A0=81=20=EC=83=81=EC=84=B8=EA=B0=80=20?= =?UTF-8?q?=EC=84=A0=20=EB=92=A4=EC=97=90=EB=8F=84=20=EC=8B=9C=ED=8A=B8=20?= =?UTF-8?q?=EC=B2=AB=20=EA=B3=A0=EB=A6=84=20=EC=9C=A0=EC=A7=80=20=C2=B7=20?= =?UTF-8?q?=EB=B2=94=EC=9C=84=20=EC=97=86=EC=9C=BC=EB=A9=B4=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC(41-3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ --- M02_MasterTemplete/M02_MasterTemplete_AreaToDrawing.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/M02_MasterTemplete/M02_MasterTemplete_AreaToDrawing.ts b/M02_MasterTemplete/M02_MasterTemplete_AreaToDrawing.ts index 3f8878431..cb51508ff 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_AreaToDrawing.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_AreaToDrawing.ts @@ -65,6 +65,7 @@ const TEXT = { saveFirst: "저장 안 한 고침이 있음 — 저장하고 보낼까요?", saveLabel: "저장하고 보내기", failed: "표를 못 만듦 — {value}", + noRange: "보낼 범위를 시트에서 먼저 고름", place: "도면에서 표를 놓을 자리를 누름(Esc = 그만)", noPlace: "이 도면 화면은 표 놓기를 아직 못 함", stale: "면적산출 값이 바뀐 표 {n}개", @@ -175,7 +176,7 @@ export function createAreaToDrawing(opt: AreaToDrawingOptions): AreaToDrawing { }); async function send(at: Selection): Promise { - if (!range) return; + if (!range) return showToast(TEXT.noRange, "error"); if (opt.isDirty()) { if (!(await showConfirmDialog(TEXT.saveFirst, TEXT.saveLabel))) return; await opt.save(); @@ -247,7 +248,7 @@ export function createAreaToDrawing(opt: AreaToDrawingOptions): AreaToDrawing { return { select: (s) => (range = { 시트: s.시트, 범위: s.범위 }), onArea: (at, readOnly, slot) => { - range = null; + // 범위는 그대로 — 시트가 처음 고름(A1)을 이 갈고리보다 먼저 알림 if (readOnly || at.layer === "project") return; const button = createButton({ label: TEXT.send, variant: "ghost", size: "sm" }); button.title = TEXT.sendTip; @@ -258,6 +259,7 @@ export function createAreaToDrawing(opt: AreaToDrawingOptions): AreaToDrawing { onDrawing: (raw, at, doc) => { const handle = raw as TableHandle; shown = `${at.layer}:${at.name}`; + range = null; // 면적 상세를 떠남 fresh = new Map(); latest = new Map(); const give = From be2e677d27077413178f1f348b29cf0cd20d483c Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 4 Oct 2026 23:00:27 +0900 Subject: [PATCH 3/3] =?UTF-8?q?test(M02):=20=EA=B5=AC=EC=A1=B0=EB=AC=BC=20?= =?UTF-8?q?=EB=8F=84=EB=A9=B4=20=EC=A0=80=EC=9E=A5=20=EA=BC=B4=20=EC=8B=9C?= =?UTF-8?q?=ED=97=98=20=E2=80=94=20=EC=97=B0=EA=B2=B0=ED=91=9C=20=EB=A7=9E?= =?UTF-8?q?=EC=B6=A4=20=EA=B0=88=EA=B3=A0=EB=A6=AC(toDrawing.withLinks)=20?= =?UTF-8?q?=EA=B0=90=EC=8C=88(41-3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ --- resources/tester/test_m02_structure_panel.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/tester/test_m02_structure_panel.py b/resources/tester/test_m02_structure_panel.py index 67678a9d9..be79312be 100644 --- a/resources/tester/test_m02_structure_panel.py +++ b/resources/tester/test_m02_structure_panel.py @@ -92,7 +92,11 @@ def test_집계표만_컨테이너를_붙임(): body, ) # 구조물 도면 저장은 `도면` 칸만 갈아 끼움 — 도번 · 산출근거는 읽은 그대로 - assert '{ ...(loaded as StructureDoc), 도면: edited as StructureDoc["도면"] }' in body + # 도면 칸만 갈아 끼움 · 맨 위 연결표는 도면 표에 맞춤(41-3 `toDrawing.withLinks`) + assert re.search( + r'toDrawing\.withLinks\(\{\s*\.\.\.\(loaded as StructureDoc\),\s*도면: edited as StructureDoc\["도면"\],\s*\}\)', + body, + ) @pytest.mark.skipif(shutil.which("node") is None, reason="node 가 없음")