- 단가산출 칸 = 서버 줄 판정(빈 확인) 블록 표: 판정 · 우리 금액 · 엑셀 금액(참고) · 근거 꼬리표 · 만든 SK · [확인] 칩(고를 줄 0 일 때만) · [줄] 펼침 · [보기]
- 줄 표(새 Hopyo_SkLines) = 묶음 · 이름 · 규격 · 매개값 · 상태 칩(엑셀 칠과 한 규칙 unitTone) · 꼬리표 · 방법 · 금액 · 차 · 고름(후보 · 찾기 · 율 기준 · 뺌 + 까닭 · 지움) · 엑셀 보기 뛰기
- 고름 · 확인 = 캐시 m02-hopyo-sk · [확인한 것 옮기기] = 몸 {확인: [{번, 고름}]} · 서버가 다시 셈 · 자동 확인 · 「모두 확인」 없음
- 순수 꼴 = 새 logic/Hopyo_SkPick · 길 = 새 Hopyo_SkApi(Hopyo_Api 안 늘림)
- 마법사 [끝내기] 막힘 글 앞에 「단가산출 확인 안 한 블록 n · 고를 줄 m」(Hopyo_Wizard 한 곳)
- 걷음: 옛 고름 대기 기초 고름 · 줄 비교(Compare.compareView · compareBrief · Api SangeunCompare · CompareLook · CSS) — 쓰는 곳 없음 · 못옮김 창 잇기 만들기(옛 바탕 몸 = 서버가 걷어 422) → 보기만 + 줄 찾기 단추 lineFind 로 다시 씀 · 안 쓰는 문구 39
- 낡은 시험 고침: test_746_2(줄 비교 · 못옮김 요소 단추 시험 걷음 — 기능 걷음) · test_729_3(candLabel · 옛 잇기 몸 기대값 걷음) · test_m02_hopyo_screen(sangeunStep 인자) · 새 test_778_5_sk_pick_screen + helper_778_5_sk_pick.cjs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
94 lines
3.5 KiB
TypeScript
94 lines
3.5 KiB
TypeScript
/* =============================================================================
|
|
* M02_MasterTemplete_Hopyo_Lost.ts
|
|
* 단가산출 줄 찾기 단추 · 옛 못옮김 창(PLAN 729-4 · 778-5 D-5).
|
|
* · `lineFind` = 줄 묶음대로 찾아 넣기 창(`Find_Pick` 탭 하나 · 노임 = 인력 · 기계 = 기계 · 자재 = 재료) →
|
|
* 고름 `{노임|기계|자재: 키}` — 마법사 단가산출 줄 표(`Hopyo_SkLines`)가 씀
|
|
* · `openLost` = 옛 SK(기초 + 엑셀 차이)의 남은 못옮김 보기만 — 잇기는 마법사 단가산출 칸에서 그 블록 줄 고름 →
|
|
* [확인] → [확인한 것 옮기기](서버 778-5 D-3 · 옛 `바탕` 몸 걷음)
|
|
* ========================================================================== */
|
|
|
|
import { createButton, showToast } from "@ui/ui_template_elements";
|
|
import { t as L } from "@ui/ui_template_locale";
|
|
import { openModal } from "@ui/ui_template_modal";
|
|
import { createTable } from "@ui/ui_template_table";
|
|
import { createText } from "@ui/ui_template_text";
|
|
import { openFindPicker } from "./M02_MasterTemplete_Find_Pick";
|
|
import type { HopyoScope, SangeunBuilt, SangeunLost } from "./M02_MasterTemplete_Hopyo_Api";
|
|
import type { SkPick } from "./logic/M02_MasterTemplete_Hopyo_SkPick";
|
|
|
|
const KIND = { 노임: "labor", 기계: "machine", 자재: "material" } as const;
|
|
|
|
/** 줄 찾기 단추 — 묶음 갈래 탭 하나 · 고르면 `done({갈래: 키})` */
|
|
export function lineFind(opt: {
|
|
scope: HopyoScope;
|
|
갈래: "노임" | "기계" | "자재";
|
|
이름: string;
|
|
규격?: string;
|
|
done: (p: SkPick) => void;
|
|
}): HTMLButtonElement {
|
|
const go = createButton({
|
|
label: opt.갈래 === "기계" ? L("M02_LeftMachine") : L("M02_LeftFind"),
|
|
size: 24,
|
|
variant: "ghost",
|
|
onClick: () =>
|
|
openFindPicker({
|
|
layer: opt.scope.layer,
|
|
owner: opt.scope.owner,
|
|
title: `${opt.이름} ${opt.규격 ?? ""}`.trim(),
|
|
kinds: [KIND[opt.갈래]],
|
|
query: opt.이름.split(/[\s(]/)[0] ?? "",
|
|
logic: () => showToast(L("M02_GridLinkNoLogic"), "info"),
|
|
element: (e) => opt.done({ [opt.갈래]: e.코드 } as SkPick),
|
|
machine: (e) => opt.done({ 기계: e.코드 }),
|
|
}),
|
|
});
|
|
go.dataset.skFind = opt.갈래;
|
|
return go;
|
|
}
|
|
|
|
export interface LostOptions {
|
|
scope: HopyoScope;
|
|
key: string;
|
|
/** 블록 번(단산N) */
|
|
번: number;
|
|
/** 그 블록 SK 키 */
|
|
sk: string;
|
|
이름?: string;
|
|
lost: SangeunLost[];
|
|
/** 옛 꼴 그대로(부르는 쪽) — 보기만이라 안 부름 */
|
|
done?: (got: SangeunBuilt) => void;
|
|
}
|
|
|
|
/** 옛 못옮김 창 — 보기만 · 잇기 = 마법사 단가산출 칸 */
|
|
export function openLost(opt: LostOptions): void {
|
|
openModal({
|
|
title: `${L("M02_LostTitle")} — 단산${opt.번} ${opt.이름 ?? ""}`.trim(),
|
|
closeLabel: L("M02_Close"),
|
|
width: "960px",
|
|
dialogClass: "m02-modal",
|
|
mount: (body) => {
|
|
const rows = opt.lost.map((x) => [
|
|
x.갈래,
|
|
x.이름,
|
|
x.규격 ?? "",
|
|
`${x.수량 ?? ""} ${x.단위 ?? ""}`.trim(),
|
|
x.글 ?? "",
|
|
]);
|
|
body.append(
|
|
createText(L("M02_LostHint").replace("{n}", String(opt.번)), "hint", 14),
|
|
createTable(
|
|
[
|
|
{ label: L("M02_LeftKind"), width: "56px" },
|
|
{ label: L("M02_SangeunColName") },
|
|
{ label: L("M02_LeftSpec") },
|
|
{ label: L("M02_SangeunColQty"), width: "90px" },
|
|
{ label: L("M02_LeftWhy") },
|
|
],
|
|
rows,
|
|
{ density: "data", empty: L("M02_LostZero") },
|
|
),
|
|
);
|
|
},
|
|
});
|
|
}
|