refactor: 04.하수저류시설 및 빗물펌프 tab 구조 분리 & footer 적용

- tab별 컬럼 정의 파일 분리 (SewageReservoirColumn, RainfallPumpStationColumn)
- 저장 로직에서 필요한 컬럼은 hidden 컬럼으로 변경, footer 적용
This commit is contained in:
2025-12-31 14:57:51 +09:00
parent 7e9f294ae8
commit 8318888f6d
4 changed files with 433 additions and 20 deletions
@@ -6,11 +6,28 @@ import SaveButton from "@/components/button/SaveButton";
import LastYearDataButton from "@/components/button/LastYearDataButton";
import SubmitExceptionButton from "@/components/button/SubmitExceptionButton";
import { SewageReservoirPumpMngColumnInfoList } from "@/components/util/column/management/SewageReservoirPumpMngColumn";
import { SewageReservoirColumn } from "@/components/util/column/management/sewageReservoirPump/SewageReservoirColumn";
import { RainfallPumpStationColumn } from "@/components/util/column/management/sewageReservoirPump/RainfallPumpStationColumn";
// 하수도 통계 관리 > 04. 하수저류 시설 및 빗물 펌프장
const SewageReservoirPumpMng = () => {
const [rowDataMap, setRowDataMap] = useState<Map<string, Record<string, string | number>[]>>(new Map());
// tab List
const SewageReservoirPumpMngColumnInfoList = [
SewageReservoirColumn,
RainfallPumpStationColumn
];
const submitExceptionFunc = () => {
console.log('submit exception');
// 예외 제출 로직
};
const getLastYearDataFunc = () => {
console.log('get last year data');
// 지난연도 데이터 가져오기 로직
};
const submitFunc = () => {
console.log('submit');
@@ -22,24 +39,14 @@ const SewageReservoirPumpMng = () => {
// 저장 로직
};
const getLastYearDataFunc = () => {
console.log('get last year data');
// 지난연도 데이터 가져오기 로직
};
const submitExceptionFunc = () => {
console.log('submit exception');
// 예외 제출 로직
};
return (
<>
<SearchForm userMenual={true} />
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
<SubmitExceptionButton SubmitExceptionFunc={submitExceptionFunc} />
<LastYearDataButton getLastYearDataFunc={getLastYearDataFunc} />
<SaveButton saveFunc={saveFunc} />
<SubmitButton submitFunc={submitFunc} />
<SaveButton saveFunc={saveFunc} />
</div>
<TabDataGrid columnInfo={SewageReservoirPumpMngColumnInfoList} rowDataMap={rowDataMap} setRowDataMap={setRowDataMap} />
</>
@@ -1,8 +0,0 @@
/**
* 하수도 통계 관리 > 3.하수관로 유지 관리
* 2개 Tab : 컬럼 통합 관리
*/
export const SewagePipeMaintainMngColumnInfoList = [
];
@@ -0,0 +1,211 @@
import { footerInt, footerDecimal1 } from "@/components/util/grid/footerSummary";
// 하수도 통계 관리 > 04.하수저류시설 및 빗물펌프장 > tab 2: 빗물펌프장
export const RainfallPumpStationColumn = {
columns: [
// Hidden Columns : 시스템 관리를 위한 필수 키값
{ name: 'sidoCd', fieldName: '시도코드', header: { text: '시도코드' }, hidden: true },
{ name: 'adstDstrCd', fieldName: '행정구역코드', header: { text: '행정구역코드' }, hidden: true },
{ name: 'adstCd', fieldName: '행정코드', header: { text: '행정코드' }, hidden: true },
{ name: 'swgeStrgeFctSeq', fieldName: '시설SEQ', header: { text: '시설SEQ' }, hidden: true },
{ name: 'yr', fieldName: '년도', header: { text: '년도' }, hidden: true },
{ name: 'odr', fieldName: '차수', header: { text: '차수' }, hidden: true },
{ name: 'bsnmCd', fieldName: '사업자코드', header: { text: '사업자코드' }, hidden: true },
// Visible Columns
// 행정구역
{ name: 'sido', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'gugun', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' }, editable: false },
// 시설명
{ name: 'swgeStrgeNm', fieldName: '시설명', header: { text: '시설명' } },
// 위치
{ name: 'addr', fieldName: '위치', header: { text: '위치' } },
// 시설물종류
{ name: 'facRes', fieldName: '시설물종류', header: { text: '시설물종류' } },
// 가동개시 년월일 yyyy-mm-dd
{ name: 'rnDt', fieldName: '가동개시 년월일 yyyy-mm-dd', header: { text: '가동개시 년월일 yyyy-mm-dd' } },
// 계획설계빈도
{ name: 'plDsgnFrqnc', fieldName: '계획설계빈도', header: { text: '계획설계빈도' } },
// 집수구역면적(㎢)
{ name: 'dgrAr', fieldName: '집수구역면적(㎢)', header: { text: '집수구역면적(㎢)' }, footer: footerDecimal1 },
// 유수지
{ name: 'revFnnc', fieldName: '유수지유무(유,무)', header: { text: '유수지유무(유,무)' } },
{ name: 'revCpcty', fieldName: '저류랑(m³)', header: { text: '저류랑(m³)' }, footer: footerDecimal1 },
// 흡수정
{ name: 'absCpcty', fieldName: '저류랑(m³)', header: { text: '저류랑(m³)' }, footer: footerDecimal1 },
// 펌프시설 - 총양수량(m³/min)
{ name: 'wpCpcty', fieldName: '총양수량(m³/min)', header: { text: '총양수량(m³/min)' }, footer: footerDecimal1 },
// 펌프시설1
{ name: 'pumpCalbr', fieldName: '구경(mm)', header: { text: '구경(mm)' } },
{ name: 'pumpHpCo', fieldName: '대당 양수량(m³/min·대)', header: { text: '대당 양수량(m³/min·대)' }, footer: footerDecimal1 },
{ name: 'pumpCo', fieldName: '펌프대수', header: { text: '펌프대수' }, footer: footerInt },
{ name: 'pumpPreparCo', fieldName: '예비펌프대수', header: { text: '예비펌프대수' }, footer: footerInt },
// 펌프시설2
{ name: 'pumpCalbr2', fieldName: '구경(mm)', header: { text: '구경(mm)' } },
{ name: 'pumpHpCo2', fieldName: '대당 양수량(m³/min·대)', header: { text: '대당 양수량(m³/min·대)' }, footer: footerDecimal1 },
{ name: 'pumpCo2', fieldName: '펌프대수', header: { text: '펌프대수' }, footer: footerInt },
{ name: 'pumpPreparCo2', fieldName: '예비펌프대수', header: { text: '예비펌프대수' }, footer: footerInt },
// 펌프시설3
{ name: 'pumpCalbr3', fieldName: '구경(mm)', header: { text: '구경(mm)' } },
{ name: 'pumpHpCo3', fieldName: '대당 양수량(m³/min·대)', header: { text: '대당 양수량(m³/min·대)' }, footer: footerDecimal1 },
{ name: 'pumpCo3', fieldName: '펌프대수', header: { text: '펌프대수' }, footer: footerInt },
{ name: 'pumpPreparCo3', fieldName: '예비펌프대수', header: { text: '예비펌프대수' }, footer: footerInt },
// 부대시설
{ name: 'dorZeqpFnnc', fieldName: '전처리시설유무(유/무)', header: { text: '전처리시설유무(유/무)' } },
{ name: 'selfEtrqFnnc', fieldName: '탈취설비유무(유/무)', header: { text: '탈취설비유무(유/무)' } },
{ name: 'freFnnc', fieldName: '자가발전유무(유/무)', header: { text: '자가발전유무(유/무)' } },
// 방류수역
{ name: 'disWat', fieldName: '방류수역', header: { text: '방류수역' } },
// 최종처분량(ton/년)
{ name: 'sdmtTreCpcty', fieldName: '침사', header: { text: '침사' }, footer: footerInt },
{ name: 'iprtTreCpcty', fieldName: '협잡물', header: { text: '협잡물' }, footer: footerInt },
// 최종처분방법
{ name: 'sdmtTreMth', fieldName: '침사', header: { text: '침사' } },
{ name: 'iprtTreMth', fieldName: '협잡물', header: { text: '협잡물' } },
// 운영실적
{ name: 'yrstpRnDyn', fieldName: '기동일수(일/년)', header: { text: '기동일수(일/년)' } },
{ name: 'dsplcmntAmnt', fieldName: '총배수량(m³/년)', header: { text: '총배수량(m³/년)' }, footer: footerInt },
// 비고
{ name: 'rmk', fieldName: '비고', header: { text: '비고' } },
{ name: 'chckerOpinion', fieldName: '검토자의견', header: { text: '검토자의견' } },
{ name: 'wrterOpinion', fieldName: '사용자의견', header: { text: '사용자의견' } },
],
columnLayout: [
{
name: 'adminArea',
hideChildHeaders: false,
header: { text: '행정구역' },
items: ['sido', 'gugun'],
},
'swgeStrgeNm',
'addr',
'facRes',
'rnDt',
'plDsgnFrqnc',
'dgrAr',
{
name: 'reservoir',
hideChildHeaders: false,
header: { text: '유수지' },
items: [
'revFnnc',
'revCpcty',
],
},
{
name: 'absorptionWell',
hideChildHeaders: false,
header: { text: '흡수정' },
items: [
'absCpcty',
],
},
{
name: 'pumpSystem',
hideChildHeaders: false,
header: { text: '펌프시설' },
items: [
'wpCpcty',
{
name: 'pumpSystem1',
hideChildHeaders: false,
header: { text: '펌프시설1' },
items: [
'pumpCalbr',
'pumpHpCo',
'pumpCo',
'pumpPreparCo',
],
},
{
name: 'pumpSystem2',
hideChildHeaders: false,
header: { text: '펌프시설2' },
items: [
'pumpCalbr2',
'pumpHpCo2',
'pumpCo2',
'pumpPreparCo2',
],
},
{
name: 'pumpSystem3',
hideChildHeaders: false,
header: { text: '펌프시설3' },
items: [
'pumpCalbr3',
'pumpHpCo3',
'pumpCo3',
'pumpPreparCo3',
],
},
],
},
{
name: 'auxiliaryFacilities',
hideChildHeaders: false,
header: { text: '부대시설' },
items: [
'dorZeqpFnnc',
'selfEtrqFnnc',
'freFnnc',
],
},
'disWat',
{
name: 'finalDisposalAmount',
hideChildHeaders: false,
header: { text: '최종처분량(ton/년)' },
items: [
'sdmtTreCpcty',
'iprtTreCpcty',
],
},
{
name: 'finalDisposalMethod',
hideChildHeaders: false,
header: { text: '최종처분방법' },
items: [
'sdmtTreMth',
'iprtTreMth',
],
},
{
name: 'operationResults',
hideChildHeaders: false,
header: { text: '운영실적' },
items: [
'yrstpRnDyn',
'dsplcmntAmnt',
],
},
'rmk',
'chckerOpinion',
'wrterOpinion',
],
rowStartNum: 3,
fixedColumns: 2,
tabKey: 'rainfallPumpStation',
tabLabel: '빗물펌프장',
};
@@ -0,0 +1,203 @@
import { footerInt, footerDecimal1 } from "@/components/util/grid/footerSummary";
// 하수도 통계 관리 > 04.하수저류시설 및 빗물펌프장 > tab 1: 하수저류시설
export const SewageReservoirColumn = {
columns: [
// Hidden Columns : 시스템 관리를 위한 필수 키값
{ name: 'sidoCd', fieldName: '시도코드', header: { text: '시도코드' }, hidden: true },
{ name: 'adstDstrCd', fieldName: '행정구역코드', header: { text: '행정구역코드' }, hidden: true },
{ name: 'adstCd', fieldName: '행정코드', header: { text: '행정코드' }, hidden: true },
{ name: 'swgeStrgeFctSeq', fieldName: '시설SEQ', header: { text: '시설SEQ' }, hidden: true },
// 필요 시 yr, odr 등 추가 가능
// Visible Columns
// 행정구역
{ name: 'sido', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'gugun', fieldName: '시군구', header: { text: '시군구' }, editable: false },
// 기본 정보
{ name: 'swgeStrgeNm', fieldName: '시설명', header: { text: '시설명' }, footer: { text: '합계' } },
{ name: 'addr', fieldName: '위치', header: { text: '위치' } },
{ name: 'rnDt', fieldName: '가동개시 년월일 yyyy-mm-dd', header: { text: '가동개시 년월일 yyyy-mm-dd' } },
{ name: 'designFrequency', fieldName: '계획설계빈도', header: { text: '계획설계빈도' } },
// 설치목적
{ name: 'floodingPrevention', fieldName: '침수예방', header: { text: '침수예방' } },
{ name: 'waterQualityReduction', fieldName: '수질오염저감', header: { text: '수질오염저감' } },
{ name: 'sewerageReuseUse', fieldName: '하수재이용용도', header: { text: '하수재이용용도' } },
// 시설 상세
{ name: 'facilityStructure', fieldName: '시설구조(일반지하식,지하터널식,기타)', header: { text: '시설구조(일반지하식,지하터널식,기타)' } },
{ name: 'catchmentAreaSize', fieldName: '집수구역면적(㎢)', header: { text: '집수구역면적(㎢)' }, footer: footerDecimal1 },
{ name: 'facilityCapacity', fieldName: '시설용량(m³)', header: { text: '시설용량(m³)' }, footer: footerDecimal1 },
// 펌프시설 - 총괄
{ name: 'totalPumpingCapacity', fieldName: '총양수량(m³/min)', header: { text: '총양수량(m³/min)' }, editable: false, footer: footerDecimal1 },
// 펌프시설 1
{ name: 'pump1Diameter', fieldName: '구경(mm)', header: { text: '구경(mm)' } },
{ name: 'pump1PumpingCapacity', fieldName: '대당 양수량(m³/min·대)', header: { text: '대당 양수량(m³/min·대)' }, footer: footerDecimal1 },
{ name: 'pump1Count', fieldName: '펌프대수', header: { text: '펌프대수' }, footer: footerInt },
{ name: 'pump1StandbyCount', fieldName: '예비펌프대수', header: { text: '예비펌프대수' }, footer: footerInt },
// 펌프시설 2
{ name: 'pump2Diameter', fieldName: '구경(mm)', header: { text: '구경(mm)' } },
{ name: 'pump2PumpingCapacity', fieldName: '대당 양수량(m³/min·대)', header: { text: '대당 양수량(m³/min·대)' }, footer: footerDecimal1 },
{ name: 'pump2Count', fieldName: '펌프대수', header: { text: '펌프대수' }, footer: footerInt },
{ name: 'pump2StandbyCount', fieldName: '예비펌프대수', header: { text: '예비펌프대수' }, footer: footerInt },
// 펌프시설 3
{ name: 'pump3Diameter', fieldName: '구경(mm)', header: { text: '구경(mm)' } },
{ name: 'pump3PumpingCapacity', fieldName: '대당 양수량(m³/min·대)', header: { text: '대당 양수량(m³/min·대)' }, footer: footerDecimal1 },
{ name: 'pump3Count', fieldName: '펌프대수', header: { text: '펌프대수' }, footer: footerInt },
{ name: 'pump3StandbyCount', fieldName: '예비펌프대수', header: { text: '예비펌프대수' }, footer: footerInt },
// 부대시설
{ name: 'preprocessingFacility', fieldName: '전처리시설유무(유/무)', header: { text: '전처리시설유무(유/무)' } },
{ name: 'odorRemovalEquipment', fieldName: '탈취설비유무(유/무)', header: { text: '탈취설비유무(유/무)' } },
{ name: 'selfGenerationEquipment', fieldName: '자가발전유무(유/무)', header: { text: '자가발전유무(유/무)' } },
// 방식 및 방류수역
{ name: 'drainageMethod', fieldName: '배수방식(자연배수,강제배수)', header: { text: '배수방식(자연배수,강제배수)' } },
{ name: 'storageMethod', fieldName: '저류방식(직렬,병렬)', header: { text: '저류방식(직렬,병렬)' } },
{ name: 'storageWaterTreatmentMethod', fieldName: '저류수처리방법(자체처리,연계처리)', header: { text: '저류수처리방법(자체처리,연계처리)' } },
{ name: 'dischargeDestination', fieldName: '방류수역(또는 연계처리장명)', header: { text: '방류수역(또는 연계처리장명)' } },
// 최종처분량
{ name: 'sedimentDisposalAmount', fieldName: '침사', header: { text: '침사' }, footer: footerInt },
{ name: 'debrisDisposalAmount', fieldName: '협잡물', header: { text: '협잡물' }, footer: footerInt },
// 최종처분방법
{ name: 'sedimentDisposalMethod', fieldName: '침사', header: { text: '침사' } },
{ name: 'debrisDisposalMethod', fieldName: '협잡물', header: { text: '협잡물' } },
// 운영실적
{ name: 'operationDaysPerYear', fieldName: '기동일수(일/년)', header: { text: '기동일수(일/년)' } },
{ name: 'totalDischargePerYear', fieldName: '총배수량(m³/년)', header: { text: '총배수량(m³/년)' }, footer: footerInt },
// 비고
{ name: 'remarks', fieldName: '비고', header: { text: '비고' } },
],
columnLayout: [
{
name: 'adminArea',
hideChildHeaders: false,
header: { text: '행정구역' },
items: ['sido', 'gugun'],
},
'swgeStrgeNm',
'addr',
'rnDt',
'designFrequency',
{
name: 'installationPurpose',
hideChildHeaders: false,
header: { text: '설치목적(O,X로 표기, 중복체크가능)' },
items: [
'floodingPrevention',
'waterQualityReduction',
'sewerageReuseUse',
],
},
'facilityStructure',
'catchmentAreaSize',
'facilityCapacity',
{
name: 'pumpSystem',
hideChildHeaders: false,
header: { text: '펌프시설' },
items: [
'totalPumpingCapacity',
{
name: 'pumpSystem1',
hideChildHeaders: false,
header: { text: '펌프시설1' },
items: [
'pump1Diameter',
'pump1PumpingCapacity',
'pump1Count',
'pump1StandbyCount',
],
},
{
name: 'pumpSystem2',
hideChildHeaders: false,
header: { text: '펌프시설2' },
items: [
'pump2Diameter',
'pump2PumpingCapacity',
'pump2Count',
'pump2StandbyCount',
],
},
{
name: 'pumpSystem3',
hideChildHeaders: false,
header: { text: '펌프시설3' },
items: [
'pump3Diameter',
'pump3PumpingCapacity',
'pump3Count',
'pump3StandbyCount',
],
},
],
},
{
name: 'auxiliaryFacilities',
hideChildHeaders: false,
header: { text: '부대시설' },
items: [
'preprocessingFacility',
'odorRemovalEquipment',
'selfGenerationEquipment',
],
},
'drainageMethod',
'storageMethod',
'storageWaterTreatmentMethod',
'dischargeDestination',
{
name: 'finalDisposalAmount',
hideChildHeaders: false,
header: { text: '최종처분량(ton/년)' },
items: [
'sedimentDisposalAmount',
'debrisDisposalAmount',
],
},
{
name: 'finalDisposalMethod',
hideChildHeaders: false,
header: { text: '최종처분방법' },
items: [
'sedimentDisposalMethod',
'debrisDisposalMethod',
],
},
{
name: 'operationResults',
hideChildHeaders: false,
header: { text: '운영실적' },
items: [
'operationDaysPerYear',
'totalDischargePerYear',
],
},
'remarks',
],
rowStartNum: 3,
fixedColumns: 2,
tabKey: 'sewageReservoir',
tabLabel: '하수저류시설',
};