From 4da4f5cd629db3a7008aa9425d4a77f09adc19bd Mon Sep 17 00:00:00 2001 From: rsone001 Date: Fri, 9 Jan 2026 16:38:38 +0900 Subject: [PATCH] =?UTF-8?q?feat:=2013.=20=ED=95=98=EC=88=98=EB=8F=84?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A4=80=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 각 tab별로 columns, columnLayout 분리 - tab 1. 민원 (ComplaintInpColumn.ts) - tab 2. 주민친화시설 (ResidentFriendlyFacilityInpColumn.ts) - 하수도서비스 수준 Component 완성 --- .../input/SewerageServiceLevelInp.tsx | 46 +++++++++- .../ComplaintInpColumn.ts | 79 +++++++++++++++++ .../ResidentFriendlyFacilityInpColumn.ts | 88 +++++++++++++++++++ 3 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 apps/st/src/components/util/column/input/sewerageServiceLevel/ComplaintInpColumn.ts create mode 100644 apps/st/src/components/util/column/input/sewerageServiceLevel/ResidentFriendlyFacilityInpColumn.ts diff --git a/apps/st/src/components/statistics/input/SewerageServiceLevelInp.tsx b/apps/st/src/components/statistics/input/SewerageServiceLevelInp.tsx index 904bb42f6..bf6cfd2fb 100644 --- a/apps/st/src/components/statistics/input/SewerageServiceLevelInp.tsx +++ b/apps/st/src/components/statistics/input/SewerageServiceLevelInp.tsx @@ -1,10 +1,54 @@ -import SearchForm from "../../module/SearchForm"; +import { useState } from "react"; +import SearchForm from "@/components/module/SearchForm"; +import { TabDataGrid } from '@rsone/components'; +import SubmitButton from "@/components/button/SumitButton"; +import SaveButton from "@/components/button/SaveButton"; +import LastYearDataButton from "@/components/button/LastYearDataButton"; +import SubmitExceptionButton from "@/components/button/SubmitExceptionButton"; + +import { ComplaintInpColumn } from "@/components/util/column/input/sewerageServiceLevel/ComplaintInpColumn"; +import { ResidentFriendlyFacilityInpColumn } from "@/components/util/column/input/sewerageServiceLevel/ResidentFriendlyFacilityInpColumn"; // 하수도 통계 관리 > 13. 하수도 서비스 수준 const SewerageServiceLevelInp = () => { + const [rowDataMap, setRowDataMap] = useState[]>>(new Map()); + + // tab List + const SewerageServiceLevelInpTabList = [ + ComplaintInpColumn, + ResidentFriendlyFacilityInpColumn + ]; + + const submitExceptionFunc = () => { + console.log('submit exception'); + // 예외 제출 로직 + }; + + const getLastYearDataFunc = () => { + console.log('get last year data'); + // 지난연도 데이터 가져오기 로직 + }; + + const submitFunc = () => { + console.log('submit'); + // 제출 로직 + }; + + const saveFunc = () => { + console.log('save'); + // 저장 로직 + }; + return ( <> +
+ + + + +
+ ); }; diff --git a/apps/st/src/components/util/column/input/sewerageServiceLevel/ComplaintInpColumn.ts b/apps/st/src/components/util/column/input/sewerageServiceLevel/ComplaintInpColumn.ts new file mode 100644 index 000000000..d56a8fb11 --- /dev/null +++ b/apps/st/src/components/util/column/input/sewerageServiceLevel/ComplaintInpColumn.ts @@ -0,0 +1,79 @@ +import { footerInt, footerDecimal1 } from "@/components/util/grid/footerSummary"; + +// 하수도 통계 관리 > 13. 하수도 서비스 수준 > tab 1: 민원 +export const ComplaintInpColumn = { + columns: [ + // 행정구역 + { name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false }, + { name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } }, + + // 행정코드 (hidden) + { name: 'ADST_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false }, + { name: 'ADST_DONG', fieldName: '행정구역명', header: { text: '행정구역명' }, visible: false }, + + // 하수처리인구(명) + { name: 'SWGE_PROC_POPLTN', fieldName: '하수처리인구(명)', header: { text: '하수처리인구(명)' }, editable: false, footer: footerInt }, + + // 민원유형(건) + { name: 'CVPL_CM', fieldName: '총계', header: { text: '총계' }, editable: false, footer: footerInt }, + { name: 'CVPL_BSML', fieldName: '악취', header: { text: '악취' }, footer: footerInt }, + { name: 'CVPL_DCWTR_QLTWTR', fieldName: '하수관로', header: { text: '하수관로' }, footer: footerInt }, + { name: 'CVPL_FIVW', fieldName: '배수설비', header: { text: '배수설비' }, footer: footerInt }, + { name: 'CVPL_POLLUTN_ACDNT', fieldName: '맨홀', header: { text: '맨홀' }, footer: footerInt }, + { name: 'CVPL_SSOS', fieldName: '정화조', header: { text: '정화조' }, footer: footerInt }, + { name: 'CVPL_CHRGE', fieldName: '하수도요금', header: { text: '하수도요금' }, footer: footerInt }, + { name: 'CVPL_UNKD', fieldName: '기타', header: { text: '기타' }, footer: footerInt }, + + // 기준인구당 민원건수(건/10,000명) + { name: 'STDR_POPLTN_PER_CVPL', fieldName: '기준인구당민원건수(건/10,000명)', header: { text: '기준인구당민원건수(건/10,000명)' }, editable: false, footer: footerDecimal1 }, + + // 비고 + { name: 'RMK', fieldName: '비고', header: { text: '비고' } }, + + // Hidden: 의견 필드 + { name: 'WRTER_OPINION', fieldName: '작성자의견', header: { text: '작성자의견' }, visible: false }, + { name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false }, + + // Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리 + { name: 'CHK_SWGE_PROC_POPLTN', fieldName: 'CHK_SWGE_PROC_POPLTN', header: { text: 'CHK_SWGE_PROC_POPLTN' }, visible: false }, + { name: 'CHK_CVPL_CM', fieldName: 'CHK_CVPL_CM', header: { text: 'CHK_CVPL_CM' }, visible: false }, + { name: 'CHK_CVPL_BSML', fieldName: 'CHK_CVPL_BSML', header: { text: 'CHK_CVPL_BSML' }, visible: false }, + { name: 'CHK_CVPL_DCWTR_QLTWTR', fieldName: 'CHK_CVPL_DCWTR_QLTWTR', header: { text: 'CHK_CVPL_DCWTR_QLTWTR' }, visible: false }, + { name: 'CHK_CVPL_FIVW', fieldName: 'CHK_CVPL_FIVW', header: { text: 'CHK_CVPL_FIVW' }, visible: false }, + { name: 'CHK_CVPL_POLLUTN_ACDNT', fieldName: 'CHK_CVPL_POLLUTN_ACDNT', header: { text: 'CHK_CVPL_POLLUTN_ACDNT' }, visible: false }, + { name: 'CHK_CVPL_SSOS', fieldName: 'CHK_CVPL_SSOS', header: { text: 'CHK_CVPL_SSOS' }, visible: false }, + { name: 'CHK_CVPL_CHRGE', fieldName: 'CHK_CVPL_CHRGE', header: { text: 'CHK_CVPL_CHRGE' }, visible: false }, + { name: 'CHK_CVPL_UNKD', fieldName: 'CHK_CVPL_UNKD', header: { text: 'CHK_CVPL_UNKD' }, visible: false }, + { name: 'CHK_STDR_POPLTN_PER_CVPL', fieldName: 'CHK_STDR_POPLTN_PER_CVPL', header: { text: 'CHK_STDR_POPLTN_PER_CVPL' }, visible: false }, + ], + + columnLayout: [ + { + name: 'group_admin', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'] + }, + 'SWGE_PROC_POPLTN', + { + name: 'group_complaint_type', + header: { text: '민원유형(건)' }, + items: [ + 'CVPL_CM', + 'CVPL_BSML', + 'CVPL_DCWTR_QLTWTR', + 'CVPL_FIVW', + 'CVPL_POLLUTN_ACDNT', + 'CVPL_SSOS', + 'CVPL_CHRGE', + 'CVPL_UNKD' + ] + }, + 'STDR_POPLTN_PER_CVPL', + 'RMK' + ], + + rowStartNum: 2, + fixedColumns: 1, + tabKey: 'complaintInp', + tabLabel: '민원' +}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/input/sewerageServiceLevel/ResidentFriendlyFacilityInpColumn.ts b/apps/st/src/components/util/column/input/sewerageServiceLevel/ResidentFriendlyFacilityInpColumn.ts new file mode 100644 index 000000000..51f4fc158 --- /dev/null +++ b/apps/st/src/components/util/column/input/sewerageServiceLevel/ResidentFriendlyFacilityInpColumn.ts @@ -0,0 +1,88 @@ +import { footerInt, footerDecimal1 } from "@/components/util/grid/footerSummary"; + +// 하수도 통계 관리 > 13. 하수도 서비스 수준 > tab 2: 주민친화시설 +export const ResidentFriendlyFacilityInpColumn = { + columns: [ + // 행정구역 + { name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false }, + { name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } }, + + // 시설 기본 정보 + { name: 'BSC_FCT_NM', fieldName: '처리장명', header: { text: '처리장명' }, editable: false }, + { name: 'FCT_CPC', fieldName: '시설용량(m³/일)', header: { text: '시설용량(m³/일)' }, editable: false, footer: footerInt }, + + // 처리장면적(㎡) + { name: 'PRCPLT_AR', fieldName: '처리장면적(㎡)', header: { text: '처리장면적(㎡)' }, footer: footerDecimal1 }, + + // 주민친화시설 면적(㎡) + { name: 'TOTAL_AR', fieldName: '총계', header: { text: '총계' }, editable: false, footer: footerInt }, + { name: 'RESTRM_AR', fieldName: '휴게시설', header: { text: '휴게시설' }, footer: footerInt }, + { name: 'CHILDPLAY_AR', fieldName: '어린이놀이공간', header: { text: '어린이놀이공간' }, footer: footerInt }, + { name: 'ALSFC_AR', fieldName: '체력단련시설', header: { text: '체력단련시설' }, footer: footerInt }, + { name: 'PLGRND_AR', fieldName: '운동시설', header: { text: '운동시설' }, footer: footerInt }, + { name: 'PRKPLCE_AR', fieldName: '주차장', header: { text: '주차장' }, footer: footerInt }, + { name: 'CTLSTT_AR', fieldName: '교육및문화시설', header: { text: '교육및문화시설' }, footer: footerInt }, + { name: 'NRPRK_AR', fieldName: '습지조성(생태공원)', header: { text: '습지조성(생태공원)' }, footer: footerInt }, + { name: 'ETC_AR', fieldName: '기타', header: { text: '기타' }, footer: footerInt }, + + // 비고 + { name: 'RMK', fieldName: '비고', header: { text: '비고' } }, + + // Hidden: 시설 정보 + { name: 'STPN_SEQ', fieldName: '싯러일련번호', header: { text: '싯러일련번호' }, visible: false }, + { name: 'ADST_CD', fieldName: '행정동코드', header: { text: '행정동코드' }, visible: false }, + { name: 'BSC_FCT_CD', fieldName: '기초시설코드', header: { text: '기초시설코드' }, visible: false }, + + // Hidden: 의견 필드 + { name: 'WRTER_OPINION', fieldName: '작성자의견', header: { text: '작성자의견' }, visible: false }, + { name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false }, + + // Hidden: 활용율 필드 + { name: 'PRCUSE_RT', fieldName: '주민친화시설활용율(%)', header: { text: '주민친화시설활용율(%)' }, visible: false }, + + // Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리 + { name: 'CHK_PRCPLT_AR', fieldName: 'CHK_PRCPLT_AR', header: { text: 'CHK_PRCPLT_AR' }, visible: false }, + { name: 'CHK_TOTAL_AR', fieldName: 'CHK_TOTAL_AR', header: { text: 'CHK_TOTAL_AR' }, visible: false }, + { name: 'CHK_RESTRM_AR', fieldName: 'CHK_RESTRM_AR', header: { text: 'CHK_RESTRM_AR' }, visible: false }, + { name: 'CHK_CHILDPLAY_AR', fieldName: 'CHK_CHILDPLAY_AR', header: { text: 'CHK_CHILDPLAY_AR' }, visible: false }, + { name: 'CHK_ALSFC_AR', fieldName: 'CHK_ALSFC_AR', header: { text: 'CHK_ALSFC_AR' }, visible: false }, + { name: 'CHK_PLGRND_AR', fieldName: 'CHK_PLGRND_AR', header: { text: 'CHK_PLGRND_AR' }, visible: false }, + { name: 'CHK_PRKPLCE_AR', fieldName: 'CHK_PRKPLCE_AR', header: { text: 'CHK_PRKPLCE_AR' }, visible: false }, + { name: 'CHK_CTLSTT_AR', fieldName: 'CHK_CTLSTT_AR', header: { text: 'CHK_CTLSTT_AR' }, visible: false }, + { name: 'CHK_NRPRK_AR', fieldName: 'CHK_NRPRK_AR', header: { text: 'CHK_NRPRK_AR' }, visible: false }, + { name: 'CHK_ETC_AR', fieldName: 'CHK_ETC_AR', header: { text: 'CHK_ETC_AR' }, visible: false }, + { name: 'CHK_PRCUSE_RT', fieldName: 'CHK_PRCUSE_RT', header: { text: 'CHK_PRCUSE_RT' }, visible: false }, + ], + + columnLayout: [ + { + name: 'group_admin', + header: { text: '행정구역' }, + items: ['SIDO', 'GUGUN'] + }, + 'BSC_FCT_NM', + 'FCT_CPC', + 'PRCPLT_AR', + { + name: 'group_resident_friendly_facility', + header: { text: '주민친화시설 면적(㎡)' }, + items: [ + 'TOTAL_AR', + 'RESTRM_AR', + 'CHILDPLAY_AR', + 'ALSFC_AR', + 'PLGRND_AR', + 'PRKPLCE_AR', + 'CTLSTT_AR', + 'NRPRK_AR', + 'ETC_AR' + ] + }, + 'RMK' + ], + + rowStartNum: 2, + fixedColumns: 3, + tabKey: 'residentFriendlyFacilityInp', + tabLabel: '주민친화시설' +}; \ No newline at end of file