From 01ef993601e1d68c1181a38cb816b580971a1351 Mon Sep 17 00:00:00 2001 From: rsone001 Date: Tue, 30 Dec 2025 11:25:42 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=ED=95=98=EC=88=98=EB=8F=84=20?= =?UTF-8?q?=ED=86=B5=EA=B3=84=20=EA=B4=80=EB=A6=AC=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 09. 하수도 재정 화면 구현 --- .../management/SewerageFinanceMngColumn.ts | 317 ++++++++++++++++-- 1 file changed, 285 insertions(+), 32 deletions(-) diff --git a/apps/st/src/components/util/column/management/SewerageFinanceMngColumn.ts b/apps/st/src/components/util/column/management/SewerageFinanceMngColumn.ts index 4d1c3cfa4..ab598062f 100644 --- a/apps/st/src/components/util/column/management/SewerageFinanceMngColumn.ts +++ b/apps/st/src/components/util/column/management/SewerageFinanceMngColumn.ts @@ -56,7 +56,7 @@ export const SewerageFinanceMngInfoList = [ { name: 'UNRCIV_AMOUNT', fieldName: '미수납액', header: { text: '미수납액' } }, { name: 'ETC_AMOUNT', fieldName: '기타', header: { text: '기타' } }, - // 비고 + // 비고 및 의견 { name: 'RMK', fieldName: '비고', header: { text: '비고' } }, { name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' } }, { name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' } }, @@ -65,37 +65,6 @@ export const SewerageFinanceMngInfoList = [ { name: 'B_LEVY_AMOUNT', fieldName: 'B_LEVY_AMOUNT', header: { text: 'B_LEVY_AMOUNT' } }, { name: 'C_LEVY_AMOUNT', fieldName: 'C_LEVY_AMOUNT', header: { text: 'C_LEVY_AMOUNT' } }, { name: 'D_LEVY_AMOUNT', fieldName: 'D_LEVY_AMOUNT', header: { text: 'D_LEVY_AMOUNT' } }, - - // 검증 필드 - { name: 'CHK_FNANC_WCT_SM', fieldName: 'CHK_FNANC_WCT_SM', header: { text: 'CHK_FNANC_WCT_SM' } }, - { name: 'CHK_NTNXPN', fieldName: 'CHK_NTNXPN', header: { text: 'CHK_NTNXPN' } }, - { name: 'CHK_LCLEXPNS', fieldName: 'CHK_LCLEXPNS', header: { text: 'CHK_LCLEXPNS' } }, - { name: 'CHK_LCLTY_CT', fieldName: 'CHK_LCLTY_CT', header: { text: 'CHK_LCLTY_CT' } }, - { name: 'CHK_SEWER_RNTFEE', fieldName: 'CHK_SEWER_RNTFEE', header: { text: 'CHK_SEWER_RNTFEE' } }, - { name: 'CHK_AMNTBRNCSR', fieldName: 'CHK_AMNTBRNCSR', header: { text: 'CHK_AMNTBRNCSR' } }, - { name: 'CHK_ETC_INCME', fieldName: 'CHK_ETC_INCME', header: { text: 'CHK_ETC_INCME' } }, - { name: 'CHK_CYFD_AMOUNT', fieldName: 'CHK_CYFD_AMOUNT', header: { text: 'CHK_CYFD_AMOUNT' } }, - { name: 'CHK_DEBT_AMOUNT', fieldName: 'CHK_DEBT_AMOUNT', header: { text: 'CHK_DEBT_AMOUNT' } }, - { name: 'CHK_PRPOS_WCT_SM', fieldName: 'CHK_PRPOS_WCT_SM', header: { text: 'CHK_PRPOS_WCT_SM' } }, - { name: 'CHK_PRCPLT_SM', fieldName: 'CHK_PRCPLT_SM', header: { text: 'CHK_PRCPLT_SM' } }, - { name: 'CHK_PRCPLT_FCLTY', fieldName: 'CHK_PRCPLT_FCLTY', header: { text: 'CHK_PRCPLT_FCLTY' } }, - { name: 'CHK_PRCPLT_RPAIR', fieldName: 'CHK_PRCPLT_RPAIR', header: { text: 'CHK_PRCPLT_RPAIR' } }, - { name: 'CHK_PRCPLT_ORPNS', fieldName: 'CHK_PRCPLT_ORPNS', header: { text: 'CHK_PRCPLT_ORPNS' } }, - { name: 'CHK_PRCPLT_ETC', fieldName: 'CHK_PRCPLT_ETC', header: { text: 'CHK_PRCPLT_ETC' } }, - { name: 'CHK_SEWAGE_SM', fieldName: 'CHK_SEWAGE_SM', header: { text: 'CHK_SEWAGE_SM' } }, - { name: 'CHK_SEWAGE_FCLTY', fieldName: 'CHK_SEWAGE_FCLTY', header: { text: 'CHK_SEWAGE_FCLTY' } }, - { name: 'CHK_SEWAGE_RPAIR', fieldName: 'CHK_SEWAGE_RPAIR', header: { text: 'CHK_SEWAGE_RPAIR' } }, - { name: 'CHK_SEWAGE_ORPNS', fieldName: 'CHK_SEWAGE_ORPNS', header: { text: 'CHK_SEWAGE_ORPNS' } }, - { name: 'CHK_SEWAGE_ETC', fieldName: 'CHK_SEWAGE_ETC', header: { text: 'CHK_SEWAGE_ETC' } }, - { name: 'CHK_SWGE_STRGE_SM', fieldName: 'CHK_SWGE_STRGE_SM', header: { text: 'CHK_SWGE_STRGE_SM' } }, - { name: 'CHK_SWGE_STRGE_FCLTY', fieldName: 'CHK_SWGE_STRGE_FCLTY', header: { text: 'CHK_SWGE_STRGE_FCLTY' } }, - { name: 'CHK_SWGE_STRGE_RPAIR', fieldName: 'CHK_SWGE_STRGE_RPAIR', header: { text: 'CHK_SWGE_STRGE_RPAIR' } }, - { name: 'CHK_SWGE_STRGE_ORPNS', fieldName: 'CHK_SWGE_STRGE_ORPNS', header: { text: 'CHK_SWGE_STRGE_ORPNS' } }, - { name: 'CHK_SWGE_STRGE_ETC', fieldName: 'CHK_SWGE_STRGE_ETC', header: { text: 'CHK_SWGE_STRGE_ETC' } }, - { name: 'CHK_ACDNT_CYFD_AMOUNT', fieldName: 'CHK_ACDNT_CYFD_AMOUNT', header: { text: 'CHK_ACDNT_CYFD_AMOUNT' } }, - { name: 'CHK_UNRCIV_AMOUNT', fieldName: 'CHK_UNRCIV_AMOUNT', header: { text: 'CHK_UNRCIV_AMOUNT' } }, - { name: 'CHK_ETC_AMOUNT', fieldName: 'CHK_ETC_AMOUNT', header: { text: 'CHK_ETC_AMOUNT' } }, - { name: 'CHK_ETC_SM', fieldName: 'CHK_ETC_SM', header: { text: 'CHK_ETC_SM' } }, ], columnLayout: [ { @@ -178,4 +147,288 @@ export const SewerageFinanceMngInfoList = [ tabKey: 'SewerageFinanceMng_tab1', tabLabel: '하수도재정 결산' }, + // ======================================== + // Tab 2: 하수도 요금 + // ======================================== + { + columns: [ + // 행정구역 + { name: 'SIDO', fieldName: '시도', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' } }, + + // 요금 현황 + { name: 'FYER_LEVY_QY', fieldName: '연간조정량(m³)(A)', header: { text: '연간조정량(m³)(A)' } }, + { name: 'LEVY_AMOUNT', fieldName: '하수도사용료수익(원)(B)', header: { text: '하수도사용료수익(원)(B)' } }, + { name: 'AVRG_UNTPC', fieldName: 'm³당요금(원/m³) C=(B/A)', header: { text: 'm³당요금(원/m³) C=(B/A)' } }, + { name: 'SMRIZE_PRMPC', fieldName: '총괄원가(원)(D)', header: { text: '총괄원가(원)(D)' } }, + { name: 'SMRIZE_UNIT_PRMPC', fieldName: 'm³당원가(원/m³) E=(D/A)', header: { text: 'm³당원가(원/m³) E=(D/A)' } }, + { name: 'RLTY_RT', fieldName: '요금현실화율(%) F=(C/E*100)', header: { text: '요금현실화율(%) F=(C/E*100)' } }, + + // 비고 및 의견 + { name: 'RMK', fieldName: '비고', header: { text: '비고' } }, + { name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' } }, + { name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' } }, + + // 참조 필드 + { name: 'SEWER_RNTFEE', fieldName: 'SEWER_RNTFEE', header: { text: 'SEWER_RNTFEE' } }, + { name: 'C_LEVY_AMOUNT', fieldName: 'C_LEVY_AMOUNT', header: { text: 'C_LEVY_AMOUNT' } }, + ], + columnLayout: [ + { + name: 'group_admin', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'] + }, + 'FYER_LEVY_QY', + 'LEVY_AMOUNT', + 'AVRG_UNTPC', + 'SMRIZE_PRMPC', + 'SMRIZE_UNIT_PRMPC', + 'RLTY_RT', + 'RMK' + ], + rowStartNum: 2, + fixedColumns: 1, + tabKey: 'SewerageFinanceMng_tab2', + tabLabel: '하수도 요금' + }, + // ======================================== + // Tab 3: 하수도 사용료 + // ======================================== + { + columns: [ + // 행정구역 + { name: 'SIDO', fieldName: '시도', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' } }, + + // 총계 + { name: 'LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + + // 가정용 + { name: 'HOME_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'HOME_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'HOME_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 업무용 + { name: 'JOB_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'JOB_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'JOB_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 영업용(일반용) + { name: 'BSN_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'BSN_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'BSN_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 욕탕1종(대중탕용) + { name: 'BATHS1_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'BATHS1_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'BATHS1_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 대중탕용 (별도 분류) + { name: 'PBBATH_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'PBBATH_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'PBBATH_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 욕탕2종 + { name: 'BATHS2_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'BATHS2_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'BATHS2_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 산업용 + { name: 'INDUST_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'INDUST_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'INDUST_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 공업용 + { name: 'INDPRP_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'INDPRP_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'INDPRP_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 공공용 + { name: 'PUBLIC_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'PUBLIC_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'PUBLIC_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 일반용 + { name: 'GNRL_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'GNRL_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'GNRL_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 기타 + { name: 'ETC_LEVY_AMOUNT', fieldName: '(백만원)', header: { text: '(백만원)' } }, + { name: 'ETC_LEVY_QY', fieldName: '(천톤)', header: { text: '(천톤)' } }, + { name: 'ETC_UNTPC', fieldName: '(원/톤)', header: { text: '(원/톤)' } }, + + // 비고 및 의견 + { name: 'RMK', fieldName: '비고', header: { text: '비고' } }, + { name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' } }, + { name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' } }, + + // 참조 필드 + { name: 'SEWER_RNTFEE', fieldName: 'SEWER_RNTFEE', header: { text: 'SEWER_RNTFEE' } }, + { name: 'B_LEVY_AMOUNT', fieldName: 'B_LEVY_AMOUNT', header: { text: 'B_LEVY_AMOUNT' } }, + ], + + columnLayout: [ + { + name: 'group_admin', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'] + }, + { + name: 'group_total', + header: { text: '총계' }, + items: [ + { name: 'total_amount', header: { text: '부과액' }, items: ['LEVY_AMOUNT'] }, + { name: 'total_qty', header: { text: '부과량' }, items: ['LEVY_QY'] } + ] + }, + { + name: 'group_home', + header: { text: '가 정 용' }, + items: [ + { name: 'home_amount', header: { text: '부과액' }, items: ['HOME_LEVY_AMOUNT'] }, + { name: 'home_qty', header: { text: '부과량' }, items: ['HOME_LEVY_QY'] }, + { name: 'home_price', header: { text: '단가' }, items: ['HOME_UNTPC'] } + ] + }, + { + name: 'group_job', + header: { text: '업 무 용' }, + items: [ + { name: 'job_amount', header: { text: '부과액' }, items: ['JOB_LEVY_AMOUNT'] }, + { name: 'job_qty', header: { text: '부과량' }, items: ['JOB_LEVY_QY'] }, + { name: 'job_price', header: { text: '단가' }, items: ['JOB_UNTPC'] } + ] + }, + { + name: 'group_business', + header: { text: '영 업 용(일 반 용)' }, + items: [ + { name: 'bsn_amount', header: { text: '부과액' }, items: ['BSN_LEVY_AMOUNT'] }, + { name: 'bsn_qty', header: { text: '부과량' }, items: ['BSN_LEVY_QY'] }, + { name: 'bsn_price', header: { text: '단가' }, items: ['BSN_UNTPC'] } + ] + }, + { + name: 'group_baths1', + header: { text: '욕 탕 1종(대중탕용)' }, + items: [ + { name: 'baths1_amount', header: { text: '부과액' }, items: ['BATHS1_LEVY_AMOUNT'] }, + { name: 'baths1_qty', header: { text: '부과량' }, items: ['BATHS1_LEVY_QY'] }, + { name: 'baths1_price', header: { text: '단가' }, items: ['BATHS1_UNTPC'] } + ] + }, + { + name: 'group_pbbath', + header: { text: '욕 탕 2종' }, + items: [ + { name: 'pbbath_amount', header: { text: '부과액' }, items: ['PBBATH_LEVY_AMOUNT'] }, + { name: 'pbbath_qty', header: { text: '부과량' }, items: ['PBBATH_LEVY_QY'] }, + { name: 'pbbath_price', header: { text: '단가' }, items: ['PBBATH_UNTPC'] } + ] + }, + { + name: 'group_industry', + header: { text: '산업 및 공업용' }, + items: [ + { name: 'indust_amount', header: { text: '부과액' }, items: ['INDUST_LEVY_AMOUNT'] }, + { name: 'indust_qty', header: { text: '부과량' }, items: ['INDUST_LEVY_QY'] }, + { name: 'indust_price', header: { text: '단가' }, items: ['INDUST_UNTPC'] } + ] + }, + { + name: 'group_etc', + header: { text: '기타' }, + items: [ + { name: 'etc_amount', header: { text: '부과액' }, items: ['ETC_LEVY_AMOUNT'] }, + { name: 'etc_qty', header: { text: '부과량' }, items: ['ETC_LEVY_QY'] }, + { name: 'etc_price', header: { text: '단가' }, items: ['ETC_UNTPC'] } + ] + }, + 'RMK' + ], + + rowStartNum: 3, + fixedColumns: 1, + tabKey: 'SewerageFinanceMng_tab3', + tabLabel: '하수도 사용료' + }, + + // ======================================== + // Tab 4: 원인자 부담금 + // ======================================== + { + columns: [ + // 행정구역 + { name: 'SIDO', fieldName: '시도', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' } }, + + // 부과액 + { name: 'LEVY_CO', fieldName: '건수', header: { text: '건수' } }, + { name: 'LEVY_AMOUNT', fieldName: '금액(백만원)', header: { text: '금액(백만원)' } }, + + // 대상별 징수현황 - 계 + { name: 'TRGET_LEV_STTUS_CO', fieldName: '건수', header: { text: '건수' } }, + { name: 'TRGET_LEV_STTUS_AMOUNT', fieldName: '금액(백만원)', header: { text: '금액(백만원)' } }, + + // 대상별 징수현황 - 배수설비설치자 + { name: 'DRNG_EQP_CO', fieldName: '건수', header: { text: '건수' } }, + { name: 'DRNG_EQP_AMOUNT', fieldName: '금액(백만원)', header: { text: '금액(백만원)' } }, + + // 대상별 징수현황 - 타공사·타행위자 + { name: 'CNTRWK_CO', fieldName: '건수', header: { text: '건수' } }, + { name: 'CNTRWK_AMOUNT', fieldName: '금액(백만원)', header: { text: '금액(백만원)' } }, + + // 비고 및 의견 + { name: 'RMK', fieldName: '비고', header: { text: '비고' } }, + { name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' } }, + { name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' } }, + + // 참조 필드 + { name: 'AMNTBRNCSR', fieldName: 'AMNTBRNCSR', header: { text: 'AMNTBRNCSR' } }, + ], + + columnLayout: [ + { + name: 'group_admin', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'] + }, + { + name: 'group_assess', + header: { text: '부과액' }, + items: ['LEVY_CO', 'LEVY_AMOUNT'] + }, + { + name: 'group_collection', + header: { text: '대상별 징수현황' }, + items: [ + { + name: 'coll_group_total', + header: { text: '계' }, + items: ['TRGET_LEV_STTUS_CO', 'TRGET_LEV_STTUS_AMOUNT'] + }, + { + name: 'coll_group_inst', + header: { text: '배수설비설치자(하수도법 제61조 제1항)' }, + items: ['DRNG_EQP_CO', 'DRNG_EQP_AMOUNT'] + }, + { + name: 'coll_group_otr', + header: { text: '타공사·타행위자(하수도법 제61조 제2항)' }, + items: ['CNTRWK_CO', 'CNTRWK_AMOUNT'] + } + ] + }, + 'RMK' + ], + + rowStartNum: 3, + fixedColumns: 1, + tabKey: 'SewerageFinanceMng_tab4', + tabLabel: '원인자 부담금' + }, + ]; \ No newline at end of file From 90c977300c965bee6eacca9f3b339369a93aa44e Mon Sep 17 00:00:00 2001 From: rsone001 Date: Tue, 30 Dec 2025 14:06:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=2001.=20=ED=95=98=EC=88=98?= =?UTF-8?q?=EB=8F=84=20=EB=B3=B4=EA=B8=89=EB=A5=A0=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC,=20Grid=20=EC=86=8D=EC=84=B1=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SeweragePenetrationRateMng.tsx 에 포함되어있던 컬럼 정의를 SeweragePenetrationRateMngColumn.ts 파일로 분리 - Footer 합계 함수 적용 (소수점, 정수 적용) - 컬럼별 수정가능 여부(editable) 설정 --- .../management/SeweragePenetrationRateMng.tsx | 131 ++----------- .../SeweragePenetrationRateMngColumn.ts | 173 ++++++++++++++++++ 2 files changed, 185 insertions(+), 119 deletions(-) create mode 100644 apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts diff --git a/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx b/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx index 64d826f85..94601064f 100644 --- a/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx +++ b/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx @@ -4,143 +4,31 @@ import SubmitButton from "@/components/button/SumitButton"; import SaveButton from "@/components/button/SaveButton"; import LastYearDataButton from "@/components/button/LastYearDataButton"; import SubmitExceptionButton from "@/components/button/SubmitExceptionButton"; -import type { GridView, DataColumn } from "@/components/type/DataGrid.type"; -import { getFooterSummary } from "@/components/util/grid/footerSummary"; + +import { SeweragePenetrationRateMngColumnInfo } from "@/components/util/column/management/SeweragePenetrationRateMngColumn"; // 하수도 통계 관리 > 01. 하수도 보급률 const SeweragePenetrationRateMng = () => { - const columns = [ - { name: 'sido', fieldName: '시도', header: { text: '시도' } }, - { - name: 'sgg', - fieldName: '구군', - header: { text: '구군' }, - footer: { - text: '합계' - }, - }, - { name: 'rvbsn', fieldName: '수계', header: { text: '수계' } }, - { name: 'bstrm', fieldName: '지류', header: { text: '지류' } }, - { name: 'mdbsn', fieldName: '세부단위유역', header: { text: '세부단위유역' } }, - { name: 'lgbsn', fieldName: '중권역', header: { text: '중권역' } }, - { name: 'mdmbsn', fieldName: '소권역', header: { text: '소권역' } }, - { name: 'specl_cntrpln_ar', fieldName: '특별대책지역', header: { text: '특별대책지역' } }, - { - name: 'total_popl', - fieldName: '총인구', - header: { text: '총인구' }, - footer: { - expression: 'sum' as const, - numberFormat: '#,##0', - valueCallback: (grid: GridView, column: DataColumn) => { - return getFooterSummary(grid, column); - }, - }, - }, - { name: 'popl_sm', fieldName: '내국인', header: { text: '내국인' } }, - { name: 'frgnr_popl_sm', fieldName: '외국인', header: { text: '외국인' } }, - { name: 'area', fieldName: '행정참고자료면적(㎢)', header: { text: '행정참고자료면적(㎢)' } }, - { name: 'popltn_sm', fieldName: '총인구(명)', header: { text: '총인구(명)' } }, - { name: 'ar_sm', fieldName: '총면적(㎢)', header: { text: '총면적(㎢)' } }, - { name: 'swge_proc_zone_inner_sm', fieldName: '합계', header: { text: '합계' } }, - { name: 'pblswrg_popltn_sm', fieldName: '소계', header: { text: '소계' } }, - { name: 'pblswrg_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' } }, - { name: 'pblswrg_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' } }, - { name: 'pblswrg_tert_trt', fieldName: '고도처리', header: { text: '고도처리' } }, - { name: 'wstr_popltn_sm', fieldName: '소계', header: { text: '소계' } }, - { name: 'wstr_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' } }, - { name: 'wstr_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' } }, - { name: 'wstr_tert_trt', fieldName: '고도처리', header: { text: '고도처리' } }, - { name: 'not_conect_popltn', fieldName: '미접속인구', header: { text: '미접속인구' } }, - { name: 'swge_proc_zone_inner_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' } }, - { name: 'swge_proc_zone_outer_sm', fieldName: '합계', header: { text: '합계' } }, - { name: 'town_unproc_popltn', fieldName: '미처리인구', header: { text: '미처리인구' } }, - { name: 'town_swtt_popltn', fieldName: '오수처리인구', header: { text: '오수처리인구' } }, - { name: 'town_wrrtn_popltn', fieldName: '정화조인구', header: { text: '정화조인구' } }, - { name: 'swge_proc_zone_outer_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' } }, - { name: 'pblswrg_popltn_suprt', fieldName: '공공하수처리구역인구보급율(%)', header: { text: '공공하수처리구역인구보급율(%)' } }, - { name: 'adtrt_popltn_suprt', fieldName: '고도처리인구보급율(%)', header: { text: `고도처리인구보급율(%)` } }, - { name: 'swrg_instlrt', fieldName: '하수도설치율(%)', header: { text: '하수도설치율(%)' } }, - { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, - ]; - - const columnLayout = [ - { - name: 'groupA', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sido', 'sgg'], - }, - 'rvbsn', - 'bstrm', - { - name: 'groupB', - hideChildHeaders: false, - header: { text: '수계영향권별분류류' }, - items: ['mdbsn', 'lgbsn', 'mdmbsn'], - }, - 'specl_cntrpln_ar', - { - name: 'groupC', - hideChildHeaders: false, - header: { text: '행정참고자료인구' }, - items: ['total_popl', 'popl_sm', 'frgnr_popl_sm'], - }, - 'area', - 'popltn_sm', - 'ar_sm', - { - name: 'groupD', - hideChildHeaders: false, - header: { text: '하수처리구역내' }, - items: [ - 'swge_proc_zone_inner_sm', - { - name: 'pblswrgGroup', - hideChildHeaders: false, - header: { text: '공공하수처리인구(명)' }, - items: ['pblswrg_popltn_sm', 'pblswrg_prm_trt', 'pblswrg_scd_trt', 'pblswrg_tert_trt'], - }, - { - name: 'wstrGroup', - hideChildHeaders: false, - header: { text: '폐수처리인구(명)' }, - items: ['wstr_popltn_sm', 'wstr_prm_trt', 'wstr_scd_trt', 'wstr_tert_trt'], - }, - 'not_conect_popltn', - 'swge_proc_zone_inner_ar' - ], - }, - { - name: 'groupE', - hideChildHeaders: false, - header: { text: '하수처리구역외' }, - items: ['swge_proc_zone_outer_sm', 'town_swtt_popltn', 'town_unproc_popltn', 'town_wrrtn_popltn', 'swge_proc_zone_outer_ar'], - }, - 'pblswrg_popltn_suprt', - 'adtrt_popltn_suprt', - 'swrg_instlrt', - 'rmk', - ]; + // 로직은 그대로 유지 const submitFunc = () => { console.log('submit'); // 제출 로직 }; const saveFunc = () => { - console.log('submit'); + console.log('save'); // 저장 로직 }; const getLastYearDataFunc = () => { console.log('get last year data'); - // 지난연도 데이터 가져오기 로직 + // 전년도 데이터 가져오기 }; const SubmitExceptionFunc = () => { console.log('submit exception'); - // 예외 제출 로직 + // 예외 제출 로직 }; return ( @@ -152,7 +40,12 @@ const SeweragePenetrationRateMng = () => { - + ); }; diff --git a/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts b/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts new file mode 100644 index 000000000..d25b774aa --- /dev/null +++ b/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts @@ -0,0 +1,173 @@ +import type { GridView, DataColumn } from "@/components/type/DataGrid.type"; +import { getFooterSummary } from "@/components/util/grid/footerSummary"; + +// Footer 설정 생성 함수 +const createSumFooter = (format: string) => ({ + expression: 'sum' as const, + numberFormat: format, + valueCallback: (grid: GridView, column: DataColumn) => { + return getFooterSummary(grid, column); + }, +}); + +// 1. 정수형 : #,##0 +const footerInt = createSumFooter('#,##0'); + +// 2. 소수점 3자리 : #,##0.000 +const footerDecimal3 = createSumFooter('#,##0.000'); + +// 3. 소수점 1자리 : #,##0.0 +const footerDecimal1 = createSumFooter('#,##0.0'); + +/** + * 하수도 통계 관리 > 01. 하수도 보급률 + * 단일 Tab + */ +export const SeweragePenetrationRateMngColumnInfo = { + columns: [ + // [기본정보] 행정구역 - 수정 불가 + { name: 'sido', fieldName: '시도', header: { text: '시도' }, editable: false }, + { + name: 'sgg', + fieldName: '구군', + header: { text: '구군' }, + footer: { text: '합계' }, + editable: false + }, + + // [기본정보] 수계 및 권역 - 수정 불가 + { name: 'rvbsn', fieldName: '수계', header: { text: '수계' }, editable: false }, + { name: 'bstrm', fieldName: '지류', header: { text: '지류' }, editable: false }, + + // [기본정보] 수계영향권별분류 - 수정 불가 + { name: 'mdbsn', fieldName: '세부단위유역', header: { text: '세부단위유역' }, editable: false }, + { name: 'lgbsn', fieldName: '중권역', header: { text: '중권역' }, editable: false }, + { name: 'mdmbsn', fieldName: '소권역', header: { text: '소권역' }, editable: false }, + + // [입력필드] 특별대책지역 - 수정 가능 + { name: 'specl_cntrpln_ar', fieldName: '특별대책지역', header: { text: '특별대책지역' } }, + + // [참조정보] 행정참고자료인구 - 수정 불가 + { name: 'total_popl', fieldName: '총인구', header: { text: '총인구' }, footer: footerInt, editable: false }, + { name: 'popl_sm', fieldName: '내국인', header: { text: '내국인' }, footer: footerInt, editable: false }, + { name: 'frgnr_popl_sm', fieldName: '외국인', header: { text: '외국인' }, footer: footerInt, editable: false }, + + // [참조정보] 행정참고자료면적 - 수정 불가 + { name: 'area', fieldName: '행정참고자료면적(㎢)', header: { text: '행정참고자료면적(㎢)' }, footer: footerDecimal3, editable: false }, + + // [자동계산] 총인구 (Nexacro: expr 존재) - 수정 불가 + { name: 'popltn_sm', fieldName: '총인구(명)', header: { text: '총인구(명)' }, footer: footerInt, editable: false }, + + // [입력필드] 총면적 (Nexacro: 입력 가능) - 수정 가능 + { name: 'ar_sm', fieldName: '총면적(㎢)', header: { text: '총면적(㎢)' }, footer: footerDecimal3 }, + + // [자동계산] 하수처리구역 내 합계 - 수정 불가 + { name: 'swge_proc_zone_inner_sm', fieldName: '합계', header: { text: '합계' }, footer: footerInt, editable: false }, + + // [자동계산] 공공하수 소계 - 수정 불가 + { name: 'pblswrg_popltn_sm', fieldName: '소계', header: { text: '소계' }, footer: footerInt, editable: false }, + + // [입력필드] 공공하수 상세 - 수정 가능 + { name: 'pblswrg_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' }, footer: footerInt }, + { name: 'pblswrg_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' }, footer: footerInt }, + { name: 'pblswrg_tert_trt', fieldName: '고도처리', header: { text: '고도처리' }, footer: footerInt }, + + // [자동계산] 폐수 소계 - 수정 불가 + { name: 'wstr_popltn_sm', fieldName: '소계', header: { text: '소계' }, footer: footerInt, editable: false }, + + // [입력필드] 폐수 상세 - 수정 가능 + { name: 'wstr_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' }, footer: footerInt }, + { name: 'wstr_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' }, footer: footerInt }, + { name: 'wstr_tert_trt', fieldName: '고도처리', header: { text: '고도처리' }, footer: footerInt }, + + // [입력필드] 미접속인구 - 수정 가능 + { name: 'not_conect_popltn', fieldName: '미접속인구', header: { text: '미접속인구' }, footer: footerInt }, + + // [입력필드] 구역내 면적 - 수정 가능 + { name: 'swge_proc_zone_inner_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' }, footer: footerDecimal3 }, + + // [자동계산] 하수처리구역 외 합계 - 수정 불가 + { name: 'swge_proc_zone_outer_sm', fieldName: '합계', header: { text: '합계' }, footer: footerInt, editable: false }, + + // [입력필드] 구역외 상세 - 수정 가능 + { name: 'town_unproc_popltn', fieldName: '미처리인구', header: { text: '미처리인구' }, footer: footerInt }, + { name: 'town_swtt_popltn', fieldName: '오수처리인구', header: { text: '오수처리인구' }, footer: footerInt }, + { name: 'town_wrrtn_popltn', fieldName: '정화조인구', header: { text: '정화조인구' }, footer: footerInt }, + + // [입력필드] 구역외 면적 - 수정 가능 + { name: 'swge_proc_zone_outer_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' }, footer: footerDecimal3 }, + + // [자동계산] 비율 (수식) - 수정 불가 + { name: 'pblswrg_popltn_suprt', fieldName: '공공하수처리구역인구보급율(%)', header: { text: '공공하수처리구역인구보급율(%)' }, footer: footerDecimal1, editable: false }, + { name: 'adtrt_popltn_suprt', fieldName: '고도처리인구보급율(%)', header: { text: `고도처리인구보급율(%)` }, footer: footerDecimal1, editable: false }, + { name: 'swrg_instlrt', fieldName: '하수도설치율(%)', header: { text: '하수도설치율(%)' }, footer: footerDecimal1, editable: false }, + + // [입력필드] 비고 - 수정 가능 + { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, + ], + + columnLayout: [ + { + name: 'groupA', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['sido', 'sgg'], + }, + 'rvbsn', + 'bstrm', + { + name: 'groupB', + hideChildHeaders: false, + header: { text: '수계영향권별분류' }, + items: ['mdbsn', 'lgbsn', 'mdmbsn'], + }, + 'specl_cntrpln_ar', + { + name: 'groupC', + hideChildHeaders: false, + header: { text: '행정참고자료인구' }, + items: ['total_popl', 'popl_sm', 'frgnr_popl_sm'], + }, + 'area', + 'popltn_sm', + 'ar_sm', + { + name: 'groupD', + hideChildHeaders: false, + header: { text: '하수처리구역내' }, + items: [ + 'swge_proc_zone_inner_sm', + { + name: 'pblswrgGroup', + hideChildHeaders: false, + header: { text: '공공하수처리인구(명)' }, + items: ['pblswrg_popltn_sm', 'pblswrg_prm_trt', 'pblswrg_scd_trt', 'pblswrg_tert_trt'], + }, + { + name: 'wstrGroup', + hideChildHeaders: false, + header: { text: '폐수처리인구(명)' }, + items: ['wstr_popltn_sm', 'wstr_prm_trt', 'wstr_scd_trt', 'wstr_tert_trt'], + }, + 'not_conect_popltn', + 'swge_proc_zone_inner_ar' + ], + }, + { + name: 'groupE', + hideChildHeaders: false, + header: { text: '하수처리구역외' }, + items: [ + 'swge_proc_zone_outer_sm', + 'town_unproc_popltn', + 'town_swtt_popltn', + 'town_wrrtn_popltn', + 'swge_proc_zone_outer_ar' + ], + }, + 'pblswrg_popltn_suprt', + 'adtrt_popltn_suprt', + 'swrg_instlrt', + 'rmk', + ] +}; \ No newline at end of file From 074d82a3bdbe6427e919dcfbabd520eae57e4f4f Mon Sep 17 00:00:00 2001 From: rsone001 Date: Tue, 30 Dec 2025 17:41:17 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=2002.=20=ED=95=98=EC=88=98?= =?UTF-8?q?=EA=B4=80=EB=A1=9C=20tab=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20&=20grid=20footer=20=EC=84=A4=EC=A0=95=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 개별 컬럼 정의 파일들을 리스트로 묶어 TabDataGrid에 직접 전달하는 방식으로 변경 - footerSummary.ts에 포맷별(정수/소수점) 설정 객체 추가 및 export - SeweragePenetrationRateMngColumn.ts 파일에 footer 적용 --- .../statistics/management/SewagePipeMng.tsx | 56 +- .../management/SeweragePenetrationRateMng.tsx | 1 - .../column/management/SewagePipeMngColumn.ts | 800 ------------------ .../SeweragePenetrationRateMngColumn.ts | 25 +- .../management/sewagePipe/ConnectionStatus.ts | 58 ++ .../management/sewagePipe/FacilityInstall.ts | 137 +++ .../management/sewagePipe/ManholeStatus.ts | 328 +++++++ .../sewagePipe/PipeDiameterStatus.ts | 60 ++ .../management/sewagePipe/PipeTypeStatus.ts | 374 ++++++++ .../management/sewagePipe/RegionalFacility.ts | 153 ++++ .../src/components/util/grid/footerSummary.ts | 25 +- 11 files changed, 1182 insertions(+), 835 deletions(-) delete mode 100644 apps/st/src/components/util/column/management/SewagePipeMngColumn.ts create mode 100644 apps/st/src/components/util/column/management/sewagePipe/ConnectionStatus.ts create mode 100644 apps/st/src/components/util/column/management/sewagePipe/FacilityInstall.ts create mode 100644 apps/st/src/components/util/column/management/sewagePipe/ManholeStatus.ts create mode 100644 apps/st/src/components/util/column/management/sewagePipe/PipeDiameterStatus.ts create mode 100644 apps/st/src/components/util/column/management/sewagePipe/PipeTypeStatus.ts create mode 100644 apps/st/src/components/util/column/management/sewagePipe/RegionalFacility.ts diff --git a/apps/st/src/components/statistics/management/SewagePipeMng.tsx b/apps/st/src/components/statistics/management/SewagePipeMng.tsx index a6b368119..18c912702 100644 --- a/apps/st/src/components/statistics/management/SewagePipeMng.tsx +++ b/apps/st/src/components/statistics/management/SewagePipeMng.tsx @@ -1,29 +1,63 @@ import SearchForm from "@/components/module/SearchForm"; import TabDataGrid from "@/components/module/TabDataGrid"; -import ApproveButton from "@/components/button/ApproveButton"; -import RejectButton from "@/components/button/RejectButton" +import SubmitButton from "@/components/button/SumitButton"; +import SaveButton from "@/components/button/SaveButton"; +import LastYearDataButton from "@/components/button/LastYearDataButton"; +import SubmitExceptionButton from "@/components/button/SubmitExceptionButton"; -import { SewagePipeMngColumnInfoList } from "@/components/util/column/management/SewagePipeMngColumn"; +import { RegionalFacilityColumn } from "@/components/util/column/management/sewagePipe/RegionalFacility"; +import { FacilityInstallColumn } from "@/components/util/column/management/sewagePipe/FacilityInstall"; +import { PipeTypeColumn } from "@/components/util/column/management/sewagePipe/PipeTypeStatus"; +import { PipeDiameterColumn } from "@/components/util/column/management/sewagePipe/PipeDiameterStatus"; +import { ManholeStatusColumn } from "@/components/util/column/management/sewagePipe/ManholeStatus"; +import { + AdminAreaConnectionColumn, + TreatmentPlantConnectionColumn +} from "@/components/util/column/management/sewagePipe/ConnectionStatus"; // 하수도 통계 관리 > 02. 하수관로 const SewagePipeMng = () => { - const approveFunc = () => { - console.log('appoved'); - // 승인 요청 로직 + // tab List + const SewagePipeMngColumnInfoList = [ + RegionalFacilityColumn, + FacilityInstallColumn, + PipeTypeColumn, + PipeDiameterColumn, + ManholeStatusColumn, + // 일단 각 tab으로 구현 + TreatmentPlantConnectionColumn, + AdminAreaConnectionColumn + ]; + + const submitFunc = () => { + console.log('submit'); + // 제출 로직 }; - const rejectFunc = () => { - console.log('reject'); - // 보완 요청 로직 + const saveFunc = () => { + console.log('save'); + // 저장 로직 + }; + + const getLastYearDataFunc = () => { + console.log('get last year data'); + // 전년도 데이터 가져오기 + }; + + const SubmitExceptionFunc = () => { + console.log('submit exception'); + // 예외 제출 로직 }; return ( <>
- - + + + +
diff --git a/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx b/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx index 94601064f..3f3afb7cf 100644 --- a/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx +++ b/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx @@ -10,7 +10,6 @@ import { SeweragePenetrationRateMngColumnInfo } from "@/components/util/column/m // 하수도 통계 관리 > 01. 하수도 보급률 const SeweragePenetrationRateMng = () => { - // 로직은 그대로 유지 const submitFunc = () => { console.log('submit'); // 제출 로직 diff --git a/apps/st/src/components/util/column/management/SewagePipeMngColumn.ts b/apps/st/src/components/util/column/management/SewagePipeMngColumn.ts deleted file mode 100644 index 3eced67c4..000000000 --- a/apps/st/src/components/util/column/management/SewagePipeMngColumn.ts +++ /dev/null @@ -1,800 +0,0 @@ -/** - * 하수도 통계 관리 > 2.하수관로 - * 5개 Tab: 컬럼 통합 관리 - */ - -export const SewagePipeMngColumnInfoList = [ - // ======================================== - // Tab 1: 지역별 시설현황 - // ======================================== - { - columns: [ - // 행정구역(고정) - { name: 'sido', fieldName: '시도', header: { text: '시도' } }, - { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, - - // 기본 정보 - { name: 'targetYr', fieldName: '하수정비기본계획목표년도', header: { text: '하수정비기본계획목표년도' }}, - { name: 'piplImprnPlanExtn', fieldName: '총관로정비계획연장(m)', header: { text: '총관로정비계획연장(m)' }, editable: false }, - { name: 'piplPlanExtn', fieldName: '총계획연장(m)', header: { text: '총계획연장(m)' }, editable: false }, - { name: 'piplFcltyExtn', fieldName: '총시설연장(m)', header: { text: '총시설연장(m)' }, editable: false }, - { name: 'piplSupprt', fieldName: '하수관로보급률(%)', header: { text: '하수관로보급률(%)' }, editable: false }, - - // 합류식(m) - { name: 'cmbnPlanAr', fieldName: '관로정비계획면적(㎢)', header: { text: '관로정비계획면적(㎢)' } }, - { name: 'cmbnImprnPlanExtn', fieldName: '관로정비계획연장(m)', header: { text: '관로정비계획연장(m)' } }, - { name: 'cmbnPlanExtn', fieldName: '계획연장(m)', header: { text: '계획연장(m)' }, editable: false }, - { name: 'cmbnFcltyExtn', fieldName: '시설연장(m)', header: { text: '시설연장(m)' }, editable: false }, - { name: 'cmbnRctglExtn', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, - { name: 'cmbnCicleExtn', fieldName: '원형(m)', header: { text: '원형(m)' } }, - { name: 'cmbnOpswrExtn', fieldName: '개거(m)', header: { text: '개거(m)' } }, - { name: 'cmbnSdgttrExtn', fieldName: '측구(m)', header: { text: '측구(m)' } }, - - // 분류식(m) > 오수관로 - { name: 'pltwtrPlanAr', fieldName: '관로정비계획면적(㎢)', header: { text: '관로정비계획면적(㎢)' } }, - { name: 'pltwtrImprnPlanExtn', fieldName: '관로정비계획연장(m)', header: { text: '관로정비계획연장(m)' } }, - { name: 'pltwtrPlanExtn', fieldName: '계획연장(m)', header: { text: '계획연장(m)' }, editable: false }, - { name: 'pltwtrFlctyExtn', fieldName: '시설연장(m)', header: { text: '시설연장(m)' }, editable: false }, - { name: 'pltwtrSqreExtn', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, - { name: 'pltwtrCiclExtn', fieldName: '원형(m)', header: { text: '원형(m)' } }, - - // 분류식(m) > 우수관로 - { name: 'rainwtrPlanAr', fieldName: '관로정비계획면적(㎢)', header: { text: '관로정비계획면적(㎢)' } }, - { name: 'rainwtrImprnPlanExtn', fieldName: '관로정비계획연장(m)', header: { text: '관로정비계획연장(m)' } }, - { name: 'rainwtrPlanExtn', fieldName: '계획연장(m)', header: { text: '계획연장(m)' }, editable: false }, - { name: 'rainwtrFlctyExtn', fieldName: '시설연장(m)', header: { text: '시설연장(m)' }, editable: false }, - { name: 'rainwtrSqreExtn', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, - { name: 'rainwtrCiclExtn', fieldName: '원형(m)', header: { text: '원형(m)' } }, - { name: 'rainwtrOpswrExtn', fieldName: '개거(m)', header: { text: '개거(m)' } }, - { name: 'rainwtrSdgttrExtn', fieldName: '측구(m)', header: { text: '측구(m)' } }, - - // 맨홀 및 기타 시설 - { name: 'mnhleSite', fieldName: '합류식맨홀(개소)', header: { text: '합류식맨홀(개소)' } }, - { name: 'pltwtrMnhleSite', fieldName: '오수맨홀(개소)', header: { text: '오수맨홀(개소)' } }, - { name: 'rainwtrMnhleSite', fieldName: '우수맨홀(개소)', header: { text: '우수맨홀(개소)' } }, - { name: 'pltwtrRcvrSite', fieldName: '오수받이(개소)', header: { text: '오수받이(개소)' } }, - { name: 'rainwtrRcvrSite', fieldName: '빗물받이(개소)', header: { text: '빗물받이(개소)' } }, - { name: 'soilspllSite', fieldName: '우수토실(개소)', header: { text: '우수토실(개소)' } }, - { name: 'soilholeSite', fieldName: '우수토구(개소)', header: { text: '우수토구(개소)' } }, - - // 하수도대장 전산화 - { name: 'sewerRegstrCmptExtn', fieldName: '하수도대장전산화연장(m)', header: { text: '하수도대장전산화연장(m)' } }, - { name: 'sewerRegstrCmptRt', fieldName: '하수도대장전산화율(%)', header: { text: '하수도대장전산화율(%)' }, editable: false }, - - // 비고 - { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, - ], - columnLayout: [ - { - name: 'adminArea', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sido', 'sgg'], - }, - 'targetYr', - 'piplImprnPlanExtn', - 'piplPlanExtn', - 'piplFcltyExtn', - 'piplSupprt', - { - name: 'combined', - hideChildHeaders: false, - header: { text: '합류식(m)' }, - items: [ - 'cmbnPlanAr', - 'cmbnImprnPlanExtn', - 'cmbnPlanExtn', - 'cmbnFcltyExtn', - { - name: 'cmbnCulvert', - hideChildHeaders: false, - header: { text: '암거' }, - items: ['cmbnRctglExtn', 'cmbnCicleExtn'], - }, - 'cmbnOpswrExtn', - 'cmbnSdgttrExtn', - ], - }, - { - name: 'separated', - hideChildHeaders: false, - header: { text: '분류식(m)' }, - items: [ - { - name: 'pollutedWater', - hideChildHeaders: false, - header: { text: '오수관로' }, - items: [ - 'pltwtrPlanAr', - 'pltwtrImprnPlanExtn', - 'pltwtrPlanExtn', - 'pltwtrFlctyExtn', - { - name: 'pltwtrCulvert', - hideChildHeaders: false, - header: { text: '암거' }, - items: ['pltwtrSqreExtn', 'pltwtrCiclExtn'], - }, - ], - }, - { - name: 'rainWater', - hideChildHeaders: false, - header: { text: '우수관로' }, - items: [ - 'rainwtrPlanAr', - 'rainwtrImprnPlanExtn', - 'rainwtrPlanExtn', - 'rainwtrFlctyExtn', - { - name: 'rainwtrCulvert', - hideChildHeaders: false, - header: { text: '암거' }, - items: ['rainwtrSqreExtn', 'rainwtrCiclExtn'], - }, - 'rainwtrOpswrExtn', - 'rainwtrSdgttrExtn', - ], - }, - ], - }, - 'mnhleSite', - { - name: 'separatedManhole', - hideChildHeaders: false, - header: { text: '분류식' }, - items: ['pltwtrMnhleSite', 'rainwtrMnhleSite'], - }, - 'pltwtrRcvrSite', - 'rainwtrRcvrSite', - 'soilspllSite', - 'soilholeSite', - 'sewerRegstrCmptExtn', - 'sewerRegstrCmptRt', - 'rmk', - ], - rowStartNum: 4, - fixedColumns: 1, - tabKey: 'regionalFacilityStatus', - tabLabel: '지역별 시설현황' - }, - - // ======================================== - // Tab 2: 시설별 설치현황 - // ======================================== - { - columns: [ - // 행정구역 - { name: 'sido', fieldName: '시도', header: { text: '시도' } }, - { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, - - // 하수처리장 정보 - { name: 'bscFctNm', fieldName: '하수처리장명', header: { text: '하수처리장명' } }, - { name: 'fctCpc', fieldName: '하수처리시설용량(m³/일)', header: { text: '하수처리시설용량(m³/일)' } }, - - // 처리구역면적(km²) - { name: 'procZoneSm', fieldName: '합계', header: { text: '합계' }, editable: false }, - { name: 'cmbnProcZoneAr', fieldName: '합류식', header: { text: '합류식' } }, - { name: 'sprtProcZoneAr', fieldName: '분류식', header: { text: '분류식' } }, - - // 분류식화율 - { name: 'sprtRt', fieldName: '분류식화율', header: { text: '분류식화율' }, editable: false }, - - // 배수설비(개소) - { name: 'drngEqpSm', fieldName: '합계', header: { text: '합계' }, editable: false }, - { name: 'cmbnDrngEqp', fieldName: '합류식', header: { text: '합류식' } }, - { name: 'sprtDrngEqpSm', fieldName: '소계', header: { text: '소계' }, editable: false }, - { name: 'sprtDrngEqpCnnc', fieldName: '연결', header: { text: '연결' } }, - { name: 'sprtDrngEqpDcnnc', fieldName: '미연결', header: { text: '미연결' } }, - - // 하수관로 - 총시설연장 - { name: 'piplFcltyExtn', fieldName: '총시설연장(m)', header: { text: '총시설연장(m)' }, editable: false }, - - // 차집/오수간선(m) - { name: 'icgMnnSm', fieldName: '합계', header: { text: '합계' }, editable: false }, - { name: 'icgExtn', fieldName: '차집', header: { text: '차집' } }, - { name: 'mnnExtn', fieldName: '오수 간선', header: { text: '오수 간선' } }, - - // 토실/토구(개소) - 합류식 - { name: 'cmbnSoilholeSite', fieldName: '우수토실', header: { text: '우수토실' } }, - - // 토실/토구(개소) - 분류식 - { name: 'sprtSoilholeSite', fieldName: '우수토실', header: { text: '우수토실' } }, - { name: 'sprtSoilspllSite', fieldName: '우수토구', header: { text: '우수토구' } }, - - // 지선(m) - { name: 'brnchlnSm', fieldName: '합계', header: { text: '합계' }, editable: false }, - { name: 'cmbnBrnchlnExtn', fieldName: '합류식', header: { text: '합류식' } }, - { name: 'rainwtrBrnchlnExtn', fieldName: '우수', header: { text: '우수' } }, - { name: 'pltwtrBrnchlnExtn', fieldName: '오수', header: { text: '오수' } }, - - // 비고 - { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, - ], - columnLayout: [ - { - name: 'adminArea', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sido', 'sgg'], - }, - 'bscFctNm', - 'fctCpc', - { - name: 'procZone', - hideChildHeaders: false, - header: { text: '처리구역면적(km²)' }, - items: ['procZoneSm', 'cmbnProcZoneAr', 'sprtProcZoneAr'], - }, - 'sprtRt', - { - name: 'drainEquip', - hideChildHeaders: false, - header: { text: '배수설비(개소)' }, - items: [ - 'drngEqpSm', - 'cmbnDrngEqp', - { - name: 'sprtDrainEquip', - hideChildHeaders: false, - header: { text: '분류식' }, - items: ['sprtDrngEqpSm', 'sprtDrngEqpCnnc', 'sprtDrngEqpDcnnc'], - }, - ], - }, - { - name: 'sewagePipe', - hideChildHeaders: false, - header: { text: '하수관로' }, - items: [ - 'piplFcltyExtn', - { - name: 'interceptor', - hideChildHeaders: false, - header: { text: '차집/오수간선(m)' }, - items: ['icgMnnSm', 'icgExtn', 'mnnExtn'], - }, - { - name: 'soilHole', - hideChildHeaders: false, - header: { text: '토실/토구(개소)' }, - items: [ - { - name: 'cmbnSoilHole', - hideChildHeaders: false, - header: { text: '합류식' }, - items: ['cmbnSoilholeSite'], - }, - { - name: 'sprtSoilHole', - hideChildHeaders: false, - header: { text: '분류식' }, - items: ['sprtSoilholeSite', 'sprtSoilspllSite'], - }, - ], - }, - { - name: 'branchLine', - hideChildHeaders: false, - header: { text: '지선(m)' }, - items: [ - 'brnchlnSm', - 'cmbnBrnchlnExtn', - { - name: 'sprtBranchLine', - hideChildHeaders: false, - header: { text: '분류식' }, - items: ['rainwtrBrnchlnExtn', 'pltwtrBrnchlnExtn'], - }, - ], - }, - ], - }, - 'rmk', - ], - rowStartNum: 4, - fixedColumns: 3, - tabKey: 'facilityInstallationStatus', - tabLabel: '시설별 설치현황' - }, - - // ======================================== - // Tab 3: 관종별 현황 - // ======================================== - { - columns: [ - // 행정구역 - { name: 'sido', fieldName: '시도', header: { text: '시도' } }, - { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, - - // 관종 - { name: 'swrgPipeCd', fieldName: '관종', header: { text: '관종' } }, - - // 총계 - { name: 'totalSum', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'totalLayingExtn', fieldName: '매설연장(m)', header: { text: '매설연장(m)' }, editable: false }, - { name: 'totalRemvlExtn', fieldName: '철거연장(m)', header: { text: '철거연장(m)' }, editable: false }, - - // 1996년 이전 (22Y) - { name: 'totalExtn22y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn22y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn22y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 1996년 (01Y) - { name: 'totalExtn01y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn01y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn01y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 1997년 (02Y) - { name: 'totalExtn02y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn02y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn02y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 1998년 (03Y) - { name: 'totalExtn03y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn03y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn03y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 1999년 (04Y) - { name: 'totalExtn04y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn04y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn04y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2000년 (05Y) - { name: 'totalExtn05y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn05y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn05y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2001년 (06Y) - { name: 'totalExtn06y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn06y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn06y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2002년 (07Y) - { name: 'totalExtn07y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn07y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn07y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2003년 (08Y) - { name: 'totalExtn08y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn08y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn08y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2004년 (09Y) - { name: 'totalExtn09y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn09y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn09y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2005년 (10Y) - { name: 'totalExtn10y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn10y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn10y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2006년 (11Y) - { name: 'totalExtn11y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn11y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn11y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2007년 (12Y) - { name: 'totalExtn12y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn12y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn12y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2008년 (13Y) - { name: 'totalExtn13y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn13y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn13y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2009년 (14Y) - { name: 'totalExtn14y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn14y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn14y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2010년 (15Y) - { name: 'totalExtn15y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn15y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn15y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2011년 (16Y) - { name: 'totalExtn16y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn16y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn16y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2012년 (17Y) - { name: 'totalExtn17y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn17y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn17y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2013년 (18Y) - { name: 'totalExtn18y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn18y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn18y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2014년 (19Y) - { name: 'totalExtn19y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn19y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn19y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2015년 (20Y) - { name: 'totalExtn20y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn20y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn20y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2016년 (21Y) - { name: 'totalExtn21y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn21y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn21y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2017년 (23Y) - { name: 'totalExtn23y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn23y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn23y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2018년 (24Y) - { name: 'totalExtn24y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn24y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn24y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2019년 (25Y) - { name: 'totalExtn25y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn25y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn25y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2020년 (26Y) - { name: 'totalExtn26y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn26y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn26y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2021년 (27Y) - { name: 'totalExtn27y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn27y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn27y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2022년 (28Y) - { name: 'totalExtn28y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn28y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn28y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2023년 (29Y) - { name: 'totalExtn29y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn29y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn29y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2024년 (30Y) - { name: 'totalExtn30y', fieldName: '계', header: { text: '계' }, editable: false }, - { name: 'layingExtn30y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - { name: 'remvlExtn30y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, - - // 2025년 - { name: 'layingExtn', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, - - // 비고 - { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, - ], - columnLayout: [ - { - name: 'adminArea', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sido', 'sgg'], - }, - 'swrgPipeCd', - { - name: 'totalGroup', - hideChildHeaders: false, - header: { text: '총계' }, - items: ['totalSum', 'totalLayingExtn', 'totalRemvlExtn'], - }, - { - name: 'year1996Before', - hideChildHeaders: false, - header: { text: '1996년 이전' }, - items: ['totalExtn22y', 'layingExtn22y', 'remvlExtn22y'], - }, - { - name: 'year1996', - hideChildHeaders: false, - header: { text: '1996년' }, - items: ['totalExtn01y', 'layingExtn01y', 'remvlExtn01y'], - }, - { - name: 'year1997', - hideChildHeaders: false, - header: { text: '1997년' }, - items: ['totalExtn02y', 'layingExtn02y', 'remvlExtn02y'], - }, - { - name: 'year1998', - hideChildHeaders: false, - header: { text: '1998년' }, - items: ['totalExtn03y', 'layingExtn03y', 'remvlExtn03y'], - }, - { - name: 'year1999', - hideChildHeaders: false, - header: { text: '1999년' }, - items: ['totalExtn04y', 'layingExtn04y', 'remvlExtn04y'], - }, - { - name: 'year2000', - hideChildHeaders: false, - header: { text: '2000년' }, - items: ['totalExtn05y', 'layingExtn05y', 'remvlExtn05y'], - }, - { - name: 'year2001', - hideChildHeaders: false, - header: { text: '2001년' }, - items: ['totalExtn06y', 'layingExtn06y', 'remvlExtn06y'], - }, - { - name: 'year2002', - hideChildHeaders: false, - header: { text: '2002년' }, - items: ['totalExtn07y', 'layingExtn07y', 'remvlExtn07y'], - }, - { - name: 'year2003', - hideChildHeaders: false, - header: { text: '2003년' }, - items: ['totalExtn08y', 'layingExtn08y', 'remvlExtn08y'], - }, - { - name: 'year2004', - hideChildHeaders: false, - header: { text: '2004년' }, - items: ['totalExtn09y', 'layingExtn09y', 'remvlExtn09y'], - }, - { - name: 'year2005', - hideChildHeaders: false, - header: { text: '2005년' }, - items: ['totalExtn10y', 'layingExtn10y', 'remvlExtn10y'], - }, - { - name: 'year2006', - hideChildHeaders: false, - header: { text: '2006년' }, - items: ['totalExtn11y', 'layingExtn11y', 'remvlExtn11y'], - }, - { - name: 'year2007', - hideChildHeaders: false, - header: { text: '2007년' }, - items: ['totalExtn12y', 'layingExtn12y', 'remvlExtn12y'], - }, - { - name: 'year2008', - hideChildHeaders: false, - header: { text: '2008년' }, - items: ['totalExtn13y', 'layingExtn13y', 'remvlExtn13y'], - }, - { - name: 'year2009', - hideChildHeaders: false, - header: { text: '2009년' }, - items: ['totalExtn14y', 'layingExtn14y', 'remvlExtn14y'], - }, - { - name: 'year2010', - hideChildHeaders: false, - header: { text: '2010년' }, - items: ['totalExtn15y', 'layingExtn15y', 'remvlExtn15y'], - }, - { - name: 'year2011', - hideChildHeaders: false, - header: { text: '2011년' }, - items: ['totalExtn16y', 'layingExtn16y', 'remvlExtn16y'], - }, - { - name: 'year2012', - hideChildHeaders: false, - header: { text: '2012년' }, - items: ['totalExtn17y', 'layingExtn17y', 'remvlExtn17y'], - }, - { - name: 'year2013', - hideChildHeaders: false, - header: { text: '2013년' }, - items: ['totalExtn18y', 'layingExtn18y', 'remvlExtn18y'], - }, - { - name: 'year2014', - hideChildHeaders: false, - header: { text: '2014년' }, - items: ['totalExtn19y', 'layingExtn19y', 'remvlExtn19y'], - }, - { - name: 'year2015', - hideChildHeaders: false, - header: { text: '2015년' }, - items: ['totalExtn20y', 'layingExtn20y', 'remvlExtn20y'], - }, - { - name: 'year2016', - hideChildHeaders: false, - header: { text: '2016년' }, - items: ['totalExtn21y', 'layingExtn21y', 'remvlExtn21y'], - }, - { - name: 'year2017', - hideChildHeaders: false, - header: { text: '2017년' }, - items: ['totalExtn23y', 'layingExtn23y', 'remvlExtn23y'], - }, - { - name: 'year2018', - hideChildHeaders: false, - header: { text: '2018년' }, - items: ['totalExtn24y', 'layingExtn24y', 'remvlExtn24y'], - }, - { - name: 'year2019', - hideChildHeaders: false, - header: { text: '2019년' }, - items: ['totalExtn25y', 'layingExtn25y', 'remvlExtn25y'], - }, - { - name: 'year2020', - hideChildHeaders: false, - header: { text: '2020년' }, - items: ['totalExtn26y', 'layingExtn26y', 'remvlExtn26y'], - }, - { - name: 'year2021', - hideChildHeaders: false, - header: { text: '2021년' }, - items: ['totalExtn27y', 'layingExtn27y', 'remvlExtn27y'], - }, - { - name: 'year2022', - hideChildHeaders: false, - header: { text: '2022년' }, - items: ['totalExtn28y', 'layingExtn28y', 'remvlExtn28y'], - }, - { - name: 'year2023', - hideChildHeaders: false, - header: { text: '2023년' }, - items: ['totalExtn29y', 'layingExtn29y', 'remvlExtn29y'], - }, - { - name: 'year2024', - hideChildHeaders: false, - header: { text: '2024년' }, - items: ['totalExtn30y', 'layingExtn30y', 'remvlExtn30y'], - }, - 'layingExtn', - 'rmk', - ], - rowStartNum: 2, - fixedColumns: 2, - tabKey: 'pipeTypeStatus', - tabLabel: '관종별 현황' - }, - - // ======================================== - // Tab 4: 관경별 현황 - // ======================================== - { - columns: [ - // 행정구역 - { name: 'sido', fieldName: '시도', header: { text: '시도' } }, - { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, - - // 관종 - { name: 'swrgPipeCd', fieldName: '관종', header: { text: '관종' } }, - - // 총계(m) - 계산 - { name: 'totalDiameter', fieldName: '총계(m)', header: { text: '총계(m)' }, editable: false }, - - // 원형(m) - { name: 'under200', fieldName: '200mm 미만', header: { text: '200mm 미만' } }, - { name: 'over200Undev300', fieldName: '200mm이상~300mm미만', header: { text: '200mm이상~300mm미만' } }, - { name: 'over300Undev500', fieldName: '300mm이상~500mm미만', header: { text: '300mm이상~500mm미만' } }, - { name: 'over500Undev500', fieldName: '500mm이상~800mm미만', header: { text: '500mm이상~800mm미만' } }, - { name: 'over800', fieldName: '800이상mm', header: { text: '800이상mm' } }, - - // 사각형(m) - { name: 'box', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, - - // 기타(측구 개거 등) - { name: 'etc', fieldName: '기타(측구 개거 등)', header: { text: '기타(측구 개거 등)' } }, - - // 비고 - { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, - ], - columnLayout: [ - { - name: 'adminArea', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sido', 'sgg'], - }, - 'swrgPipeCd', - 'totalDiameter', - { - name: 'circular', - hideChildHeaders: false, - header: { text: '원형(m)' }, - items: [ - 'under200', - 'over200Undev300', - 'over300Undev500', - 'over500Undev500', - 'over800', - ], - }, - 'box', - 'etc', - 'rmk', - ], - rowStartNum: 2, - fixedColumns: 1, - tabKey: 'pipeDiameterStatus', - tabLabel: '관경별 현황' - }, - - // ======================================== - // Tab 5: 시설별 현황관리 - // Tab 5-1: 행정구역별 연결 현황 (우측 그리드) - // ======================================== - { - columns: [ - // 행정구역 - { name: 'sido', fieldName: '시도', header: { text: '시도' } }, - { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, - { name: 'adstDong', fieldName: '행정구역명', header: { text: '행정구역명' } }, - - // 연결여부 - { name: 'iscan', fieldName: '연결여부', header: { text: '연결여부' } }, - - // 연결하수처리장 - { name: 'bscFctNm', fieldName: '연결하수처리장', header: { text: '연결하수처리장' } }, - ], - columnLayout: [ - { - name: 'adminArea', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sido', 'sgg', 'adstDong'], - }, - 'iscan', - 'bscFctNm', - ], - rowStartNum: 2, - fixedColumns: 1, - tabKey: 'administrativeAreaConnection', - tabLabel: '행정구역별 연결 현황' - }, - - // ======================================== - // Tab 5-2: 하수처리장별 연결 현황 (좌측 그리드) - // ======================================== - { - columns: [ - // 하수처리장 정보 - { name: 'bscFctNm', fieldName: '하수처리장명', header: { text: '하수처리장명' } }, - { name: 'fctCpc', fieldName: '용량', header: { text: '용량' } }, - { name: 'bscFctCd', fieldName: '하수처리장코드', header: { text: '하수처리장코드' } }, - - // 연결여부 - { name: 'iscan', fieldName: '연결여부', header: { text: '연결여부' } }, - - // 연결지역 - { name: 'nmlist', fieldName: '연결지역', header: { text: '연결지역' } }, - ], - columnLayout: [ - 'bscFctNm', - 'fctCpc', - 'bscFctCd', - 'iscan', - 'nmlist', - ], - rowStartNum: 1, - fixedColumns: 1, - tabKey: 'treatmentPlantConnection', - tabLabel: '하수처리장별 연결 현황' - }, -]; \ No newline at end of file diff --git a/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts b/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts index d25b774aa..b8d2c5684 100644 --- a/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts +++ b/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts @@ -1,23 +1,4 @@ -import type { GridView, DataColumn } from "@/components/type/DataGrid.type"; -import { getFooterSummary } from "@/components/util/grid/footerSummary"; - -// Footer 설정 생성 함수 -const createSumFooter = (format: string) => ({ - expression: 'sum' as const, - numberFormat: format, - valueCallback: (grid: GridView, column: DataColumn) => { - return getFooterSummary(grid, column); - }, -}); - -// 1. 정수형 : #,##0 -const footerInt = createSumFooter('#,##0'); - -// 2. 소수점 3자리 : #,##0.000 -const footerDecimal3 = createSumFooter('#,##0.000'); - -// 3. 소수점 1자리 : #,##0.0 -const footerDecimal1 = createSumFooter('#,##0.0'); +import { footerInt, footerDecimal1, footerDecimal3 } from "@/components/util/grid/footerSummary"; /** * 하수도 통계 관리 > 01. 하수도 보급률 @@ -29,8 +10,8 @@ export const SeweragePenetrationRateMngColumnInfo = { { name: 'sido', fieldName: '시도', header: { text: '시도' }, editable: false }, { name: 'sgg', - fieldName: '구군', - header: { text: '구군' }, + fieldName: '시군구', + header: { text: '시군구' }, footer: { text: '합계' }, editable: false }, diff --git a/apps/st/src/components/util/column/management/sewagePipe/ConnectionStatus.ts b/apps/st/src/components/util/column/management/sewagePipe/ConnectionStatus.ts new file mode 100644 index 000000000..080fdf083 --- /dev/null +++ b/apps/st/src/components/util/column/management/sewagePipe/ConnectionStatus.ts @@ -0,0 +1,58 @@ +// 하수도 통계 관리 > 02.하수관로 > tab 6. 시설별 현황관리 + +// Tab 6-1: 행정구역별 연결 현황 (우측 그리드) +export const AdminAreaConnectionColumn = { + columns: [ + // 행정구역 + { name: 'sido', fieldName: '시도', header: { text: '시도' } }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, + { name: 'adstDong', fieldName: '행정구역명', header: { text: '행정구역명' } }, + + // 연결여부 + { name: 'iscan', fieldName: '연결여부', header: { text: '연결여부' } }, + + // 연결하수처리장 + { name: 'bscFctNm', fieldName: '연결하수처리장', header: { text: '연결하수처리장' } }, + ], + columnLayout: [ + { + name: 'adminArea', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['sido', 'sgg', 'adstDong'], + }, + 'iscan', + 'bscFctNm', + ], + rowStartNum: 2, + fixedColumns: 1, + tabKey: 'administrativeAreaConnection', + tabLabel: '행정구역별 연결 현황' +}; + +// Tab 6-2: 하수처리장별 연결 현황 (좌측 그리드) +export const TreatmentPlantConnectionColumn = { + columns: [ + // 하수처리장 정보 + { name: 'bscFctNm', fieldName: '하수처리장명', header: { text: '하수처리장명' } }, + { name: 'fctCpc', fieldName: '용량', header: { text: '용량' } }, + { name: 'bscFctCd', fieldName: '하수처리장코드', header: { text: '하수처리장코드' } }, + + // 연결여부 + { name: 'iscan', fieldName: '연결여부', header: { text: '연결여부' } }, + + // 연결지역 + { name: 'nmlist', fieldName: '연결지역', header: { text: '연결지역' } }, + ], + columnLayout: [ + 'bscFctNm', + 'fctCpc', + 'bscFctCd', + 'iscan', + 'nmlist', + ], + rowStartNum: 1, + fixedColumns: 1, + tabKey: 'treatmentPlantConnection', + tabLabel: '하수처리장별 연결 현황' +}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/management/sewagePipe/FacilityInstall.ts b/apps/st/src/components/util/column/management/sewagePipe/FacilityInstall.ts new file mode 100644 index 000000000..9203f6014 --- /dev/null +++ b/apps/st/src/components/util/column/management/sewagePipe/FacilityInstall.ts @@ -0,0 +1,137 @@ +// 하수도 통계 관리 > 02.하수관로 > tab 2. 시설별 설치현황 + +export const FacilityInstallColumn = { + columns: [ + // 행정구역 + { name: 'sido', fieldName: '시도', header: { text: '시도' } }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, + + // 하수처리장 정보 + { name: 'bscFctNm', fieldName: '하수처리장명', header: { text: '하수처리장명' } }, + { name: 'fctCpc', fieldName: '하수처리시설용량(m³/일)', header: { text: '하수처리시설용량(m³/일)' } }, + + // 처리구역면적(km²) + { name: 'procZoneSm', fieldName: '합계', header: { text: '합계' }, editable: false }, + { name: 'cmbnProcZoneAr', fieldName: '합류식', header: { text: '합류식' } }, + { name: 'sprtProcZoneAr', fieldName: '분류식', header: { text: '분류식' } }, + + // 분류식화율 + { name: 'sprtRt', fieldName: '분류식화율', header: { text: '분류식화율' }, editable: false }, + + // 배수설비(개소) + { name: 'drngEqpSm', fieldName: '합계', header: { text: '합계' }, editable: false }, + { name: 'cmbnDrngEqp', fieldName: '합류식', header: { text: '합류식' } }, + { name: 'sprtDrngEqpSm', fieldName: '소계', header: { text: '소계' }, editable: false }, + { name: 'sprtDrngEqpCnnc', fieldName: '연결', header: { text: '연결' } }, + { name: 'sprtDrngEqpDcnnc', fieldName: '미연결', header: { text: '미연결' } }, + + // 하수관로 - 총시설연장 + { name: 'piplFcltyExtn', fieldName: '총시설연장(m)', header: { text: '총시설연장(m)' }, editable: false }, + + // 차집/오수간선(m) + { name: 'icgMnnSm', fieldName: '합계', header: { text: '합계' }, editable: false }, + { name: 'icgExtn', fieldName: '차집', header: { text: '차집' } }, + { name: 'mnnExtn', fieldName: '오수 간선', header: { text: '오수 간선' } }, + + // 토실/토구(개소) - 합류식 + { name: 'cmbnSoilholeSite', fieldName: '우수토실', header: { text: '우수토실' } }, + + // 토실/토구(개소) - 분류식 + { name: 'sprtSoilholeSite', fieldName: '우수토실', header: { text: '우수토실' } }, + { name: 'sprtSoilspllSite', fieldName: '우수토구', header: { text: '우수토구' } }, + + // 지선(m) + { name: 'brnchlnSm', fieldName: '합계', header: { text: '합계' }, editable: false }, + { name: 'cmbnBrnchlnExtn', fieldName: '합류식', header: { text: '합류식' } }, + { name: 'rainwtrBrnchlnExtn', fieldName: '우수', header: { text: '우수' } }, + { name: 'pltwtrBrnchlnExtn', fieldName: '오수', header: { text: '오수' } }, + + // 비고 + { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, + ], + columnLayout: [ + { + name: 'adminArea', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['sido', 'sgg'], + }, + 'bscFctNm', + 'fctCpc', + { + name: 'procZone', + hideChildHeaders: false, + header: { text: '처리구역면적(km²)' }, + items: ['procZoneSm', 'cmbnProcZoneAr', 'sprtProcZoneAr'], + }, + 'sprtRt', + { + name: 'drainEquip', + hideChildHeaders: false, + header: { text: '배수설비(개소)' }, + items: [ + 'drngEqpSm', + 'cmbnDrngEqp', + { + name: 'sprtDrainEquip', + hideChildHeaders: false, + header: { text: '분류식' }, + items: ['sprtDrngEqpSm', 'sprtDrngEqpCnnc', 'sprtDrngEqpDcnnc'], + }, + ], + }, + { + name: 'sewagePipe', + hideChildHeaders: false, + header: { text: '하수관로' }, + items: [ + 'piplFcltyExtn', + { + name: 'interceptor', + hideChildHeaders: false, + header: { text: '차집/오수간선(m)' }, + items: ['icgMnnSm', 'icgExtn', 'mnnExtn'], + }, + { + name: 'soilHole', + hideChildHeaders: false, + header: { text: '토실/토구(개소)' }, + items: [ + { + name: 'cmbnSoilHole', + hideChildHeaders: false, + header: { text: '합류식' }, + items: ['cmbnSoilholeSite'], + }, + { + name: 'sprtSoilHole', + hideChildHeaders: false, + header: { text: '분류식' }, + items: ['sprtSoilholeSite', 'sprtSoilspllSite'], + }, + ], + }, + { + name: 'branchLine', + hideChildHeaders: false, + header: { text: '지선(m)' }, + items: [ + 'brnchlnSm', + 'cmbnBrnchlnExtn', + { + name: 'sprtBranchLine', + hideChildHeaders: false, + header: { text: '분류식' }, + items: ['rainwtrBrnchlnExtn', 'pltwtrBrnchlnExtn'], + }, + ], + }, + ], + }, + 'rmk', + ], + rowStartNum: 4, + fixedColumns: 3, + tabKey: 'facilityInstallationStatus', + tabLabel: '시설별 설치현황' +}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/management/sewagePipe/ManholeStatus.ts b/apps/st/src/components/util/column/management/sewagePipe/ManholeStatus.ts new file mode 100644 index 000000000..2bbf508c9 --- /dev/null +++ b/apps/st/src/components/util/column/management/sewagePipe/ManholeStatus.ts @@ -0,0 +1,328 @@ +// 하수도 통계 관리 > 02.하수관로 > tab 5. 맨홀 현황 + +export const ManholeStatusColumn = { + columns: [ + // 행정구역 + { name: 'a1', fieldName: '시도', header: { text: '시도' } }, + { name: 'a2', fieldName: '시군구', header: { text: '시군구' } }, + + // 집중강우중점관리구역구분 + { name: 'a3', fieldName: '집중강우중점관리구역구분', header: { text: '집중강우중점관리구역구분' } }, + + // 연도별총계 - 맨홀뚜껑 재질(개) + { name: 'b1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'b2', fieldName: '주철', header: { text: '주철' }, editable: false }, + { name: 'b3', fieldName: '주철(조화)', header: { text: '주철(조화)' }, editable: false }, + { name: 'b4', fieldName: '콘크리트', header: { text: '콘크리트' }, editable: false }, + { name: 'b5', fieldName: '기타', header: { text: '기타' }, editable: false }, + // 연도별총계 - 추락방지시설설치맨홀(개) + { name: 'b6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' }, editable: false }, + + // 2015년 이전 - 맨홀뚜껑 재질(개) + { name: 'c1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'c2', fieldName: '주철', header: { text: '주철' } }, + { name: 'c3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'c4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'c5', fieldName: '기타', header: { text: '기타' } }, + // 2015년 이전 - 추락방지시설설치맨홀(개) + { name: 'c6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2015년 - 맨홀뚜껑 재질(개) + { name: 'd1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'd2', fieldName: '주철', header: { text: '주철' } }, + { name: 'd3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'd4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'd5', fieldName: '기타', header: { text: '기타' } }, + // 2015년 - 추락방지시설설치맨홀(개) + { name: 'd6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2016년 - 맨홀뚜껑 재질(개) + { name: 'e1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'e2', fieldName: '주철', header: { text: '주철' } }, + { name: 'e3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'e4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'e5', fieldName: '기타', header: { text: '기타' } }, + // 2016년 - 추락방지시설설치맨홀(개) + { name: 'e6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2017년 - 맨홀뚜껑 재질(개) + { name: 'f1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'f2', fieldName: '주철', header: { text: '주철' } }, + { name: 'f3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'f4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'f5', fieldName: '기타', header: { text: '기타' } }, + // 2017년 - 추락방지시설설치맨홀(개) + { name: 'f6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2018년 - 맨홀뚜껑 재질(개) + { name: 'g1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'g2', fieldName: '주철', header: { text: '주철' } }, + { name: 'g3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'g4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'g5', fieldName: '기타', header: { text: '기타' } }, + // 2018년 - 추락방지시설설치맨홀(개) + { name: 'g6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2019년 - 맨홀뚜껑 재질(개) + { name: 'h1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'h2', fieldName: '주철', header: { text: '주철' } }, + { name: 'h3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'h4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'h5', fieldName: '기타', header: { text: '기타' } }, + // 2019년 - 추락방지시설설치맨홀(개) + { name: 'h6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2020년 - 맨홀뚜껑 재질(개) + { name: 'i1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'i2', fieldName: '주철', header: { text: '주철' } }, + { name: 'i3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'i4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'i5', fieldName: '기타', header: { text: '기타' } }, + // 2020년 - 추락방지시설설치맨홀(개) + { name: 'i6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2021년 - 맨홀뚜껑 재질(개) + { name: 'j1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'j2', fieldName: '주철', header: { text: '주철' } }, + { name: 'j3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'j4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'j5', fieldName: '기타', header: { text: '기타' } }, + // 2021년 - 추락방지시설설치맨홀(개) + { name: 'j6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2022년 - 맨홀뚜껑 재질(개) + { name: 'k1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'k2', fieldName: '주철', header: { text: '주철' } }, + { name: 'k3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'k4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'k5', fieldName: '기타', header: { text: '기타' } }, + // 2022년 - 추락방지시설설치맨홀(개) + { name: 'k6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2023년 - 맨홀뚜껑 재질(개) + { name: 'l1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'l2', fieldName: '주철', header: { text: '주철' } }, + { name: 'l3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'l4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'l5', fieldName: '기타', header: { text: '기타' } }, + // 2023년 - 추락방지시설설치맨홀(개) + { name: 'l6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2024년 - 맨홀뚜껑 재질(개) + { name: 'm1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'm2', fieldName: '주철', header: { text: '주철' } }, + { name: 'm3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'm4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'm5', fieldName: '기타', header: { text: '기타' } }, + // 2024년 - 추락방지시설설치맨홀(개) + { name: 'm6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 2025년 - 맨홀뚜껑 재질(개) + { name: 'n1', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'n2', fieldName: '주철', header: { text: '주철' } }, + { name: 'n3', fieldName: '주철(조화)', header: { text: '주철(조화)' } }, + { name: 'n4', fieldName: '콘크리트', header: { text: '콘크리트' } }, + { name: 'n5', fieldName: '기타', header: { text: '기타' } }, + // 2025년 - 추락방지시설설치맨홀(개) + { name: 'n6', fieldName: '추락방지시설설치맨홀(개)', header: { text: '추락방지시설설치맨홀(개)' } }, + + // 비고 + { name: 'z1', fieldName: '비고', header: { text: '비고' } }, + ], + columnLayout: [ + { + name: 'adminArea', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['a1', 'a2'], + }, + 'a3', + { + name: 'yearlyTotal', + hideChildHeaders: false, + header: { text: '연도별총계' }, + items: [ + { + name: 'yearlyTotalMaterial', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['b1', 'b2', 'b3', 'b4', 'b5'], + }, + 'b6', + ], + }, + { + name: 'before2015', + hideChildHeaders: false, + header: { text: '2015년 이전' }, + items: [ + { + name: 'before2015Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['c1', 'c2', 'c3', 'c4', 'c5'], + }, + 'c6', + ], + }, + { + name: 'year2015', + hideChildHeaders: false, + header: { text: '2015년' }, + items: [ + { + name: 'year2015Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['d1', 'd2', 'd3', 'd4', 'd5'], + }, + 'd6', + ], + }, + { + name: 'year2016', + hideChildHeaders: false, + header: { text: '2016년' }, + items: [ + { + name: 'year2016Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['e1', 'e2', 'e3', 'e4', 'e5'], + }, + 'e6', + ], + }, + { + name: 'year2017', + hideChildHeaders: false, + header: { text: '2017년' }, + items: [ + { + name: 'year2017Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['f1', 'f2', 'f3', 'f4', 'f5'], + }, + 'f6', + ], + }, + { + name: 'year2018', + hideChildHeaders: false, + header: { text: '2018년' }, + items: [ + { + name: 'year2018Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['g1', 'g2', 'g3', 'g4', 'g5'], + }, + 'g6', + ], + }, + { + name: 'year2019', + hideChildHeaders: false, + header: { text: '2019년' }, + items: [ + { + name: 'year2019Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['h1', 'h2', 'h3', 'h4', 'h5'], + }, + 'h6', + ], + }, + { + name: 'year2020', + hideChildHeaders: false, + header: { text: '2020년' }, + items: [ + { + name: 'year2020Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['i1', 'i2', 'i3', 'i4', 'i5'], + }, + 'i6', + ], + }, + { + name: 'year2021', + hideChildHeaders: false, + header: { text: '2021년' }, + items: [ + { + name: 'year2021Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['j1', 'j2', 'j3', 'j4', 'j5'], + }, + 'j6', + ], + }, + { + name: 'year2022', + hideChildHeaders: false, + header: { text: '2022년' }, + items: [ + { + name: 'year2022Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['k1', 'k2', 'k3', 'k4', 'k5'], + }, + 'k6', + ], + }, + { + name: 'year2023', + hideChildHeaders: false, + header: { text: '2023년' }, + items: [ + { + name: 'year2023Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['l1', 'l2', 'l3', 'l4', 'l5'], + }, + 'l6', + ], + }, + { + name: 'year2024', + hideChildHeaders: false, + header: { text: '2024년' }, + items: [ + { + name: 'year2024Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['m1', 'm2', 'm3', 'm4', 'm5'], + }, + 'm6', + ], + }, + { + name: 'year2025', + hideChildHeaders: false, + header: { text: '2025년' }, + items: [ + { + name: 'year2025Material', + hideChildHeaders: false, + header: { text: '맨홀뚜껑 재질(개)' }, + items: ['n1', 'n2', 'n3', 'n4', 'n5'], + }, + 'n6', + ], + }, + 'z1', + ], + rowStartNum: 3, + fixedColumns: 2, + tabKey: 'manholeStatus', + tabLabel: '맨홀 현황' +}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/management/sewagePipe/PipeDiameterStatus.ts b/apps/st/src/components/util/column/management/sewagePipe/PipeDiameterStatus.ts new file mode 100644 index 000000000..eb4ca8ee5 --- /dev/null +++ b/apps/st/src/components/util/column/management/sewagePipe/PipeDiameterStatus.ts @@ -0,0 +1,60 @@ +// 하수도 통계 관리 > 02.하수관로 > tab 4. 관경별 현황 + +export const PipeDiameterColumn = { + columns: [ + // 행정구역 + { name: 'sido', fieldName: '시도', header: { text: '시도' } }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, + + // 관종 + { name: 'swrgPipeCd', fieldName: '관종', header: { text: '관종' } }, + + // 총계(m) - 계산 + { name: 'totalDiameter', fieldName: '총계(m)', header: { text: '총계(m)' }, editable: false }, + + // 원형(m) + { name: 'under200', fieldName: '200mm 미만', header: { text: '200mm 미만' } }, + { name: 'over200Undev300', fieldName: '200mm이상~300mm미만', header: { text: '200mm이상~300mm미만' } }, + { name: 'over300Undev500', fieldName: '300mm이상~500mm미만', header: { text: '300mm이상~500mm미만' } }, + { name: 'over500Undev500', fieldName: '500mm이상~800mm미만', header: { text: '500mm이상~800mm미만' } }, + { name: 'over800', fieldName: '800이상mm', header: { text: '800이상mm' } }, + + // 사각형(m) + { name: 'box', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, + + // 기타(측구 개거 등) + { name: 'etc', fieldName: '기타(측구 개거 등)', header: { text: '기타(측구 개거 등)' } }, + + // 비고 + { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, + ], + columnLayout: [ + { + name: 'adminArea', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['sido', 'sgg'], + }, + 'swrgPipeCd', + 'totalDiameter', + { + name: 'circular', + hideChildHeaders: false, + header: { text: '원형(m)' }, + items: [ + 'under200', + 'over200Undev300', + 'over300Undev500', + 'over500Undev500', + 'over800', + ], + }, + 'box', + 'etc', + 'rmk', + ], + rowStartNum: 2, + fixedColumns: 1, + tabKey: 'pipeDiameterStatus', + tabLabel: '관경별 현황' +}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/management/sewagePipe/PipeTypeStatus.ts b/apps/st/src/components/util/column/management/sewagePipe/PipeTypeStatus.ts new file mode 100644 index 000000000..39035dd54 --- /dev/null +++ b/apps/st/src/components/util/column/management/sewagePipe/PipeTypeStatus.ts @@ -0,0 +1,374 @@ +// 하수도 통계 관리 > 02.하수관로 > tab 3. 관종별 현황 + +export const PipeTypeColumn = { + columns: [ + // 행정구역 + { name: 'sido', fieldName: '시도', header: { text: '시도' } }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' } }, + + // 관종 + { name: 'swrgPipeCd', fieldName: '관종', header: { text: '관종' } }, + + // 총계 + { name: 'totalSum', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'totalLayingExtn', fieldName: '매설연장(m)', header: { text: '매설연장(m)' }, editable: false }, + { name: 'totalRemvlExtn', fieldName: '철거연장(m)', header: { text: '철거연장(m)' }, editable: false }, + + // 1996년 이전 (22Y) + { name: 'totalExtn22y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn22y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn22y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 1996년 (01Y) + { name: 'totalExtn01y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn01y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn01y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 1997년 (02Y) + { name: 'totalExtn02y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn02y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn02y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 1998년 (03Y) + { name: 'totalExtn03y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn03y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn03y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 1999년 (04Y) + { name: 'totalExtn04y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn04y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn04y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2000년 (05Y) + { name: 'totalExtn05y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn05y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn05y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2001년 (06Y) + { name: 'totalExtn06y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn06y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn06y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2002년 (07Y) + { name: 'totalExtn07y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn07y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn07y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2003년 (08Y) + { name: 'totalExtn08y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn08y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn08y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2004년 (09Y) + { name: 'totalExtn09y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn09y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn09y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2005년 (10Y) + { name: 'totalExtn10y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn10y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn10y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2006년 (11Y) + { name: 'totalExtn11y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn11y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn11y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2007년 (12Y) + { name: 'totalExtn12y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn12y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn12y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2008년 (13Y) + { name: 'totalExtn13y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn13y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn13y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2009년 (14Y) + { name: 'totalExtn14y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn14y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn14y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2010년 (15Y) + { name: 'totalExtn15y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn15y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn15y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2011년 (16Y) + { name: 'totalExtn16y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn16y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn16y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2012년 (17Y) + { name: 'totalExtn17y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn17y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn17y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2013년 (18Y) + { name: 'totalExtn18y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn18y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn18y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2014년 (19Y) + { name: 'totalExtn19y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn19y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn19y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2015년 (20Y) + { name: 'totalExtn20y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn20y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn20y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2016년 (21Y) + { name: 'totalExtn21y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn21y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn21y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2017년 (23Y) + { name: 'totalExtn23y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn23y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn23y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2018년 (24Y) + { name: 'totalExtn24y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn24y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn24y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2019년 (25Y) + { name: 'totalExtn25y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn25y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn25y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2020년 (26Y) + { name: 'totalExtn26y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn26y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn26y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2021년 (27Y) + { name: 'totalExtn27y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn27y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn27y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2022년 (28Y) + { name: 'totalExtn28y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn28y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn28y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2023년 (29Y) + { name: 'totalExtn29y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn29y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn29y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2024년 (30Y) + { name: 'totalExtn30y', fieldName: '계', header: { text: '계' }, editable: false }, + { name: 'layingExtn30y', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + { name: 'remvlExtn30y', fieldName: '철거연장(m)', header: { text: '철거연장(m)' } }, + + // 2025년 + { name: 'layingExtn', fieldName: '매설연장(m)', header: { text: '매설연장(m)' } }, + + // 비고 + { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, + ], + columnLayout: [ + { + name: 'adminArea', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['sido', 'sgg'], + }, + 'swrgPipeCd', + { + name: 'totalGroup', + hideChildHeaders: false, + header: { text: '총계' }, + items: ['totalSum', 'totalLayingExtn', 'totalRemvlExtn'], + }, + { + name: 'year1996Before', + hideChildHeaders: false, + header: { text: '1996년 이전' }, + items: ['totalExtn22y', 'layingExtn22y', 'remvlExtn22y'], + }, + { + name: 'year1996', + hideChildHeaders: false, + header: { text: '1996년' }, + items: ['totalExtn01y', 'layingExtn01y', 'remvlExtn01y'], + }, + { + name: 'year1997', + hideChildHeaders: false, + header: { text: '1997년' }, + items: ['totalExtn02y', 'layingExtn02y', 'remvlExtn02y'], + }, + { + name: 'year1998', + hideChildHeaders: false, + header: { text: '1998년' }, + items: ['totalExtn03y', 'layingExtn03y', 'remvlExtn03y'], + }, + { + name: 'year1999', + hideChildHeaders: false, + header: { text: '1999년' }, + items: ['totalExtn04y', 'layingExtn04y', 'remvlExtn04y'], + }, + { + name: 'year2000', + hideChildHeaders: false, + header: { text: '2000년' }, + items: ['totalExtn05y', 'layingExtn05y', 'remvlExtn05y'], + }, + { + name: 'year2001', + hideChildHeaders: false, + header: { text: '2001년' }, + items: ['totalExtn06y', 'layingExtn06y', 'remvlExtn06y'], + }, + { + name: 'year2002', + hideChildHeaders: false, + header: { text: '2002년' }, + items: ['totalExtn07y', 'layingExtn07y', 'remvlExtn07y'], + }, + { + name: 'year2003', + hideChildHeaders: false, + header: { text: '2003년' }, + items: ['totalExtn08y', 'layingExtn08y', 'remvlExtn08y'], + }, + { + name: 'year2004', + hideChildHeaders: false, + header: { text: '2004년' }, + items: ['totalExtn09y', 'layingExtn09y', 'remvlExtn09y'], + }, + { + name: 'year2005', + hideChildHeaders: false, + header: { text: '2005년' }, + items: ['totalExtn10y', 'layingExtn10y', 'remvlExtn10y'], + }, + { + name: 'year2006', + hideChildHeaders: false, + header: { text: '2006년' }, + items: ['totalExtn11y', 'layingExtn11y', 'remvlExtn11y'], + }, + { + name: 'year2007', + hideChildHeaders: false, + header: { text: '2007년' }, + items: ['totalExtn12y', 'layingExtn12y', 'remvlExtn12y'], + }, + { + name: 'year2008', + hideChildHeaders: false, + header: { text: '2008년' }, + items: ['totalExtn13y', 'layingExtn13y', 'remvlExtn13y'], + }, + { + name: 'year2009', + hideChildHeaders: false, + header: { text: '2009년' }, + items: ['totalExtn14y', 'layingExtn14y', 'remvlExtn14y'], + }, + { + name: 'year2010', + hideChildHeaders: false, + header: { text: '2010년' }, + items: ['totalExtn15y', 'layingExtn15y', 'remvlExtn15y'], + }, + { + name: 'year2011', + hideChildHeaders: false, + header: { text: '2011년' }, + items: ['totalExtn16y', 'layingExtn16y', 'remvlExtn16y'], + }, + { + name: 'year2012', + hideChildHeaders: false, + header: { text: '2012년' }, + items: ['totalExtn17y', 'layingExtn17y', 'remvlExtn17y'], + }, + { + name: 'year2013', + hideChildHeaders: false, + header: { text: '2013년' }, + items: ['totalExtn18y', 'layingExtn18y', 'remvlExtn18y'], + }, + { + name: 'year2014', + hideChildHeaders: false, + header: { text: '2014년' }, + items: ['totalExtn19y', 'layingExtn19y', 'remvlExtn19y'], + }, + { + name: 'year2015', + hideChildHeaders: false, + header: { text: '2015년' }, + items: ['totalExtn20y', 'layingExtn20y', 'remvlExtn20y'], + }, + { + name: 'year2016', + hideChildHeaders: false, + header: { text: '2016년' }, + items: ['totalExtn21y', 'layingExtn21y', 'remvlExtn21y'], + }, + { + name: 'year2017', + hideChildHeaders: false, + header: { text: '2017년' }, + items: ['totalExtn23y', 'layingExtn23y', 'remvlExtn23y'], + }, + { + name: 'year2018', + hideChildHeaders: false, + header: { text: '2018년' }, + items: ['totalExtn24y', 'layingExtn24y', 'remvlExtn24y'], + }, + { + name: 'year2019', + hideChildHeaders: false, + header: { text: '2019년' }, + items: ['totalExtn25y', 'layingExtn25y', 'remvlExtn25y'], + }, + { + name: 'year2020', + hideChildHeaders: false, + header: { text: '2020년' }, + items: ['totalExtn26y', 'layingExtn26y', 'remvlExtn26y'], + }, + { + name: 'year2021', + hideChildHeaders: false, + header: { text: '2021년' }, + items: ['totalExtn27y', 'layingExtn27y', 'remvlExtn27y'], + }, + { + name: 'year2022', + hideChildHeaders: false, + header: { text: '2022년' }, + items: ['totalExtn28y', 'layingExtn28y', 'remvlExtn28y'], + }, + { + name: 'year2023', + hideChildHeaders: false, + header: { text: '2023년' }, + items: ['totalExtn29y', 'layingExtn29y', 'remvlExtn29y'], + }, + { + name: 'year2024', + hideChildHeaders: false, + header: { text: '2024년' }, + items: ['totalExtn30y', 'layingExtn30y', 'remvlExtn30y'], + }, + 'layingExtn', + 'rmk', + ], + rowStartNum: 2, + fixedColumns: 2, + tabKey: 'pipeTypeStatus', + tabLabel: '관종별 현황' + }; \ No newline at end of file diff --git a/apps/st/src/components/util/column/management/sewagePipe/RegionalFacility.ts b/apps/st/src/components/util/column/management/sewagePipe/RegionalFacility.ts new file mode 100644 index 000000000..c9b7c2bf5 --- /dev/null +++ b/apps/st/src/components/util/column/management/sewagePipe/RegionalFacility.ts @@ -0,0 +1,153 @@ +// 하수도 통계 관리 > 02.하수관로 > tab 1. 지역별 시설현황 + +export const RegionalFacilityColumn = { + columns: [ + // 행정구역(고정) + { name: 'sido', fieldName: '시도', header: { text: '시도' } }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' } }, + + // 기본 정보 + { name: 'targetYr', fieldName: '하수정비기본계획목표년도', header: { text: '하수정비기본계획목표년도' }}, + { name: 'piplImprnPlanExtn', fieldName: '총관로정비계획연장(m)', header: { text: '총관로정비계획연장(m)' }, editable: false }, + { name: 'piplPlanExtn', fieldName: '총계획연장(m)', header: { text: '총계획연장(m)' }, editable: false }, + { name: 'piplFcltyExtn', fieldName: '총시설연장(m)', header: { text: '총시설연장(m)' }, editable: false }, + { name: 'piplSupprt', fieldName: '하수관로보급률(%)', header: { text: '하수관로보급률(%)' }, editable: false }, + + // 합류식(m) + { name: 'cmbnPlanAr', fieldName: '관로정비계획면적(㎢)', header: { text: '관로정비계획면적(㎢)' } }, + { name: 'cmbnImprnPlanExtn', fieldName: '관로정비계획연장(m)', header: { text: '관로정비계획연장(m)' } }, + { name: 'cmbnPlanExtn', fieldName: '계획연장(m)', header: { text: '계획연장(m)' }, editable: false }, + { name: 'cmbnFcltyExtn', fieldName: '시설연장(m)', header: { text: '시설연장(m)' }, editable: false }, + { name: 'cmbnRctglExtn', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, + { name: 'cmbnCicleExtn', fieldName: '원형(m)', header: { text: '원형(m)' } }, + { name: 'cmbnOpswrExtn', fieldName: '개거(m)', header: { text: '개거(m)' } }, + { name: 'cmbnSdgttrExtn', fieldName: '측구(m)', header: { text: '측구(m)' } }, + + // 분류식(m) > 오수관로 + { name: 'pltwtrPlanAr', fieldName: '관로정비계획면적(㎢)', header: { text: '관로정비계획면적(㎢)' } }, + { name: 'pltwtrImprnPlanExtn', fieldName: '관로정비계획연장(m)', header: { text: '관로정비계획연장(m)' } }, + { name: 'pltwtrPlanExtn', fieldName: '계획연장(m)', header: { text: '계획연장(m)' }, editable: false }, + { name: 'pltwtrFlctyExtn', fieldName: '시설연장(m)', header: { text: '시설연장(m)' }, editable: false }, + { name: 'pltwtrSqreExtn', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, + { name: 'pltwtrCiclExtn', fieldName: '원형(m)', header: { text: '원형(m)' } }, + + // 분류식(m) > 우수관로 + { name: 'rainwtrPlanAr', fieldName: '관로정비계획면적(㎢)', header: { text: '관로정비계획면적(㎢)' } }, + { name: 'rainwtrImprnPlanExtn', fieldName: '관로정비계획연장(m)', header: { text: '관로정비계획연장(m)' } }, + { name: 'rainwtrPlanExtn', fieldName: '계획연장(m)', header: { text: '계획연장(m)' }, editable: false }, + { name: 'rainwtrFlctyExtn', fieldName: '시설연장(m)', header: { text: '시설연장(m)' }, editable: false }, + { name: 'rainwtrSqreExtn', fieldName: '사각형(m)', header: { text: '사각형(m)' } }, + { name: 'rainwtrCiclExtn', fieldName: '원형(m)', header: { text: '원형(m)' } }, + { name: 'rainwtrOpswrExtn', fieldName: '개거(m)', header: { text: '개거(m)' } }, + { name: 'rainwtrSdgttrExtn', fieldName: '측구(m)', header: { text: '측구(m)' } }, + + // 맨홀 및 기타 시설 + { name: 'mnhleSite', fieldName: '합류식맨홀(개소)', header: { text: '합류식맨홀(개소)' } }, + { name: 'pltwtrMnhleSite', fieldName: '오수맨홀(개소)', header: { text: '오수맨홀(개소)' } }, + { name: 'rainwtrMnhleSite', fieldName: '우수맨홀(개소)', header: { text: '우수맨홀(개소)' } }, + { name: 'pltwtrRcvrSite', fieldName: '오수받이(개소)', header: { text: '오수받이(개소)' } }, + { name: 'rainwtrRcvrSite', fieldName: '빗물받이(개소)', header: { text: '빗물받이(개소)' } }, + { name: 'soilspllSite', fieldName: '우수토실(개소)', header: { text: '우수토실(개소)' } }, + { name: 'soilholeSite', fieldName: '우수토구(개소)', header: { text: '우수토구(개소)' } }, + + // 하수도대장 전산화 + { name: 'sewerRegstrCmptExtn', fieldName: '하수도대장전산화연장(m)', header: { text: '하수도대장전산화연장(m)' } }, + { name: 'sewerRegstrCmptRt', fieldName: '하수도대장전산화율(%)', header: { text: '하수도대장전산화율(%)' }, editable: false }, + + // 비고 + { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, + ], + columnLayout: [ + { + name: 'adminArea', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['sido', 'sgg'], + }, + 'targetYr', + 'piplImprnPlanExtn', + 'piplPlanExtn', + 'piplFcltyExtn', + 'piplSupprt', + { + name: 'combined', + hideChildHeaders: false, + header: { text: '합류식(m)' }, + items: [ + 'cmbnPlanAr', + 'cmbnImprnPlanExtn', + 'cmbnPlanExtn', + 'cmbnFcltyExtn', + { + name: 'cmbnCulvert', + hideChildHeaders: false, + header: { text: '암거' }, + items: ['cmbnRctglExtn', 'cmbnCicleExtn'], + }, + 'cmbnOpswrExtn', + 'cmbnSdgttrExtn', + ], + }, + { + name: 'separated', + hideChildHeaders: false, + header: { text: '분류식(m)' }, + items: [ + { + name: 'pollutedWater', + hideChildHeaders: false, + header: { text: '오수관로' }, + items: [ + 'pltwtrPlanAr', + 'pltwtrImprnPlanExtn', + 'pltwtrPlanExtn', + 'pltwtrFlctyExtn', + { + name: 'pltwtrCulvert', + hideChildHeaders: false, + header: { text: '암거' }, + items: ['pltwtrSqreExtn', 'pltwtrCiclExtn'], + }, + ], + }, + { + name: 'rainWater', + hideChildHeaders: false, + header: { text: '우수관로' }, + items: [ + 'rainwtrPlanAr', + 'rainwtrImprnPlanExtn', + 'rainwtrPlanExtn', + 'rainwtrFlctyExtn', + { + name: 'rainwtrCulvert', + hideChildHeaders: false, + header: { text: '암거' }, + items: ['rainwtrSqreExtn', 'rainwtrCiclExtn'], + }, + 'rainwtrOpswrExtn', + 'rainwtrSdgttrExtn', + ], + }, + ], + }, + 'mnhleSite', + { + name: 'separatedManhole', + hideChildHeaders: false, + header: { text: '분류식' }, + items: ['pltwtrMnhleSite', 'rainwtrMnhleSite'], + }, + 'pltwtrRcvrSite', + 'rainwtrRcvrSite', + 'soilspllSite', + 'soilholeSite', + 'sewerRegstrCmptExtn', + 'sewerRegstrCmptRt', + 'rmk', + ], + rowStartNum: 4, + fixedColumns: 1, + tabKey: 'regionalFacilityStatus', + tabLabel: '지역별 시설현황' +}; \ No newline at end of file diff --git a/apps/st/src/components/util/grid/footerSummary.ts b/apps/st/src/components/util/grid/footerSummary.ts index 740a3fc7d..300752cd5 100644 --- a/apps/st/src/components/util/grid/footerSummary.ts +++ b/apps/st/src/components/util/grid/footerSummary.ts @@ -1,5 +1,6 @@ import type { GridView, DataColumn } from "@/components/type/DataGrid.type"; +// 그리드 푸터 합계 계산 함수 (계산 로직) export const getFooterSummary = (grid: GridView, column: DataColumn) => { // 데이터 소스에서 직접 합계 계산 const dataSource = grid.getDataSource(); @@ -8,6 +9,7 @@ export const getFooterSummary = (grid: GridView, column: DataColumn) => { for (let i = 0; i < rowCount; i++) { const cellValue = dataSource.getValue(i, column.fieldName); + // 문자열인 경우 숫자로 변환 const numericValue = typeof cellValue === 'string' ? Number(String(cellValue).replace(/,/g, '')) @@ -19,4 +21,25 @@ export const getFooterSummary = (grid: GridView, column: DataColumn) => { } return sum; -}; \ No newline at end of file +}; + +// Footer 설정 객체 생성 함수 +const createSumFooter = (format: string) => ({ + expression: 'sum' as const, + numberFormat: format, + valueCallback: (grid: GridView, column: DataColumn) => { + return getFooterSummary(grid, column); + }, +}); + +// 1. 정수형 : #,##0 +export const footerInt = createSumFooter('#,##0'); + +// 2. 소수점 1자리 : #,##0.0 +export const footerDecimal1 = createSumFooter('#,##0.0'); + +// 3. 소수점 2자리 : #,##0.00 +export const footerDecimal2 = createSumFooter('#,##0.00'); + +// 4. 소수점 3자리 : #,##0.000 +export const footerDecimal3 = createSumFooter('#,##0.000'); \ No newline at end of file