From 81b51de517ea0dbf7f8a1a6881dd4b9811e35221 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 14 Sep 2026 07:36:49 +0900 Subject: [PATCH] =?UTF-8?q?feat(b08):=20=EC=B8=B5=EB=94=B0=EA=B8=B0=20[?= =?UTF-8?q?=EC=A0=9C=EC=95=88=EA=B0=92=20=EB=84=A3=EA=B8=B0]=20=EB=8B=A8?= =?UTF-8?q?=EC=B6=94=20=E2=80=94=20=EB=88=84=EB=A5=B8=20=EB=95=8C=EB=A7=8C?= =?UTF-8?q?=20KDS=20=ED=91=9C=EC=A4=80=EC=B9=98=EC=88=98=20=ED=86=A0?= =?UTF-8?q?=EC=82=AC=200.5=20m?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 자동으로 안 채움: 임도기술교본 6-4 「설계도서에 명시되어 있는 높이와 폭」(브레인 판정) - 칸·근거 줄·단추 묶음을 B08_Quantity_UI_Side_BenchCut.ts 로 뺌(페이지 700줄 넘음) Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01BW6Jdsh18WPtYUR6THZJqn --- B08_Quantity/B08_Quantity_UI_Page.ts | 18 +----- B08_Quantity/B08_Quantity_UI_Side_BenchCut.ts | 56 +++++++++++++++++++ ui_template/ui_template_locale_b4.ts | 4 ++ 3 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 B08_Quantity/B08_Quantity_UI_Side_BenchCut.ts diff --git a/B08_Quantity/B08_Quantity_UI_Page.ts b/B08_Quantity/B08_Quantity_UI_Page.ts index dc73ae82..abc717ee 100644 --- a/B08_Quantity/B08_Quantity_UI_Page.ts +++ b/B08_Quantity/B08_Quantity_UI_Page.ts @@ -41,6 +41,7 @@ import { import { renderStructureSheets } from "./B08_Quantity_UI_StructureSheet"; import { renderStructureSummary } from "./B08_Quantity_UI_StructureSummary"; import { appendTreeWasteFields } from "./B08_Quantity_UI_Side_TreeWaste"; +import { appendBenchCutFields } from "./B08_Quantity_UI_Side_BenchCut"; /** locale 헬퍼 */ function L(key: keyof typeof ui_locales): string { @@ -543,21 +544,8 @@ function buildQuantitySidePanel( // 지금 값과 근거를 보이고 바꿀 수 있게 할 것.** 정한 값이 화면에 안 보이면 다음 사람이 // 왜 그 값인지 모른다. panel.append(field(L("B08_Quantity_Side_Structure"), "")); - panel.append( - optionalNumberField( - L("B08_Quantity_Side_BenchCut_Label"), - draft.bench_cut_depth_m, - "0.01", - (value) => { - draft.bench_cut_depth_m = value; - draft.dirty = true; - }, - ), - ); - panel.append(hintRow(L("B08_Quantity_Side_BenchCut_Hint"))); - // 층따기 표준치수 — KDS 44 30 00 도로토공 2.3.4 (4) ② 근거(2026-09-14 브레인 정정 · 「제안값」 아님). - // 값·칸은 그대로 — 근거 표시만. - panel.append(hintRow(L("B08_Quantity_Side_BenchCut_Suggest"))); + // 층따기 칸 · KDS 근거 줄 · [제안값 넣기] — 누른 때만 채움(교본 6-4 「설계도서에 명시」). + appendBenchCutFields(panel, draft, { field, optionalNumberField, selectField, hintRow }); panel.append( optionalNumberField( L("B08_Quantity_Side_Rubble_Label"), diff --git a/B08_Quantity/B08_Quantity_UI_Side_BenchCut.ts b/B08_Quantity/B08_Quantity_UI_Side_BenchCut.ts new file mode 100644 index 00000000..9c32bea4 --- /dev/null +++ b/B08_Quantity/B08_Quantity_UI_Side_BenchCut.ts @@ -0,0 +1,56 @@ +/* ============================================================================= + * B08_Quantity_UI_Side_BenchCut.ts + * 산출 조건 「층따기 길이」 칸 · 근거 줄 · [제안값 넣기] 단추 (2026-09-14 브레인 판정). + * + * 페이지 본문(`B08_Quantity_UI_Page.ts`)이 700줄을 넘어 이 칸 묶음을 이 파일로 뺌(CLAUDE.md 4장). + * ⚠ 자동으로 안 채움 — 임도기술교본 6-4 「나. 층따기」 「설계도서에 명시되어 있는 높이와 폭으로 + * 하고 … 현장감독관과 협의하여 조정」 ⇒ 값은 설계자가 정함. 단추를 **누른 때만** KDS 44 30 00 + * 도로토공 2.3.4 (4) ② 표준치수(토사 최소 높이 500 mm)가 칸에 들어감 · 캐시에만, [저장]에서 정본. + * ========================================================================== */ + +import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale"; +import { createButton } from "@ui/ui_template_elements"; +import type { SideFieldHelpers } from "./B08_Quantity_UI_Side_TreeWaste"; + +function L(key: keyof typeof ui_locales): string { + return ui_locales[key][currentLanguageIndex]; +} + +/** KDS 44 30 00 도로토공 2.3.4 (4) ② — 기초지반이 토사인 경우 최소 높이(임도 지반이 대개 토사). */ +const KDS_SOIL_MIN_HEIGHT_M = 0.5; + +export interface BenchCutDraft { + bench_cut_depth_m: number | null; + dirty: boolean; +} + +export function appendBenchCutFields( + panel: HTMLElement, + draft: BenchCutDraft, + h: SideFieldHelpers, +): void { + const row = h.optionalNumberField( + L("B08_Quantity_Side_BenchCut_Label"), + draft.bench_cut_depth_m, + "0.01", + (value) => { + draft.bench_cut_depth_m = value; + draft.dirty = true; + }, + ); + panel.append(row, h.hintRow(L("B08_Quantity_Side_BenchCut_Hint"))); + // 층따기 표준치수 — KDS 근거 표시(2026-09-14 브레인 정정 · 「제안값」 경고 아님). + panel.append(h.hintRow(L("B08_Quantity_Side_BenchCut_Suggest"))); + panel.append( + createButton({ + label: L("B08_Quantity_Side_BenchCut_Fill"), + variant: "ghost", + onClick: () => { + const input = row.querySelector("input"); + if (input) input.value = String(KDS_SOIL_MIN_HEIGHT_M); + draft.bench_cut_depth_m = KDS_SOIL_MIN_HEIGHT_M; + draft.dirty = true; + }, + }), + ); +} diff --git a/ui_template/ui_template_locale_b4.ts b/ui_template/ui_template_locale_b4.ts index 641f344c..fa7bafaa 100644 --- a/ui_template/ui_template_locale_b4.ts +++ b/ui_template/ui_template_locale_b4.ts @@ -12,4 +12,8 @@ export const ui_locales_b4 = { B09_Estimation_Tab_Execution: ["실행예산", "Execution Budget"], B09_Estimation_Tab_Progress: ["기성", "Progress Payment"], B09_Estimation_Tab_Completion: ["준공", "Completion"], + B08_Quantity_Side_BenchCut_Fill: [ + "제안값 넣기 — KDS 표준치수 토사 0.5 m", + "Insert suggested value — KDS standard soil 0.5 m", + ], } as const;