- B09 데이터 점검 → 내역 점검 · 공기 옵션 → 공사기간 조건 · 박스보기/호표보기 → 카드 보기/표 보기 · 하이퍼링크/팝업 → 탭 이동/곁 창 · 굳힌 단가 → 이 공사 단가 책 · 산식/요율 출처 → 계산식/요율 근거 · 빈 줄 → 금액 빈 줄 · 단가연결 칸 램프 → 단가연결 칸 ● · 새 산근 → 새 단가산출(산근) · 연결 없음 → 일위대가 없음 - 단가연결 창 종류 일위대가 사전조합 → 일위대가(자료집) · 일위대가 호표 → 이 공사 일위대가 · 단가산출 호표 → 이 공사 단가산출 · 대가N/산근 N호표 → 일위대가 N호/단가산출 N호 · 구조물 조합 줄 번호(SS…) 숨김 · 넣을 값 창 제목 번호 → 알림 글 끝 - B08 조합 사본 · 조합 연결 · 노랑 램프 → 구조물 조합 · 구조물 조합 고르기 · 노랑 ●(locale_b4 B08_Quantity_* 글만 · 한시 브레인 승인) - ☰ 서랍 · 진행 판 끝 「내 자료집(일위대가 · 구조물 조합)」 = M02 일위대가조합 개인 층(떠남 물음 뒤) - 낡은 시험 글 고침(새 낱말): 143-1 · 157-2 · 182 · 203-1 · 204-2 · 304 · 311 · 701-3 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
89 lines
2.9 KiB
TypeScript
89 lines
2.9 KiB
TypeScript
/* =============================================================================
|
|
* B09_Estimation_UI_Dock.ts
|
|
* B09 좌측 하단 고정 줄(PLAN 303-1 · 304-1) — 위에서부터
|
|
* ① [박스보기|호표보기] 묶음 탭 셋 보기(304-1 · 한 값)
|
|
* ② [하이퍼링크|팝업] 행 누름(303 · 기본 팝업)
|
|
* ③ `DRAFT.actions` 단추(초안 · 비면 줄 없음)
|
|
* ④ [?][<][>][초기화](도움말 줄 `data-help-row` · 요구 298-2 · 301)
|
|
*
|
|
* 스위치 값 = pref global(계정 공용 · [저장] 필요 없음) · 바닥 고정 = 공용 `.ui-sidebar-actions` 한 벌
|
|
* ========================================================================== */
|
|
|
|
import { createSegment } from "@ui/ui_template_segment";
|
|
import { readState, writeState } from "../A00_Common/b_page_state";
|
|
import { DRAFT } from "./B09_Estimation_UI_Tabs";
|
|
import {
|
|
chooseGroupView,
|
|
groupView,
|
|
viewLabel,
|
|
type GroupView,
|
|
} from "./B09_Estimation_UI_Tabs_Groups";
|
|
|
|
export type LinkMode = "popup" | "link";
|
|
|
|
const LINK_LABEL: Record<LinkMode, string> = { link: "탭 이동", popup: "곁 창" };
|
|
|
|
/** 행 누름 길 — 모르는 값 · 못 읽음 = 팝업 */
|
|
export function linkMode(): LinkMode {
|
|
try {
|
|
return readState<unknown>("b09-link-mode") === "link" ? "link" : "popup";
|
|
} catch {
|
|
return "popup";
|
|
}
|
|
}
|
|
|
|
function setLinkMode(mode: LinkMode): void {
|
|
try {
|
|
writeState("b09-link-mode", mode);
|
|
} catch {
|
|
// 기억 못 하면 기본(팝업)으로 돌아감
|
|
}
|
|
}
|
|
|
|
/** 단추 둘 스위치 — 부품 「분할 고르기」(32) · 고른 쪽 aria-checked */
|
|
function switchRow<T extends string>(
|
|
name: string,
|
|
values: T[],
|
|
label: (value: T) => string,
|
|
current: () => T,
|
|
pick: (value: T) => void,
|
|
): HTMLElement {
|
|
const segment = createSegment({
|
|
options: values.map((value) => ({ value, label: label(value) })),
|
|
value: current(),
|
|
size: 32,
|
|
onChange: (value) => pick(value as T),
|
|
});
|
|
segment.root.dataset.b09Switch = name;
|
|
return segment.root;
|
|
}
|
|
|
|
/** 하단 고정 줄 — onView = 보기 바뀜(묶음 탭이면 다시 그림) */
|
|
export function createDock(buttons: HTMLElement[], onView: () => void): HTMLElement {
|
|
const views: GroupView[] = ["cards", "table"];
|
|
const view = switchRow("view", views, viewLabel, groupView, (value) => {
|
|
chooseGroupView(value);
|
|
onView();
|
|
});
|
|
const link = switchRow<LinkMode>(
|
|
"link",
|
|
["link", "popup"],
|
|
(mode) => LINK_LABEL[mode],
|
|
linkMode,
|
|
setLinkMode,
|
|
);
|
|
const extra = DRAFT.actions.map((make) => make());
|
|
const draft = document.createElement("div");
|
|
draft.className = "b09-dock__row";
|
|
draft.dataset.b09DraftActions = "";
|
|
draft.append(...extra);
|
|
const main = document.createElement("div");
|
|
main.className = "b09-dock__row";
|
|
main.dataset.helpRow = "";
|
|
main.append(...buttons);
|
|
const dock = document.createElement("div");
|
|
dock.className = "ui-sidebar-actions b09-dock";
|
|
dock.append(view, link, ...(extra.length ? [draft] : []), main);
|
|
return dock;
|
|
}
|