feat: 하수맨홀, 하수펌프장, 우수토실 시도, 시군구 조회 조건 및 컬럼 추가

This commit is contained in:
swcho
2025-08-12 11:33:09 +09:00
parent a3325b104d
commit 98d4de2938
6 changed files with 117 additions and 40 deletions
@@ -392,6 +392,8 @@ export const MsSwageMhlCol2 = [
// { id: 'geom', title: 'geometry' },
// { id: 'ftreSmbolCd', title: '지형지물부호코드' },
{ id: 'fcltMngNo', title: '시설관리번호' },
{ id: 'ctpvNm', title: '시도' },
{ id: 'sggNm', title: '시군구' },
// { id: 'pbadmsEmdCd', title: '행정읍면동코드' },
// { id: 'mapshtNo', title: '도엽번호' },
// { id: 'mngInstCd', title: '관리기관코드' },
@@ -500,12 +502,14 @@ export const ExclnSewagePumpCol2 = [
// { id: 'geom', title: 'geometry' },
// { id: 'ftreSmbolCd', title: '지형지물부호코드' },
{ id: 'fcltMngNo', title: '시설관리번호' },
{ id: 'ctpvNm', title: '시도' },
{ id: 'sggNm', title: '시군구' },
// { id: 'pbadmsEmdCd', title: '행정읍면동코드' },
// { id: 'mapshtNo', title: '도엽번호' },
// { id: 'mngInstCd', title: '관리기관코드' },
{ id: 'instlYmd', title: '설치일자' },
{ id: 'swagePmstnNm', title: '하수펌프장명' },
{ id: 'pllnArea', title: '부지면적(m²)' },
{ id: 'instlYmd', title: '설치일자' },
// { id: 'pllnArea', title: '부지면적(m²)' },
// { id: 'opngSttsCd', title: '개통상태코드' },
// { id: 'usgCd', title: '용도코드' },
{ id: 'dailyPrcsCpct', title: '일일처리용량(㎥)' },
@@ -543,11 +547,13 @@ export const DrtwSewagePumpCol2 = [
// { id: 'ftreSmbolCd', title: '지형지물부호코드' },
{ id: 'fcltMngNo', title: '시설관리번호' },
// { id: 'pbadmsEmdCd', title: '행정읍면동코드' },
{ id: 'mapshtNo', title: '도엽번호' },
// { id: 'mapshtNo', title: '도엽번호' },
{ id: 'ctpvNm', title: '시도' },
{ id: 'sggNm', title: '시군구' },
// { id: 'mngInstCd', title: '관리기관코드' },
{ id: 'instlYmd', title: '설치일자' },
{ id: 'swagePmstnNm', title: '하수펌프장명' },
{ id: 'pllnArea', title: '부지면적(m²)' },
{ id: 'instlYmd', title: '설치일자' },
// { id: 'pllnArea', title: '부지면적(m²)' },
// { id: 'opngSttsCd', title: '개통상태코드' },
// { id: 'usgCd', title: '용도코드' },
{ id: 'dailyPrcsCpct', title: '일일처리용량(㎥)' },
@@ -589,6 +595,8 @@ export const stofcbrCol2 = [
{ id: 'fcltMngNo', title: '시설관리번호' },
// { id: 'pbadmsEmdCd', title: '행정읍면동코드' },
{ id: 'mapshtNo', title: '도엽번호' },
{ id: 'ctpvNm', title: '시도' },
{ id: 'sggNm', title: '시군구' },
// { id: 'mngInstCd', title: '관리기관코드' },
{ id: 'instlYmd', title: '설치일자' },
// { id: 'fcltyShpCd', title: '시설물형태코드' },
@@ -7,6 +7,7 @@ import SwagePrcsFclt from './swagePrcsFclt';
import SwagePrcsZone from './swagePrcsZone';
import SwageMhl from './swageMhl';
import SwagePmstn from './swagePmstn';
import Stofcbr from './stofcbr';
// 기본정보 '구분' 선택 목록
export const BASIC_TYPES = [
@@ -156,10 +157,14 @@ const BasicTab: React.FC<BasicTabProps> = ({
var1={var1}
start1={start1}
end1={end1}
city={city}
sgg={sgg}
yearFilter={yearFilter}
setVar1={setVar1}
setStart1={setStart1}
setEnd1={setEnd1}
setCity={setCity}
setSgg={setSgg}
setYearFilter={setYearFilter}
handleSearch={handleSearch}
/>
@@ -171,33 +176,30 @@ const BasicTab: React.FC<BasicTabProps> = ({
start2={start2}
end1={end1}
end2={end2}
city={city}
sgg={sgg}
yearFilter={yearFilter}
setStart1={setStart1}
setStart2={setStart2}
setEnd1={setEnd1}
setEnd2={setEnd2}
setCity={setCity}
setSgg={setSgg}
setYearFilter={setYearFilter}
handleSearch={handleSearch}
/>
)}
{/* 분기처리: 우수토실 */}
{basicType === "tb_ms_stofcbr" && (
<div className="mb-3">
{/* 설치년도 */}
<div className="flex items-center mb-2">
<YearRangeSelectBox
start={yearFilter.start}
end={yearFilter.end}
onChange={range => setYearFilter({ ...yearFilter, start: range.start, end: range.end })}
startLabel="설치년도"
endLabel=""
/>
{/* 조회 버튼 */}
<div className="flex-1 flex justify-end">
<Button className="text-base py-2" onClick={handleSearch}>조회</Button>
</div>
</div>
</div>
<Stofcbr
city={city}
sgg={sgg}
yearFilter={yearFilter}
setCity={setCity}
setSgg={setSgg}
setYearFilter={setYearFilter}
handleSearch={handleSearch}
/>
)}
</div>
);
@@ -305,8 +305,8 @@ const SearchModal: React.FC<SearchModalProps> = ({
// 추후 작성 예정
if (var1) cqlFilters.push(`usg_cd='${var1}'`);
if (var2) cqlFilters.push(`mqlt_cd='${var2}'`);
if (ctpvCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${ctpvCd.trim()}%'`);
if (ctpvCd !== '0' && sggCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${sggCd}%'`);
else if (ctpvCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${ctpvCd.trim()}%'`);
// 설치년도 범위
const startDate = getDateString(
yearFilter.start,
@@ -383,6 +383,9 @@ const SearchModal: React.FC<SearchModalProps> = ({
// 하수맨홀용 CQL 필터 생성
const mhCqlFilters = () => {
const cqlFilters: string[] = [];
// 시도, 시군구
if (ctpvCd !== '0' && sggCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${sggCd}%'`);
else if (ctpvCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${ctpvCd.trim()}%'`);
// // 설치년도 범위
const startDate = getDateString(
yearFilter.start,
@@ -410,6 +413,9 @@ const SearchModal: React.FC<SearchModalProps> = ({
// 하수펌프장용 CQL 필터 생성
const psmtnCqlFilters = () => {
const cqlFilters: string[] = [];
// 시도, 시군구
if (ctpvCd !== '0' && sggCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${sggCd}%'`);
else if (ctpvCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${ctpvCd.trim()}%'`);
// 설치년도 범위
const startDate = getDateString(
yearFilter.start,
@@ -442,6 +448,9 @@ const SearchModal: React.FC<SearchModalProps> = ({
// 우수토실용 CQL 필터 생성
const otflCqlFilters = () => {
const cqlFilters: string[] = [];
// 시도, 시군구
if (ctpvCd !== '0' && sggCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${sggCd}%'`);
else if (ctpvCd !== '0') cqlFilters.push(`pbadms_emd_cd LIKE '${ctpvCd.trim()}%'`);
// 설치년도 범위
const startDate = getDateString(
yearFilter.start,
@@ -711,10 +720,10 @@ const SearchModal: React.FC<SearchModalProps> = ({
open={open}
onOpenChange={onOpenChange}
bodyClass={`
h-[100vh]
w-[60vw]
max-w-[100vw]
max-h-[100vh]
h-[100dvh]
w-[60dvw]
max-w-[100dvw]
max-h-[100dvh]
overflow-hidden
z-[101]
`}
@@ -3,32 +3,53 @@
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { Button } from '@common/components';
import React from 'react';
import { CtpvSggPrcsFcltSelectBox } from '@/components/ui/ctpvSggPrcsFcltSelectBox';
interface StofcbrProps {
city: string;
sgg: string;
yearFilter: { start: string; end: string };
setCity: (value: string) => void;
setSgg: (value: string) => void;
setYearFilter: (filter: { start: string; end: string }) => void;
handleSearch: () => void;
}
const Stofcbr: React.FC<StofcbrProps> = ({
city,
sgg,
yearFilter,
setCity,
setSgg,
setYearFilter,
handleSearch,
}) => {
return (
<div className="mb-3">
{/* 설치년도 */}
<div className="flex items-center mb-2">
<YearRangeSelectBox
start={yearFilter.start}
end={yearFilter.end}
onChange={range => setYearFilter({ ...yearFilter, start: range.start, end: range.end })}
startLabel="설치년도"
endLabel=""
{/* 시도, 시군구 */}
<CtpvSggPrcsFcltSelectBox
sido={city}
sigungu={sgg}
onSidoChange={(sidoId: string) => {
setCity(sidoId);
setSgg("0");
}}
onSigunguChange={setSgg}
/>
{/* 조회 버튼 */}
<div className="flex-1 flex justify-end">
<Button className="text-base py-2" onClick={handleSearch}>조회</Button>
{/* 설치년도 */}
<div className="flex items-center mb-2">
<YearRangeSelectBox
start={yearFilter.start}
end={yearFilter.end}
onChange={range => setYearFilter({ ...yearFilter, start: range.start, end: range.end })}
startLabel="설치년도"
endLabel=""
/>
{/* 조회 버튼 */}
<div className="flex-1 flex justify-end">
<Button className="text-base py-2" onClick={handleSearch}>조회</Button>
</div>
</div>
</div>
</div>
@@ -5,16 +5,21 @@ import { Button, Input, Label } from '@common/components';
import React from 'react';
import { MS_SWAGE_MHL_USE_CODES } from '../components/common/table';
import { SelectBox } from '@common/business_components/ui';
import { CtpvSggPrcsFcltSelectBox } from '@/components/ui/ctpvSggPrcsFcltSelectBox';
interface SwageMhlProps {
var1: string;
start1: string;
end1: string;
city: string;
sgg: string;
yearFilter: { start: string; end: string };
setVar1: (value: string) => void;
setStart1: (value: string) => void;
setEnd1: (value: string) => void;
setCity: (value: string) => void;
setSgg: (value: string) => void;
setYearFilter: (filter: { start: string; end: string }) => void;
handleSearch: () => void;
}
@@ -23,10 +28,14 @@ const SwageMhl: React.FC<SwageMhlProps> = ({
var1,
start1,
end1,
city,
sgg,
yearFilter,
setVar1,
setStart1,
setEnd1,
setCity,
setSgg,
setYearFilter,
handleSearch,
}) => {
@@ -34,6 +43,15 @@ const SwageMhl: React.FC<SwageMhlProps> = ({
return (
<div className="mb-3">
<div className="mb-2 flex items-center">
<CtpvSggPrcsFcltSelectBox
sido={city}
sigungu={sgg}
onSidoChange={(sidoId: string) => {
setCity(sidoId);
setSgg("0");
}}
onSigunguChange={setSgg}
/>
{/* 설치년도 */}
<YearRangeSelectBox
start={yearFilter.start}
@@ -3,17 +3,22 @@
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { Button, Input, Label } from '@common/components';
import React from 'react';
import { CtpvSggPrcsFcltSelectBox } from '@/components/ui/ctpvSggPrcsFcltSelectBox';
interface SwagePmstnProps {
start1: string;
start2: string;
end1: string;
end2: string;
city: string;
sgg: string;
yearFilter: { start: string; end: string };
setStart1: (value: string) => void;
setStart2: (value: string) => void;
setEnd1: (value: string) => void;
setEnd2: (value: string) => void;
setCity: (value: string) => void;
setSgg: (value: string) => void;
setYearFilter: (filter: { start: string; end: string }) => void;
handleSearch: () => void;
}
@@ -23,11 +28,15 @@ const SwagePmstn: React.FC<SwagePmstnProps> = ({
start2,
end1,
end2,
city,
sgg,
yearFilter,
setStart1,
setStart2,
setEnd1,
setEnd2,
setCity,
setSgg,
setYearFilter,
handleSearch,
}) => {
@@ -35,6 +44,16 @@ const SwagePmstn: React.FC<SwagePmstnProps> = ({
return (
<div className="mb-3">
<div className="flex items-center mb-2">
{/* 시도, 시군구 */}
<CtpvSggPrcsFcltSelectBox
sido={city}
sigungu={sgg}
onSidoChange={(sidoId: string) => {
setCity(sidoId);
setSgg("0");
}}
onSigunguChange={setSgg}
/>
{/* 설치년도 */}
<YearRangeSelectBox
start={yearFilter.start}
@@ -43,7 +62,7 @@ const SwagePmstn: React.FC<SwagePmstnProps> = ({
startLabel="설치년도"
endLabel=""
/>
{/* 일일처리용량 - 오수맨홀 */}
{/* 일일처리용량 */}
<Label className="text-xl text-gray-600 font-medium whitespace-nowrap mr-2">일일처리용량(㎥)</Label>
<Input
className="w-[100px] !text-xl placeholder:text-center"
@@ -78,8 +97,8 @@ const SwagePmstn: React.FC<SwagePmstnProps> = ({
}
}}
/>
{/* 양수능력 - 우수맨홀 */}
<Label className="text-xl text-gray-600 font-medium whitespace-nowrap mr-2">양수능력(m²/d)</Label>
{/* 양수능력 */}
{/* <Label className="text-xl text-gray-600 font-medium whitespace-nowrap mr-2">양수능력(m²/d)</Label>
<Input
className="w-[100px] !text-xl placeholder:text-center"
placeholder="입력"
@@ -112,7 +131,7 @@ const SwagePmstn: React.FC<SwagePmstnProps> = ({
handleSearch();
}
}}
/>
/> */}
{/* 조회 버튼 */}
<div className="flex-1 flex justify-end">
<Button className="text-base py-2" onClick={handleSearch}>조회</Button>