feat(M02): 51-14 일위대가 순서 칸 2행 — 위 [위로] [아래로] / 아래 [옵션]·[수정] [삭제] · 단가승격 [옵션] · 일위조합 [수정] 서고 원본 모달

- 순서 칸 = 단추 묶음 두 줄(공용 ui-btn-group 간격) · 카드 갈래는 아래 줄만
- 단가승격 줄 [옵션] = 승격 문서 넣을 값 모달 · [저장] = 서고 저장 길 · 머리 한 줄 알림(쓰는 모든 구조물에 따라감)
- 일위조합 줄 [수정] = 사전조합 상세 모달(서고 모드 표 · 옵션 · 수량 · 순서 · 삭제 · 추가) · [저장] = 서고 원본 · 취소 = 버림 물음
- 자기 층 서고만 고침(위 층 = 읽기만) · 닫으면 구조물 일위대가 다시 셈
- 확인 시나리오 resources/tester/ui_checks/51-14_순서칸_2행_옵션수정.js

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MgChuAcyBqUkhHMTXomQC7
This commit is contained in:
2026-10-05 21:05:31 +09:00
co-authored by Claude Opus 5.5
parent a8045bbacc
commit 47cbbd17bd
8 changed files with 403 additions and 14 deletions
@@ -19,14 +19,19 @@ const fill = (text: string, value: string): string => text.replace("{value}", va
/** 면적산출 상세로 감 — 옮겨 갔으면 참(물음에서 취소 = 거짓) */
export type GoArea = () => Promise<boolean>;
function footer(readOnly: boolean, ok: () => void, close: () => void): HTMLElement {
function footer(
readOnly: boolean,
ok: () => void,
close: () => void,
okLabel = tc("In_Ok"),
): HTMLElement {
return el("div", {
className: "m02-labin__foot",
children: readOnly
? [createButton({ label: tc("In_Close"), variant: "ghost", onClick: close })]
: [
createButton({ label: tc("In_Cancel"), variant: "ghost", onClick: close }),
createButton({ label: tc("In_Ok"), variant: "filled", onClick: ok }),
createButton({ label: okLabel, variant: "filled", onClick: ok }),
],
});
}
@@ -45,6 +50,10 @@ export interface LaborInputOptions {
memo: string | null;
readOnly: boolean;
done: (next: LaborInputResult) => void;
/** 머리 한 줄 알림(51-14 · 서고 원본 고침) */
notice?: string;
/** 확인 단추 글(기본 「확인」) */
okLabel?: string;
}
/** 담은 로직 줄 입력 모달 */
@@ -100,6 +109,15 @@ export function openLaborInput(opt: LaborInputOptions): void {
el("div", {
className: "m02-inputval",
children: [
...(opt.notice
? [
el("p", {
className: "m02-labin__muted",
text: opt.notice,
attrs: { "data-labor-notice": "" },
}),
]
: []),
...(lost.length
? [
el("p", {
@@ -120,7 +138,7 @@ export function openLaborInput(opt: LaborInputOptions): void {
}),
],
}),
footer(opt.readOnly, ok, close),
footer(opt.readOnly, ok, close, opt.okLabel),
);
},
});