feat(846-2): 기계 줄 시간당 작업량 화면 — 산출근거 「시간당 작업량」 줄 먼저 · 비목 ÷ 시간당 작업량 · 제어 구역 일당 / 시간당 식 고르기 · 변수 칸 · 기계 보기 작업량 식

- 산출근거: 일당 「시간당 작업량 = 시공량 560 ㎥/일 ÷ (1 대 × 8 시간) = 70 ㎥/시간」 · 시간당 식 = q · K · f · E · cm 값 줄 + 한 층 분수 Q 식 · 비목 줄 「59,020 원/시간 ÷ 70 ㎥/시간 = 843.1 원」(금액 그대로)
- 제어 구역: 「시간당 작업량」 묶음 맨 위 — 방식 고르기(식 없는 기계 = 잠김 + 까닭) · 시간당 = 작업량 틀 변수 칸(고침 · 원래 값) · 덮음 = 기계덮음.<기계>.작업량
- 기계 보기: 왼쪽 작업량 카드(기계 정본 변수) · 오른쪽 풀이 · 서버가 작업량 틀 연결을 실음(M02_MyMachine_Sheet._work)
- 시험: test_846_2_work_view 새로 · test_845_2 GC000088 비목 줄 기대값을 새 꼴로 고침(846-2 표시 변경) · 헬퍼 가짜 DOM 이 진짜 DOM 처럼 요소를 옮김(같은 요소 두 줄 재사용 흠을 잡게)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-16 00:00:35 +09:00
co-authored by Claude Opus 5.5
parent 3a8ba840f4
commit c8cd98dec1
16 changed files with 925 additions and 22 deletions
+21 -1
View File
@@ -6,6 +6,7 @@
* 오른쪽 = 그 기계 시간당 경비 산출근거(`line_stack_out` · 노 · 재 · 경 · 계 합계 상자) — 값을 바꾸면 브라우저 계산기로 즉시
* 서버(`POST /api/m02/machine-sheet` · `M02_MyMachine_Sheet`) = 식 고름 + 처음 줄 값을 박은 식 문서 + 연결 기록 ·
* 고친 값은 덮음(`기계덮음` 꼴)으로 얹어 셈 · 캐시에 없는 연결 · 식이 바뀔 칸만 뒤에서 다시 물음(옛 요청 끊음)
* 시간당 작업량(846-2) = 왼쪽 접이 카드(작업량 식 변수 = 기계 값) · 오른쪽 풀이(`line_stack_machine_sheet_work`)
* 줄 = 저장 꼴(M01 기계 줄 · 내 기계 줄) — 덮음 ↔ 줄은 `common_util_machine_sheet` · 저장은 부르는 쪽(M01 상세 · 내 기계)
* ========================================================================== */
@@ -63,6 +64,7 @@ import {
import { machineCellName } from "../common_util/common_util_machine_symbol_name";
import { docFoot } from "./formula_doc_foot";
import { buildMachineCtl } from "./line_stack_machine_ctl";
import { sheetWorkCard, sheetWorkOut, type SheetWorkOpts } from "./line_stack_machine_sheet_work";
import { buildOut } from "./line_stack_out";
import "./line_stack.css";
import "./line_stack_machine_sheet.css";
@@ -158,6 +160,7 @@ export function createMachineSheet(o: MachineSheetOptions) {
const warn = el("div");
const ctlBox = el("div");
const baseBox = el("div");
const workBox = el("div");
const root = el("div", {
className: "lstk",
attrs: { "data-edit": "1", "data-machine-sheet": no },
@@ -528,8 +531,24 @@ export function createMachineSheet(o: MachineSheetOptions) {
redraw: () => drawRight(),
}),
);
right.append(sheetWorkOut(work()));
if (cache.takeMissing()) ask();
foot.replaceChildren(docFoot(a));
};
// 846-2 시간당 작업량 — 지금 줄 `값.작업량`(고침 = 지금 줄 · 저장은 부르는 쪽)
const work = (): SheetWorkOpts => ({
cur,
orig,
ro,
links: cache.links,
miss: () => undefined,
changed: () => changed(),
});
const drawWork = (): void => {
const keep = workBox.firstElementChild?.classList.contains("is-collapsed") ?? false;
workBox.replaceChildren(sheetWorkCard(work(), keep));
if (cache.takeMissing()) ask();
};
const drawWarn = (): void => {
const vals: MachineValues = crewView({ ...engineVals(cur, mine), ...(cur.값 ?? {}) });
if (unitOf("손료계수") !== machineUnit("손료계수")) delete vals.손료계수; // 일 단위 손료(임업) = 시간당 범위 아님
@@ -541,6 +560,7 @@ export function createMachineSheet(o: MachineSheetOptions) {
};
const drawLive = (): void => {
drawCtl();
drawWork();
drawRight();
drawWarn();
};
@@ -552,7 +572,7 @@ export function createMachineSheet(o: MachineSheetOptions) {
notice.replaceChildren(...(t ? [createText(t, "warning")] : []));
};
left.append(...similarBox(), notice, warn, ctlBox, baseBox);
left.append(...similarBox(), notice, warn, ctlBox, workBox, baseBox);
drawAll();
ask(true);