feat(M01): 요소 찾기에 기계 구분·상세구분 싣기 · 소요량/계수 로직키 눌러 로직 탭 연결

_brief 응답에 구분·상세구분 추가(테스트 컨테이너 기계 후보 거름용)
표 상세화면 용도의 로직키를 누르면 로직 탭으로 전환 + 키 클립보드 복사(찾기용)
로직 목록을 직접 열지는 못함(로직 부분은 sub1 담당) — _화면_계약.md 한 줄 추가
This commit is contained in:
2026-09-20 23:07:45 +09:00
parent 53151917ba
commit 26ceeaf9b0
8 changed files with 123 additions and 33 deletions
+26 -8
View File
@@ -36,8 +36,13 @@ const LIST_COLS = ["키", "원문번호", "구분", "상세구분", "이름", "
/** 용도 대상 거름 드롭다운 후보 — PLAN 1-1 셋째 줄 그대로. */
const USAGE_TARGETS = ["인력", "기계", "재료", "할증", "환산", "작업량 조건"];
/** 돌려받은 함수 = 이 화면을 걷을 때 부를 해제. */
export function renderTables(host: HTMLElement, pick: Pick, q: string): () => void {
/** 돌려받은 함수 = 이 화면을 걷을 때 부를 해제. `openLogic` = 용도의 로직키 눌렀을 때 로직 탭으로. */
export function renderTables(
host: HTMLElement,
pick: Pick,
q: string,
openLogic: (key: string) => void,
): () => void {
let stop = (): void => {};
let usage = pick.view?.usage ?? "";
const list = (page = pick.view?.page ?? 1): void => {
@@ -50,7 +55,7 @@ export function renderTables(host: HTMLElement, pick: Pick, q: string): () => vo
usage,
page,
(file, key) => {
stop = openTable(host, file, key, () => list(page));
stop = openTable(host, file, key, () => list(page), openLogic);
},
(next) => {
usage = next;
@@ -140,7 +145,13 @@ async function showList(
}
/** 표 하나. 돌려받은 함수 = 해제. */
function openTable(host: HTMLElement, file: string, key: string, back: () => void): () => void {
function openTable(
host: HTMLElement,
file: string,
key: string,
back: () => void,
openLogic: (key: string) => void,
): () => void {
let off = (): void => {};
void (async () => {
let version: string;
@@ -209,6 +220,15 @@ function openTable(host: HTMLElement, file: string, key: string, back: () => voi
el("p", { className: "m01-master__muted", text: n }),
);
const usage = table.용도 as TableUsage | undefined;
const logicLinks = (usage?.로직키 ?? []).map((k, i) => {
const btn = el("button", {
className: "m01-master__logic-key",
text: k,
attrs: { type: "button", title: L("M01_OpenLogic") },
});
btn.addEventListener("click", () => openLogic(k));
return i === 0 ? btn : el("span", { text: ", ", children: [btn] });
});
host.replaceChildren(
el("div", {
className: "m01-master__bar",
@@ -223,10 +243,8 @@ function openTable(host: HTMLElement, file: string, key: string, back: () => voi
? [
el("span", {
className: "m01-master__muted",
attrs: { title: usage.로직키.join(", ") },
text: `${L("M01_TableUsage")}: ${usage.공종} · ${usage.대상.join(", ")} · ${L(
"M01_TableUsageLogicCount",
).replace("{value}", String(usage.로직키.length))}`,
text: `${L("M01_TableUsage")}: ${usage.공종} · ${usage.대상.join(", ")} · `,
children: logicLinks,
}),
]
: []),