From cddd343c878c94e03c07b184d19619ea59453dcc Mon Sep 17 00:00:00 2001 From: umsangdon Date: Thu, 1 Oct 2026 10:16:55 +0900 Subject: [PATCH] =?UTF-8?q?fix(m01-easycalc):=20=EC=9E=98=EB=AA=BB=20?= =?UTF-8?q?=EB=84=A3=EC=9D=80=20=EC=A4=84(=EB=B9=88=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=C2=B7=20=EC=88=AB=EC=9E=90=20=EC=95=84=EB=8B=98=20=C2=B7=20?= =?UTF-8?q?0=20=C2=B7=20=EC=9D=8C=EC=88=98)=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=EB=A7=89=EC=9D=8C=20=C2=B7=20=EC=A1=B0=EA=B1=B4=20=C2=B7=20?= =?UTF-8?q?=ED=91=9C=20=EC=B0=BD=EC=97=90=20=EC=84=A4=EA=B3=84=20=EA=B0=92?= =?UTF-8?q?=20=EB=84=98=EA=B9=80?= 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_016PSXsvyDxjNmufteN5bqmt --- M01_MasterData/EasyCalc/M01_EasyCalc_Entry.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/M01_MasterData/EasyCalc/M01_EasyCalc_Entry.ts b/M01_MasterData/EasyCalc/M01_EasyCalc_Entry.ts index 685fa5078..757f42998 100644 --- a/M01_MasterData/EasyCalc/M01_EasyCalc_Entry.ts +++ b/M01_MasterData/EasyCalc/M01_EasyCalc_Entry.ts @@ -40,6 +40,7 @@ import { setEasyModelLanguage, toDoc, toRow, + type EasyCard, type EasyDoc, } from "./M01_EasyCalc_Model"; import { renderSheet, renderTrialStrip } from "./M01_EasyCalc_Sheet"; @@ -83,6 +84,10 @@ const TEXT = { Copied: ["내 것으로 만들었음 — 이제 고칠 수 있음", "Your copy is ready — you can edit it now"], Cards: ["무엇이 들어가나", "What goes in"], Sheet: ["실무 일위대가표로 보기", "View as a unit-cost sheet"], + BadLines: [ + "⚠ 표시 줄을 먼저 고쳐 주세요 — 빈 이름 · 숫자 아님 · 0 · 0 보다 작은 수는 저장 안 됨", + "Fix the ⚠ lines first — empty names, non-numbers, 0 or negative amounts can't be saved", + ], Uses_Wait: ["쓰는 곳을 찾는 중 — 10초쯤 걸림", "Looking for places that use it — about 10 s"], Uses_Block: ["쓰는 곳이 있어 못 지움 — {v}", "Cannot delete — it is used by {v}"], Delete_Ask: ["「{v}」 을(를) 지울까요? 되살릴 수 없음", "Delete “{v}”? This cannot be undone"], @@ -114,6 +119,11 @@ const amountOf = (resultUnit: string): string => { return /^\d/.test(unit) ? unit : `1${unit}`; }; +/** 저장을 막는 줄 — 이름 빔 · 수량이 숫자 아님 · 0 · 음수(서버가 0 · 음수를 받아 줌) · 같은 줄 · 너무 큼은 경고만 */ +const blocksSave = (c: EasyCard): boolean => + !c.name.trim() || + (c.qtyFormula === null && !(c.qty !== null && Number.isFinite(c.qty) && c.qty > 0)); + /** 「추가」 옆에 놓는 단추 — 누르면 큰 창 */ export function createEasyCalcButton(): HTMLButtonElement { return createButton({ label: te("Open"), variant: "filled", onClick: openEasyCalc }); @@ -379,7 +389,7 @@ function openEasyCalc(): void { } return; } - renderCards(cardsHost, doc, ans, { change: edit }); + renderCards(cardsHost, doc, ans, { change: edit, trial: () => trial }); }; const calc = (): void => { @@ -421,6 +431,7 @@ function openEasyCalc(): void { const bad = checkName(doc.name, mine); name.setError(bad ?? undefined); if (bad) return void name.input.focus(); + if (doc.cards.some(blocksSave)) return void (note.textContent = te("BadLines")); busy = true; saveButton.disabled = true; note.textContent = te("Saving");