feat(B05/B06): 계획서 1·2·4·5·6·8·11 구현 + 유토곡선 오버레이 서브패널 전환(7)
- 4: volumeRange 기본 ±200㎥ 고정, 초과 시에만 확장 (B05·B06 공용) - 11: 진행단계 오버레이 최상단 대시보드(🏠) 버튼 — 항상 활성, B01 이동 - 6: 편집 버튼 방향색 — 올림(▲⇧) --color-danger, 내림(▼⇩) 파랑 #5b8def, hover 배경 포함 - 2: 구조물 목록 5개 높이 상한 + 내부 스크롤, 선택 항목 scrollIntoView - 5: 종단 렌더러 bottomInsetPx 옵션 신설 — B05만 X축·측점 라벨 17px 상향, ▼ 버튼과 오버랩 해소 (B06 무변화) - 1: 구조물 측점 열 기본값 미표기 — 측점 값 7행·곡선 2행 빈 셀, 선택 오버레이가 값 표시 - 8: B06 진입 stale 재계산을 측점별 순차 루프에서 일괄 프리뷰 1회로 교체 · preview API에 full_designs·rock_boundary_offsets 추가 · B05 세션 초안(readAlignmentDraft) 우선 사용해 두 화면 계획선 일치 - 7: 유토곡선을 1:1 분할에서 패널 바닥 오버레이 서브패널로 전환 · 종단도+테이블 배치 불변, 오버레이가 위를 덮음 · 높이는 공용 createPanelResizer(위 경계, 세션 보존), splitBar·MASS_SPLIT 제거 · 자체 가로 스크롤러 + 종단 스크롤러 양방향 동기화, 전용 ㎥ sticky Y축 · buildStickyYAxis 정의처를 MassHaul 모듈로 이동(Panel과 공용) typecheck·vite build·ruff 통과. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -49,6 +49,7 @@ export const ui_locales_common = {
|
||||
Common_Msg_RequiredField: ["필수 입력 항목입니다", "This field is required"],
|
||||
Common_Msg_InvalidValue: ["올바르지 않은 값입니다", "Invalid value"],
|
||||
Workflow_Progress_Title: ["진행단계", "Progress"],
|
||||
Workflow_Step_Dashboard: ["대시보드", "Dashboard"],
|
||||
Workflow_Overlay_Collapse: ["패널 접기", "Collapse panel"],
|
||||
Workflow_Overlay_Expand: ["패널 펼치기", "Expand panel"],
|
||||
|
||||
|
||||
@@ -62,6 +62,14 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* 대시보드 이동 버튼 — 워크플로 단계 목록의 탈출구. 단계 버튼과 구분되게 아래 구분선을 둔다. */
|
||||
.ui-workflow-layout__step--home {
|
||||
margin-bottom: var(--spacing-4);
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.ui-workflow-layout__step.is-enabled:hover {
|
||||
background: var(--color-surface);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import "./ui_template_workflow_layout.css";
|
||||
import { ROUTES } from "@config/config_frontend";
|
||||
import { t } from "./ui_template_locale";
|
||||
import { createWorkflowOverlays } from "./ui_template_overlay";
|
||||
import { navigateTo } from "../A00_Common/router";
|
||||
import { fetchDashboardMe } from "../B01_Dashboard/B01_Dashboard_Api_Fetch";
|
||||
|
||||
let dashboardRolePromise: Promise<string> | undefined;
|
||||
@@ -42,6 +44,8 @@ export interface StepBarOptions {
|
||||
orientation?: "horizontal" | "vertical";
|
||||
icons?: readonly string[];
|
||||
onStepClick?: (stepIndex: number, route: string) => void;
|
||||
/** 목록 최상단에 대시보드 이동 버튼을 단다(진행단계 오버레이 전용). */
|
||||
homeButton?: boolean;
|
||||
}
|
||||
|
||||
export const WORKFLOW_STEP_ICONS = ["📁", "🗺️", "🛣️", "📐", "🏗️", "∑", "📄"] as const;
|
||||
@@ -55,6 +59,24 @@ export function createStepBar(
|
||||
bar.className = "ui-workflow-layout__steps";
|
||||
if (options?.compact) bar.classList.add("is-compact");
|
||||
if (options?.orientation === "vertical") bar.classList.add("is-vertical");
|
||||
// 진행단계 오버레이(세로형) 최상단에 대시보드로 돌아가는 버튼을 둔다(2026-08-04 사용자
|
||||
// 지시). 워크플로 단계가 아니라 탈출구라 stage 배지 없이 항상 활성이다.
|
||||
if (options?.homeButton) {
|
||||
const home = document.createElement("button");
|
||||
home.type = "button";
|
||||
home.className = "ui-workflow-layout__step is-enabled ui-workflow-layout__step--home";
|
||||
const icon = document.createElement("span");
|
||||
icon.className = "ui-workflow-layout__step-icon";
|
||||
icon.setAttribute("aria-hidden", "true");
|
||||
icon.textContent = "🏠";
|
||||
const label = document.createElement("span");
|
||||
label.className = "ui-workflow-layout__step-label";
|
||||
label.textContent = t("Workflow_Step_Dashboard");
|
||||
home.append(icon, label);
|
||||
home.title = t("Workflow_Step_Dashboard");
|
||||
home.addEventListener("click", () => navigateTo(ROUTES.B01_ACCOUNT));
|
||||
bar.append(home);
|
||||
}
|
||||
steps.forEach((step, index) => {
|
||||
const button = document.createElement("button");
|
||||
button.type = "button";
|
||||
@@ -141,6 +163,7 @@ export function createWorkflowLayout(options: WorkflowLayoutOptions): WorkflowLa
|
||||
orientation: "vertical",
|
||||
icons: WORKFLOW_STEP_ICONS,
|
||||
onStepClick: options.onStepClick,
|
||||
homeButton: true,
|
||||
});
|
||||
const overlays = createWorkflowOverlays({
|
||||
title: options.title,
|
||||
|
||||
Reference in New Issue
Block a user