Files
Aislo/B07_DesignDetail/B07_DesignDetail_UI_Development.ts
T
eomsangdonandClaude Opus 5.5 659baa7751 feat(484 B07 설정): 좌측 ⚙ 설정 모달 · [현재 도면 확정] · [수정] 지움 · 저장 후 이동(481-3) · 탭 줄 겹판 자리
- 공용 createPanelCard 곁값 onSettings — 캐럿 왼쪽 ⚙ · 누름이 접힘 안 일으킴(B08 · B09 그대로)
- 평면도 ⚙ = 평면도 관리 모달([평면도 관리] 단추 지움) · 횡단도 ⚙ = 배치 칸 · 표 배율 · 안내선(카드 밑 칸 지움) · 구조물 ⚙ = 「M02 그림 — 축척 없음」 · 종단 1장 · 토적 = 단추 안 ⚙ · 표지 없음
- ⚙ 머리 [원본에서 다시 그리기] — 그 묶음 도면을 연 때만 · 저장본이면 invalidate
- 잠금 없음(요구 281) — 읽기 전용 안 묶음 · 자동 B08 이동 · 「모든 횡단 확정」 잠금 지움
- onStepClick 한 길 = 고친 탭(●) + 지금 탭 저장 → B08 · B09 면 단계 4 완료(새 POST design-drawings-complete) → 이동 · 실패 = 머묾
- 저장 · 원본 묶음 = 새 B07_DesignDetail_UI_Save.ts · 모달 = 새 B07_DesignDetail_UI_Settings.ts(UI_Page 633 → 543줄)
- 탭 줄 = .cad-host 의 --cad-tab-slot-left/right(px · CSS left · right 꼴) 있으면 리본 빈 자리에 겹침 · 없으면 지금 자리
- 시험: 새 test_280_5_b07_settings · 130 · 153-1 · 180-3 · 212-3 · 269 · 311 고쳐 씀

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 22:13:04 +09:00

52 lines
2.3 KiB
TypeScript

/* =============================================================================
* B07_DesignDetail_UI_Development.ts
* 좌측 「전개도」 카드(요구 241 · PLAN 377) — 늘 카드 · 구조물 종류마다 하위 묶음(이름 줄 + 형태 단추).
*
* 묶음 = `groupPlanSheets`(plan_kind = 구조물 종류 · plan_kind_name = 이름) 재사용 · 모양 = 평면도 묶음 class.
* 단추 글 = 장 이름에서 종류 이름 · 「전개도」를 뺀 형태(전체 이름은 툴팁).
* ========================================================================== */
import { createPanelCard } from "@ui/ui_template_collapsible";
import type { DesignDrawingItem } from "./B07_DesignDetail_Api_Fetch";
import { groupPlanSheets } from "./B07_DesignDetail_UI_PlanKinds";
/** 「관보호공 돌쌓기(찰) 전개도 (2)」 → 「돌쌓기(찰) (2)」 · 포장 「콘크리트포장 전개도」 → 「콘크리트포장」. */
function shortLabel(label: string, kindName: string): string {
const rest = label.replace(" 전개도", "");
return rest.startsWith(`${kindName} `) ? rest.slice(kindName.length + 1) : rest;
}
export function buildDevelopmentSection(
items: DesignDrawingItem[],
makeButton: (drawing: DesignDrawingItem, label: string) => HTMLButtonElement,
collapsed = true,
onSettings?: () => void,
): HTMLElement {
const section = createPanelCard(`전개도 ${items.length}`, collapsed, onSettings);
section.classList.add("b07-drawing-group");
section.dataset.kind = "development";
if (items.length === 0) {
const empty = document.createElement("span");
empty.className = "b07-plan-kind__name";
empty.textContent = "종단 길이를 가진 구조물이 없습니다.";
section.append(empty);
return section;
}
for (const { kindId, name, sheets } of groupPlanSheets(items)) {
const block = document.createElement("div");
block.className = "b07-plan-kind";
block.dataset.planKind = kindId;
const title = document.createElement("span");
title.className = "b07-plan-kind__name";
title.textContent = name;
block.append(title);
for (const { drawing } of sheets) {
const button = makeButton(drawing, shortLabel(drawing.label, name));
button.title = drawing.label;
block.append(button);
}
section.append(block);
}
return section;
}