feat(804-11): M01 목록 머리 단추 = 신규만 · M02 원문 손잡이 오른쪽 끝(요구 693 · 694)

- M01 단가산출 기초 목록 = [신규 로직]만 · [로직 복사/생성] · [로직 삭제] · [되돌림] · [저장] = 로직 열면 나타남(숨김)
- 요소 묶음 여덟 · 구조물 옵션 정의 · 별칭 장부 = 항목에 매인 머리 단추 없음(그대로)
- M02 원문 손잡이 = M01 687-17 과 같은 규칙(메인 칸 오른쪽 여백 24 만큼 밀어 붙임) · 단가산출 · 일위대가 손잡이 오른쪽 여백 24 → 0
- test_804_11 둘 · test_m02_layer_screen 머리 줄 기대에 804-8 [되돌림] 넣음(낡은 기대 고침)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-08 15:51:38 +09:00
co-authored by Claude Opus 5.5
parent 324ae1b047
commit 9130741751
4 changed files with 54 additions and 8 deletions
+10 -7
View File
@@ -6,7 +6,7 @@
*
* 데이터 흐름(CLAUDE.md 5장) — 고친 것은 캐시(sessionStorage)에 쌓고 [저장] 한 번에 `POST /save`.
* 409 = 그 사이 파일이 바뀜 · 422 = 검사 걸림(아무것도 안 씀) — 까닭은 서버 글 그대로 보임.
* 머리 단추(804-7 · 요구 687-2) = [신규 로직] · [로직 복사/생성] · [로직 삭제] · [되돌림] · [저장]
* 머리 단추(804-7 · 요구 687-2) = [신규 로직] · [로직 복사/생성] · [로직 삭제] · [되돌림] · [저장] · 목록에선 [신규 로직]만(요구 693)
* [저장] = 기본정보 · 별칭(로직 줄 `/save`) + 수식(줄 쌓기 `/logic/doc/save`) 한 번에 · [되돌림] = 둘 다 저장 뒤 상태로
* [로직 삭제] = 확인 → 서버 정본에서 바로(`/logic/remove` — 로직 줄 + 수식 문서 · 부르는 곳 있으면 막고 까닭) → 로직 목록
* ========================================================================== */
@@ -234,6 +234,8 @@ export async function mountM01LogicLab(
waiting.hidden = loaded;
panes.root.hidden = !opened;
back.hidden = views.root.hidden = listing;
// 로직을 골라야 뜻 있는 단추 = 목록에선 숨김(요구 693 · [신규 로직]만 보임)
copyButton.hidden = deleteButton.hidden = discardButton.hidden = saveButton.hidden = listing;
if (!opened) return;
if (!opened.row) {
editor.replaceChildren(createEmpty({ text: `● ${tx("List_Deleted")}`, small: true }));
@@ -528,6 +530,12 @@ export async function mountM01LogicLab(
})
: showToast(tl("Copy_NeedOpen"), "info"),
});
const deleteButton = createButton({
label: tx("Bar_Delete"),
variant: "danger",
iconStart: "trash",
onClick: () => void onDelete(),
});
// 제목 줄 = 요소 화면(인력 · 재료 …)과 같은 공용 조각
const bar = buildHeadBar({
lead: [back],
@@ -542,12 +550,7 @@ export async function mountM01LogicLab(
onClick: () => void onNew(),
}),
copyButton,
createButton({
label: tx("Bar_Delete"),
variant: "danger",
iconStart: "trash",
onClick: () => void onDelete(),
}),
deleteButton,
discardButton,
saveButton,
],