- 탭 셋 일위대가표 · 단가산출표 · 단가산출 상세 = 서버 역할 id(이름으로 안 찾음 · STmate 단가산출근거 뛰기 풀림) · 두 형식 같은 탭 글 · 원본 시트 이름은 막대 - 새 logic/M02_MasterTemplete_Hopyo_SheetMap.ts(순수 — 줄 칠 · 블록 칠 · 머리 행 = 가장 나쁜 칠 · 뛸 곳) · 「이어짐」 = 확인 창 체크 규칙(캐시가 이김) - 새 M02_MasterTemplete_Hopyo_SheetNav.ts — 범례 createLegend · 맥락 단추(상세 · 목록 · 하위 호표 · 부르는 줄 차례로) · 뒤로 · 두 번 누름 = 첫 단추 · 다시 칠(목록 다시 읽음 · 캐시 고침 · 만들기) · 칠은 A 열 ~ 끝 열 · 띠는 A 열 - Hopyo_Sheet.ts = 잇는 줄만(580 → 609) · 줄 행 누름 = 그 줄 그대로 · 머리 행 = 호표 영역 - 779-6 — 같은 파일 창은 새 모달 대신 그 창을 앞으로 꺼내 그 자리로 · 닫기 = 제자리로 내림 · 마지막 격자 다시 씀(확인 · 고르기 창 [엑셀 보기] 모두 openSheet 한 곳으로 지나감) - Hopyo_Check.ts saveDraft = 다시 칠 알림 한 줄(663 → 662) · Hopyo_Api.ts at 내보냄(676 그대로) - 서버 Match.view — 목록 「후보」 중 이름 후보 안 찾은 줄만 다시 셈(뒤 셈 끝 뒤) → 확인 창 「없음」과 같음(빨강) · 북부청 임도 목록 응답 2.81 → 3.49 초(다시 셈 48 줄 · 없음 11) - 시험: 새 test_779_4_sheet_map(꼴 표 · 블록 칠 · 실물 EST · STmate 칠 행 수 · 뛸 곳) · test_m02_hopyo_screen 779 지킴 더함 - 낡은 시험 고침: test_779_2 기대 「후보 ≠ 없음 허용」 → 「모두 같음」(까닭 = 이번 덧 셈) · 도우미 helper_m02_hopyo_check · helper_729_3_hopyo_left 에 document 대역(까닭 = saveDraft 알림이 document 를 씀) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
39 lines
1.5 KiB
JavaScript
39 lines
1.5 KiB
JavaScript
/* 779-4 엑셀 보기 창 칠 · 뛸 곳 헬퍼 — `logic/M02_MasterTemplete_Hopyo_SheetMap.ts`(순수)를 트랜스파일해 Node 로 돌림.
|
|
* stdin = {grid(책 뺀 격자), briefs, blocks, drafts{번: 캐시}, tones[[상태, 체크, 캐시, 차례]], at[[시트, 행]]}
|
|
* stdout = {tones[{tone, mine}], blocks[{tone, 글}], jumps[[Jump]], paint{시트: {행: 꼴}}} JSON. */
|
|
const path = require("path");
|
|
const { makeLoader } = require("./helper_ts_stub_loader.cjs");
|
|
|
|
const ROOT = path.join(__dirname, "..", "..");
|
|
const { loadTs } = makeLoader({ root: ROOT });
|
|
const map = loadTs(
|
|
path.join(ROOT, "M02_MasterTemplete", "logic", "M02_MasterTemplete_Hopyo_SheetMap.ts"),
|
|
);
|
|
|
|
let raw = "";
|
|
process.stdin.on("data", (c) => (raw += c));
|
|
process.stdin.on("end", () => {
|
|
const input = JSON.parse(raw);
|
|
const out = {
|
|
tones: (input.tones ?? []).map(([s, c, d, at]) => map.lineTone(s, c, d, at)),
|
|
blocks: (input.blockTones ?? []).map((m) => map.blockTone(m ?? undefined)),
|
|
};
|
|
if (input.grid) {
|
|
const ix = map.indexOf(input.grid);
|
|
out.jumps = (input.at ?? []).map(([sheet, row]) => map.jumpsAt(ix, sheet, row));
|
|
const paint = map.paintOf(
|
|
ix,
|
|
input.briefs ?? [],
|
|
input.blocks ?? [],
|
|
(no) => (input.drafts ?? {})[no] ?? null,
|
|
);
|
|
out.paint = Object.fromEntries(
|
|
[...paint].map(([sheet, rows]) => [
|
|
sheet,
|
|
Object.fromEntries([...rows].map(([r, m]) => [r, m.tone])),
|
|
]),
|
|
);
|
|
}
|
|
process.stdout.write(JSON.stringify(out));
|
|
});
|