refactor(785-7): 옛 맞춤 화면 TS 지움 · 옛 [저장] · [모두 고정] 단추 걷음 · 390 줄 판 높이

- 지움(git rm) 15 파일 3,318 줄: Hopyo_Check · CheckRows · Choose · WizardSk · SkApi · SkLines · logic/SkPick · logic/Draft ·
  Left · Lost · Pick · SheetMake · Kids · ToItem · Compare(모두 옛 확인 창 · 마법사 단가산출 · 안 이은 줄 길 몫 · 부르는 곳 0)
- 단추 판단: 엑셀 보기 [저장](체크 호표) · [모두 고정으로 들여오기] 화면 단추 걷음 → 만들기 = [옮기기] 하나 ·
  모두 고정 서버 길(Builder · build_all)은 B09 · 붙여넣기가 써서 남김 · 목록 체크 칸 · 모달 껍데기(openHopyoSheet · raise · lower) 걷음
- Import: 「안 이은 줄」 띠 · [안 이은 줄 고르기] · 남은 줄 셈 걷음 · [끝내기] = 물음(확인하고 안 옮긴 수 = 판정 고름 캐시 moveBody)
- Api: 옛 맞춤 타입 · 길(readHopyoOne · guessHopyo · buildHopyo · buildHopyoAll · leftHopyo · listHopyoPicks · hopyoSiblings ·
  buildHopyoItem …) 걷음 · POLL_MS · HOPYO_BUILT 옮겨 옴 · 목록 꼴 = 1차 판정 줄상태(Judge.view)
- Labor_Pick: withHopyo(실무 호표 덧줄) → withSangeun(찾아 넣기 창 표시만) · Detail · Table 부름 바꿈
- Ledger: unitField 옮겨 옴 · SheetNav: 옛 확인 캐시 칠 걷음 · UI_Page: [구조물 조합으로] 듣기 걷음
- CSS: 옛 확인 창 · 고르기 창 규칙 34 걷음(481 → 287 줄) · 390 폭 = 줄 판 열리면 위 칸 넓힘 · 줄 판 높이 바닥 16rem

시험 정리(까닭 = 지운 화면 파일만 읽음):
- 지움: test_729_3_hopyo_left_screen · test_746_2_hopyo_compare_screen · test_778_5_sk_pick_screen · helper_729_3 · helper_m02_hopyo_check · pick · seam
- test_m02_hopyo_screen = 좌측 판 · 끝내기 둘만 · 627 · helper_778_5 = SheetSk 판 바꿈만 · 785_4 · 721 · 717_4 · 720 · 739_1 = 지금 꼴로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-05 01:32:17 +09:00
co-authored by Claude Opus 5.5
parent 48848bb287
commit cf4e2a0339
45 changed files with 126 additions and 5791 deletions
@@ -1,123 +0,0 @@
/* =============================================================================
* M02_MasterTemplete_Hopyo_ToItem.ts
* [구조물 조합으로](PLAN 704-4 뒷부분) — 실무자료 확인 창 몸 그대로 구조물 조합 항목(SU)을 바로 만듦(사전조합 안 거침).
* 창 = 항목 이름(기본 = 호표 이름 · 규격) · 규격 묶음 제안(같은 이름 · 줄 구성 · 규격만 다른 호표 → 한 항목의 규격 열 ·
* 기본 켬 · 끄면 이 호표 하나) · [만들기] → 서버 `/hopyo-item`(이 층 쓰기 · 「실무자료」 폴더) → 나무 다시
* 숫자는 서버가 파일에서 — 화면은 체크 · 고름만
* ========================================================================== */
import {
createButton,
el,
hideLoadingOverlay,
showLoadingOverlay,
showToast,
} from "@ui/ui_template_elements";
import { createCheckbox } from "@ui/ui_template_checkbox";
import { createInputField } from "@ui/ui_template_input";
import { openModal } from "@ui/ui_template_modal";
import { createText } from "@ui/ui_template_text";
import { t as L } from "@ui/ui_template_locale";
import {
buildHopyoItem,
hopyoSiblings,
type BuildLine,
type BuildTarget,
type HopyoOne,
type HopyoScope,
} from "./M02_MasterTemplete_Hopyo_Api";
import { type SameExtra, withSameAsk } from "./M02_MasterTemplete_Library_SameAsk";
/** 항목을 만들었음(document 알림) — 구조물 조합 나무 · 옆 목록 다시 */
export const ITEM_BUILT = "m02-hopyo-item-built";
export interface ToItemOptions {
scope: HopyoScope;
target: HopyoScope;
key: string;
no: number;
hopyo: HopyoOne["호표"];
lines: BuildLine[];
whole: { 대상: BuildTarget[] } | null;
}
export async function toItem(o: ToItemOptions): Promise<void> {
let sib: Awaited<ReturnType<typeof hopyoSiblings>>;
try {
sib = await hopyoSiblings(o.scope, o.key, o.no);
} catch (error) {
showToast(
`묶음 제안 실패 — ${error instanceof Error ? error.message : String(error)}`,
"error",
);
return;
}
const h = o.hopyo;
const one = [h.이름, h.규격].filter(Boolean).join(" ");
const bundle = sib.묶음.length > 1;
const name = createInputField({ label: "구조물 조합 이름", value: bundle ? h.이름 : one });
const pack = bundle
? createCheckbox(
`규격 열로 묶음 — ${sib.이름}: ${sib.묶음.map((r) => `${r.열}(제${r.번}호표)`).join(" · ")}`,
{
checked: true,
onChange: (on) => (name.input.value = on ? h.이름 : one),
},
)
: null;
openModal({
title: `구조물 조합으로 — 제${o.no}호표`,
closeLabel: "취소",
width: "40rem",
mount: (body, close, actions) => {
const go = createButton({
label: "만들기",
onClick: async () => {
const label = name.input.value.trim();
if (!label) return name.setError("이름이 빔");
const from = { 층: o.scope.layer, 주인: o.scope.owner, 키: o.key, 번: o.no };
const with_ = pack?.input.checked
? sib.묶음.map((r) => r.번).filter((n) => n !== o.no)
: [];
// 같은 내용 항목이 있으면 물음(733-3) — 물을 때는 가림막을 걷음
const build = async (extra: SameExtra) => {
showLoadingOverlay();
try {
return await buildHopyoItem(o.target, from, o.lines, o.whole, with_, label, extra);
} finally {
hideLoadingOverlay();
}
};
try {
const got = await withSameAsk(build);
if (!got) return;
close();
document.dispatchEvent(new Event(ITEM_BUILT));
showToast(
got.씀
? `같은 내용 구조물 조합 「${got.이름}」 씀 — 새로 안 만듦`
: `구조물 조합 「${label}」 만듦 — 「실무자료」 폴더 · 줄 ${got.줄수}` +
((got.열수 ?? 0) > 1 ? ` · 규격 열 ${got.열수}` : ""),
"success",
6000,
);
} catch (error) {
showToast(
`못 만듦 — ${error instanceof Error ? error.message : String(error)}`,
"error",
);
}
},
});
actions.append(go);
body.append(
createText(
`체크한 줄 = 품셈 줄 · 나머지 = 고정 줄(엑셀 숫자 그대로) — ${L("M02_PrecomboTitle")}을 거치지 않고 구조물 조합 항목을 바로 만듦`,
"muted",
),
name.root,
...(pack ? [el("div", { children: [pack.root] })] : []),
);
},
});
}