From b59ab18fa6e301880e2bfb468003562dd8d22486 Mon Sep 17 00:00:00 2001 From: yangsein Date: Mon, 29 Dec 2025 10:52:43 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20=ED=95=98=EC=88=98=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B6=84=EB=87=A8=20=EC=B0=8C=EA=BA=BC=EA=B8=B0(=EC=8A=AC?= =?UTF-8?q?=EB=9F=AC=EC=A7=80)=20=EC=B2=98=EB=A6=AC=20tab4=EA=B0=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/SewageExcretaSlurgeRvw.tsx | 49 ++++ .../column/SewageExcretaSlurgeColumnRvw.ts | 255 ++++++++++++++++++ 2 files changed, 304 insertions(+) create mode 100644 apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx create mode 100644 apps/st/src/components/util/column/SewageExcretaSlurgeColumnRvw.ts diff --git a/apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx b/apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx new file mode 100644 index 000000000..91be4eb63 --- /dev/null +++ b/apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx @@ -0,0 +1,49 @@ +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 { SewageExcretaSlurgeInfoList } from "@/components/util/column/SewageExcretaSlurgeColumnRvw"; + + +const SewageExcretaSlurgeRvw = () => { + + const approveFunc = () => { + console.log('approveFunc'); + // 승인 로직 + }; + + const saveFunc = () => { + console.log('submit'); + // 저장 로직 + }; + + const reviewOpinionFunc = () => { + console.log('reviewOpinionFunc'); + // 검토의견 작성 + }; + + const returnFunc = () => { + console.log('returnFunc'); + // 반려 + }; + + + return ( + <> + + +
+ + + + +
+ + + ); +}; + +export default SewageExcretaSlurgeRvw; \ No newline at end of file diff --git a/apps/st/src/components/util/column/SewageExcretaSlurgeColumnRvw.ts b/apps/st/src/components/util/column/SewageExcretaSlurgeColumnRvw.ts new file mode 100644 index 000000000..9755e8652 --- /dev/null +++ b/apps/st/src/components/util/column/SewageExcretaSlurgeColumnRvw.ts @@ -0,0 +1,255 @@ +export const SewageExcretaSlurgeInfoList = [ + { + tabKey: 'a', + tabLabel: '찌꺼기 처리시설 현황', + rowStartNum: 4, + fixedColumns: 2, + columns: [ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'BSC_FCT_NM', fieldName: 'BSC_FCT_NM', header: { text: '하수\n처리장명' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + { name: 'TOT_AMNT', fieldName: 'TOT_AMNT', header: { text: '합계' } }, + { name: 'P_AMNT', fieldName: 'P_AMNT', header: { text: '자체' } }, + { name: 'O_AMNT', fieldName: 'O_AMNT', header: { text: '외부유입량' } }, + { name: 'OUT_FCT_NM', fieldName: 'OUT_FCT_NM', header: { text: '이송처리장' } }, + { name: 'OUT_AMNT', fieldName: 'OUT_AMNT', header: { text: '이송처리량\n(㎥/년)' } }, + { name: 'DSP_MOIRAT', fieldName: 'DSP_MOIRAT', header: { text: '함수율\n(%,\n탈수기준)' } }, + { name: 'DSP_SM', fieldName: 'DSP_SM', header: { text: '찌꺼기\n처리량\n합계(톤/년)' } }, + { name: 'I_1CH_SM', fieldName: 'I_1CH_SM', header: { text: '자체찌꺼기\n처리량소계' } }, + { name: 'I_1CH_REC', fieldName: 'I_1CH_REC', header: { text: '매립' } }, + { name: 'I_1CH_INC', fieldName: 'I_1CH_INC', header: { text: '소각' } }, + { name: 'I_1CH_INC_2CH_SM', fieldName: 'I_1CH_INC_2CH_SM', header: { text: '소계' } }, + { name: 'I_1CH_INC_2CH_REC', fieldName: 'I_1CH_INC_2CH_REC', header: { text: '매립' } }, + { name: 'I_1CH_INC_2CH_RAW', fieldName: 'I_1CH_INC_2CH_RAW', header: { text: '제품원료' } }, + { name: 'I_1CH_INC_2CH_COV', fieldName: 'I_1CH_INC_2CH_COV', header: { text: '복토재' } }, + { name: 'I_1CH_INC_2CH_FCT', fieldName: 'I_1CH_INC_2CH_FCT', header: { text: '시설(업체명)' } }, + { name: 'I_1CH_SOL', fieldName: 'I_1CH_SOL', header: { text: '고화' } }, + { name: 'I_1CH_SOL_2CH_SM', fieldName: 'I_1CH_SOL_2CH_SM', header: { text: '소계' } }, + { name: 'I_1CH_SOL_2CH_REC', fieldName: 'I_1CH_SOL_2CH_REC', header: { text: '매립' } }, + { name: 'I_1CH_SOL_2CH_COV', fieldName: 'I_1CH_SOL_2CH_COV', header: { text: '복토재' } }, + { name: 'I_1CH_SOL_2CH_FCT', fieldName: 'I_1CH_SOL_2CH_FCT', header: { text: '시설(업체명)' } }, + { name: 'I_1CH_DRY', fieldName: 'I_1CH_DRY', header: { text: '건조' } }, + { name: 'I_1CH_DRY_2CH_SM', fieldName: 'I_1CH_DRY_2CH_SM', header: { text: '소계' } }, + { name: 'I_1CH_DRY_2CH_REC', fieldName: 'I_1CH_DRY_2CH_REC', header: { text: '매립' } }, + { name: 'I_1CH_DRY_2CH_INC', fieldName: 'I_1CH_DRY_2CH_INC', header: { text: '소각' } }, + { name: 'I_1CH_DRY_2CH_FUE', fieldName: 'I_1CH_DRY_2CH_FUE', header: { text: '연료' } }, + { name: 'I_1CH_DRY_2CH_RAW', fieldName: 'I_1CH_DRY_2CH_RAW', header: { text: '제품원료' } }, + { name: 'I_1CH_DRY_2CH_COV', fieldName: 'I_1CH_DRY_2CH_COV', header: { text: '복토재' } }, + { name: 'I_1CH_DRY_2CH_COM', fieldName: 'I_1CH_DRY_2CH_COM', header: { text: '퇴비화' } }, + { name: 'I_1CH_DRY_2CH_FCT', fieldName: 'I_1CH_DRY_2CH_FCT', header: { text: '시설(업체명)' } }, + { name: 'I_1CH_CAR', fieldName: 'I_1CH_CAR', header: { text: '탄화' } }, + { name: 'I_1CH_CAR_2CH_SM', fieldName: 'I_1CH_CAR_2CH_SM', header: { text: '소계' } }, + { name: 'I_1CH_CAR_2CH_INC', fieldName: 'I_1CH_CAR_2CH_INC', header: { text: '소각' } }, + { name: 'I_1CH_CAR_2CH_FUE', fieldName: 'I_1CH_CAR_2CH_FUE', header: { text: '연료' } }, + { name: 'I_1CH_CAR_2CH_FCT', fieldName: 'I_1CH_CAR_2CH_FCT', header: { text: '시설(업체명)' } }, + { name: 'I_1CH_COM', fieldName: 'I_1CH_COM', header: { text: '퇴비화' } }, + { name: 'I_1CH_COM_FCT', fieldName: 'I_1CH_COM_FCT', header: { text: '시설(업체명)' } }, + { name: 'O_CON_SM', fieldName: 'O_CON_SM', header: { text: '소계' } }, + { name: 'O_CON_REC', fieldName: 'O_CON_REC', header: { text: '매립' } }, + { name: 'O_CON_INC', fieldName: 'O_CON_INC', header: { text: '소각' } }, + { name: 'O_CON_FUE1', fieldName: 'O_CON_FUE1', header: { text: '연료' } }, + { name: 'O_CON_RAW', fieldName: 'O_CON_RAW', header: { text: '제품원료' } }, + { name: 'O_CON_COV', fieldName: 'O_CON_COV', header: { text: '복토재' } }, + { name: 'O_CON_COM', fieldName: 'O_CON_COM', header: { text: '퇴비화' } }, + { name: 'O_CON_FCT_NM', fieldName: 'O_CON_FCT_NM', header: { text: '시설(업체명)' } }, + { name: 'OM_1CH_SM', fieldName: 'OM_1CH_SM', header: { text: '수도권광역\n위탁처리량\n(톤/년)' } }, + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'BSC_FCT_NM', 'YR_GBN', + { + name: 'genAmntGroup', + header: { text: '찌꺼기발생량(톤/년,탈수기준)' }, + items: ['TOT_AMNT', 'P_AMNT', 'O_AMNT'] + }, + 'OUT_FCT_NM', 'OUT_AMNT', 'DSP_MOIRAT', 'DSP_SM', + { + name: 'internalProcessGroup', + header: { text: '자체 찌꺼기 처리량(톤/년)' }, + items: [ + 'I_1CH_SM', 'I_1CH_REC', 'I_1CH_INC', + { name: 'inc2ndGroup', header: { text: '소각 후 처리(2차)' }, items: ['I_1CH_INC_2CH_SM', 'I_1CH_INC_2CH_REC', 'I_1CH_INC_2CH_RAW', 'I_1CH_INC_2CH_COV', 'I_1CH_INC_2CH_FCT'] }, + 'I_1CH_SOL', + { name: 'sol2ndGroup', header: { text: '고화 후 처리(2차)' }, items: ['I_1CH_SOL_2CH_SM', 'I_1CH_SOL_2CH_REC', 'I_1CH_SOL_2CH_COV', 'I_1CH_SOL_2CH_FCT'] }, + 'I_1CH_DRY', + { name: 'dry2ndGroup', header: { text: '건조 후 처리(2차)' }, items: ['I_1CH_DRY_2CH_SM', 'I_1CH_DRY_2CH_REC', 'I_1CH_DRY_2CH_INC', 'I_1CH_DRY_2CH_FUE', 'I_1CH_DRY_2CH_RAW', 'I_1CH_DRY_2CH_COV', 'I_1CH_DRY_2CH_COM', 'I_1CH_DRY_2CH_FCT'] }, + 'I_1CH_CAR', + { name: 'car2ndGroup', header: { text: '탄화 후 처리(2차)' }, items: ['I_1CH_CAR_2CH_SM', 'I_1CH_CAR_2CH_INC', 'I_1CH_CAR_2CH_FUE', 'I_1CH_CAR_2CH_FCT'] }, + + { + name: 'compostGroup', + header: { text: '퇴비화' }, + items: ['I_1CH_COM_FCT'] // 중첩 없이 바로 컬럼 name을 넣어 2단으로 완성 + } + ] + }, + { + name: 'externalProcessGroup', + header: { text: '외부(민간)위탁 처리량(톤/년)' }, + items: ['O_CON_SM', 'O_CON_REC', 'O_CON_INC', 'O_CON_FUE1', 'O_CON_RAW', 'O_CON_COV', 'O_CON_COM', 'O_CON_FCT_NM'] + }, + 'OM_1CH_SM', 'RMK' + ] + }, + { + tabKey: 'b', + tabLabel: '소화조 운영현황', + rowStartNum: 3, // 3단 헤더 구조 (소화조 운영현황 > 이용현황 > 항목) + columns: [ + /* 1. 기본 시설 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'BSC_FCT_NM', fieldName: 'BSC_FCT_NM', header: { text: '하수\n처리장명' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + + /* 2. 소화조 기본 운영 현황 */ + { name: 'DGSTR_FNNC', fieldName: 'DGSTR_FNNC', header: { text: '소화조 유/무\n(Y/N)선택' } }, + { name: 'DGSTR_CPC', fieldName: 'DGSTR_CPC', header: { text: '설계\n용량\n(㎥)' } }, + { name: 'DGSTR_OPR_CPC', fieldName: 'DGSTR_OPR_CPC', header: { text: '실제운전\n용량\n(㎥)' } }, + { name: 'DGSTR_IN', fieldName: 'DGSTR_IN', header: { text: '투입량\n(㎥/일)' } }, + { name: 'DGSTR_TS', fieldName: 'DGSTR_TS', header: { text: '투입 TS 농도\n(%)' } }, + { name: 'DGSTR_YRSTP_RN_DYN', fieldName: 'DGSTR_YRSTP_RN_DYN', header: { text: '가동일수\n(연간)' } }, + { name: 'DGSTR_OCCUR_GAS', fieldName: 'DGSTR_OCCUR_GAS', header: { text: '발생가스량\n(㎥/일)' } }, + + /* 3. 소화가스 이용현황 상세 (단위: ㎥/일) */ + { name: 'DGSTR_SM', fieldName: 'DGSTR_SM', header: { text: '계' } }, + { name: 'DGSTR_SLE', fieldName: 'DGSTR_SLE', header: { text: '판매' } }, + { name: 'DGSTR_ELTGNR', fieldName: 'DGSTR_ELTGNR', header: { text: '발전' } }, + { name: 'DGSTR_ONSLF', fieldName: 'DGSTR_ONSLF', header: { text: '자체활용' } }, + { name: 'DGSTR_ETC', fieldName: 'DGSTR_ETC', header: { text: '기타(CNG등)' } }, + + /* 4. 잉여 가스 및 비고 */ + { name: 'DGSTR_GAS', fieldName: 'DGSTR_GAS', header: { text: '잉여가스량\n(㎥/일)' } }, + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'BSC_FCT_NM', + 'YR_GBN', + { + name: 'digesterMainGroup', + header: { text: '소화조 운영현황' }, + items: [ + 'DGSTR_FNNC', + 'DGSTR_CPC', + 'DGSTR_OPR_CPC', + 'DGSTR_IN', + 'DGSTR_TS', + 'DGSTR_YRSTP_RN_DYN', + 'DGSTR_OCCUR_GAS', + { + name: 'gasUsageGroup', + header: { text: '소화가스 이용현황(㎥/일)' }, + items: [ + 'DGSTR_SM', + 'DGSTR_SLE', + 'DGSTR_ELTGNR', + 'DGSTR_ONSLF', + 'DGSTR_ETC' + ] + }, + 'DGSTR_GAS' + ] + }, + 'RMK' + ] +}, +{ + tabKey: 'c', + tabLabel: '하수찌꺼기 처리시설 운영현황', + rowStartNum: 2, // 2단 헤더 구조 (순번 rowspan="2") + columns: [ + /* 1. 기본 시설 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'SLG_FCT_NM', fieldName: 'SLG_FCT_NM', header: { text: '찌꺼기처리시설명' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + + /* 2. 처리시설 운영현황 상세 */ + { name: 'TRT_METHOD', fieldName: 'TRT_METHOD', header: { text: '처리방식' } }, + { name: 'SLG_FCT_CPC', fieldName: 'SLG_FCT_CPC', header: { text: '시설용량\n(톤/일)' } }, + { name: 'OPR_CPC', fieldName: 'OPR_CPC', header: { text: '연간처리량\n(톤/년)' } }, + { name: 'ODY_RN_TIME', fieldName: 'ODY_RN_TIME', header: { text: '일평균\n가동시간\n(1~24)' } }, + { name: 'YRSTP_RN_DYN', fieldName: 'YRSTP_RN_DYN', header: { text: '연중 가동일\n(1~330)' } }, + { name: 'OPR_RT', fieldName: 'OPR_RT', header: { text: '가동율' } }, + + /* 3. 비고 */ + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'SLG_FCT_NM', + 'YR_GBN', + { + name: 'sludgeFctOprGroup', + header: { text: '처리시설 운영현황' }, + items: [ + 'TRT_METHOD', + 'SLG_FCT_CPC', + 'OPR_CPC', + 'ODY_RN_TIME', + 'YRSTP_RN_DYN', + 'OPR_RT' + ] + }, + 'RMK' + ] +}, +{ + tabKey: 'd', + tabLabel: '분뇨찌꺼기 처리현황', + rowStartNum: 2, // 2단 헤더 구조 (순번 rowspan="2") + columns: [ + /* 1. 기본 시설 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'ECSCS_NM', fieldName: 'ECSCS_NM', header: { text: '분 뇨\n처리장명' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + + /* 2. 발생량 지표 */ + { name: 'OCTY', fieldName: 'OCTY', header: { text: '발생량\n(A)=(B)+(C)\n(㎥/년)' } }, + + /* 3. 처분량 상세 (단위: ㎥/년) */ + { name: 'PROCESS_CPCTY_SM', fieldName: 'PROCESS_CPCTY_SM', header: { text: '계(B)' } }, + { name: 'RUSE', fieldName: 'RUSE', header: { text: '재활용' } }, + { name: 'LAND_RCLM', fieldName: 'LAND_RCLM', header: { text: '육상매립' } }, + { name: 'INCNR', fieldName: 'INCNR', header: { text: '소각' } }, + { name: 'OCEAN_DPSL', fieldName: 'OCEAN_DPSL', header: { text: '해양투기' } }, + { name: 'FUEL', fieldName: 'FUEL', header: { text: '연료화' } }, + { name: 'ETC', fieldName: 'ETC', header: { text: '기타' } }, + + /* 4. 미처분량 및 연계 정보 */ + { name: 'CYFD_CPCTY', fieldName: 'CYFD_CPCTY', header: { text: '미처분량\n(이월량)\n(C)\n(㎥/년)' } }, + { name: 'OUT_BSC_FCT_NM', fieldName: 'OUT_BSC_FCT_NM', header: { text: '타시설\n연계여부' } }, + + /* 5. 비고 및 의견 */ + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + { name: 'CHCKER_OPINION', fieldName: 'CHCKER_OPINION', header: { text: '검토자의견' } }, + { name: 'WRTER_OPINION', fieldName: 'WRTER_OPINION', header: { text: '사용자의견' } }, + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'ECSCS_NM', + 'YR_GBN', + 'OCTY', + { + name: 'disposalAmntGroup', + header: { text: '처 분 량(㎥/년)' }, + items: [ + 'PROCESS_CPCTY_SM', + 'RUSE', + 'LAND_RCLM', + 'INCNR', + 'OCEAN_DPSL', + 'FUEL', + 'ETC' + ] + }, + 'CYFD_CPCTY', + 'OUT_BSC_FCT_NM', + 'RMK' + ] +} +]; \ No newline at end of file