조사 상세현황 배수방식·관종 명칭 표시

This commit is contained in:
kiminchan
2026-07-30 13:17:16 +09:00
parent 3cc0e9de14
commit 474676af17
5 changed files with 60 additions and 4 deletions
@@ -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에서 코드 대신 명칭이 출력되는지 확인한다.
@@ -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가 동일한 값을 사용하는 것이다.
@@ -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`
@@ -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;
@@ -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,