fix(M02): 자동 커밋 fedc0b5b 에 남은 충돌 표시 풂 — 63c6fa36 합친 모양으로

- main_laptop_1 의 8b2473af(같은 충돌을 먼저 푼 것)를 다시 합칠 때 충돌 · autopush 가 표시째 올림
- 두 풀이를 견줘 더 넓은 쪽(63c6fa36)을 씀 — 위 [저장]이 도면 카드도 먼저 저장 · 다른 항목 고름 물음 한 번(discard) · 나머지는 같음
- 대상: ItemCards · Structure · UI_Main · test_m02_drawing_card(DrawingCard 는 이미 같음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ly2oHAaTDYRjcniAmHR81z
This commit is contained in:
2026-09-30 20:40:00 +09:00
co-authored by Claude Opus 5.5
parent fedc0b5b15
commit 8206bf6bb4
4 changed files with 0 additions and 26 deletions
@@ -123,15 +123,10 @@ export interface ItemCardsHandle {
column: () => string | null;
/** 카드(도면 · 면적산출 · 재료산출)에 저장 안 한 고침이 있나 — 페이지가 떠날 때 물음 */
dirty: () => boolean;
<<<<<<< HEAD
/** 고친 카드를 모두 저장(도면 · 엑셀) — 실패하면 던짐 */
saveAll: () => Promise<void>;
/** 저장 안 한 카드 고침을 버림(물음에서 「확인」 뒤) */
discard: () => void;
=======
/** 고친 카드를 모두 저장 — 실패하면 던짐 */
saveAll: () => Promise<void>;
>>>>>>> origin/main_laptop_1
destroy: () => void;
}
@@ -422,13 +417,10 @@ export function createItemCards(opts: ItemCardsOptions): ItemCardsHandle {
await preview?.save(); // 도면 카드(31-4)
for (const c of sheets) await saveCard(c);
},
<<<<<<< HEAD
discard: () => {
drop();
opts.onDirty?.(false);
},
=======
>>>>>>> origin/main_laptop_1
destroy: () => {
seq += 1;
drop();
@@ -381,11 +381,7 @@ export interface StructurePanelHandle {
reload: () => Promise<void>;
/** 「선택 입력」 카드에서 고른 자리를 서버에 저장 — 집계표 [저장] 뒤에 부름(실패하면 던짐) */
saveInputs: () => Promise<void>;
<<<<<<< HEAD
/** 카드에 저장 안 한 고침(도면 31-4 · 면적산출 · 재료산출 31-3) — 페이지가 떠날 때 함께 물음 */
=======
/** 카드(도면 31-4 · 면적산출 · 재료산출 31-3)에 저장 안 한 고침 — 페이지가 떠날 때 함께 물음 */
>>>>>>> origin/main_laptop_1
dirty: () => boolean;
/** 고친 카드 저장(도면 · 엑셀) — 집계표 [저장] 이 카드를 다시 읽기 전에 부름(실패하면 던짐) */
saveCards: () => Promise<void>;
@@ -205,11 +205,7 @@ export function createMain(
};
window.addEventListener("beforeunload", guard);
const confirmLeave = async (): Promise<boolean> => {
<<<<<<< HEAD
if (!busy()) return true; // 카드 고침(도면 · 엑셀)도 같은 물음
=======
if (!busy()) return true;
>>>>>>> origin/main_laptop_1
if (!(await showConfirmDialog(L("M02_DiscardConfirm")))) {
// 취소 — 초점을 시트(고른 칸 입력 자리) · 집계표 · 도면으로 돌려 키보드 그대로
host
-10
View File
@@ -45,19 +45,9 @@ def test_저장_안_한_카드_고침은_물음():
"if (preview?.dirty() && col?.id !== column && !(await showConfirmDialog(TEXT.discard)))"
in cards
)
<<<<<<< HEAD
# 도면 카드 + 엑셀 카드(31-3) 둘 다 봄
assert "dirty: () => !!preview?.dirty() || sheets.some((c) => c.dirty)," in cards
assert "dirty: () => cards.dirty()," in _text("M02_MasterTemplete_Structure.ts")
main = _text("M02_MasterTemplete_UI_Main.ts")
assert "const busy = (): boolean => dirty || !!panel?.dirty();" in main
assert main.count("!busy()") >= 2 # 떠날 때 물음 · 창 닫기 막음
=======
assert (
"dirty: () => !!preview?.dirty() || sheets.some((c) => c.dirty)," in cards
) # 도면 + 엑셀 카드(31-3)
assert "dirty: () => cards.dirty()," in _text("M02_MasterTemplete_Structure.ts")
main = _text("M02_MasterTemplete_UI_Main.ts")
assert "const busy = (): boolean => dirty || !!panel?.dirty();" in main
assert main.count("if (!busy()) return") >= 2 # 떠날 때 물음 · 창 닫기 막음
>>>>>>> origin/main_laptop_1