feat(780-2): 엑셀 보기 단가산출 탭 오른쪽 = 단가산출 목록 — 판 바꾸기 · 거르기 · 목록 ↔ 시트 · 두 벌 맞춤(요구 627)
- 새 Hopyo_SheetSk: 탭(역할) 따라 오른쪽 판 바꿈 · 일위대가표 = 호표 목록 그대로 · 단가산출표 · 상세 = 마법사 단가산출 칸 좁은 꼴 한 벌(처음 올 때 지음 · 다른 층 · 권한 없음 = 보기만) · 시트 칸 → 목록 강조 · 목록 줄 → 지금 탭 블록 자리 - WizardSk: 좁은 꼴 옵션 · 부름 칸(일위대가 n 곳 · 일위대가 밖) · 거르기(전체 · 안 · 밖 · 고를 줄 있음) · 같은 캐시 두 벌 맞춤 알림 · 옮김 뒤 HOPYO_BUILT(열린 엑셀 보기 칠 다시) - SkPick: 줄 0 블록 = 「줄 없음」 확인 막음 · 거르기 · 끝내기 글 재료에 일위대가 밖 수 - SheetNav: role · blockAt · spotOf 내보냄 · SheetMap: 판정 없음 글 → 「일위대가 밖」 - Wizard [끝내기]: 막지 않음 · 물음창에 안 옮긴 단가산출 n(일위대가 밖 m) - 시험: 새 test_627_sheet_sk(판 바꿈 · 목록 지음 · 줄 0 막음 · 캐시 공유) · test_778_5 끝내기 재료 꼴에 밖 칸 더함 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
* · 779-6 — 마지막 격자 다시 씀(`gridOf`) · 열린 창 앞으로 꺼냄 · 닫기 = 제자리로(`raise` · `lower`)
|
||||
* · 778-5 D-6 — 머리 막대 아래 띠(부품 `createBanner`) 「엑셀 셈 어긋남 n」 + [보기 i/m] = 상세 시트 그 행으로 차례로 뛰기 ·
|
||||
* 그 행 까닭은 막대 글에 덧붙임 · 칠은 안 바꿈
|
||||
* · 780-2 — `role(시트)` · `blockAt(시트, 행)`(단가산출표 목록 행 · 상세 블록 범위) · `spotOf(번, 역할)` 내보냄(오른쪽 단가산출 목록)
|
||||
* 블록 재료 = 서버 `GET …/hopyo-marks/{키}`(779-2 · 읽기만).
|
||||
* ========================================================================== */
|
||||
|
||||
@@ -32,6 +33,7 @@ import {
|
||||
indexOf,
|
||||
jumpsAt,
|
||||
missesOf,
|
||||
numAt,
|
||||
paintOf,
|
||||
ROLES,
|
||||
type BlockMark,
|
||||
@@ -40,6 +42,7 @@ import {
|
||||
type Jump,
|
||||
type Mark,
|
||||
type Role,
|
||||
type Spot,
|
||||
} from "./logic/M02_MasterTemplete_Hopyo_SheetMap";
|
||||
|
||||
/** 확인 창 캐시를 고쳤음(document 알림 · `Hopyo_Check.saveDraft` 가 같은 글로 냄) — 엑셀 보기 창 다시 칠 */
|
||||
@@ -265,6 +268,21 @@ export function createSheetNav(opt: SheetNavOptions) {
|
||||
void readBlocks();
|
||||
},
|
||||
jumpTo,
|
||||
/** 시트 id → 역할(세 보기 밖 = undefined) */
|
||||
role: (sheet: string): Role | undefined => roleOf.get(sheet),
|
||||
/** 그 시트 · 행의 단산 블록 번 — 단가산출표 = 목록 행 · 상세 = 블록 범위 · 아니면 null */
|
||||
blockAt(sheet: string, row: number): number | null {
|
||||
if (sheet === ix.ids.단가산출표) return ix.listAt.get(row) ?? null;
|
||||
if (sheet === ix.ids.단가산출상세) return numAt(ix.block, row);
|
||||
return null;
|
||||
},
|
||||
/** 그 블록 자리 — 단가산출표 = 목록 행 · 상세 = 블록 범위 · 없으면 null */
|
||||
spotOf(no: number, role: Role): Spot | null {
|
||||
const sheet = ix.ids[role];
|
||||
const at = role === "단가산출표" ? ix.listRow.get(no) : undefined;
|
||||
const rows: [number, number] | undefined = at ? [at, at] : role === "단가산출상세" ? ix.block.get(no) : undefined; // prettier-ignore
|
||||
return sheet && rows ? { 시트: sheet, 행: rows } : null;
|
||||
},
|
||||
destroy(): void {
|
||||
document.removeEventListener(HOPYO_DRAFT, onDraft);
|
||||
document.removeEventListener(HOPYO_BUILT, onBuilt);
|
||||
|
||||
Reference in New Issue
Block a user