fix(527-1): B07 확정 표시 걷음 — 정보칸 「확정/잠정」 배지 · CAD 보기 전용 알림 옛 「확정한 도면 · [수정]」 글 · 저장 실패 글 「확정」 → 「저장」

- [>] 「도면 저장」 단계는 요구 281 · 520-3 그대로(고친 도면만 서버 저장 → 단계 완료 → 이동)
- 서버 끝점 · manifest confirmed 키 = 안쪽 이름이라 그대로(브레인 정함)
- 평면도 설정 모달 배지는 sub5(524) 몫

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 14:28:28 +09:00
co-authored by Claude Opus 5.5
parent 7e2bc3a8e7
commit 5a1490ddaa
7 changed files with 8 additions and 27 deletions
+2 -2
View File
@@ -441,7 +441,7 @@ async def confirm_design_drawing(
items = await asyncio.to_thread(_drawing_list, project_root, longitudinal_path)
item = next((candidate for candidate in items if candidate.id == drawing_id), None)
if not item:
raise FileNotFoundError("확정할 도면을 찾을 수 없습니다.")
raise FileNotFoundError("저장할 도면을 찾을 수 없습니다.")
sheet = None
if CROSS_SHEET_ID.fullmatch(drawing_id):
plan = await asyncio.to_thread(_cross_sheet_plan, project_root, longitudinal_path)
@@ -520,7 +520,7 @@ async def confirm_design_drawing(
logger.exception("B07 도면 확정 실패: project_id=%s drawing_id=%s", project_id, drawing_id)
return JSONResponse(
status_code=500,
content={"status": "error", "message": "상세 설계 도면을 확정하지 못했습니다."},
content={"status": "error", "message": "상세 설계 도면을 저장하지 못했습니다."},
)
@@ -352,7 +352,7 @@ function infoRow(label: string, value: string): HTMLElement {
}
/**
* 선택 횡단도의 지반정보/계획정보를 2분할로 렌더한다 (B06 정본 값 · B07 확정은 상태만 올림).
* 선택 횡단도의 지반정보/계획정보를 2분할로 렌더한다 (B06 정본 값 · 확정 배지 없음 · 요구 343).
*
* **장(여러 측점을 담은 도면)에는 측점 단위 값이 없다** — 서버가 `design` 을 넘기지
* 않는데도 제목만 「측점 …」으로 달려 어느 측점 값인지 오해됐다(2026-09-03 정리).
@@ -370,11 +370,7 @@ export function buildDesignInfoPanel(
const stationName = document.createElement("strong");
const scopeLabel = scope === "sheet" ? L("B07_Info_Sheet") : L("B07_Info_Station");
stationName.textContent = `${scopeLabel} ${title}`;
const confirmed = design?.status === "confirmed";
const badge = document.createElement("span");
badge.className = `b07-info__badge${confirmed ? " b07-info__badge--confirmed" : ""}`;
badge.textContent = confirmed ? L("B07_Info_Confirmed") : L("B07_Info_Provisional");
heading.append(stationName, badge);
heading.append(stationName);
panel.append(heading);
if (!design) {
@@ -181,19 +181,6 @@
gap: var(--spacing-8);
}
.b07-info__badge {
padding: 1px 6px;
font-size: 10px;
color: var(--color-primary);
background: var(--color-mist-violet);
border-radius: var(--radius-buttons);
}
.b07-info__badge--confirmed {
color: var(--color-surface);
background: var(--color-success);
}
.b07-info__block {
display: flex;
flex-direction: column;
@@ -30,8 +30,8 @@ export function runCommand(command: CadCommand): string {
// 확정한 도면은 읽기 전용이다 — 보는 명령만 통과시킨다. 리본·명령행·단축키가 모두
// 이 한 곳을 지나므로 여기서 한 번 막으면 새는 길이 없다 (2026-09-01 사용자 확정).
if (isDrawingReadOnly() && !isViewOnlyCommand(command)) {
toast.info(`확정한 도면입니다. 고치려면 [수정]을 먼저 누르세요. (${command.label})`);
logLine(`${command.id}: 확정 도면 — 실행하지 않음`);
toast.info(`보기 전용 도면입니다. (${command.label})`);
logLine(`${command.id}: 보기 전용 — 실행하지 않음`);
return '';
}
if (command.needsSelection && getSelectedEntities().length === 0) {
@@ -91,7 +91,7 @@ export function clearRecovery(): void {
export async function restoreRecovery(): Promise<void> {
if (isDrawingReadOnly()) {
toast.info('확정한 도면입니다. 되살리려면 [수정]을 먼저 누르세요.');
toast.info('보기 전용 도면입니다.');
return;
}
const file = readRecovery();
@@ -205,7 +205,7 @@ export function handleTextDoubleClick(event: MouseEvent, canvas: HTMLCanvasEleme
return;
}
if (isDrawingReadOnly()) {
toast.info('확정한 도면입니다. 고치려면 [수정]을 먼저 누르세요.');
toast.info('보기 전용 도면입니다.');
return;
}
const drawController = getScreenCanvasDrawController();
-2
View File
@@ -535,8 +535,6 @@ export const ui_locales_b2 = {
B07_Info_Ditch: ["측구규격", "Ditch spec"],
B07_Info_CutArea: ["절토 단면적", "Cut area"],
B07_Info_FillArea: ["성토 단면적", "Fill area"],
B07_Info_Provisional: ["잠정", "Provisional"],
B07_Info_Confirmed: ["확정", "Confirmed"],
B07_Info_NoDesign: ["지반·계획 지정 데이터가 없습니다.", "No ground/plan designation data."],
B07_Info_Station: ["측점", "Station"],
/* 장(여러 측점을 담은 횡단 도면)은 측점 단위 지반·계획 정보를 갖지 않는다 —