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;