From 97435b711361070f96de6fc2388af2fa53cd684e Mon Sep 17 00:00:00 2001 From: yangsein Date: Fri, 26 Dec 2025 13:39:44 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=ED=95=98=EC=88=98=EB=8F=84=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A4=80=20=ED=83=AD2=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/SewerageServiceLevelRvw.tsx | 50 +++++++++ .../column/SewerageServiceLevelColumnRvw.ts | 105 ++++++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 apps/st/src/components/statistics/review/SewerageServiceLevelRvw.tsx create mode 100644 apps/st/src/components/util/column/SewerageServiceLevelColumnRvw.ts diff --git a/apps/st/src/components/statistics/review/SewerageServiceLevelRvw.tsx b/apps/st/src/components/statistics/review/SewerageServiceLevelRvw.tsx new file mode 100644 index 000000000..fb557baad --- /dev/null +++ b/apps/st/src/components/statistics/review/SewerageServiceLevelRvw.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 { SewerageServiceLevelInfoListRvw } from "@/components/util/column/SewerageServiceLevelColumnRvw"; + + +const SewerageServiceLevelRvw = () => { + + const approveFunc = () => { + console.log('approveFunc'); + // 승인 로직 + }; + + const saveFunc = () => { + console.log('submit'); + // 저장 로직 + }; + + const reviewOpinionFunc = () => { + console.log('reviewOpinionFunc'); + // 검토의견 작성 + }; + + const returnFunc = () => { + console.log('returnFunc'); + // 반려 + }; + + + return ( + <> + + +
+ + + + +
+ + + ); +}; + + +export default SewerageServiceLevelRvw; diff --git a/apps/st/src/components/util/column/SewerageServiceLevelColumnRvw.ts b/apps/st/src/components/util/column/SewerageServiceLevelColumnRvw.ts new file mode 100644 index 000000000..a3efcf9dc --- /dev/null +++ b/apps/st/src/components/util/column/SewerageServiceLevelColumnRvw.ts @@ -0,0 +1,105 @@ +export const SewerageServiceLevelInfoListRvw=[{ + tabKey: 'a', + tabLabel: '민원', + rowStartNum: 2, // 2단 헤더 구조 (순번 rowspan="2") + 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: 'POPLTN_SM', fieldName: 'POPLTN_SM', header: { text: '하수처리인구\n(명)' } }, + + /* 3. 민원유형 (단위: 건) */ + { name: 'CVPL_CM', fieldName: 'CVPL_CM', header: { text: '총계' } }, + { name: 'CVPL_DCWTR_QLTWTR', fieldName: 'CVPL_DCWTR_QLTWTR', header: { text: '악취' } }, + { name: 'CVPL_BSML', fieldName: 'CVPL_BSML', header: { text: '하수관로' } }, + { name: 'CVPL_FIVW', fieldName: 'CVPL_FIVW', header: { text: '배수설비' } }, + { name: 'CVPL_POLLUTN_ACDNT', fieldName: 'CVPL_POLLUTN_ACDNT', header: { text: '맨홀' } }, + { name: 'CVPL_SSOS', fieldName: 'CVPL_SSOS', header: { text: '정화조' } }, + { name: 'CVPL_CHRGE', fieldName: 'CVPL_CHRGE', header: { text: '하수도요금' } }, + { name: 'CVPL_ETC', fieldName: 'CVPL_ETC', header: { text: '기타' } }, + + /* 4. 성과 지표 및 비고 */ + { name: 'STDR_POPLTN_PER_CVPL', fieldName: 'STDR_POPLTN_PER_CVPL', header: { text: '기준인구당\n민원건수\n(건/10,000명)' } }, + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } } + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'YR_GBN', + 'POPLTN_SM', + { + name: 'complaintTypeGroup', + header: { text: '민원유형(건)' }, + items: [ + 'CVPL_CM', + 'CVPL_DCWTR_QLTWTR', + 'CVPL_BSML', + 'CVPL_FIVW', + 'CVPL_POLLUTN_ACDNT', + 'CVPL_SSOS', + 'CVPL_CHRGE', + 'CVPL_ETC' + ] + }, + 'STDR_POPLTN_PER_CVPL', + 'RMK' + ] + }, + { + tabKey: 'b', + tabLabel: '주민친화시설', + rowStartNum: 2, // 2단 헤더 구조 + fixedColumns: 5, // 순번, 시도, 시군구, 처리장명, 시설용량, 구분까지 고정 + 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: '처리장명' } }, + { name: 'FCT_CPC', fieldName: 'FCT_CPC', header: { text: '시설용량\n(㎥/일)' } }, + { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, + + /* 2. 처리장 전체 면적 */ + { name: 'PRCPLT_AR', fieldName: 'PRCPLT_AR', header: { text: '처리장\n면적(㎡)' } }, + + /* 3. 주민친화시설 면적 상세 (단위: ㎡) */ + { name: 'TOTAL_AR', fieldName: 'TOTAL_AR', header: { text: '총계' } }, + { name: 'RESTRM_AR', fieldName: 'RESTRM_AR', header: { text: '휴게시설' } }, + { name: 'CHILDPLAY_AR', fieldName: 'CHILDPLAY_AR', header: { text: '어린이놀이공간' } }, + { name: 'ALSFC_AR', fieldName: 'ALSFC_AR', header: { text: '체력단련시설' } }, + { name: 'PLGRND_AR', fieldName: 'PLGRND_AR', header: { text: '운동시설' } }, + { name: 'PRKPLCE_AR', fieldName: 'PRKPLCE_AR', header: { text: '주차장' } }, + { name: 'CTLSTT_AR', fieldName: 'CTLSTT_AR', header: { text: '교육 및\n문화시설' } }, + { name: 'NRPRK_AR', fieldName: 'NRPRK_AR', header: { text: '습지조성\n(생태공원)' } }, + { name: 'ETC_AR', fieldName: 'ETC_AR', header: { text: '기타' } }, + + /* 4. 비고 */ + { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } } + ], + columnLayout: [ + { name: 'addrGroup', header: { text: '행정구역' }, items: ['SIDO', 'GUGUN'] }, + 'BSC_FCT_NM', + 'FCT_CPC', + 'YR_GBN', + 'PRCPLT_AR', + { + name: 'friendlyFacilityGroup', + header: { text: '주민친화시설 면적(㎡)' }, + items: [ + 'TOTAL_AR', + 'RESTRM_AR', + 'CHILDPLAY_AR', + 'ALSFC_AR', + 'PLGRND_AR', + 'PRKPLCE_AR', + 'CTLSTT_AR', + 'NRPRK_AR', + 'ETC_AR' + ] + }, + 'RMK' + ] +} +]; \ No newline at end of file