From a52dacf5000855765dfb4fb5ea98befdf8167c72 Mon Sep 17 00:00:00 2001 From: kiminchan Date: Mon, 27 Jul 2026 11:29:48 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A1=B0=EC=82=AC=EC=82=AC=EC=97=85=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=EC=9D=98=20=EC=82=AC=EC=97=85=EC=B0=A8?= =?UTF-8?q?=EC=88=98=20=EC=9E=85=EB=A0=A5=EA=B3=BC=20=ED=96=89=EC=A0=95?= =?UTF-8?q?=EA=B5=AC=EC=97=AD=20=EB=B0=B0=EC=B9=98=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/ctpvSggPrcsFcltSelectBox.tsx | 17 +++++---- .../001-qa-SFR-010-004~007-조사사업-통합검증계획.md | 18 ++++++++- .../002-qa-SFR-010-004~007-조사사업-통합검증결과.md | 13 ++++++- .../001-fe-SFR-010-004~007-조사사업-작업카드.md | 16 +++++++- .../001-fe-SFR-010-004~007-조사사업-통합구현기록.md | 32 ++++++++++++++-- .../exmn/lib/exmn-business-validation.ts | 2 +- .../exmn/ui/ExmnBusinessRegisterPopupPage.tsx | 37 ++++++++++++++----- .../windowPopup/model/popupDefinitions.ts | 2 +- 8 files changed, 112 insertions(+), 25 deletions(-) diff --git a/apps/sn/app/components/ui/ctpvSggPrcsFcltSelectBox.tsx b/apps/sn/app/components/ui/ctpvSggPrcsFcltSelectBox.tsx index 51eb5a166..238cf83ee 100644 --- a/apps/sn/app/components/ui/ctpvSggPrcsFcltSelectBox.tsx +++ b/apps/sn/app/components/ui/ctpvSggPrcsFcltSelectBox.tsx @@ -37,6 +37,8 @@ interface CtpvSggPrcsFcltSelectBoxProps { setSwtrmtFcltNm?: (name: string) => void; defaultSwtrmtFcltNm?: string; setIsLoading?: (isLoading: boolean) => void; + /** 좁은 조회·입력 행에서 시도·시군구 선택 폭과 간격을 줄여 표시한다. */ + compact?: boolean; } const defaultOption: ApiSelectOption = { val: '0', text: '전체' }; @@ -59,6 +61,7 @@ export function CtpvSggPrcsFcltSelectBox({ setSwtrmtFcltNm, defaultSwtrmtFcltNm, setIsLoading, + compact = false, }: CtpvSggPrcsFcltSelectBoxProps) { const [prcsFcltOptions, setPrcsFcltOptions] = useState([]); @@ -131,11 +134,11 @@ export function CtpvSggPrcsFcltSelectBox({ ]); return ( -
- +
+ - + opt.val.startsWith(sidoPrefix))]} value={sigungu} diff --git a/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/001-qa-SFR-010-004~007-조사사업-통합검증계획.md b/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/001-qa-SFR-010-004~007-조사사업-통합검증계획.md index c021a89e1..b872b8e17 100644 --- a/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/001-qa-SFR-010-004~007-조사사업-통합검증계획.md +++ b/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/001-qa-SFR-010-004~007-조사사업-통합검증계획.md @@ -65,7 +65,8 @@ | 사업등록 | 필수값·연도·음수·처리분구 미선택 | 저장 전 항목별 오류 표시 | | 처리분구 | 행정구역 선택/변경 | 같은 지역 `useYn=Y` 후보 조회, 이전 선택 초기화 | | 양식 | 저장 전/후 `양식 받기` | 저장 전 안내, 저장 후 생성과 다운로드를 한 번에 수행 | -| 사업등록 입력 | 사업등록 popup 확인 | 첫 줄에 사업년도·시도·시군구·정밀조사연장이 표시되고 연장 라벨은 한 줄 유지 | +| 사업등록 입력 | 사업등록 popup 확인 | 첫 줄에 사업차수·사업년도·시도·시군구·정밀조사연장, 둘째 줄에 사업명 표시 | +| 사업차수 | 빈 값·0·소수·양의 정수 입력 후 저장 | 1 이상의 정수만 허용하고 입력값을 `bizCycl`로 전달 | | 처리분구 목록 | 처리분구 후보가 많은 사업등록 popup | 3열 7행 21개까지 표시하고 22개부터 목록 내부 세로 스크롤 | | 정밀조사연장 | 입력칸 확인·숫자 입력 | 증감 스피너 없음, 숫자·소수점만 입력, 최대 10자 폭 | | 결과등록 요약 | 결과등록 popup 진입 | 사업차수·사업년도·행정구역·사업명 순서로 적정 간격을 두고 한 줄 표시 | @@ -133,7 +134,7 @@ | 상세 스크롤 | 처리분구 10행을 위아래로 스크롤 | 헤더 고정, 다음 행 일부 노출 없음, 경계선 유지 | | 페이지 높이 | 상세 표시 전후·Footer 높이 변화·화면 이탈 확인 | 문서 전체 세로 스크롤 없음, 내부 스크롤 사용, 이탈 시 overflow 복원 | | 공통 회귀 | 다른 BaseLayout 화면 진입 | 공통 Header·Footer와 레이아웃 동작 변화 없음 | -| 팝업 회귀 | 사업등록·결과등록 WindowPopup 재진입 | 확정된 팝업 크기·배치·버튼·처리분구·파일행 디자인 유지 | +| 팝업 회귀 | 사업등록·결과등록 WindowPopup 재진입 | 사업등록 `1000×620`, 결과등록 기존 크기·버튼·처리분구·파일행 디자인 유지 | - 상세보기·다운로드 실제 동작, 지도 이동, 실 API 성공 응답은 이번 화면 회귀의 완료 범위에 포함하지 않는다. @@ -199,3 +200,16 @@ - 실제 다운로드 파일은 Excel에서 열어 헤더, 병합 범위, 소계·합계와 한글 파일명을 대조한다. - 실제 API 연결 후에는 샘플과 동일한 조건으로 JSONB 코드·점수·단위구간 매핑을 재검증한다. + +## 15. 사업등록 사업차수·행정구역 배치 보완 검증 계획 + +| 검증 항목 | 방법 | 기대 결과 | +| --- | --- | --- | +| 입력 순서 | 사업등록 팝업 첫째·둘째 줄 확인 | 첫 줄 5개 조건과 둘째 줄 사업명이 확정 순서로 표시 | +| 사업차수 기본값 | 일반·`sample=Y` 각각 진입 | 일반 1, 샘플 3 표시 | +| 사업차수 검증 | 빈 값·0·소수·양의 정수 저장 | 1 이상의 정수만 저장 가능 | +| 행정구역 명칭 | 강원특별자치도·대구광역시·긴 시군구 선택 | 선택값이 말줄임·잘림 없이 확인 가능 | +| 간격 | 첫 줄 전체 항목 비교 | 항목 묶음 사이 20px 고정 간격, 과도한 균등 분산 없음 | +| 공통 회귀 | `compact` 미지정 기존 화면 확인 | 기존 시도·시군구 폭과 간격 유지 | +| 팝업 크기 | 새 창 외곽·본문 확인 | `1000×620`, 세로 구성과 처리분구 영역 유지 | +| 정적 검사 | 프론트 저장소 `git diff --check` | 공백 오류 없음 | 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 68e6cf9dd..16606209f 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 @@ -158,7 +158,7 @@ - 공통 `UiTable`의 `noOuterMargin`과 선택 행 상태는 소스에 남아 있으나 조사사업 목록·상세현황 최종 표는 병합·클릭·스크롤 제어를 위해 직접 구성한 테이블임을 확인했다. - `components.css`의 의미 있는 diff가 제거됐고 조사 그리드 gutter는 두 화면 컴포넌트에만 인라인으로 적용된다. - 완료 화면 캡처와 대조해 `tailwind.config.ts`의 `./src/**/*` 누락이 결과등록 grid와 사업등록 임의 폭 클래스 미생성 원인임을 확인했다. 스캔 경로를 복구하고 핵심 grid·폭을 인라인 스타일로 이중 고정했다. -- 사업등록은 `920×620`, 처리분구 `21rem`, 사업명 최대 `480px`; 결과등록은 `980×340`, 사업요약 4열과 파일행 `180px / 가변 / 80px / 112px` 계약으로 복구했다. +- 사업등록은 당시 `920×620`, 처리분구 `21rem`, 사업명 최대 `480px`; 결과등록은 `980×340`, 사업요약 4열과 파일행 `180px / 가변 / 80px / 112px` 계약으로 복구했다. 사업등록의 현재 가로 폭은 16절의 사업차수 입력 보완으로 `1000px`다. - 사용자의 로그인된 실제 화면 최종 확인으로 행 전체 선택, 관로·맨홀 전환, 목록·상세 배치와 상세 집계 표시를 완료 판정했다. - 남은 검증은 실 API/백엔드 연동과 후속 상세보기·다운로드 구현이다. 지도보기는 보류다. @@ -224,3 +224,14 @@ - 로컬 TypeScript compiler는 기존 샌드박스 `EPERM` 이력에 따라 별도 실행하지 않았다. - 실제 서버 JSONB 데이터 연결과 코드·점수·단위구간 매핑 검증은 백엔드 연동 단계의 후속 항목이다. - 지도보기는 보류 범위로 이번 검증 대상에 포함하지 않았다. + +## 16. 2026-07-27 사업등록 사업차수·행정구역 배치 보완 검증 결과 + +- 사업차수 입력 상태가 추가되고 기존 고정 `bizCycl: 1` 대신 입력값을 저장 요청에 전달하는 소스를 확인했다. +- 검증 함수가 사업차수를 1 이상의 정수로 제한하도록 변경된 것을 확인했다. +- 첫 줄을 `사업차수 → 사업년도 → 시도 → 시군구 → 정밀조사연장`, 둘째 줄을 `사업명`으로 구성했다. +- 과도한 `justify-between` 배치를 제거하고 항목 묶음 사이를 20px 고정 간격으로 조정했다. +- 시도 180px, 시군구 144px와 사업등록 WindowPopup `1000×620` 설정을 확인했다. +- 공통 행정구역 컴포넌트의 `compact` 기본값이 `false`여서 기존 호출 화면에는 새 폭이 자동 적용되지 않는다. +- 변경 파일을 포함한 프론트 저장소 `git diff --check`를 통과했다. +- 로그인되지 않은 브라우저에서는 사업등록 경로가 로그인 화면으로 이동해 최종 팝업 시각 확인을 수행하지 못했다. 사용자 화면 확인을 최종 완료 조건으로 유지한다. 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 6d6c26171..47623158c 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 @@ -101,7 +101,7 @@ - 사업년도는 단일 연도 선택, 시도·시군구는 I/I 공통 지역 선택으로 동작하며 양평에 고정되지 않는지 확인한다. - 사업명 입력 폭과 목록 열 순서·단위가 사용자 확정안과 일치하는지 확인한다. - 사업등록 WindowPopup의 행정구역 연동 처리분구 체크 선택·가나다순과 저장 전 검증을 확인한다. -- 사업등록 WindowPopup은 콘텐츠 창 `920×620` 안에서 5개 입력만 순서대로 표시하고, 별도 닫기·양식 생성 버튼 없이 저장·양식 받기·조사보고서 양식을 제공하는지 확인한다. +- 사업등록 WindowPopup은 콘텐츠 창 `1000×620` 안에서 첫 줄에 `사업차수·사업년도·시도·시군구·정밀조사연장`, 둘째 줄에 `사업명`을 표시하고, 별도 닫기·양식 생성 버튼 없이 저장·양식 받기·조사보고서 양식을 제공하는지 확인한다. - 결과등록 WindowPopup의 파일 5종, 행별 찾기·데이터 검토, 검토 정상 전 저장 비활성을 확인한다. - `/oper/exmn/register?sample=Y`에서만 샘플 사업과 팝업 샘플 상태가 보이고 일반 URL은 실제 API 계약을 유지하는지 확인한다. - 상단에 설계되지 않은 `PPL 집계·상세` 직접 버튼이 표시되지 않는지 확인한다. @@ -224,3 +224,17 @@ - 공통 비즈니스 컴포넌트, API, DTO, DB는 변경하지 않는다. - 프론트 완료 게이트는 전체 상세보기 회귀, 본단위구간 전체/검색 조회, 구조·운영 결함별 간소화 화면과 현재 화면 기준 엑셀 생성이다. - 실제 API·JSONB 매핑과 다운로드 파일의 업무 데이터 대조는 백엔드 연동 단계에서 수행한다. + +## 18. 2026-07-27 사업등록 입력 계약·배치 보완 + +| 구분 | 확정 내용 | +| --- | --- | +| 입력 순서 | 첫 줄 `사업차수 → 사업년도 → 시도 → 시군구 → 정밀조사연장`, 둘째 줄 `사업명` | +| 사업차수 | 사용자 입력, 1 이상의 정수 검증, 일반 기본값 1·샘플 기본값 3 | +| 행정구역 | 기존 `CtpvSggPrcsFcltSelectBox`에 기본값 `false`인 `compact` 옵션 추가 | +| 입력 폭 | 시도 180px, 시군구 144px, 정밀조사연장 96px | +| 입력 간격 | 첫 줄 입력 묶음 사이 20px, 묶음 내부 라벨·입력 사이 8px | +| 팝업 크기 | `1000×620` | + +- `compact`를 지정하지 않은 기존 시도·시군구 사용 화면은 기존 폭과 간격을 유지한다. +- 이번 변경은 기존 `bizCycl` 요청 필드를 실제 사용자 입력값으로 전환한 프론트 보완이며 API 필드명과 DB 컬럼은 변경하지 않는다. 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 a7a293f0a..a71959009 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 @@ -178,7 +178,7 @@ - 사업등록 popup definition을 `1180×820`에서 `920×620`으로 축소하고 불필요한 하단 여백을 줄였다. - 상단 `닫기`, `양식 생성`을 제거했다. `양식 받기`는 사업 저장 후 양식 생성과 다운로드를 한 번에 수행한다. - `양식 받기`, `조사보고서 양식`은 기존 엑셀 다운로드 버튼의 전역 `green` 스타일과 흰색 글자를 사용한다. -- 화면 입력은 5개만 노출하고 첫 줄에 `사업년도·시도·시군구·정밀조사연장`, 둘째 줄에 `사업명`을 배치한다. API 필수 계약인 사업차수와 총사업비는 신규 기본값 `1`, `0`으로 전달한다. +- 당시 화면 입력은 5개만 노출하고 사업차수와 총사업비를 신규 기본값 `1`, `0`으로 전달했다. 사업차수 입력과 최종 배치는 14절의 2026-07-27 보완안으로 대체한다. - Radix Select의 서버·클라이언트 ID 불일치를 막기 위해 사업등록·결과등록 WindowPopup content를 client mount 이후 렌더링한다. - 개발 환경의 목록 헤더에 `샘플 데이터 보기`를 제공한다. 이 버튼은 URL에 `sample=Y`를 명시해 기존 격리 원칙을 유지하며, 사업목록과 처리분구 샘플을 함께 활성화한다. - 사용자 재확인에 따라 팝업의 `샘플 화면` 배지를 제거하고 처리분구 목록을 고정 높이 `21rem`으로 확장했다. 3열 7행으로 21개까지 한 번에 표시하고 초과 후보는 목록 내부 세로 스크롤로 확인한다. @@ -265,7 +265,7 @@ - 목록과 상세의 `scrollbar-gutter: stable`은 각 스크롤 컨테이너의 인라인 스타일로 옮겨 조사관리 그리드에만 적용한다. - 회귀의 직접 원인은 `tailwind.config.ts`에서 `./src/**/*` 스캔 경로가 빠져 `src/features`의 `grid-cols-[...]`, `max-w-[480px]` 등 임의값 클래스가 생성되지 않은 것이다. - `./src/**/*`를 다시 추가하고, 결과등록의 사업요약·파일행 열은 인라인 `gridTemplateColumns`, 사업등록의 사업명 폭은 인라인 `maxWidth`로도 고정해 스캔 누락 시 레이아웃이 무너지지 않게 했다. -- 사업등록 popup은 확정 크기 `920×620`, 처리분구 영역 `21rem`으로 복구했다. 결과등록은 `980×340`을 유지한다. +- 사업등록 popup은 당시 확정 크기 `920×620`, 처리분구 영역 `21rem`으로 복구했다. 이후 사업차수 입력과 긴 행정구역명 표시를 위해 14절에서 가로 폭만 `1000px`로 보완했다. 결과등록은 `980×340`을 유지한다. - 따라서 조사사업 목록·상세의 폭 정렬은 유지하면서 WindowPopup의 기존 확정 디자인에는 전역 CSS 변경이 전파되지 않는다. ### 9.15 조사사업 목록 사업보고서 직접 다운로드 @@ -285,7 +285,7 @@ - `app/components/lib/utils/fileUploadUtil.tsx`: Tus 업로드 실패를 화면 Promise reject로 전달하는 `handleError` 콜백을 추가했다. - `src/app/styles/components.css`: 조사사업 전용 `sn-exmn-grid-scroll`을 제거해 Git 기준 전역 스타일 내용으로 복구했다. `git status`에 줄바꿈/작업트리 표시는 남을 수 있으나 의미 있는 CSS diff는 없다. - `src/features/exmn/index.ts`: 사업 API·검증·타입·등록/현황 화면 공개 export를 추가했다. -- `src/features/windowPopup/model/popupDefinitions.ts`: 사업등록 `920×620`, 결과등록 `980×340` popup 정의를 추가했다. +- `src/features/windowPopup/model/popupDefinitions.ts`: 사업등록은 현재 `1000×620`, 결과등록은 `980×340` popup 정의를 사용한다. - `src/features/windowPopup/model/types.ts`: 사업 생성·결과 확정 opener 메시지 타입을 추가했다. - `src/features/windowPopup/registry.tsx`: 조사사업 popup content 2종을 registry에 등록했다. - `tailwind.config.ts`: `./src/**/*`를 content에 포함해 조사사업 popup의 grid·임의 폭 클래스 생성을 복구했다. @@ -388,3 +388,29 @@ - `src/features/exmn/ui/ExmnPplUnitDetailTable.tsx` - 백엔드 코드·API·DTO·DB와 공통 비즈니스 컴포넌트는 변경하지 않았다. - 후속 실제 연동에서는 기존 `PPL_UNIT_V1`, `MNHL_COUNT_V1` JSONB 값을 현재 화면 모델과 코드 기준으로 매핑한다. + +## 14. 2026-07-27 사업등록 사업차수 입력·행정구역 배치 보완 + +### 14.1 입력과 저장 계약 + +- 기존 고정값 `bizCycl: 1`을 제거하고 사업차수 입력 상태를 추가했다. +- 일반 등록은 1차, `sample=Y`는 대표 사업과 맞는 3차를 기본값으로 표시한다. +- 사업차수는 숫자 최대 3자리만 입력할 수 있고 저장 시 1 이상의 정수인지 검증한다. +- 저장 요청은 입력한 사업차수를 기존 `ExmnBusinessSaveRequest.bizCycl`에 전달한다. +- 총사업비는 화면 입력 대상이 아니므로 기존처럼 `tpco: 0`을 전달한다. + +### 14.2 최종 화면 배치 + +- 첫 줄은 `사업차수 → 사업년도 → 시도 → 시군구 → 정밀조사연장`, 둘째 줄은 `사업명` 순서다. +- 첫 줄의 항목 묶음은 왼쪽부터 20px 고정 간격으로 배치해 남는 폭이 항목 사이로 과도하게 분산되지 않게 했다. +- 시도는 180px, 시군구는 144px로 표시해 `강원특별자치도` 같은 긴 명칭을 확인할 수 있게 했다. +- 기존 행정구역 공통 컴포넌트에는 `compact` 옵션을 추가하되 기본값을 `false`로 두어 다른 화면의 크기와 간격은 변경하지 않는다. +- 사업등록 WindowPopup 가로 폭은 한 줄 배치를 위해 `920px`에서 `1000px`로 넓혔고 높이는 `620px`를 유지한다. + +### 14.3 변경 파일과 영향 + +- `app/components/ui/ctpvSggPrcsFcltSelectBox.tsx` +- `src/features/exmn/lib/exmn-business-validation.ts` +- `src/features/exmn/ui/ExmnBusinessRegisterPopupPage.tsx` +- `src/features/windowPopup/model/popupDefinitions.ts` +- 백엔드 API 경로·필드명·DB 구조는 변경하지 않는다. diff --git a/apps/sn/src/features/exmn/lib/exmn-business-validation.ts b/apps/sn/src/features/exmn/lib/exmn-business-validation.ts index 5f7320794..271a6afdc 100644 --- a/apps/sn/src/features/exmn/lib/exmn-business-validation.ts +++ b/apps/sn/src/features/exmn/lib/exmn-business-validation.ts @@ -19,7 +19,7 @@ export const EXMN_FILE_RULES: Record { if (!/^\d{4}$/.test(request.bizYr)) return "사업연도는 4자리 숫자로 입력해주세요."; if (!request.bizNm.trim()) return "사업명을 입력해주세요."; - if (!Number.isInteger(request.bizCycl) || request.bizCycl < 0) return "사업차수는 0 이상의 정수로 입력해주세요."; + if (!Number.isInteger(request.bizCycl) || request.bizCycl < 1) return "사업차수는 1 이상의 정수로 입력해주세요."; if (!request.ctpvNm || !request.sggNm) return "시도와 시군구를 선택해주세요."; if (!Number.isFinite(request.prcisExmnPrlg) || request.prcisExmnPrlg < 0) return "정밀조사연장은 0 이상이어야 합니다."; if (!Number.isFinite(request.tpco) || request.tpco < 0) return "총사업비는 0 이상이어야 합니다."; diff --git a/apps/sn/src/features/exmn/ui/ExmnBusinessRegisterPopupPage.tsx b/apps/sn/src/features/exmn/ui/ExmnBusinessRegisterPopupPage.tsx index 0ed3f3597..2417cb17a 100644 --- a/apps/sn/src/features/exmn/ui/ExmnBusinessRegisterPopupPage.tsx +++ b/apps/sn/src/features/exmn/ui/ExmnBusinessRegisterPopupPage.tsx @@ -49,6 +49,8 @@ const saveBlob = (blob: Blob, fileName: string) => { /** 공통 WindowPopup 안에서 사업정보·대상 처리분구·조사양식을 등록하는 화면이다. */ export function ExmnBusinessRegisterPopupPage({ sampleMode }: ExmnBusinessRegisterPopupPageProps) { const { ctpv, sgg, fetchCtpv, fetchSgg } = useStore(); + /** 사업 확장 시 등록자가 직접 지정할 수 있도록 저장 요청에 전달하는 사업차수다. */ + const [bizCycl, setBizCycl] = useState(sampleMode ? "3" : "1"); const [bizYr, setBizYr] = useState(String(new Date().getFullYear())); const [bizNm, setBizNm] = useState(sampleMode ? "2026년 양평군 노후 하수관로 정밀조사사업" : ""); const [ctpvCd, setCtpvCd] = useState("0"); @@ -158,11 +160,11 @@ export function ExmnBusinessRegisterPopupPage({ sampleMode }: ExmnBusinessRegist const buildRequest = (): ExmnBusinessSaveRequest => ({ bizYr: bizYr.trim(), bizNm: bizNm.trim(), - // 사업차수와 총사업비는 현재 등록 화면 입력 대상이 아니므로 신규 기본값으로 전달한다. - bizCycl: 1, + bizCycl: Number(bizCycl), ctpvNm, sggNm, prcisExmnPrlg: Number(prcisExmnPrlg), + // 총사업비는 현재 등록 화면 입력 대상이 아니므로 신규 기본값으로 전달한다. tpco: 0, trtdstIds: selectedDistrictIds, }); @@ -279,18 +281,35 @@ export function ExmnBusinessRegisterPopupPage({ sampleMode }: ExmnBusinessRegist
사업정보 입력
-
+
+
+ + { + if (/^\d{0,3}$/.test(event.target.value)) setBizCycl(event.target.value); + }} + /> +
setBizYr(String(value))} /> -
- +
+