diff --git a/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/002-qa-SFR-010-004~007-조사사업-통합검증결과.md b/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/002-qa-SFR-010-004~007-조사사업-통합검증결과.md index 3f5506d48..2f50b3095 100644 --- a/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/002-qa-SFR-010-004~007-조사사업-통합검증결과.md +++ b/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/002-qa-SFR-010-004~007-조사사업-통합검증결과.md @@ -478,3 +478,21 @@ - 로그인된 실제 화면에서 최초 목록, 등록·수정, 결과등록과 상세 팝업을 한 번씩 진입한다. - 관로·맨홀 다운로드 파일의 시트 수와 화면·DB 집계값을 대조한다. - 과거 `sample=Y` 북마크가 존재하더라도 실제 API 화면으로 동작하는지 확인한다. + +## 30. 2026-07-30 배수방식·관종 명칭 표시 검증 + +| 검증 항목 | 결과 | 비고 | +| --- | --- | --- | +| 상세 응답 타입 | 반영 | 코드 2개와 명칭 2개를 함께 유지 | +| 화면 표시 우선순위 | 정적 확인 | 명칭 우선, 없으면 코드 | +| 고정 열 정렬 | 정적 확인 | 화면 표시 명칭 기준 | +| 클라이언트 상세 Excel | 정적 확인 | 배수방식·관종 명칭 기록 | +| 기존 상세표 구조 | 영향 없음 | 고정 열·결함 열·소계·합계 유지 | +| 변경 공백 검사 | 통과 | `git diff --check` | +| 대상 ESLint | 환경 제한 | pnpm 비대화형 설치 중단 및 eslint 모듈 접근 `EPERM` | + +### 남은 수동 확인 + +- 백엔드 재기동 후 관로·맨홀 상세표에서 `우수관`, `흉관(HP)` 명칭을 확인한다. +- 배수방식·관종 헤더 정렬이 표시 명칭 순으로 동작하는지 확인한다. +- 클라이언트 상세 Excel과 서버 다중 시트 Excel에서 코드 대신 명칭이 출력되는지 확인한다. diff --git a/apps/sn/docs/작업계획/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-작업카드.md b/apps/sn/docs/작업계획/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-작업카드.md index 47f8e42b4..a734dac40 100644 --- a/apps/sn/docs/작업계획/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-작업카드.md +++ b/apps/sn/docs/작업계획/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-작업카드.md @@ -263,3 +263,20 @@ - 종합집계 1개와 처리분구별 전체 상세 N개를 한 XLSX로 내려받으며 본단위구간은 통합 다운로드에서 제외한다. - 개발환경용 샘플 전환 버튼, `sample=Y` 분기와 `exmn-sample-data.ts`를 제거해 모든 화면이 실제 API만 사용한다. - 지도보기는 기존 결정대로 보류하며 현재 남은 프론트 기능 범위다. + +## 21. 2026-07-30 배수방식·관종 표시명 보완 설계 + +| 작업 단위 | 설계 내용 | +|---|---| +| API 타입 | 기존 `drainageType`, `pipeType` 코드를 유지하고 `drainageTypeName`, `pipeTypeName`을 추가 | +| 화면 표시 | 표시명을 우선 사용하고 표시명이 없으면 원본 코드로 fallback | +| 표시 형식 | 기본 표기는 `우수관`, `흉관(HP)`처럼 명칭만 사용 | +| 정렬 | 원본 코드가 아닌 실제 표시 문자열 기준 | +| 관로·맨홀 | 공통 고정정보 열에 동일한 변환 규칙 적용 | +| 엑셀 | 서버가 변환한 표시명을 사용하므로 프론트 별도 변환 없음 | + +- 지도 전용 `app/(map-layout)/map/components/common/table.ts`를 조사 기능에서 직접 import하지 않는다. +- 조사 상세 화면은 백엔드가 내려주는 명칭을 사용해 지도 화면 구조와 결합되지 않게 유지한다. +- `ExmnSurveyDetailPopupPage`의 데이터행과 정렬값은 `drainageTypeName || drainageType`, `pipeTypeName || pipeType`으로 구성한다. +- 미등록 코드도 빈칸으로 숨기지 않고 코드 원문을 표시한다. +- 완료 게이트는 관로·맨홀 전체·구조·운영 상세 화면에서 코드가 한글 명칭으로 표시되고, 명칭 정렬과 서버 XLSX가 동일한 값을 사용하는 것이다. diff --git a/apps/sn/docs/작업내용/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-통합구현기록.md b/apps/sn/docs/작업내용/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-통합구현기록.md index 45e1d56c7..f8f759e3f 100644 --- a/apps/sn/docs/작업내용/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-통합구현기록.md +++ b/apps/sn/docs/작업내용/SFR-010-004~SFR-010-007-조사사업/001-fe-SFR-010-004~007-조사사업-통합구현기록.md @@ -674,3 +674,16 @@ - 기능 범위의 `sampleMode`, `sample=`, `exmn-sample-data`, 샘플 식별자 런타임 참조는 0건이다. - 코드 추가 수정이 필요한 결함은 발견되지 않아 샘플 제거 변경분을 유지했다. - `git diff --check`는 통과했다. 로컬 TypeScript 모듈 접근은 기존 `EPERM` 환경 문제로 실행하지 못했고 전체 빌드는 사용자 요청에 따라 수행하지 않았다. + +## 34. 2026-07-30 배수방식·관종 명칭 표시 + +- 시설 상세 응답의 원본 코드 `drainageType`, `pipeType`과 표시 명칭 `drainageTypeName`, `pipeTypeName`을 함께 타입에 반영했다. +- 관로·맨홀 전체 상세표의 배수방식·관종 셀은 명칭을 우선 표시하고 명칭이 없으면 기존 코드를 표시한다. +- 고정 열 정렬도 원본 코드가 아니라 사용자에게 보이는 명칭을 기준으로 동작한다. +- 현재 화면 기준 상세 Excel 다운로드 역시 배수방식·관종 명칭을 기록한다. +- 기존 표 구조, 고정 열, 결함 열, 소계·합계와 조회 파라미터는 변경하지 않았다. + +### 수정 파일 + +- `src/features/exmn/model/exmn-detail-table.ts` +- `src/features/exmn/ui/ExmnSurveyDetailPopupPage.tsx` diff --git a/apps/sn/src/features/exmn/model/exmn-detail-table.ts b/apps/sn/src/features/exmn/model/exmn-detail-table.ts index f6b63c83e..4b937d4f9 100644 --- a/apps/sn/src/features/exmn/model/exmn-detail-table.ts +++ b/apps/sn/src/features/exmn/model/exmn-detail-table.ts @@ -22,7 +22,9 @@ export interface ExmnSurveyDetailRow { upstreamManhole: string; downstreamManhole: string; drainageType: string; + drainageTypeName: string; pipeType: string; + pipeTypeName: string; specification: string | number; extensionM: number; drivingDistanceM: number; diff --git a/apps/sn/src/features/exmn/ui/ExmnSurveyDetailPopupPage.tsx b/apps/sn/src/features/exmn/ui/ExmnSurveyDetailPopupPage.tsx index 20dd2a839..cf6d79bbd 100644 --- a/apps/sn/src/features/exmn/ui/ExmnSurveyDetailPopupPage.tsx +++ b/apps/sn/src/features/exmn/ui/ExmnSurveyDetailPopupPage.tsx @@ -108,6 +108,12 @@ const getFixedCellValue = ( row: ExmnSurveyDetailRow, columnId: ExmnDetailFixedColumnId, ) => { + if (columnId === "drainageType") { + return row.drainageTypeName?.trim() || row.drainageType; + } + if (columnId === "pipeType") { + return row.pipeTypeName?.trim() || row.pipeType; + } const value = row[columnId]; return typeof value === "number" ? formatNumber(value) : value; }; @@ -118,8 +124,8 @@ const compareFixedColumnValue = ( right: ExmnSurveyDetailRow, columnId: ExmnDetailFixedColumnId, ) => { - const leftValue = left[columnId]; - const rightValue = right[columnId]; + const leftValue = getFixedCellValue(left, columnId); + const rightValue = getFixedCellValue(right, columnId); if (typeof leftValue === "number" && typeof rightValue === "number") { return leftValue - rightValue; } @@ -603,8 +609,8 @@ export function ExmnSurveyDetailPopupPage({ pipeNo: row.pipeNo, upstreamManhole: row.upstreamManhole, downstreamManhole: row.downstreamManhole, - drainageType: row.drainageType, - pipeType: row.pipeType, + drainageType: row.drainageTypeName?.trim() || row.drainageType, + pipeType: row.pipeTypeName?.trim() || row.pipeType, specification: row.specification, extensionM: row.extensionM, drivingDistanceM: row.drivingDistanceM,