feat(M01): 로직 개선 시험 알약에서 마스터 화면으로 잇기 · 단가 없는 재료 알약에 이유 한 마디 (PLAN 5-3 · 5-4)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
This commit is contained in:
2026-09-22 00:09:49 +09:00
co-authored by Claude Sonnet 5
parent 6cb6baabd6
commit fc6bb7240e
4 changed files with 81 additions and 3 deletions
@@ -16,6 +16,7 @@ import {
type RelatedFind,
type TableRow,
} from "./M01_MasterData_UI_Logic_Note";
import { jumpToMaster, type MasterJump } from "./M01_MasterData_UI_Side";
import { pillBar, type Pill } from "./M01_MasterData_UI_LogicLab_Pill";
import { tl } from "./M01_MasterData_UI_LogicLab_Text";
import "./M01_MasterData_UI_LogicLab_Pill.css";
@@ -72,6 +73,7 @@ function tableView(
className: "m01-logic__muted",
text: `${find.source}${find.find.col} · ${hit ? tl("Modal_Hit") : tl("Modal_NoHit")}`,
}),
goButton({ kind: "table", key: table.키 }),
el("div", {
className: "m01-logic__scroll",
children: [
@@ -93,6 +95,14 @@ function tableView(
const groupOf = (ref: string): string =>
ref.startsWith("LB") ? "인력" : ref.startsWith("M") ? "재료" : ref.startsWith("EQ") ? "기계" : "";
function goButton(target: MasterJump): HTMLElement {
return createButton({
label: tl("Pill_Go"),
variant: "ghost",
onClick: () => jumpToMaster(target),
});
}
function priceView(ref: string, brief: ElementBrief): HTMLElement {
const cols = Object.entries(brief. ?? {});
return el("div", {
@@ -114,6 +124,7 @@ function priceView(ref: string, brief: ElementBrief): HTMLElement {
...cols.flatMap(([k, v]) => [el("dt", { text: k }), el("dd", { text: String(v) })]),
],
}),
goButton({ kind: "element", group: groupOf(ref), ref: brief.ref ?? ref, file: brief.file }),
],
});
}
@@ -153,7 +164,11 @@ export function openMaterialModal(target: ModalTarget): void {
} else if (target.element && !logicRef) {
pills.push({
label: `${groupOf(base)} ${target.title}`.trim(),
view: () => el("p", { text: target.element }),
view: () =>
el("p", {
className: "m01-logic__muted",
text: `${target.element}${tl(target.element?.includes("{") ? "Pill_NoPick" : "Pill_NoValue")}`,
}),
});
}
if (logicRef) {