diff --git a/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Check.ts b/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Check.ts index 4af902735..d6e2fa8a1 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Check.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Check.ts @@ -182,7 +182,7 @@ export function newest(): (key: number) => () => boolean { }; } -/** [맞음 · 별칭 모두 체크] 대상 줄 */ +/** [맞음 · 별칭 일괄 체크] 대상 줄 */ export const sureLines = (lines: HopyoLine[], d: CheckDraft): HopyoLine[] => lines.filter((l) => ["맞음", "별칭"].includes(l.맞춤.상태) && checkable(l, d)); @@ -484,7 +484,7 @@ export function buildHopyoCheck(opt: CheckOptions): HTMLElement { const tools: HTMLElement[] = []; if (opt.canWrite) { const sure = sureLines(h.줄, d); - const all = createButton({ label: `맞음 · 별칭 모두 체크 (${sure.length})`, size: "sm" }); + const all = createButton({ label: `맞음 · 별칭 일괄 체크 (${sure.length})`, size: "sm" }); all.disabled = !sure.length; all.addEventListener("click", () => { for (const l of sure) d.체크[l.차례] = true; diff --git a/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Sheet.ts b/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Sheet.ts index d4902b1ca..892e71415 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Sheet.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Hopyo_Sheet.ts @@ -62,9 +62,9 @@ export interface HopyoSheetOptions { canWrite: boolean; /** 사전조합을 만들 층(없으면 `scope` · [로직 추가] = 문서 층) */ target?: HopyoScope; - /** 처음 고를 호표 번(호표 화면 [엑셀에서 보기]) */ + /** 처음 고를 호표 번(확인 창 머리 [엑셀 보기]) */ 호표?: number; - /** 처음 보일 단가산출 행(330-3 근거 [엑셀에서 보기]) */ + /** 처음 보일 단가산출 행(330-3 근거 [엑셀 보기]) */ 단산행?: number | [number, number]; /** 호표 하나를 만들었음 — [로직 추가] 참조 줄 */ onImport?: (got: HopyoBuilt, hopyo: HopyoBrief) => void; diff --git a/resources/tester/test_m02_hopyo_screen.py b/resources/tester/test_m02_hopyo_screen.py index ca913fc01..ca7514377 100644 --- a/resources/tester/test_m02_hopyo_screen.py +++ b/resources/tester/test_m02_hopyo_screen.py @@ -126,7 +126,7 @@ def test_확인_창_체크한_줄만_몸(): ] assert got["leftOut"] == {"확인 안 함": 3, "뺌": 1, "% 줄": 1} assert got["checkable"] == [True, True, True, True, False, False, True, False] - assert got["sure"] == [1, 2] # [맞음 · 별칭 모두 체크] + assert got["sure"] == [1, 2] # [맞음 · 별칭 일괄 체크] assert got["compare"] == "콘크리트공 0.1091 → 0.1091 ✓ · 굴착기 0.29 → 0.31 ≠" assert got["compareMany"] == "굴착기 0.1594 → 0.0889 ≠" # 같은 장비 여러 줄 = 합쳐 한 줄 assert got["toTarget"] == [{"호표": 46, "배": 2.3}, {"자재": "MT1", "배": 1}] @@ -283,7 +283,7 @@ def test_옛_즉시_확정과_바로_만들기_없음(): users = sorted(name for name, text in texts.items() if "buildHopyo(" in text) assert users == ["Hopyo_Check", "Hopyo_Sheet"] # 확인 창 · 엑셀 보기 [저장] 물음 뒤 check = texts["Hopyo_Check"] - assert '"사전조합 생성"' in check and "맞음 · 별칭 모두 체크" in check + assert '"사전조합 생성"' in check and "맞음 · 별칭 일괄 체크" in check assert "확인하고" not in check # 359-4 명사형 assert "showLoadingOverlay()" in check and "dropDraft(k)" in check assert "m02-hopyo-check:" in check and "POLL_MS" in check @@ -473,3 +473,29 @@ def test_확인_창_표_일위대가_상세_꼴_359(): code = draft.split("*/", 1)[1] # 머리 글 밖 for gone in ("document", "fetch(", "sessionStorage", "@ui/"): assert gone not in code, gone + + +def test_명사형_단추와_별칭_장부_풀이_359(): + """359-4 — 별칭 장부 뜻 한 줄(좌측 단추 title · 화면 머리) · M02 실무자료 단추 = 명사형 · + 갈래 글 = 확인 창 드롭다운과 같음(저장 값 그대로).""" + ledger = _text("M02_MasterTemplete_Hopyo_Ledger.ts") + hint = "엑셀 품명 ↔ 우리 로직 · 자재 짝을 기억해 두었다가 같은 품명이 나오면 먼저 제안" + assert hint in ledger and "note(`${LEDGER_HINT}" in ledger + side = _text("M02_MasterTemplete_Hopyo_Side.ts") + assert "title: LEDGER_HINT" in side + for label in ('"변경 취소"', '"로직 추가"', '"내 층 복사"', '"삭제"'): + assert f"label: {label}" in ledger, label + assert '"우리에 없음": "로직없음"' in ledger and '"안 씀": "사용안함"' in ledger + mine = ("Hopyo_Side", "Hopyo_Sheet", "Hopyo_Check", "Hopyo_CheckRows", "Hopyo_Ledger") + every = "\n".join(_text(f"M02_MasterTemplete_{n}.ts") for n in mine) + for gone in ( + "고친 것 버림", + "로직 더함", + "내 층으로 고쳐 씀", + "확인하고 사전조합 만들기", + "엑셀 올리기", + "엑셀에서 보기", + "모두 체크 (", + 'label: "지우기"', + ): + assert gone not in every, gone