feat(511-A ③ 토량 · 구조물 셈 열기): 계산 자리 판 quantity · carry · fixed_browser 바꿀 수 있음(기본 both · 판 줄 차례 고정) · quantity = server 면 F7 저장 노선 면적 · C4 소단 사본 = 잠잠 뒤 서버 값만 · E1 유토곡선 = 서버 값으로 다시 그림(그 사이 앞 곡선 · 「서버 셈 중」) · F7 초안 면적 · C4 초안 소단 = 브라우저 값 + 서버 대조(다르면 얹음) · F8 = 브라우저 부름 없음 · 거울 시험(서버 답 = 브라우저 TS 답) — 요구 320-4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -52,6 +52,8 @@ import { createPanelResizer } from "@ui/ui_template_resizer";
|
||||
import "@util/common_util_mass_haul.css";
|
||||
import "./B05_Profile_UI_Style_MassHaul.css";
|
||||
import { frameOf } from "../common_util/common_util_view_window";
|
||||
import { calcOnServerNow } from "../A00_Common/design/design_calc_sites";
|
||||
import { calcChecked, calcFromServer } from "../A00_Common/design/design_calc_server";
|
||||
|
||||
/** 2차 패널 펼침 여부 — 세션 동안만 유지(패널 높이·접힘과 같은 수명). */
|
||||
/* 펼침 상태·높이·범례는 화면 취향(①) — 키는 등록표(`b_page_state`)가 만든다. */
|
||||
@@ -317,15 +319,30 @@ export function createRouteMassHaulPanel(
|
||||
function reportSummary(params: RouteMassHaulDrawParams): void {
|
||||
if (!onSummary) return;
|
||||
if (!context || params.pendingRecalc) return;
|
||||
emitSummary(
|
||||
computeMassHaulSeries(
|
||||
params.longitudinal,
|
||||
params.crossSections,
|
||||
context.conversion,
|
||||
context.naturalSpoilMinSlope,
|
||||
["cross"],
|
||||
),
|
||||
const series = crossSeries(params, context).series;
|
||||
if (series) emitSummary(series);
|
||||
}
|
||||
|
||||
/** 횡단 기준 누가토량 — 계산 자리 quantity = server 면 서버 값(잠잠 뒤 · 그 사이 앞 값 · 511-A). */
|
||||
function crossSeries(
|
||||
params: RouteMassHaulDrawParams,
|
||||
ctx: RouteMassHaulContext,
|
||||
): { series: MassHaulSeries[] | undefined; fresh: boolean } {
|
||||
const args: Parameters<typeof computeMassHaulSeries> = [
|
||||
params.longitudinal,
|
||||
params.crossSections,
|
||||
ctx.conversion,
|
||||
ctx.naturalSpoilMinSlope,
|
||||
["cross"],
|
||||
];
|
||||
if (!calcOnServerNow("quantity")) {
|
||||
const series = calcChecked("quantity", "masshaul.series", computeMassHaulSeries, args);
|
||||
return { series, fresh: true };
|
||||
}
|
||||
const got = calcFromServer<MassHaulSeries[]>("quantity", "masshaul.series", args, () =>
|
||||
draw(params),
|
||||
);
|
||||
return { series: got.value, fresh: got.fresh };
|
||||
}
|
||||
|
||||
/** 그리기 몫 기록(349-0s) — 묶음 마지막 차례 `work.유토곡선`. */
|
||||
@@ -371,13 +388,12 @@ export function createRouteMassHaulPanel(
|
||||
// (354-2 · 계산 코드는 공용에 남김).
|
||||
// 결과를 아껴 두지 **않는다** — 횡단 설계가 제자리에서 갈리므로 객체 동일성으로는
|
||||
// 바뀐 것을 못 잰다(2026-09-04 캐시를 넣었다가 곡선이 안 따라와 되돌림).
|
||||
const series: MassHaulSeries[] = computeMassHaulSeries(
|
||||
params.longitudinal,
|
||||
params.crossSections,
|
||||
context.conversion,
|
||||
context.naturalSpoilMinSlope,
|
||||
["cross"],
|
||||
);
|
||||
const { series, fresh } = crossSeries(params, context);
|
||||
if (!fresh) {
|
||||
pendingChip.textContent = "서버 셈 중…";
|
||||
pendingChip.hidden = !drawnOnce;
|
||||
}
|
||||
if (!series) return note("서버가 유토곡선을 셈하는 중입니다.");
|
||||
// 총괄값은 방금 낸 계열에서 꺼낸다 — 접힘 경로처럼 따로 적분하지 않는다.
|
||||
if (series !== lastSeries) emitSummary(series);
|
||||
lastSeries = series;
|
||||
|
||||
Reference in New Issue
Block a user