Merge remote-tracking branch 'origin/sub_laptop_6' into main_laptop_1

This commit is contained in:
2026-11-02 10:09:33 +09:00
18 changed files with 28 additions and 28 deletions
@@ -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",
@@ -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}」 을 지울까요? [저장] 때 파일에서 빠짐",
+1 -1
View File
@@ -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("로직"):
+1 -1
View File
@@ -133,7 +133,7 @@ const VALUE_TEXT = {
title: "넣을 값",
missing: "빠진 로직 {value}",
edit: "옵션 고치기",
none: "넣을 값이 없음 — 단가산출 로직에 입력이 없음",
none: "넣을 값이 없음 — 단가산출 기초에 입력이 없음",
auto: "자동값",
unconfirmed: "값 확인 전",
confirmed: "✓ 확인함",
@@ -52,7 +52,7 @@ export const CARD_HELP: Record<"structure" | "labor" | "area", CardHelp> = {
],
},
labor: {
about: "고른 구조물의 일위대가 — 담은 단가산출 로직 줄과 자재목록 · 금액은 서버가 다시 셈.",
about: "고른 구조물의 일위대가 — 담은 단가산출 기초 줄과 자재목록 · 금액은 서버가 다시 셈.",
keys: [
["Ctrl+S", "저장(카드 [저장]과 같음)"],
["Enter", "별칭 칸 고침 끝"],
@@ -97,7 +97,7 @@ export const ITEM_COLS: Record<ListKind, Col<ItemRow>[]> = {
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"),
],
@@ -62,7 +62,7 @@ const PRACTICE_COLS: Col<ComboSummary>[] = [
{ 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));
@@ -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"],
@@ -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}"],
@@ -55,7 +55,7 @@ const TEXT = {
pair: "일위대가 · 면적산출",
pairNote: "일위대가 · 면적산출 함께 가져옴 — 알약 연결 포함 · 도면은 그대로",
copyFailed: "복사 실패 — {value}",
noPills: "이 열 일위대가에 단가산출 로직 · 자재가 없어 알약 없음 — 일위대가 상세에서 담음",
noPills: "이 열 일위대가에 단가산출 기초 · 자재가 없어 알약 없음 — 일위대가 상세에서 담음",
pillsFailed: "일위대가 알약을 못 받음 — {value}",
discardCards: "카드(도면 · 면적산출)에 저장 안 한 고침이 있음 — 버리고 넘어갈까?",
};
+1 -1
View File
@@ -45,7 +45,7 @@ def test_종류마다_칸(ts):
"이름",
"폴더",
"단위",
"단가산출 로직 수",
"단가산출 기초 수",
"합계",
"고친 날",
]
@@ -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();
@@ -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();
@@ -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();
@@ -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();
+1 -1
View File
@@ -39,7 +39,7 @@ const TEXT = {
loadFailed: "복사본을 못 읽음 — {value}",
discard: "저장 안 한 고침이 있음 — 버리고 돌아갈까요?",
outOfRange: "범위 밖 값이 있어 저장하지 못함",
noAreaPill: "면적산출 연결 칸 없음 — 이 복사본 일위대가에 단가산출 로직 · 자재가 없음",
noAreaPill: "면적산출 연결 칸 없음 — 이 복사본 일위대가에 단가산출 기초 · 자재가 없음",
drawing: "도면",
area: "면적산출",
inputs: "넣을 값",
+2 -2
View File
@@ -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;
+5 -5
View File
@@ -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;