diff --git a/apps/st/src/components/statistics/review/SewerageFinanceRvw.tsx b/apps/st/src/components/statistics/review/SewerageFinanceRvw.tsx new file mode 100644 index 000000000..436834bb6 --- /dev/null +++ b/apps/st/src/components/statistics/review/SewerageFinanceRvw.tsx @@ -0,0 +1,50 @@ +import SearchForm from "@/components/module/SearchForm"; +import TabDataGrid from "@/components/module/TabDataGrid"; +import SaveButton from "@/components/button/SaveButton"; +import ApproveButton from "@/components/button/ApproveButton"; +import ReviewOpinionButton from "@/components/button/ReviewOpinionButton"; +import ReturnButton from "@/components/button/ReturnButton"; + +import { SewerageFinanceInfoListRvw } from "@/components/util/column/SewerageFinanceColumnRvw"; + + +const SewerageFinanceRvw = () => { + + const approveFunc = () => { + console.log('approveFunc'); + // 승인 로직 + }; + + const saveFunc = () => { + console.log('submit'); + // 저장 로직 + }; + + const reviewOpinionFunc = () => { + console.log('reviewOpinionFunc'); + // 검토의견 작성 + }; + + const returnFunc = () => { + console.log('returnFunc'); + // 반려 + }; + + + return ( + <> + + +
+ + + + +
+ + + ); +}; + + +export default SewerageFinanceRvw; \ No newline at end of file diff --git a/apps/st/src/components/util/column/SewerageFinanceColumnRvw.ts b/apps/st/src/components/util/column/SewerageFinanceColumnRvw.ts new file mode 100644 index 000000000..c0beeae20 --- /dev/null +++ b/apps/st/src/components/util/column/SewerageFinanceColumnRvw.ts @@ -0,0 +1,301 @@ +export const SewerageFinanceInfoListRvw= [ + { + tabKey: 'a', + tabLabel: '하수도재정 결산', + rowStartNum: 3, // 3단 헤더 구조 반영 + fixedColumns: 1, // 순번, 시도, 시군구, 행정코드, 구분까지 고정 + columns: [ + /* 1. 기본 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + + /* 2. 재정별 사업비 (수입/재원) */ + { name: 'FNANC_WCT_SM', fieldName: 'FNANC_WCT_SM', header: { text: '계' } }, + { name: 'NTNXPN', fieldName: 'NTNXPN', header: { text: '중앙정부\n지원액' } }, + { name: 'LCLEXPNS', fieldName: 'LCLEXPNS', header: { text: '특․광역시, 도' } }, + { name: 'LCLTY_CT', fieldName: 'LCLTY_CT', header: { text: '시,군,구 지자체' } }, + { name: 'SEWER_RNTFEE', fieldName: 'SEWER_RNTFEE', header: { text: '하수도\n사용료' } }, + { name: 'AMNTBRNCSR', fieldName: 'AMNTBRNCSR', header: { text: '원인자\n부담금' } }, + { name: 'ETC_INCME', fieldName: 'ETC_INCME', header: { text: '기타\n잡수입' } }, + { name: 'CYFD_AMOUNT', fieldName: 'CYFD_AMOUNT', header: { text: '이월액' } }, + + /* 3. 부채액 */ + { name: 'DEBT_AMOUNT', fieldName: 'DEBT_AMOUNT', header: { text: '부채액\n(백만원)' } }, + + /* 4. 용도별 사업비 (지출) */ + { name: 'PRPOS_WCT_SM', fieldName: 'PRPOS_WCT_SM', header: { text: '계' } }, + + // 처리장 상세 + { name: 'PRCPLT_SM', fieldName: 'PRCPLT_SM', header: { text: '소계' } }, + { name: 'PRCPLT_FCLTY', fieldName: 'PRCPLT_FCLTY', header: { text: '시설비' } }, + { name: 'PRCPLT_RPAIR', fieldName: 'PRCPLT_RPAIR', header: { text: '개보수비' } }, + { name: 'PRCPLT_ORPNS', fieldName: 'PRCPLT_ORPNS', header: { text: '운영\n유지비' } }, + { name: 'PRCPLT_ETC', fieldName: 'PRCPLT_ETC', header: { text: '기타' } }, + + // 하수관로 상세 + { name: 'SEWAGE_SM', fieldName: 'SEWAGE_SM', header: { text: '소계' } }, + { name: 'SEWAGE_FCLTY', fieldName: 'SEWAGE_FCLTY', header: { text: '시설비' } }, + { name: 'SEWAGE_RPAIR', fieldName: 'SEWAGE_RPAIR', header: { text: '개보수비' } }, + { name: 'SEWAGE_ORPNS', fieldName: 'SEWAGE_ORPNS', header: { text: '운영\n유지비' } }, + { name: 'SEWAGE_ETC', fieldName: 'SEWAGE_ETC', header: { text: '기타' } }, + + // 유수지 및 배수펌프장 상세 + { name: 'SWGE_STRGE_SM', fieldName: 'SWGE_STRGE_SM', header: { text: '소계' } }, + { name: 'SWGE_STRGE_FCLTY', fieldName: 'SWGE_STRGE_FCLTY', header: { text: '시설비' } }, + { name: 'SWGE_STRGE_RPAIR', fieldName: 'SWGE_STRGE_RPAIR', header: { text: '개보수비' } }, + { name: 'SWGE_STRGE_ORPNS', fieldName: 'SWGE_STRGE_ORPNS', header: { text: '운영\n유지비' } }, + { name: 'SWGE_STRGE_ETC', fieldName: 'SWGE_STRGE_ETC', header: { text: '기타' } }, + + // 기타 지출 + { name: 'ETC_SM', fieldName: 'ETC_SM', header: { text: '소계' } }, + { name: 'ACDNT_CYFD_AMOUNT', fieldName: 'ACDNT_CYFD_AMOUNT', header: { text: '사고\n이월액' } }, + { name: 'UNRCIV_AMOUNT', fieldName: 'UNRCIV_AMOUNT', header: { text: '미수납액' } }, + { name: 'ETC_AMOUNT', fieldName: 'ETC_AMOUNT', header: { text: '기타' } }, + + /* 5. 비고 및 의견 */ + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + { + name: 'financeGroup', + header: { text: '재정별 사업비(백만원)' }, + items: [ + 'FNANC_WCT_SM', 'NTNXPN', + { name: 'localGroup', header: { text: '지방비' }, items: ['LCLEXPNS', 'LCLTY_CT'] }, + 'SEWER_RNTFEE', 'AMNTBRNCSR', 'ETC_INCME', 'CYFD_AMOUNT' + ] + }, + 'DEBT_AMOUNT', + { + name: 'usageGroup', + header: { text: '용도별사업비(백만원)' }, + items: [ + 'PRPOS_WCT_SM', + { name: 'plantGroup', header: { text: '처리장' }, items: ['PRCPLT_SM', 'PRCPLT_FCLTY', 'PRCPLT_RPAIR', 'PRCPLT_ORPNS', 'PRCPLT_ETC'] }, + { name: 'pipeGroup', header: { text: '하수관로' }, items: ['SEWAGE_SM', 'SEWAGE_FCLTY', 'SEWAGE_RPAIR', 'SEWAGE_ORPNS', 'SEWAGE_ETC'] }, + { name: 'storageGroup', header: { text: '하수저류시설' }, items: ['SWGE_STRGE_SM', 'SWGE_STRGE_FCLTY', 'SWGE_STRGE_RPAIR', 'SWGE_STRGE_ORPNS', 'SWGE_STRGE_ETC'] }, + { name: 'etcUsageGroup', header: { text: '기타' }, items: ['ETC_SM', 'ACDNT_CYFD_AMOUNT', 'UNRCIV_AMOUNT', 'ETC_AMOUNT'] } + ] + }, + 'RMK' + ] + }, + { + tabKey: 'b', + tabLabel: '하수도 요금', + rowStartNum: 2, // 2단 헤더 구조 반영 + fixedColumns: 1, // 순번, 시도, 시군구, 행정코드까지 고정 + columns: [ + /* 1. 행정 및 기본 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + /* 2. 요금 분석 데이터 */ + { + name: 'FYER_LEVY_QY', + fieldName: 'FYER_LEVY_QY', + header: { text: '연간조정량\n(㎥)\n(A)' } + }, + { + name: 'LEVY_AMOUNT', + fieldName: 'LEVY_AMOUNT', + header: { text: '하수도사용료수익\n(원)\n(B)' } + }, + { + name: 'AVRG_UNTPC', + fieldName: 'AVRG_UNTPC', + header: { text: '㎥당요금(원/㎥)\nC=(B/A)' } + }, + { + name: 'SMRIZE_PRMPC', + fieldName: 'SMRIZE_PRMPC', + header: { text: '총괄원가(원)\n(D)' } + }, + { + name: 'SMRIZE_UNIT_PRMPC', + fieldName: 'SMRIZE_UNIT_PRMPC', + header: { text: '㎥당원가(원/㎥)\nE=(D/A)' } + }, + { + name: 'RLTY_RT', + fieldName: 'RLTY_RT', + header: { text: '요금현실화율(%)\nF=(C/E*100)' } + }, + + /* 3. 기타 및 의견 */ + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } } + ], + columnLayout: [ + { + name: 'addrGroup', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'], + }, + 'FYER_LEVY_QY', + 'LEVY_AMOUNT', + 'AVRG_UNTPC', + 'SMRIZE_PRMPC', + 'SMRIZE_UNIT_PRMPC', + 'RLTY_RT', + 'RMK' + ] +}, +{ + tabKey: 'c', + tabLabel: '하수도 사용료', + rowStartNum: 2, + fixedColumns: 1, + columns: [ + /* 1. 기본 정보 */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + + /* 2. 데이터 필드 정의 (header 필수 포함) */ + { name: 'LEVY_AMOUNT', fieldName: 'LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'LEVY_QY', fieldName: 'LEVY_QY', header: { text: '부과량' } }, + { name: 'HOME_LEVY_AMOUNT', fieldName: 'HOME_LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'HOME_LEVY_QY', fieldName: 'HOME_LEVY_QY', header: { text: '부과량' } }, + { name: 'HOME_UNTPC', fieldName: 'HOME_UNTPC', header: { text: '단가' } }, + { name: 'JOB_LEVY_AMOUNT', fieldName: 'JOB_LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'JOB_LEVY_QY', fieldName: 'JOB_LEVY_QY', header: { text: '부과량' } }, + { name: 'JOB_UNTPC', fieldName: 'JOB_UNTPC', header: { text: '단가' } }, + { name: 'BSN_LEVY_AMOUNT', fieldName: 'BSN_LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'BSN_LEVY_QY', fieldName: 'BSN_LEVY_QY', header: { text: '부과량' } }, + { name: 'BSN_UNTPC', fieldName: 'BSN_UNTPC', header: { text: '단가' } }, + { name: 'BATHS1_LEVY_AMOUNT', fieldName: 'BATHS1_LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'BATHS1_LEVY_QY', fieldName: 'BATHS1_LEVY_QY', header: { text: '부과량' } }, + { name: 'BATHS1_UNTPC', fieldName: 'BATHS1_UNTPC', header: { text: '단가' } }, + { name: 'BATHS2_LEVY_AMOUNT', fieldName: 'BATHS2_LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'BATHS2_LEVY_QY', fieldName: 'BATHS2_LEVY_QY', header: { text: '부과량' } }, + { name: 'BATHS2_UNTPC', fieldName: 'BATHS2_UNTPC', header: { text: '단가' } }, + { name: 'INDUST_LEVY_AMOUNT', fieldName: 'INDUST_LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'INDUST_LEVY_QY', fieldName: 'INDUST_LEVY_QY', header: { text: '부과량' } }, + { name: 'INDUST_UNTPC', fieldName: 'INDUST_UNTPC', header: { text: '단가' } }, + { name: 'ETC_LEVY_AMOUNT', fieldName: 'ETC_LEVY_AMOUNT', header: { text: '부과액' } }, + { name: 'ETC_LEVY_QY', fieldName: 'ETC_LEVY_QY', header: { text: '부과량' } }, + { name: 'ETC_UNTPC', fieldName: 'ETC_UNTPC', header: { text: '단가' } }, + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + { + name: 'totalGroup', header: { text: '총계' }, + items: [ + { name: 'tAmtUnit', header: { text: '부과액\n(백만원)' }, items: ['LEVY_AMOUNT'] }, // fieldName 제거, items 사용 + { name: 'tQyUnit', header: { text: '부과량\n(천톤)' }, items: ['LEVY_QY'] } + ] + }, + { + name: 'homeGroup', header: { text: '가 정 용' }, + items: [ + { name: 'hAmtUnit', header: { text: '부과액\n(백만원)' }, items: ['HOME_LEVY_AMOUNT'] }, + { name: 'hQyUnit', header: { text: '부과량\n(천톤)' }, items: ['HOME_LEVY_QY'] }, + { name: 'hUntUnit', header: { text: '단가\n(원/톤)' }, items: ['HOME_UNTPC'] } + ] + }, + { + name: 'jobGroup', header: { text: '업 무 용' }, + items: [ + { name: 'jAmtUnit', header: { text: '부과액\n(백만원)' }, items: ['JOB_LEVY_AMOUNT'] }, + { name: 'jQyUnit', header: { text: '부과량\n(천톤)' }, items: ['JOB_LEVY_QY'] }, + { name: 'jUntUnit', header: { text: '단가\n(원/톤)' }, items: ['JOB_UNTPC'] } + ] + }, + { + name: 'bsnGroup', header: { text: '영 업 용(일 반 용)' }, + items: [ + { name: 'bAmtUnit', header: { text: '부과액\n(백만원)' }, items: ['BSN_LEVY_AMOUNT'] }, + { name: 'bQyUnit', header: { text: '부과량\n(천톤)' }, items: ['BSN_LEVY_QY'] }, + { name: 'bUntUnit', header: { text: '단가\n(원/톤)' }, items: ['BSN_UNTPC'] } + ] + }, + { + name: 'bath1Group', header: { text: '욕 탕 1종(대중탕용)' }, + items: [ + { name: 'bt1AmtUnit', header: { text: '부과액\n(백만원)' }, items: ['BATHS1_LEVY_AMOUNT'] }, + { name: 'bt1QyUnit', header: { text: '부과량\n(천톤)' }, items: ['BATHS1_LEVY_QY'] }, + { name: 'bt1UntUnit', header: { text: '단가\n(원/톤)' }, items: ['BATHS1_UNTPC'] } + ] + }, + { + name: 'bath2Group', header: { text: '욕 탕 2종' }, + items: [ + { name: 'bt2AmtUnit', header: { text: '부과액\n(백만원)' }, items: ['BATHS2_LEVY_AMOUNT'] }, + { name: 'bt2QyUnit', header: { text: '부과량\n(천톤)' }, items: ['BATHS2_LEVY_QY'] }, + { name: 'bt2UntUnit', header: { text: '단가\n(원/톤)' }, items: ['BATHS2_UNTPC'] } + ] + }, + { + name: 'industGroup', header: { text: '산업용 및 공업용' }, + items: [ + { name: 'iAmtUnit', header: { text: '부과액\n(백만원)' }, items: ['INDUST_LEVY_AMOUNT'] }, + { name: 'iQyUnit', header: { text: '부과량\n(천톤)' }, items: ['INDUST_LEVY_QY'] }, + { name: 'iUntUnit', header: { text: '단가\n(원/톤)' }, items: ['INDUST_UNTPC'] } + ] + }, + { + name: 'etcGroup', header: { text: '기타' }, + items: [ + { name: 'eAmtUnit', header: { text: '부과액\n(백만원)' }, items: ['ETC_LEVY_AMOUNT'] }, + { name: 'eQyUnit', header: { text: '부과량\n(천톤)' }, items: ['ETC_LEVY_QY'] }, + { name: 'eUntUnit', header: { text: '단가\n(원/톤)' }, items: ['ETC_UNTPC'] } + ] + }, + 'RMK' + ] +}, +{ + tabKey: 'd', + tabLabel: '원인자부담금', + rowStartNum: 3, // 이미지처럼 3단 헤더이므로 데이터는 3행부터 시작 + fixedColumns: 2, + columns: [ + /* 1. 기본 정보 (header 필수 포함) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + + /* 2. 데이터 필드 정의 (최하단 3행에 표시될 텍스트) */ + { name: 'LEVY_CO', fieldName: 'LEVY_CO', header: { text: '건수' } }, + { name: 'LEVY_AMOUNT', fieldName: 'LEVY_AMOUNT', header: { text: '금액(백만원)' } }, + { name: 'TRGET_LEV_STTUS_CO', fieldName: 'TRGET_LEV_STTUS_CO', header: { text: '건수' } }, + { name: 'TRGET_LEV_STTUS_AMOUNT', fieldName: 'TRGET_LEV_STTUS_AMOUNT', header: { text: '금액(백만원)' } }, + { name: 'DRNG_EQP_CO', fieldName: 'DRNG_EQP_CO', header: { text: '건수' } }, + { name: 'DRNG_EQP_AMOUNT', fieldName: 'DRNG_EQP_AMOUNT', header: { text: '금액(백만원)' } }, + { name: 'CNTRWK_CO', fieldName: 'CNTRWK_CO', header: { text: '건수' } }, + { name: 'CNTRWK_AMOUNT', fieldName: 'CNTRWK_AMOUNT', header: { text: '금액(백만원)' } }, + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'YR_GBN', + { + name: 'levyMainGroup', + header: { text: '부과액' }, + items: ['LEVY_CO', 'LEVY_AMOUNT'] // 1단(부과액) > 2단(건수, 금액) + }, + { + name: 'collectGroup', + header: { text: '대상별 징수현황' }, + items: [ + { + name: 'collectTotal', + header: { text: '계' }, + items: ['TRGET_LEV_STTUS_CO', 'TRGET_LEV_STTUS_AMOUNT'] + }, + { + name: 'contractorGroup', + header: { text: '배수설비설치자\n(하수도법 제61조 제1항)' }, + items: ['DRNG_EQP_CO', 'DRNG_EQP_AMOUNT'] + }, + { + name: 'otherGroup', + header: { text: '타공사·타행위자\n(하수도법 제61조 제2항)' }, + items: ['CNTRWK_CO', 'CNTRWK_AMOUNT'] + } + ] + }, + 'RMK' + ] +} +]; \ No newline at end of file