From 54f06c8b8805d1517685720660ce366ce6832643 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 2 Nov 2026 10:08:27 +0900 Subject: [PATCH] =?UTF-8?q?feat(726-1):=20=ED=99=94=EB=A9=B4=20=EA=B8=80?= =?UTF-8?q?=20=E3=80=8C=EB=8B=A8=EA=B0=80=EC=82=B0=EC=B6=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=E3=80=8D=20=E2=86=92=20=E3=80=8C=EB=8B=A8=EA=B0=80?= =?UTF-8?q?=EC=82=B0=EC=B6=9C=20=EA=B8=B0=EC=B4=88=E3=80=8D=20=C2=B7=20?= =?UTF-8?q?=E3=80=8C=EB=B0=94=ED=83=95=20M01=20=EB=A1=9C=EC=A7=81=E3=80=8D?= =?UTF-8?q?=20=E2=86=92=20=E3=80=8C=EB=B0=94=ED=83=95=20=EB=8B=A8=EA=B0=80?= =?UTF-8?q?=EC=82=B0=EC=B6=9C=20=EA=B8=B0=EC=B4=88=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 13 파일 화면 글 20 곳 + 바탕 3 곳 · 서버 까닭 글 M02_Labor_Doc 포함 · 열쇠 · 저장 꼴 · API 그대로 - 낡은 시험 고침: test_m02_item_list 표 머리 글 · ui_checks 넷(M01 제목 일치 글) Co-Authored-By: Claude Sonnet 5.5 --- M01_MasterData/M01_MasterData_UI_LogicLab_Text.ts | 2 +- M01_MasterData/M01_MasterData_UI_Logic_Text.ts | 4 ++-- M02_MasterTemplete/M02_Labor_Doc.py | 2 +- M02_MasterTemplete/M02_Labor_Values.ts | 2 +- M02_MasterTemplete/M02_MasterTemplete_CardHelp.ts | 2 +- M02_MasterTemplete/M02_MasterTemplete_ItemList.ts | 2 +- M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts | 2 +- M02_MasterTemplete/M02_MasterTemplete_Labor_Diagram.ts | 4 ++-- M02_MasterTemplete/M02_MasterTemplete_Labor_Text.ts | 8 ++++---- M02_MasterTemplete/M02_MasterTemplete_Structure.ts | 2 +- resources/tester/test_m02_item_list.py | 2 +- resources/tester/ui_checks/44-4_로직상세_패널.js | 2 +- resources/tester/ui_checks/47-3_로직상세_오른쪽패널.js | 2 +- resources/tester/ui_checks/49_오른쪽패널_양식.js | 2 +- resources/tester/ui_checks/50-2_원문_항강조.js | 2 +- ui_template/ui_template_item_picker_edit.ts | 2 +- ui_template/ui_template_locale_m1.ts | 4 ++-- ui_template/ui_template_locale_m2.ts | 10 +++++----- 18 files changed, 28 insertions(+), 28 deletions(-) diff --git a/M01_MasterData/M01_MasterData_UI_LogicLab_Text.ts b/M01_MasterData/M01_MasterData_UI_LogicLab_Text.ts index aea6cd7b6..0f7f6da7c 100644 --- a/M01_MasterData/M01_MasterData_UI_LogicLab_Text.ts +++ b/M01_MasterData/M01_MasterData_UI_LogicLab_Text.ts @@ -67,7 +67,7 @@ const TEXT = { Pill_Table: ["표", "Table"], Pill_Logic: ["로직", "Logic"], Pill_Go: ["마스터 화면에서 보기", "Open in master"], - Pill_Back: ["← 단가산출 로직으로 돌아가기", "← Back to unit-price logic"], + Pill_Back: ["← 단가산출 기초로 돌아가기", "← Back to unit-price logic"], Pill_NoPick: [ "고르기 조건에 맞는 마스터 줄이 없음 — 단가를 못 찾음", "No master row matches the pick conditions", diff --git a/M01_MasterData/M01_MasterData_UI_Logic_Text.ts b/M01_MasterData/M01_MasterData_UI_Logic_Text.ts index 7008f7ad5..14a7250d3 100644 --- a/M01_MasterData/M01_MasterData_UI_Logic_Text.ts +++ b/M01_MasterData/M01_MasterData_UI_Logic_Text.ts @@ -6,7 +6,7 @@ import { currentLanguageIndex } from "@ui/ui_template_locale"; const TEXT = { - Title: ["단가산출 로직", "Unit-price logic"], + Title: ["단가산출 기초", "Unit-price logic"], List_Search: ["이름 · 별칭 찾기", "Search name or alias"], List_Alias: ["별칭 — 쉼표로 여럿 · 고친 뒤 [저장]", "Aliases — comma separated · then [Save]"], List_AllBooks: ["원문 모두", "All sources"], @@ -97,7 +97,7 @@ const TEXT = { Save_Failed: ["저장 못 함", "Save failed"], Save_Nothing: ["고친 것 없음", "Nothing to save"], Load_Failed: ["불러오지 못함", "Load failed"], - Lab_Title: ["단가산출 로직", "Unit-price logic"], + Lab_Title: ["단가산출 기초", "Unit-price logic"], Loading: ["불러오는 중", "Loading"], Confirm_Delete: [ "로직 「{v}」 을 지울까요? [저장] 때 파일에서 빠짐", diff --git a/M02_MasterTemplete/M02_Labor_Doc.py b/M02_MasterTemplete/M02_Labor_Doc.py index e975e76aa..55a731192 100644 --- a/M02_MasterTemplete/M02_Labor_Doc.py +++ b/M02_MasterTemplete/M02_Labor_Doc.py @@ -103,7 +103,7 @@ def clean(doc: Any) -> dict[str, Any]: whole = m01.loaded()[1] lines, seen, here = [], set(), None for at, one in enumerate(doc.get("담은로직") or [], start=1): - where = f"단가산출 로직 {at}째" + where = f"단가산출 기초 {at}째" if not isinstance(one, dict): raise _bad(f"{where} · 묶음 아님") if fixed.is_fixed(one) and not one.get("로직"): diff --git a/M02_MasterTemplete/M02_Labor_Values.ts b/M02_MasterTemplete/M02_Labor_Values.ts index ac2eb93f9..51e4e9404 100644 --- a/M02_MasterTemplete/M02_Labor_Values.ts +++ b/M02_MasterTemplete/M02_Labor_Values.ts @@ -133,7 +133,7 @@ const VALUE_TEXT = { title: "넣을 값", missing: "빠진 로직 {value}", edit: "옵션 고치기", - none: "넣을 값이 없음 — 단가산출 로직에 입력이 없음", + none: "넣을 값이 없음 — 단가산출 기초에 입력이 없음", auto: "자동값", unconfirmed: "값 확인 전", confirmed: "✓ 확인함", diff --git a/M02_MasterTemplete/M02_MasterTemplete_CardHelp.ts b/M02_MasterTemplete/M02_MasterTemplete_CardHelp.ts index 46020e95a..e060af9c0 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_CardHelp.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_CardHelp.ts @@ -52,7 +52,7 @@ export const CARD_HELP: Record<"structure" | "labor" | "area", CardHelp> = { ], }, labor: { - about: "고른 구조물의 일위대가 — 담은 단가산출 로직 줄과 자재목록 · 금액은 서버가 다시 셈.", + about: "고른 구조물의 일위대가 — 담은 단가산출 기초 줄과 자재목록 · 금액은 서버가 다시 셈.", keys: [ ["Ctrl+S", "저장(카드 [저장]과 같음)"], ["Enter", "별칭 칸 고침 끝"], diff --git a/M02_MasterTemplete/M02_MasterTemplete_ItemList.ts b/M02_MasterTemplete/M02_MasterTemplete_ItemList.ts index 708f398f8..a9d139738 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_ItemList.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_ItemList.ts @@ -97,7 +97,7 @@ export const ITEM_COLS: Record[]> = { NAME, FOLDER, { head: "단위", get: (r) => r.labor?.단위 ?? "" }, // 일위대가 문서 단위(39-8 B3) - { head: "단가산출 로직 수", get: (r) => (r.labor ? String(r.labor.로직수) : DASH) }, + { head: "단가산출 기초 수", get: (r) => (r.labor ? String(r.labor.로직수) : DASH) }, { head: "합계", get: (r) => laborSum(r).text, note: (r) => laborSum(r).note }, changed("labor"), ], diff --git a/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts b/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts index b167c706b..956036f75 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts @@ -62,7 +62,7 @@ const PRACTICE_COLS: Col[] = [ { head: "구분", get: (c) => c.구분 ?? "" }, { head: "상세구분", get: (c) => c.상세구분 ?? "" }, { head: "단위", get: (c) => c.단위 ?? "" }, - { head: "단가산출 로직 수", get: (c) => String(c.count) }, + { head: "단가산출 기초 수", get: (c) => String(c.count) }, ]; const why = (error: unknown): string => (error instanceof Error ? error.message : String(error)); diff --git a/M02_MasterTemplete/M02_MasterTemplete_Labor_Diagram.ts b/M02_MasterTemplete/M02_MasterTemplete_Labor_Diagram.ts index 064e2f191..d0eedf3a9 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Labor_Diagram.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Labor_Diagram.ts @@ -28,9 +28,9 @@ const TEXT = { "가운데 버튼 또는 Space + 끌기로 판 옮김 · Ctrl + 휠로 확대", "Middle button or Space + drag to move · Ctrl + wheel to zoom", ], - None: ["단가산출 로직이 없음", "No logics yet"], + None: ["단가산출 기초가 없음", "No logics yet"], Open: [ - "누르면 이 로직을 단가산출 로직 화면에서 엶", + "누르면 이 로직을 단가산출 기초 화면에서 엶", "Open this logic in the unit-price logic screen", ], Goto: ["누르면 이 로직 입력 모달을 엶", "Open this logic's inputs"], diff --git a/M02_MasterTemplete/M02_MasterTemplete_Labor_Text.ts b/M02_MasterTemplete/M02_MasterTemplete_Labor_Text.ts index 2c48354bb..508bbd83c 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Labor_Text.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Labor_Text.ts @@ -24,7 +24,7 @@ const TEXT = { NeedName: ["이름을 적어야 저장됨", "A name is required"], Load_Failed: ["불러오지 못함", "Load failed"], Origin_Self: ["원본", "Original"], - Logics_Title: ["단가산출 로직", "Unit-price logics"], + Logics_Title: ["단가산출 기초", "Unit-price logics"], Col_Order: ["차례", "No."], Col_Name: ["이름", "Name"], Col_Alias: ["별칭", "Alias"], @@ -47,11 +47,11 @@ const TEXT = { Ref_Discard: ["저장 안 한 고침을 버리고 닫음?", "Discard unsaved edits?"], Labor_Source: ["원문", "Source"], Labor_SourceHint: [ - "단가산출 로직 줄을 고르면 그 원문이 보임", + "단가산출 기초 줄을 고르면 그 원문이 보임", "Pick a logic row to see its source", ], AddLogic: ["로직 추가", "Add logic"], - NoLogic: ["단가산출 로직 없음", "No logics yet"], + NoLogic: ["단가산출 기초 없음", "No logics yet"], Open: ["열기", "Open"], Pick_Title: ["로직 고르기", "Pick a logic"], Pick_Search: ["이름·키로 찾기", "Search by name or key"], @@ -118,7 +118,7 @@ const TEXT = { ], Labor_Code: ["코드", "Code"], Labor_Spec: ["규격", "Spec"], - Labor_Already: ["이미 담은 단가산출 로직 — {value}", "Already added — {value}"], + Labor_Already: ["이미 담은 단가산출 기초 — {value}", "Already added — {value}"], Labor_AlreadyMat: ["이미 담은 자재 — {value}", "Already added — {value}"], // 로직 자재(103-1) Labor_InLogicMat: ["로직 자재에 있는 품목 — {value}", "Already a logic material — {value}"], diff --git a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts index f4b98ca00..ba755f81c 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts @@ -55,7 +55,7 @@ const TEXT = { pair: "일위대가 · 면적산출", pairNote: "일위대가 · 면적산출 함께 가져옴 — 알약 연결 포함 · 도면은 그대로", copyFailed: "복사 실패 — {value}", - noPills: "이 열 일위대가에 단가산출 로직 · 자재가 없어 알약 없음 — 일위대가 상세에서 담음", + noPills: "이 열 일위대가에 단가산출 기초 · 자재가 없어 알약 없음 — 일위대가 상세에서 담음", pillsFailed: "일위대가 알약을 못 받음 — {value}", discardCards: "카드(도면 · 면적산출)에 저장 안 한 고침이 있음 — 버리고 넘어갈까?", }; diff --git a/resources/tester/test_m02_item_list.py b/resources/tester/test_m02_item_list.py index 760ec858e..b99f35a35 100644 --- a/resources/tester/test_m02_item_list.py +++ b/resources/tester/test_m02_item_list.py @@ -45,7 +45,7 @@ def test_종류마다_칸(ts): "이름", "폴더", "단위", - "단가산출 로직 수", + "단가산출 기초 수", "합계", "고친 날", ] diff --git a/resources/tester/ui_checks/44-4_로직상세_패널.js b/resources/tester/ui_checks/44-4_로직상세_패널.js index df8d948c0..447002389 100644 --- a/resources/tester/ui_checks/44-4_로직상세_패널.js +++ b/resources/tester/ui_checks/44-4_로직상세_패널.js @@ -30,7 +30,7 @@ const openLogic = async (key) => { sessionStorage.setItem("m01.logic.pending", key); // 왼쪽 「단가산출 로직」 컨테이너 제목 — 펼칠 때 로직 화면으로(펼쳐져 있으면 접었다 폄) - const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 로직"); + const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 기초"); if (!tab) return false; if (!tab.closest(".ui-collapsible").classList.contains("is-collapsed")) tab.click(); tab.click(); diff --git a/resources/tester/ui_checks/47-3_로직상세_오른쪽패널.js b/resources/tester/ui_checks/47-3_로직상세_오른쪽패널.js index 78062b155..fcc167ce2 100644 --- a/resources/tester/ui_checks/47-3_로직상세_오른쪽패널.js +++ b/resources/tester/ui_checks/47-3_로직상세_오른쪽패널.js @@ -29,7 +29,7 @@ const out = {}; const openLogic = async (key) => { sessionStorage.setItem("m01.logic.pending", key); - const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 로직"); + const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 기초"); if (!tab) return false; if (!tab.closest(".ui-collapsible").classList.contains("is-collapsed")) tab.click(); tab.click(); diff --git a/resources/tester/ui_checks/49_오른쪽패널_양식.js b/resources/tester/ui_checks/49_오른쪽패널_양식.js index e61229f2c..76f554dc7 100644 --- a/resources/tester/ui_checks/49_오른쪽패널_양식.js +++ b/resources/tester/ui_checks/49_오른쪽패널_양식.js @@ -139,7 +139,7 @@ // ① M01 로직 상세 — 흐름도 · 원문 sessionStorage.setItem("m01.logic.pending", "GC000198"); - const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 로직"); + const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 기초"); if (!tab) return JSON.stringify({ error: "M01 화면 아님" }); if (!tab.closest(".ui-collapsible").classList.contains("is-collapsed")) tab.click(); tab.click(); diff --git a/resources/tester/ui_checks/50-2_원문_항강조.js b/resources/tester/ui_checks/50-2_원문_항강조.js index 63ae5ac2d..1486d9388 100644 --- a/resources/tester/ui_checks/50-2_원문_항강조.js +++ b/resources/tester/ui_checks/50-2_원문_항강조.js @@ -23,7 +23,7 @@ const out = {}; const openLogic = async (key) => { sessionStorage.setItem("m01.logic.pending", key); - const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 로직"); + const tab = $$(".ui-collapsible__title").find((h) => h.innerText.trim() === "단가산출 기초"); if (!tab) return false; if (!tab.closest(".ui-collapsible").classList.contains("is-collapsed")) tab.click(); tab.click(); diff --git a/ui_template/ui_template_item_picker_edit.ts b/ui_template/ui_template_item_picker_edit.ts index 1d9fc1da5..1b8792490 100644 --- a/ui_template/ui_template_item_picker_edit.ts +++ b/ui_template/ui_template_item_picker_edit.ts @@ -39,7 +39,7 @@ const TEXT = { loadFailed: "복사본을 못 읽음 — {value}", discard: "저장 안 한 고침이 있음 — 버리고 돌아갈까요?", outOfRange: "범위 밖 값이 있어 저장하지 못함", - noAreaPill: "면적산출 연결 칸 없음 — 이 복사본 일위대가에 단가산출 로직 · 자재가 없음", + noAreaPill: "면적산출 연결 칸 없음 — 이 복사본 일위대가에 단가산출 기초 · 자재가 없음", drawing: "도면", area: "면적산출", inputs: "넣을 값", diff --git a/ui_template/ui_template_locale_m1.ts b/ui_template/ui_template_locale_m1.ts index 7c34ba64d..1c18697cc 100644 --- a/ui_template/ui_template_locale_m1.ts +++ b/ui_template/ui_template_locale_m1.ts @@ -75,7 +75,7 @@ export const ui_locales_m1 = { M01_GroupFactor: ["계수", "Factors"], M01_GroupExchange: ["환율", "Exchange rates"], M01_GroupRate: ["요율", "Rates"], - M01_GroupLogic: ["단가산출 로직", "Unit-price logic"], + M01_GroupLogic: ["단가산출 기초", "Unit-price logic"], B01_CalcSites_Title: ["계산 자리", "Calc sites"], B01_CalcSites_Desc: ["조작 중 계산 = 브라우저 · 서버 고름", "Browser or server while editing"], B01_CalcSites_ServerCount: ["지금 서버 {value} 줄", "{value} rows on server now"], @@ -171,7 +171,7 @@ export const ui_locales_m1 = { B01_CalcSites_Saved: ["계산 자리 저장함", "Calc sites saved"], B01_CalcSites_Leave: ["저장 안 한 계산 자리가 있음", "You have unsaved calc sites"], B01_CalcSites_LoadFailed: ["계산 자리를 못 읽음", "Failed to load calc sites"], - B01_Dashboard_CardLogic: ["단가산출 로직", "Cost-logic library"], + B01_Dashboard_CardLogic: ["단가산출 기초", "Cost-logic library"], B01_Dashboard_CardStructOptionDef: ["구조물 옵션 정의", "Structure option definition"], B01_Dashboard_CardAliasLedger: ["별칭 장부", "Alias ledger"], } as const; diff --git a/ui_template/ui_template_locale_m2.ts b/ui_template/ui_template_locale_m2.ts index 965184cde..734b5f2bc 100644 --- a/ui_template/ui_template_locale_m2.ts +++ b/ui_template/ui_template_locale_m2.ts @@ -176,7 +176,7 @@ export const ui_locales_m2 = { M02_PracticeLogics: ["로직 수", "Logics"], M02_PracticeOrder: ["차례", "No."], M02_PracticeMemo: ["메모", "Memo"], - M02_PracticeNoLogic: ["단가산출 로직 없음", "No logics"], + M02_PracticeNoLogic: ["단가산출 기초 없음", "No logics"], M02_PracticeBack: ["목록", "List"], M02_PracticeDrop: ["전체 삭제", "Delete all"], M02_PracticeDropAsk: ["실무문서 {n}개를 모두 지울까요?", "Delete all {n} practice documents?"], @@ -215,7 +215,7 @@ export const ui_locales_m2 = { M02_SangeunRevised: ["M01 개정 — 확인", "M01 revised — check"], M02_SangeunRevisedBase: ["M01 개정 — 확인", "M01 revised — check"], M02_SangeunRevisedNote: [ - "바탕 M01 로직이 저장 뒤 바뀜 — 고친 칸의 바탕 값을 확인하고 [저장]하면 새 판으로 맞춤", + "바탕 단가산출 기초가 저장 뒤 바뀜 — 고친 칸의 바탕 값을 확인하고 [저장]하면 새 판으로 맞춤", "The base M01 logic changed since saving — check edited cells, then Save to adopt the new version", ], M02_SangeunLost: [ @@ -228,12 +228,12 @@ export const ui_locales_m2 = { ], M02_SangeunScaleOnly: ["열린 입력 — 품은 배율만", "Open inputs — quantity as multiplier only"], M02_SangeunBaseViews: [ - "시험 계산 · 텍스트 수식 = 바탕 M01 로직 + 고친 품 · 단가(뺀 줄 · 더한 줄 빼고)", + "시험 계산 · 텍스트 수식 = 바탕 단가산출 기초 + 고친 품 · 단가(뺀 줄 · 더한 줄 빼고)", "Test calc · formula = base M01 logic + edited qty · price (no dropped · added lines)", ], M02_SangeunWait: ["셈 기다리는 중", "Calculating…"], M02_SangeunNoInputs: [ - "바탕 M01 로직 없음 — 시험 입력 없음", + "바탕 단가산출 기초 없음 — 시험 입력 없음", "No base M01 logic — no test inputs", ], M02_SangeunColName: ["이름", "Name"], @@ -249,6 +249,6 @@ export const ui_locales_m2 = { M02_FindSearch: ["이름 · 규격 · 키 · 구분으로 찾기", "Search by name, spec, key or class"], M02_FindM01: ["M01 전체", "All M01"], M02_FindClass: ["구분", "Class"], - M02_FindLogic: ["단가산출 로직", "Unit-cost logic"], + M02_FindLogic: ["단가산출 기초", "Unit-cost logic"], M02_FindElementLater: ["일위대가 표 개편 뒤", "After the unit-cost table rework"], } as const;