auto: 2026-09-30 20:29 (ESD_LAPTOP)

This commit is contained in:
2026-09-30 20:29:01 +09:00
6 changed files with 366 additions and 7 deletions
@@ -194,16 +194,26 @@ export function createMain(
let cpanel: ComboPanel | null = null; // 면적산출 · 재료산출 오른쪽 조합 패널(프로젝트 층 아님)
let seq = 0;
let dirty = false;
/** 저장 안 한 고침 — 이 화면 + 면적산출 · 재료산출 카드(31-3) */
const busy = (): boolean => dirty || !!panel?.dirty();
const guard = (event: BeforeUnloadEvent): void => {
if (!root.isConnected) return window.removeEventListener("beforeunload", guard);
<<<<<<< HEAD
if (!dirty && !panel?.dirty()) return;
=======
if (!busy()) return;
>>>>>>> origin/sub_laptop_8
event.preventDefault();
event.returnValue = "";
};
window.addEventListener("beforeunload", guard);
const confirmLeave = async (): Promise<boolean> => {
<<<<<<< HEAD
if (!dirty && !panel?.dirty()) return true; // 도면 카드 고침(31-4)도 같은 물음
=======
if (!busy()) return true;
>>>>>>> origin/sub_laptop_8
if (!(await showConfirmDialog(L("M02_DiscardConfirm")))) {
// 취소 — 초점을 시트(고른 칸 입력 자리) · 집계표 · 도면으로 돌려 키보드 그대로
host
@@ -250,6 +260,7 @@ export function createMain(
isAdmin,
confirmLeave,
onDirty: () => (dirty = true), // 「선택 입력」 카드에서 자리를 고름 — 집계표 [저장]으로 함께 저장
keepColumn: (colId) => sheet?.selectColumn(colId), // 카드 고침을 안 버림 — 고른 열 되돌림
// 같은 페이지에서 그 열을 CAD·스프레드시트 전체 편집으로 엶
onEdit: (column, label, kind) => {
void open({ layer, projectId: null, kind, name: column, label });
@@ -540,6 +551,7 @@ export function createMain(
// 구조물집계표 — 서버가 새 열 파일 · 번호를 만듦 · 번호를 다시 받아 도면 줄 · 카드를 새로
// (안 하면 새 열은 다시 열 때까지 「도면 없음」 · 번호 빈칸)
if (panel && sheet) {
await panel.saveCards(); // 카드 고침(31-3) — 카드를 다시 읽기 전에
await panel.reload();
sheet.recalc();
panel.refresh(sheet.getDoc()?.열 ?? []);
@@ -591,7 +603,7 @@ export function createMain(
}
async function settle(): Promise<false | "clean" | "changed"> {
if (!dirty) return "clean";
if (!busy()) return "clean";
const choice = await askSettle();
if (choice === "cancel") return false;
if (choice === "save") {