From 35ae83034c105e83901ad52917848cd699234cc5 Mon Sep 17 00:00:00 2001 From: yangsein Date: Fri, 26 Dec 2025 12:00:26 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=EA=B0=9C=EC=9D=B8=20=ED=95=98=EC=88=98?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=EC=8B=9C=EC=84=A4=20=ED=83=AD=203=EA=B0=9C?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/PrivateSewageFacilityRvw.tsx | 49 +++++ .../column/PrivateSewageFacilityColumnRvw.ts | 190 ++++++++++++++++++ 2 files changed, 239 insertions(+) create mode 100644 apps/st/src/components/statistics/review/PrivateSewageFacilityRvw.tsx create mode 100644 apps/st/src/components/util/column/PrivateSewageFacilityColumnRvw.ts diff --git a/apps/st/src/components/statistics/review/PrivateSewageFacilityRvw.tsx b/apps/st/src/components/statistics/review/PrivateSewageFacilityRvw.tsx new file mode 100644 index 000000000..cafd214c8 --- /dev/null +++ b/apps/st/src/components/statistics/review/PrivateSewageFacilityRvw.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 { PrivateSewageFacilityInfoListRvw } from "@/components/util/column/PrivateSewageFacilityColumnRvw"; + + +const PrivateSewageFacilityRvw = () => { + + const approveFunc = () => { + console.log('approveFunc'); + // 승인 로직 + }; + + const saveFunc = () => { + console.log('submit'); + // 저장 로직 + }; + + const reviewOpinionFunc = () => { + console.log('reviewOpinionFunc'); + // 검토의견 작성 + }; + + const returnFunc = () => { + console.log('returnFunc'); + // 반려 + }; + + + return ( + <> + + +
+ + + + +
+ + + ); +}; + +export default PrivateSewageFacilityRvw; diff --git a/apps/st/src/components/util/column/PrivateSewageFacilityColumnRvw.ts b/apps/st/src/components/util/column/PrivateSewageFacilityColumnRvw.ts new file mode 100644 index 000000000..b83243be5 --- /dev/null +++ b/apps/st/src/components/util/column/PrivateSewageFacilityColumnRvw.ts @@ -0,0 +1,190 @@ + +export const PrivateSewageFacilityInfoListRvw = [ + { + tabKey: 'a', + tabLabel: '처리용량별 오수처리시설 현황', + rowStartNum: 3, // 3단 헤더 구조 반영 + fixedColumns: 2, // 순번, 시도, 시군구, 행정코드, 구분까지 고정 + columns: [ + /* 1. 행정 및 기본 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + + /* 2. 총계 */ + { name: 'STTY_SM', fieldName: 'STTY_SM', header: { text: '총계' } }, + + /* 3. 하수처리구역 내 (단위: ㎥/일) */ + { name: 'STTY_ZONE_INNER_SM', fieldName: 'STTY_ZONE_INNER_SM', header: { text: '계' } }, + { name: 'STTY_ZONE_INNER_2', fieldName: 'STTY_ZONE_INNER_2', header: { text: '2이하' } }, + { name: 'STTY_ZONE_INNER_3', fieldName: 'STTY_ZONE_INNER_3', header: { text: '3~10' } }, + { name: 'STTY_ZONE_INNER_11', fieldName: 'STTY_ZONE_INNER_11', header: { text: '11~20' } }, + { name: 'STTY_ZONE_INNER_21', fieldName: 'STTY_ZONE_INNER_21', header: { text: '21~50' } }, + { name: 'STTY_ZONE_INNER_51', fieldName: 'STTY_ZONE_INNER_51', header: { text: '51~100' } }, + { name: 'STTY_ZONE_INNER_101', fieldName: 'STTY_ZONE_INNER_101', header: { text: '101~500' } }, + { name: 'STTY_ZONE_INNER_501', fieldName: 'STTY_ZONE_INNER_501', header: { text: '501이상' } }, + + /* 4. 하수처리구역 외 (단위: ㎥/일) */ + { name: 'STTY_ZONE_OUTER_SM', fieldName: 'STTY_ZONE_OUTER_SM', header: { text: '계' } }, + { name: 'STTY_ZONE_OUTER_2', fieldName: 'STTY_ZONE_OUTER_2', header: { text: '2이하' } }, + { name: 'STTY_ZONE_OUTER_3', fieldName: 'STTY_ZONE_OUTER_3', header: { text: '3~10' } }, + { name: 'STTY_ZONE_OUTER_11', fieldName: 'STTY_ZONE_OUTER_11', header: { text: '11~20' } }, + { name: 'STTY_ZONE_OUTER_21', fieldName: 'STTY_ZONE_OUTER_21', header: { text: '21~50' } }, + { name: 'STTY_ZONE_OUTER_51', fieldName: 'STTY_ZONE_OUTER_51', header: { text: '51~100' } }, + { name: 'STTY_ZONE_OUTER_101', fieldName: 'STTY_ZONE_OUTER_101', header: { text: '101~500' } }, + { name: 'STTY_ZONE_OUTER_501', fieldName: 'STTY_ZONE_OUTER_501', header: { text: '501이상' } }, + + /* 5. 기타 및 의견 */ + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { + name: 'addrGroup', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'], + }, + + 'YR_GBN', + 'STTY_SM', + { + name: 'individualGroup', + header: { text: '오수처리시설' }, + items: [ + { + name: 'innerGroup', + header: { text: '하수처리구역 내(㎥/일)' }, + items: [ + 'STTY_ZONE_INNER_SM', 'STTY_ZONE_INNER_2', 'STTY_ZONE_INNER_3', + 'STTY_ZONE_INNER_11', 'STTY_ZONE_INNER_21', 'STTY_ZONE_INNER_51', + 'STTY_ZONE_INNER_101', 'STTY_ZONE_INNER_501' + ] + }, + { + name: 'outerGroup', + header: { text: '하수처리구역 외(㎥/일)' }, + items: [ + 'STTY_ZONE_OUTER_SM', 'STTY_ZONE_OUTER_2', 'STTY_ZONE_OUTER_3', + 'STTY_ZONE_OUTER_11', 'STTY_ZONE_OUTER_21', 'STTY_ZONE_OUTER_51', + 'STTY_ZONE_OUTER_101', 'STTY_ZONE_OUTER_501' + ] + } + ] + }, + 'RMK' + ] + }, + { + tabKey: 'b', + tabLabel: '정화조현황', + rowStartNum: 4, // XML의 4단 헤더 구조 반영 + fixedColumns: 1, // 순번, 시도, 시군구, 구분까지 고정 + columns: [ + /* 1. 행정 및 기본 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + { name: 'TOT_FCLTY_CNT', fieldName: 'TOT_FCLTY_CNT', header: { text: '총 시설 수\n(A+D)' } }, + + /* 2. 하수처리구역 내 (Inner) */ + { name: 'SPZI_SM', fieldName: 'SPZI_SM', header: { text: '총계\nA=(B+C)/2' } }, + // 처리방식별 (B) + { name: 'SPZI_NPFL', fieldName: 'SPZI_NPFL', header: { text: '자연유하' } }, + { name: 'SPZI_ENFCT_PUMP', fieldName: 'SPZI_ENFCT_PUMP', header: { text: '강제펌핑식' } }, + { name: 'SPZI_TFM', fieldName: 'SPZI_TFM', header: { text: '살수여상' } }, + { name: 'SPZI_ARTM', fieldName: 'SPZI_ARTM', header: { text: '폭기방법' } }, + { name: 'SPZI_CTARM', fieldName: 'SPZI_CTARM', header: { text: '접촉폭기' } }, + { name: 'SPZI_ETC', fieldName: 'SPZI_ETC', header: { text: '기타' } }, + // 처리용량별 (C) + { name: 'SPZI_PROC_CPC_SM', fieldName: 'SPZI_PROC_CPC_SM', header: { text: '계(C)' } }, + { name: 'SPZI_PROC_CPC_1', fieldName: 'SPZI_PROC_CPC_1', header: { text: '10인조 이하' } }, + { name: 'SPZI_PROC_CPC_2', fieldName: 'SPZI_PROC_CPC_2', header: { text: '11~20' } }, + { name: 'SPZI_PROC_CPC_3', fieldName: 'SPZI_PROC_CPC_3', header: { text: '21~30' } }, + { name: 'SPZI_PROC_CPC_4', fieldName: 'SPZI_PROC_CPC_4', header: { text: '31~50' } }, + { name: 'SPZI_PROC_CPC_5', fieldName: 'SPZI_PROC_CPC_5', header: { text: '51~199' } }, + { name: 'SPZI_PROC_CPC_6', fieldName: 'SPZI_PROC_CPC_6', header: { text: '200~499' } }, + { name: 'SPZI_PROC_CPC_7', fieldName: 'SPZI_PROC_CPC_7', header: { text: '500~999' } }, + { name: 'SPZI_PROC_CPC_8', fieldName: 'SPZI_PROC_CPC_8', header: { text: '1,000이상' } }, + + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } } + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'YR_GBN', 'TOT_FCLTY_CNT', + { + name: 'innerMainGroup', + header: { text: '하수처리구역 내' }, + items: [ + 'SPZI_SM', + { + name: 'innerMethodGroup', + header: { text: '처리방식별' }, + items: [ + { name: 'innerTankGroup', header: { text: '부패탱크' }, items: ['SPZI_NPFL', 'SPZI_ENFCT_PUMP'] }, + 'SPZI_TFM', 'SPZI_ARTM', 'SPZI_CTARM', 'SPZI_ETC' + ] + }, + { + name: 'innerCpcGroup', + header: { text: '처리용량별' }, + items: ['SPZI_PROC_CPC_SM', 'SPZI_PROC_CPC_1', 'SPZI_PROC_CPC_2', 'SPZI_PROC_CPC_3', 'SPZI_PROC_CPC_4', 'SPZI_PROC_CPC_5', 'SPZI_PROC_CPC_6', 'SPZI_PROC_CPC_7', 'SPZI_PROC_CPC_8'] + } + ] + }, + 'RMK' + ] +},{ + tabKey: 'c', + tabLabel: '개인하수도 관리지역 지정공고 현황', + rowStartNum: 3, // 3단 헤더 구조 반영 + fixedColumns: 1, // 순번, 시도, 시군구, 구분까지 고정 + columns: [ + /* 1. 행정 및 기본 정보 (Band: Left) */ + { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, + { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + + /* 2. 관리지역 공고 현황 (하수도법 제34조의2) */ + { name: 'MGMT_AR', fieldName: 'MGMT_AR', header: { text: '공고지역\n(개소)' } }, + { name: 'APPN_SCOPE', fieldName: 'APPN_SCOPE', header: { text: '지정범위\n(㎢)' } }, + + /* 3. 정화조 상세 */ + { name: 'WRRTN_CNT', fieldName: 'WRRTN_CNT', header: { text: '개소수' } }, + { name: 'WRRTN_CPC', fieldName: 'WRRTN_CPC', header: { text: '처리용량\n(인/일)' } }, + + /* 4. 오수시설 상세 */ + { name: 'STTY_CNT', fieldName: 'STTY_CNT', header: { text: '개소수' } }, + { name: 'STTY_CPC', fieldName: 'STTY_CPC', header: { text: '처리용량\n(㎥/일)' } }, + + /* 5. 기타 및 의견 */ + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }, + ], + columnLayout: [ + { + name: 'addrGroup', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'], + }, + 'YR_GBN', + { + name: 'mgmtMainGroup', + header: { text: '개인하수도관리지역공고현황\n(하수도법 제34조의2)' }, + items: [ + 'MGMT_AR', + 'APPN_SCOPE', + { + name: 'septictankGroup', + header: { text: '정화조' }, + items: ['WRRTN_CNT', 'WRRTN_CPC'] + }, + { + name: 'sewageFacGroup', + header: { text: '오수시설' }, + items: ['STTY_CNT', 'STTY_CPC'] + } + ] + }, + 'RMK' + ] +} + +]; \ No newline at end of file