From 5d4473b40fc291735f198e8121a1cde3e3c3d3e2 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 9 Sep 2026 23:14:09 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05):=20=EB=85=B8=EC=84=A0=20=EC=9E=AC?= =?UTF-8?q?=EA=B3=84=EC=82=B0=20=EB=8C=80=EA=B8=B0=20=EC=95=88=EB=82=B4?= =?UTF-8?q?=EB=A5=BC=20=EC=8B=A4=EC=B8=A1=EA=B0=92=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=E2=80=94=20=E3=80=8C=EB=AA=87=20=EB=B6=84=E3=80=8D=EC=9D=80=20?= =?UTF-8?q?=EC=98=9B=20=EB=AC=B8=EA=B5=AC=EC=98=80=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 계획서 0-2 「재계산 중간 취소」 재판정. **취소는 만들지 않기로 닫음.** · 잰 값 — 서버 계측 네 번 87.3 · 90.0 · 93.9 · 95.4초(평균 91.7). 293초에서 이미 3분의 1. · 취소가 「반쯤 부순 상태」를 만드는 단추가 됨 — 관 지점은 체인 **전에** 이미 지워지고, 체인이 끊기면 노선만 새것·종횡단은 옛것으로 어긋남(2026-09-06 실측 사고와 같은 자리). · 시간의 90 %가 배수·관·측점 재생성 한 곳이라, 급하면 취소보다 그 자리를 줄이는 것이 이득. 대신 대기 안내를 고침 — 「몇 분 걸립니다」 → 「1분 반쯤 걸립니다 (N초 지남)」로 **경과 시간이 1초마다 돎**. 멈춘 것인지 도는 것인지 사람이 알 수 있어야 함. Co-Authored-By: Claude Opus 5 (1M context) --- B05_Profile/B05_Profile_UI_RouteEdit.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/B05_Profile/B05_Profile_UI_RouteEdit.ts b/B05_Profile/B05_Profile_UI_RouteEdit.ts index 8b644721..23f76c1e 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit.ts @@ -597,8 +597,17 @@ export async function openRouteEditModal( async function runHeavy(label: string, task: () => Promise): Promise { busy.hidden = false; - busy.querySelector("span")!.textContent = - `${label} — 배수유역부터 다시 계산 중입니다. 몇 분 걸립니다.`; + // ⚠ 「몇 분」은 옛 값이었다 — 0-11 로 **약 90초**가 됐다(2026-09-09 실측 네 번: + // 87.3 · 90.0 · 93.9 · 95.4초). 중간 취소를 안 만드는 대신, **얼마나 지났는지**를 + // 보여 사람이 멈춘 것인지 도는 것인지 알 수 있게 한다(계획서 0-2). + const message = busy.querySelector("span")!; + const started = Date.now(); + const tick = (): void => { + const seconds = Math.round((Date.now() - started) / 1000); + message.textContent = `${label} — 배수유역부터 다시 계산 중입니다. 1분 반쯤 걸립니다 (${seconds}초 지남).`; + }; + tick(); + const timer = window.setInterval(tick, 1000); try { await task(); // 노선이 바뀌면 세션 초안·조회 캐시는 옛 노선 것이라 남기지 않는다(PLAN 0-7 확정 5). @@ -610,6 +619,8 @@ export async function openRouteEditModal( } catch (error) { busy.hidden = true; showToast(error instanceof Error ? error.message : "노선 재계산에 실패했습니다.", "error"); + } finally { + window.clearInterval(timer); // 성공·실패·닫힘 어느 쪽이든 멈춘다 } }