[feat]하수도 재정 탭 4개 추가

This commit is contained in:
yangsein
2025-12-26 13:28:14 +09:00
parent 35ae83034c
commit 6cee09b72e
2 changed files with 351 additions and 0 deletions
@@ -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 (
<>
<SearchForm userMenual={true} fctName={true} />
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
<ReviewOpinionButton reviewOpinionFunc={reviewOpinionFunc} />
<ApproveButton approveFunc={approveFunc} />
<ReturnButton returnFunc={returnFunc} />
<SaveButton saveFunc={saveFunc} />
</div>
<TabDataGrid columnInfo={SewerageFinanceInfoListRvw} isExcelImport={false} />
</>
);
};
export default SewerageFinanceRvw;
@@ -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'
]
}
];