From 6c6a0c2773d8b53dc63a55fb9a42a44e0d7f59bc Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 17 Aug 2026 19:33:18 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05):=20=EC=9C=A0=EC=97=AD=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=ED=91=9C=EA=B8=B0=20=ED=86=B5=EC=9D=BC=20=E2=80=94?= =?UTF-8?q?=20=EC=84=B8=EC=9B=94=EA=B5=90=EB=A7=8C=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=A7=81=EA=B2=BD=C2=B7=EC=B6=94=EC=B2=9C=20=EC=9E=90=EB=A6=AC?= =?UTF-8?q?=EA=B0=80=20=EB=92=A4=EB=B0=94=EB=80=8C=EB=8D=98=20=EA=B2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 세월교 줄만 `세월교 검토 (Ø4719mm)`로 추천이 앞, 유효직경이 괄호 안이었다(구 문구 잔재). 같은 열을 위아래로 훑을 때 읽는 방향이 달라진다는 사용자 지적에 따라 네 줄을 `유효직경 Ø…mm → 추천 …` 한 형식으로 맞췄다. - B05_Drainage_Basin_Bridge 문구에서 {d}를 빼고 "세월교 검토"만 남긴다 — 유효직경은 앞머리가 적는다 - recommendationOf()가 ford_bridge도 맡아 bridge_required 특례 분기를 없앤다 실화면 확인(서버 기동 + Playwright): 네 줄이 각각 Ø929→추천 Ø1000 배관 / Ø4719→세월교 검토 / Ø1529→BOX암거 후보 / Ø549→추천 Ø800 배관으로 표시된다. 검증: npm run typecheck 무오류, pytest tmp/tests 124 passed·7 skipped. Co-Authored-By: Claude Opus 5 (1M context) --- B05_Profile/B05_Profile_UI_Drainage_Parts.ts | 19 ++++++++----------- ui_template/ui_template_locale_b2.ts | 4 ++-- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/B05_Profile/B05_Profile_UI_Drainage_Parts.ts b/B05_Profile/B05_Profile_UI_Drainage_Parts.ts index 94e308d0..63cc86be 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Parts.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Parts.ts @@ -111,9 +111,10 @@ export function addLayerToggle( } /** 유역 제원 목록을 다시 그린다. 항목을 누르면 `onPick`으로 번호를 돌려준다. */ -/** 유역 추천을 한 조각 문구로 — 배관이면 규격 스냅 관경, BOX암거면 후보 표기. - * 추천이 아직 없는(강우량표 전) 유역은 계산 유효직경만 남긴다. */ +/** 유역 추천을 한 조각 문구로 — 배관이면 규격 스냅 관경, BOX암거·세월교면 검토 표기. + * 추천이 아직 없는(강우량표 전) 유역은 "미정"이다. */ function recommendationOf(basin: DetailBasin): string { + if (basin.recommended_facility === "ford_bridge") return L("B05_Drainage_Basin_Bridge"); if (basin.recommended_facility === "box_culvert") return L("B05_Drainage_Basin_RecBox"); if (basin.recommended_diameter_mm == null) return L("B05_Drainage_Basin_Undecided"); return L("B05_Drainage_Basin_RecPipe").replace("{d}", String(basin.recommended_diameter_mm)); @@ -138,15 +139,11 @@ export function renderBasinRows( const metrics = document.createElement("span"); metrics.className = "b05-drainage__basin-metrics"; // 유효직경은 강우량표(rainfall_table.json)가 생기기 전까지 null → "미정" 표기. - // 관 최대 규격 초과 계류 유역은 관이 아니라 세월교 대상 — "세월교 검토"로 표기한다. - // 그 아래 유역은 계산 유효직경 뒤에 추천(규격 스냅 관경 또는 BOX암거)을 덧붙인다 - // (2026-08-17 사용자 지시 — 추천 근거는 유량뿐, 지형 조건은 툴팁으로 안내). - const pipe = basin.bridge_required - ? L("B05_Drainage_Basin_Bridge").replace( - "{d}", - String(Math.round(basin.pipe_diameter_mm ?? 0)), - ) - : basin.pipe_diameter_mm === null + // 값이 있으면 어떤 시설이든 `계산 유효직경 → 추천` 한 형식으로 적는다 — 세월교만 + // 순서가 뒤집혀 있으면 같은 열을 훑을 때 읽는 방향이 달라진다(2026-08-17 사용자 지적). + // 추천 근거는 유량뿐이고 지형 조건은 툴팁으로 안내한다. + const pipe = + basin.pipe_diameter_mm === null ? L("B05_Drainage_Basin_Undecided") : `Ø${Math.round(basin.pipe_diameter_mm)}mm → ${recommendationOf(basin)}`; metrics.textContent = L("B05_Drainage_Basin_Metrics") diff --git a/ui_template/ui_template_locale_b2.ts b/ui_template/ui_template_locale_b2.ts index 9a80a753..8775fc13 100644 --- a/ui_template/ui_template_locale_b2.ts +++ b/ui_template/ui_template_locale_b2.ts @@ -77,8 +77,8 @@ export const ui_locales_b2 = { ], B05_Drainage_Status_LoadFailed: ["배경도를 불러오지 못했습니다.", "Failed to load the basemap."], B05_Drainage_Basin_Undecided: ["미정", "TBD"], - /* {d}=계산 유효직경(mm). 관 최대 규격 초과 계류 유역 — 관이 아니라 세월교 대상 */ - B05_Drainage_Basin_Bridge: ["세월교 검토 (Ø{d}mm)", "Ford crossing req. (Ø{d}mm)"], + /* 관 최대 규격 초과 계류 유역 — 관이 아니라 세월교 대상. 유효직경은 앞머리가 적는다 */ + B05_Drainage_Basin_Bridge: ["세월교 검토", "Ford crossing req."], /* {area}=배수 유효면적, {relief}=표고차, {flow}=유하장, {pipe}=배수 유효직경 */ B05_Drainage_Basin_Metrics: [ "유효면적 {area} · 표고 {relief}m · 유하 {flow}m · 유효직경 {pipe}",