From f535c233a6d94de6ef8dd6bfbc21a2527c7e2948 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 11:15:19 +0900 Subject: [PATCH 1/3] auto: 2026-10-05 11:15 (ESD_LAPTOP) --- docs/raw/사용자요구/2026-10-05_수정요구.md | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/raw/사용자요구/2026-10-05_수정요구.md diff --git a/docs/raw/사용자요구/2026-10-05_수정요구.md b/docs/raw/사용자요구/2026-10-05_수정요구.md new file mode 100644 index 000000000..eec77747b --- /dev/null +++ b/docs/raw/사용자요구/2026-10-05_수정요구.md @@ -0,0 +1,31 @@ +# 수정 요구 — B05 · M01 · M02 · 공통 · 대시보드 · CAD (2026-10-05 · 원문 그대로) + +1. B05 종단설계 + - 계획노선 편집에서 거리 측정에서 예상노선/계획노선이 서로 가려져 포인트 찍기가 어려움. 첫번째 포인트에 따라 두번째 포인트의 지점을 찍을때 노선 선정 자동으로 반영 + - 계획노선 편집에서 횡단내용 하단부의 좌우 표고 및 원지반, 기본계획 횡단의 글자 사이즈를 현재의 절반수준으로 변경 + - 계획노선 편집에서 횡단 우측 측점 표기의 글자를 제목과 동일한 폰트 사이즈로 변경 + +2. M01 마스터 데이터 + - 단가산출 로직 항목의 상세 페이지에서 우측 패널(다이어그램, 상세내용)에 토글버튼으로 접었다 폈다 할수 있게. 템플릿 확인 후 반영 + - 단가산출 호직 항목의 상세페이지의 좌측 항목의 순서는 기본정보 > 시험계산 > 단가산출 상세 > 텍스트 수식 순으로 표기 + - 우측패널의 하나더 추가하여 기존에 있던 다이어그램, 상세내용 패널 하나와 추가 패널하나를 넣어주는데 두 패널은 트레이드 오프 관계로 하나가 보이면 하나는 닫힘. 둘다 닫을 수도 있음. 이때 추가된 패널에는 단가산출 로직의 원문과 연결하여 표현 + - 체인톱 가격이 수기입력으로 받고 있지만 이걸 자재품목에서 '동력체인톱'항목으로 연결되어야함.(기본값은 이름 순서상 제일 위에 값을 사용) + - 체인톱의 오일은 자재품목에서 '작동유'를 의미함. + +3. M02 마스터 템플릿 + - 일위대가 미리보기와 상세보기 내부의 셀 연결 후 표기가 셀 주소 = 수량 으로 표기됨. 이걸 수량(셀주소)형태로 변경 + - 단가산출 로직의 항목명 하단에 선택된 옵션 값을 명기해 줬는데 이게 내용이 많은 경우 줄바꿈에 의해 전체 행이 커지고 있음. 이값을 이름, 수량산출, 결과 단위, 누무비,, 재료비, 경비 , 합계에 걸쳐 입력 정보 표기 하기 + - 단가산출 로직의 항목들의 총합계 행에서 전체 합계 항목을 테두리와 색상으로 표현 + - 일위대가 상세에서 상단의 단위는 사용자가 드롭다운 메뉴에서 선택해서 변경 + - 일위대사 상세 페이지의 단가산출 로직 테이블에서 이름 열외에 추가로 사용자가 지정한 이름을 사용할 수 있게 별칭을 넣을 수 있게 열 추가 + +4. 페이지 공통양식 + - B05 페이지의 좌측 패널에서 좌측 패널의 구조물리스트와 초기화/저장/횡단(종단) 등의 버튼류는 상단 구분선을 기준으로 패널 하단에 고정하였는데 풀렸음. 다시 고정 + +5. 대시보드 + - 일위대가가 구조물 조합으로 편입되면서 시스템 설정 컨테이너의 일위대가 항목은 없어도됨. + +6. 내부 특수 앱 + - CAD 프로그램 : 한글입력 안됨. + +계획서를 작성하고 코드작업을 진행해줘. 난 이제 자리를 비워야하니까 참고해. From 4041e61871127a5cae33e779719162194e337c36 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 11:15:21 +0900 Subject: [PATCH 2/3] auto: 2026-10-05 11:15 (ESD_LAPTOP) --- docs/raw/사용자요구/2026-10-05_수정요구.md | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/raw/사용자요구/2026-10-05_수정요구.md diff --git a/docs/raw/사용자요구/2026-10-05_수정요구.md b/docs/raw/사용자요구/2026-10-05_수정요구.md new file mode 100644 index 000000000..eec77747b --- /dev/null +++ b/docs/raw/사용자요구/2026-10-05_수정요구.md @@ -0,0 +1,31 @@ +# 수정 요구 — B05 · M01 · M02 · 공통 · 대시보드 · CAD (2026-10-05 · 원문 그대로) + +1. B05 종단설계 + - 계획노선 편집에서 거리 측정에서 예상노선/계획노선이 서로 가려져 포인트 찍기가 어려움. 첫번째 포인트에 따라 두번째 포인트의 지점을 찍을때 노선 선정 자동으로 반영 + - 계획노선 편집에서 횡단내용 하단부의 좌우 표고 및 원지반, 기본계획 횡단의 글자 사이즈를 현재의 절반수준으로 변경 + - 계획노선 편집에서 횡단 우측 측점 표기의 글자를 제목과 동일한 폰트 사이즈로 변경 + +2. M01 마스터 데이터 + - 단가산출 로직 항목의 상세 페이지에서 우측 패널(다이어그램, 상세내용)에 토글버튼으로 접었다 폈다 할수 있게. 템플릿 확인 후 반영 + - 단가산출 호직 항목의 상세페이지의 좌측 항목의 순서는 기본정보 > 시험계산 > 단가산출 상세 > 텍스트 수식 순으로 표기 + - 우측패널의 하나더 추가하여 기존에 있던 다이어그램, 상세내용 패널 하나와 추가 패널하나를 넣어주는데 두 패널은 트레이드 오프 관계로 하나가 보이면 하나는 닫힘. 둘다 닫을 수도 있음. 이때 추가된 패널에는 단가산출 로직의 원문과 연결하여 표현 + - 체인톱 가격이 수기입력으로 받고 있지만 이걸 자재품목에서 '동력체인톱'항목으로 연결되어야함.(기본값은 이름 순서상 제일 위에 값을 사용) + - 체인톱의 오일은 자재품목에서 '작동유'를 의미함. + +3. M02 마스터 템플릿 + - 일위대가 미리보기와 상세보기 내부의 셀 연결 후 표기가 셀 주소 = 수량 으로 표기됨. 이걸 수량(셀주소)형태로 변경 + - 단가산출 로직의 항목명 하단에 선택된 옵션 값을 명기해 줬는데 이게 내용이 많은 경우 줄바꿈에 의해 전체 행이 커지고 있음. 이값을 이름, 수량산출, 결과 단위, 누무비,, 재료비, 경비 , 합계에 걸쳐 입력 정보 표기 하기 + - 단가산출 로직의 항목들의 총합계 행에서 전체 합계 항목을 테두리와 색상으로 표현 + - 일위대가 상세에서 상단의 단위는 사용자가 드롭다운 메뉴에서 선택해서 변경 + - 일위대사 상세 페이지의 단가산출 로직 테이블에서 이름 열외에 추가로 사용자가 지정한 이름을 사용할 수 있게 별칭을 넣을 수 있게 열 추가 + +4. 페이지 공통양식 + - B05 페이지의 좌측 패널에서 좌측 패널의 구조물리스트와 초기화/저장/횡단(종단) 등의 버튼류는 상단 구분선을 기준으로 패널 하단에 고정하였는데 풀렸음. 다시 고정 + +5. 대시보드 + - 일위대가가 구조물 조합으로 편입되면서 시스템 설정 컨테이너의 일위대가 항목은 없어도됨. + +6. 내부 특수 앱 + - CAD 프로그램 : 한글입력 안됨. + +계획서를 작성하고 코드작업을 진행해줘. 난 이제 자리를 비워야하니까 참고해. From 10bc3686e2348cca2b58303c50926bf6d2fc3bd5 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 11:22:06 +0900 Subject: [PATCH 3/3] =?UTF-8?q?style(B05):=20=EA=B3=84=ED=9A=8D=EB=85=B8?= =?UTF-8?q?=EC=84=A0=20=ED=8E=B8=EC=A7=91=20=ED=9A=A1=EB=8B=A8=20=EA=B8=80?= =?UTF-8?q?=EC=9E=90=20=ED=81=AC=EA=B8=B0=20=EC=A1=B0=EC=A0=95=20(44-2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 원지반 · 기본 계획 횡단 · 좌우 표고 글자 11px → 5.5px(절반) - 측점 표기 글자 = 제목 「횡단」과 같은 크기(inherit) - 화면 시나리오 resources/tester/ui_checks/44-2_횡단_글자.js 추가 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013rJwJMVL4EE31y77TB11AP --- .../B05_Profile_UI_Style_RouteEdit.css | 4 +- resources/tester/ui_checks/44-2_횡단_글자.js | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 resources/tester/ui_checks/44-2_횡단_글자.js diff --git a/B05_Profile/B05_Profile_UI_Style_RouteEdit.css b/B05_Profile/B05_Profile_UI_Style_RouteEdit.css index caa6c66c3..a7ebab158 100644 --- a/B05_Profile/B05_Profile_UI_Style_RouteEdit.css +++ b/B05_Profile/B05_Profile_UI_Style_RouteEdit.css @@ -187,7 +187,7 @@ .b05-routeedit__cross-station { color: var(--color-text-secondary); - font-size: var(--text-caption); + font-size: inherit; /* 44-2 — 제목(횡단)과 같은 크기 */ } /* 횡단 판 — 캔버스 그림이 아니라 **SVG 선**이다(2026-09-12 사용자 지시 ③). @@ -235,7 +235,7 @@ .b05-routeedit__cross-key { fill: var(--color-text-secondary, #94a3b8); - font-size: 11px; + font-size: 5.5px; /* 44-2 — 지금(11px)의 절반 */ } .b05-routeedit__cross-key.is-design { diff --git a/resources/tester/ui_checks/44-2_횡단_글자.js b/resources/tester/ui_checks/44-2_횡단_글자.js new file mode 100644 index 000000000..d5d0f35fc --- /dev/null +++ b/resources/tester/ui_checks/44-2_횡단_글자.js @@ -0,0 +1,72 @@ +/* 44-2 — B05 계획노선 편집 · 측점 횡단 글자 크기 + * 시작 화면: B05 종단설계(#/b05-profile) · 환경 검증 프로젝트(OWNERS.md) · 로그인됨 · 계획노선 편집 닫힘 + * 부르는 법: orca eval --expression "$(cat 이 파일)" (async 식 · JSON 글을 돌려줌) + * 하는 일: [계획노선 편집] 열기 → 첫 측점 라벨 누름(앱 모듈의 라벨 상자 자리) → 횡단 판 글자 잼 → [취소]로 닫음 + * 기대 수치: + * - keys = 원지반 · 기본 계획 횡단 · 「좌 … 표고 …」 셋 모두 fontSize 5.5px(옛 11px 의 절반) + * - station.fontSize = title.fontSize(측점 표기 = 제목 「횡단」 크기) + * - 바꾸는 값 없음(취소로 닫음 · 노선 안 고침) + */ +(async () => { + const w = (ms) => new Promise((r) => setTimeout(r, ms)); + const until = async (fn, ms = 15000) => { + for (let t = 0; t < ms; t += 200) { + const v = fn(); + if (v) return v; + await w(200); + } + return null; + }; + const btn = (text) => + [...document.querySelectorAll("button")].find( + (b) => b.offsetParent && b.textContent.trim() === text, + ); + btn("계획노선 편집")?.click(); + const canvas = await until(() => + [...document.querySelectorAll("canvas")].find( + (c) => c.offsetParent && c.closest("[class*='routeedit']"), + ), + ); + if (!canvas) return JSON.stringify({ ok: false, why: "편집 캔버스 없음" }); + // 앱이 실제로 부른 그 모듈 주소(@fs/<폴더>/…) — 같은 주소라야 라벨 상자 WeakMap 을 같이 씀 + const url = performance + .getEntriesByType("resource") + .map((e) => e.name) + .find((n) => n.includes("B05_Profile_UI_RouteEdit_Input.ts")); + const input = await import(url); + const boxes = await until(() => { + const b = input.stationLabelBoxes(canvas); + return b.length ? b : null; + }); + if (!boxes) return JSON.stringify({ ok: false, why: "측점 라벨 상자 없음" }); + const rect = canvas.getBoundingClientRect(); + const box = boxes[Math.floor(boxes.length / 2)]; + const at = { clientX: rect.left + box.x, clientY: rect.top + box.y, button: 0, bubbles: true }; + canvas.dispatchEvent(new PointerEvent("pointerdown", at)); + canvas.dispatchEvent(new PointerEvent("pointerup", at)); + const pane = await until(() => + [...document.querySelectorAll(".b05-routeedit__cross")].find((p) => + p.querySelector(".b05-routeedit__cross-key"), + ), + ); + if (!pane) return JSON.stringify({ ok: false, why: "횡단 판 안 뜸", chainage: box.chainage }); + const fs = (el) => el && getComputedStyle(el).fontSize; + const keys = [...pane.querySelectorAll(".b05-routeedit__cross-key")].map((t) => ({ + text: t.textContent.slice(0, 20), + fontSize: fs(t), + h: +t.getBoundingClientRect().height.toFixed(1), + })); + const title = pane.querySelector(".b05-routeedit__cross-title"); + const station = pane.querySelector(".b05-routeedit__cross-station"); + const out = { + keys, + title: { text: title.textContent, fontSize: fs(title) }, + station: { text: station.textContent, fontSize: fs(station) }, + }; + out.ok = + keys.length === 3 && + keys.every((k) => k.fontSize === "5.5px") && + out.title.fontSize === out.station.fontSize; + btn("취소")?.click(); + return JSON.stringify(out); +})();