Merge remote-tracking branch 'origin/sub_laptop_3' into sub_laptop_1

충돌 둘(Structures_List · Panel_Types)은 양쪽을 모두 살려 풂 — 측점 글은 공용 stationLabel · 집계 항목 읽기 · isB05Option · SummaryItem 을 한 벌로, 쓰지 않게 된 isB05Option 가져오기는 뺌.
This commit is contained in:
2026-09-29 12:29:53 +09:00
23 changed files with 1018 additions and 105 deletions
@@ -26,6 +26,7 @@ import {
} from "../B05_Profile/B05_Profile_Api_Structures";
import { readPendingPipes, writePendingPipes } from "../B05_Profile/B05_Profile_Api_Pipes_Draft";
import { fetchDetailPipePoints } from "../B04_PreProcess/B04_PreProcess_Api_Fetch";
import { readSummaryItem } from "../common_util/common_util_summary_item";
import {
readStructurePick,
writeStructurePick,
@@ -323,6 +324,7 @@ export function createB06StructuresPanel(deps: B06StructuresPanelDeps): B06Struc
facility: attributes.facility ?? "pipe",
source: "user",
options: attributes.options ?? {},
summary_item: attributes.summary_item ?? null,
});
pipeFacilities.sort((left, right) => left.chainage_m - right.chainage_m);
currentChainageM = at;
@@ -340,6 +342,18 @@ export function createB06StructuresPanel(deps: B06StructuresPanelDeps): B06Struc
// (2026-08-29 사용자 보고: 높이만 바꿨는데 이동 안내가 떴다).
if (Math.abs(fromChainageM - toChainageM) > PIPE_MATCH_M)
movePipeTo(fromChainageM, toChainageM);
if (attributes.summary_item !== undefined) {
// 옮긴 뒤 자리(toChainageM)에서 찾는다 — 안 옮겼으면 from 과 0.51m 안이라 같은 관이다.
const mine = pipeFacilities.find(
(entry) => Math.abs(entry.chainage_m - toChainageM) < PIPE_MATCH_M,
);
if (mine && (mine.summary_item ?? null)?.key !== attributes.summary_item?.key) {
mine.summary_item = attributes.summary_item;
persistPipes();
section.setPipeFacilities(pipeFacilities);
deps.onStructuresChanged?.();
}
}
const patch = attributes.options;
if (!patch || !Object.keys(patch).length) return;
if (!deps.queuePipeOptions) {
@@ -418,6 +432,7 @@ export function createB06StructuresPanel(deps: B06StructuresPanelDeps): B06Struc
start_m: pipe.start_m,
end_m: pipe.end_m,
source: pipe.source,
summary_item: readSummaryItem(pipe.summary_item),
// 폼 기본값 = 조정창이 쓰던 값(횡단 스펙). 저장된 옵션이 있으면 그쪽이 이긴다.
options: withSpecDefaults(
pipe.options,
@@ -491,6 +506,7 @@ export function createB06StructuresPanel(deps: B06StructuresPanelDeps): B06Struc
...(pipe.start_m !== undefined ? { start_m: pipe.start_m } : {}),
...(pipe.end_m !== undefined ? { end_m: pipe.end_m } : {}),
...(pipe.options ? { options: pipe.options } : {}),
...(pipe.summary_item ? { summary_item: pipe.summary_item } : {}),
})),
);
}