diff --git a/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx b/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx index 64d826f85..94601064f 100644 --- a/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx +++ b/apps/st/src/components/statistics/management/SeweragePenetrationRateMng.tsx @@ -4,143 +4,31 @@ 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 type { GridView, DataColumn } from "@/components/type/DataGrid.type"; -import { getFooterSummary } from "@/components/util/grid/footerSummary"; + +import { SeweragePenetrationRateMngColumnInfo } from "@/components/util/column/management/SeweragePenetrationRateMngColumn"; // 하수도 통계 관리 > 01. 하수도 보급률 const SeweragePenetrationRateMng = () => { - const columns = [ - { name: 'sido', fieldName: '시도', header: { text: '시도' } }, - { - name: 'sgg', - fieldName: '구군', - header: { text: '구군' }, - footer: { - text: '합계' - }, - }, - { name: 'rvbsn', fieldName: '수계', header: { text: '수계' } }, - { name: 'bstrm', fieldName: '지류', header: { text: '지류' } }, - { name: 'mdbsn', fieldName: '세부단위유역', header: { text: '세부단위유역' } }, - { name: 'lgbsn', fieldName: '중권역', header: { text: '중권역' } }, - { name: 'mdmbsn', fieldName: '소권역', header: { text: '소권역' } }, - { name: 'specl_cntrpln_ar', fieldName: '특별대책지역', header: { text: '특별대책지역' } }, - { - name: 'total_popl', - fieldName: '총인구', - header: { text: '총인구' }, - footer: { - expression: 'sum' as const, - numberFormat: '#,##0', - valueCallback: (grid: GridView, column: DataColumn) => { - return getFooterSummary(grid, column); - }, - }, - }, - { name: 'popl_sm', fieldName: '내국인', header: { text: '내국인' } }, - { name: 'frgnr_popl_sm', fieldName: '외국인', header: { text: '외국인' } }, - { name: 'area', fieldName: '행정참고자료면적(㎢)', header: { text: '행정참고자료면적(㎢)' } }, - { name: 'popltn_sm', fieldName: '총인구(명)', header: { text: '총인구(명)' } }, - { name: 'ar_sm', fieldName: '총면적(㎢)', header: { text: '총면적(㎢)' } }, - { name: 'swge_proc_zone_inner_sm', fieldName: '합계', header: { text: '합계' } }, - { name: 'pblswrg_popltn_sm', fieldName: '소계', header: { text: '소계' } }, - { name: 'pblswrg_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' } }, - { name: 'pblswrg_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' } }, - { name: 'pblswrg_tert_trt', fieldName: '고도처리', header: { text: '고도처리' } }, - { name: 'wstr_popltn_sm', fieldName: '소계', header: { text: '소계' } }, - { name: 'wstr_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' } }, - { name: 'wstr_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' } }, - { name: 'wstr_tert_trt', fieldName: '고도처리', header: { text: '고도처리' } }, - { name: 'not_conect_popltn', fieldName: '미접속인구', header: { text: '미접속인구' } }, - { name: 'swge_proc_zone_inner_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' } }, - { name: 'swge_proc_zone_outer_sm', fieldName: '합계', header: { text: '합계' } }, - { name: 'town_unproc_popltn', fieldName: '미처리인구', header: { text: '미처리인구' } }, - { name: 'town_swtt_popltn', fieldName: '오수처리인구', header: { text: '오수처리인구' } }, - { name: 'town_wrrtn_popltn', fieldName: '정화조인구', header: { text: '정화조인구' } }, - { name: 'swge_proc_zone_outer_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' } }, - { name: 'pblswrg_popltn_suprt', fieldName: '공공하수처리구역인구보급율(%)', header: { text: '공공하수처리구역인구보급율(%)' } }, - { name: 'adtrt_popltn_suprt', fieldName: '고도처리인구보급율(%)', header: { text: `고도처리인구보급율(%)` } }, - { name: 'swrg_instlrt', fieldName: '하수도설치율(%)', header: { text: '하수도설치율(%)' } }, - { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, - ]; - - const columnLayout = [ - { - name: 'groupA', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sido', 'sgg'], - }, - 'rvbsn', - 'bstrm', - { - name: 'groupB', - hideChildHeaders: false, - header: { text: '수계영향권별분류류' }, - items: ['mdbsn', 'lgbsn', 'mdmbsn'], - }, - 'specl_cntrpln_ar', - { - name: 'groupC', - hideChildHeaders: false, - header: { text: '행정참고자료인구' }, - items: ['total_popl', 'popl_sm', 'frgnr_popl_sm'], - }, - 'area', - 'popltn_sm', - 'ar_sm', - { - name: 'groupD', - hideChildHeaders: false, - header: { text: '하수처리구역내' }, - items: [ - 'swge_proc_zone_inner_sm', - { - name: 'pblswrgGroup', - hideChildHeaders: false, - header: { text: '공공하수처리인구(명)' }, - items: ['pblswrg_popltn_sm', 'pblswrg_prm_trt', 'pblswrg_scd_trt', 'pblswrg_tert_trt'], - }, - { - name: 'wstrGroup', - hideChildHeaders: false, - header: { text: '폐수처리인구(명)' }, - items: ['wstr_popltn_sm', 'wstr_prm_trt', 'wstr_scd_trt', 'wstr_tert_trt'], - }, - 'not_conect_popltn', - 'swge_proc_zone_inner_ar' - ], - }, - { - name: 'groupE', - hideChildHeaders: false, - header: { text: '하수처리구역외' }, - items: ['swge_proc_zone_outer_sm', 'town_swtt_popltn', 'town_unproc_popltn', 'town_wrrtn_popltn', 'swge_proc_zone_outer_ar'], - }, - 'pblswrg_popltn_suprt', - 'adtrt_popltn_suprt', - 'swrg_instlrt', - 'rmk', - ]; + // 로직은 그대로 유지 const submitFunc = () => { console.log('submit'); // 제출 로직 }; const saveFunc = () => { - console.log('submit'); + console.log('save'); // 저장 로직 }; const getLastYearDataFunc = () => { console.log('get last year data'); - // 지난연도 데이터 가져오기 로직 + // 전년도 데이터 가져오기 }; const SubmitExceptionFunc = () => { console.log('submit exception'); - // 예외 제출 로직 + // 예외 제출 로직 }; return ( @@ -152,7 +40,12 @@ const SeweragePenetrationRateMng = () => { - + ); }; diff --git a/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts b/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts new file mode 100644 index 000000000..d25b774aa --- /dev/null +++ b/apps/st/src/components/util/column/management/SeweragePenetrationRateMngColumn.ts @@ -0,0 +1,173 @@ +import type { GridView, DataColumn } from "@/components/type/DataGrid.type"; +import { getFooterSummary } from "@/components/util/grid/footerSummary"; + +// Footer 설정 생성 함수 +const createSumFooter = (format: string) => ({ + expression: 'sum' as const, + numberFormat: format, + valueCallback: (grid: GridView, column: DataColumn) => { + return getFooterSummary(grid, column); + }, +}); + +// 1. 정수형 : #,##0 +const footerInt = createSumFooter('#,##0'); + +// 2. 소수점 3자리 : #,##0.000 +const footerDecimal3 = createSumFooter('#,##0.000'); + +// 3. 소수점 1자리 : #,##0.0 +const footerDecimal1 = createSumFooter('#,##0.0'); + +/** + * 하수도 통계 관리 > 01. 하수도 보급률 + * 단일 Tab + */ +export const SeweragePenetrationRateMngColumnInfo = { + columns: [ + // [기본정보] 행정구역 - 수정 불가 + { name: 'sido', fieldName: '시도', header: { text: '시도' }, editable: false }, + { + name: 'sgg', + fieldName: '구군', + header: { text: '구군' }, + footer: { text: '합계' }, + editable: false + }, + + // [기본정보] 수계 및 권역 - 수정 불가 + { name: 'rvbsn', fieldName: '수계', header: { text: '수계' }, editable: false }, + { name: 'bstrm', fieldName: '지류', header: { text: '지류' }, editable: false }, + + // [기본정보] 수계영향권별분류 - 수정 불가 + { name: 'mdbsn', fieldName: '세부단위유역', header: { text: '세부단위유역' }, editable: false }, + { name: 'lgbsn', fieldName: '중권역', header: { text: '중권역' }, editable: false }, + { name: 'mdmbsn', fieldName: '소권역', header: { text: '소권역' }, editable: false }, + + // [입력필드] 특별대책지역 - 수정 가능 + { name: 'specl_cntrpln_ar', fieldName: '특별대책지역', header: { text: '특별대책지역' } }, + + // [참조정보] 행정참고자료인구 - 수정 불가 + { name: 'total_popl', fieldName: '총인구', header: { text: '총인구' }, footer: footerInt, editable: false }, + { name: 'popl_sm', fieldName: '내국인', header: { text: '내국인' }, footer: footerInt, editable: false }, + { name: 'frgnr_popl_sm', fieldName: '외국인', header: { text: '외국인' }, footer: footerInt, editable: false }, + + // [참조정보] 행정참고자료면적 - 수정 불가 + { name: 'area', fieldName: '행정참고자료면적(㎢)', header: { text: '행정참고자료면적(㎢)' }, footer: footerDecimal3, editable: false }, + + // [자동계산] 총인구 (Nexacro: expr 존재) - 수정 불가 + { name: 'popltn_sm', fieldName: '총인구(명)', header: { text: '총인구(명)' }, footer: footerInt, editable: false }, + + // [입력필드] 총면적 (Nexacro: 입력 가능) - 수정 가능 + { name: 'ar_sm', fieldName: '총면적(㎢)', header: { text: '총면적(㎢)' }, footer: footerDecimal3 }, + + // [자동계산] 하수처리구역 내 합계 - 수정 불가 + { name: 'swge_proc_zone_inner_sm', fieldName: '합계', header: { text: '합계' }, footer: footerInt, editable: false }, + + // [자동계산] 공공하수 소계 - 수정 불가 + { name: 'pblswrg_popltn_sm', fieldName: '소계', header: { text: '소계' }, footer: footerInt, editable: false }, + + // [입력필드] 공공하수 상세 - 수정 가능 + { name: 'pblswrg_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' }, footer: footerInt }, + { name: 'pblswrg_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' }, footer: footerInt }, + { name: 'pblswrg_tert_trt', fieldName: '고도처리', header: { text: '고도처리' }, footer: footerInt }, + + // [자동계산] 폐수 소계 - 수정 불가 + { name: 'wstr_popltn_sm', fieldName: '소계', header: { text: '소계' }, footer: footerInt, editable: false }, + + // [입력필드] 폐수 상세 - 수정 가능 + { name: 'wstr_prm_trt', fieldName: '물리적처리', header: { text: '물리적처리' }, footer: footerInt }, + { name: 'wstr_scd_trt', fieldName: '생물학적처리', header: { text: '생물학적처리' }, footer: footerInt }, + { name: 'wstr_tert_trt', fieldName: '고도처리', header: { text: '고도처리' }, footer: footerInt }, + + // [입력필드] 미접속인구 - 수정 가능 + { name: 'not_conect_popltn', fieldName: '미접속인구', header: { text: '미접속인구' }, footer: footerInt }, + + // [입력필드] 구역내 면적 - 수정 가능 + { name: 'swge_proc_zone_inner_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' }, footer: footerDecimal3 }, + + // [자동계산] 하수처리구역 외 합계 - 수정 불가 + { name: 'swge_proc_zone_outer_sm', fieldName: '합계', header: { text: '합계' }, footer: footerInt, editable: false }, + + // [입력필드] 구역외 상세 - 수정 가능 + { name: 'town_unproc_popltn', fieldName: '미처리인구', header: { text: '미처리인구' }, footer: footerInt }, + { name: 'town_swtt_popltn', fieldName: '오수처리인구', header: { text: '오수처리인구' }, footer: footerInt }, + { name: 'town_wrrtn_popltn', fieldName: '정화조인구', header: { text: '정화조인구' }, footer: footerInt }, + + // [입력필드] 구역외 면적 - 수정 가능 + { name: 'swge_proc_zone_outer_ar', fieldName: '면적(㎢)', header: { text: '면적(㎢)' }, footer: footerDecimal3 }, + + // [자동계산] 비율 (수식) - 수정 불가 + { name: 'pblswrg_popltn_suprt', fieldName: '공공하수처리구역인구보급율(%)', header: { text: '공공하수처리구역인구보급율(%)' }, footer: footerDecimal1, editable: false }, + { name: 'adtrt_popltn_suprt', fieldName: '고도처리인구보급율(%)', header: { text: `고도처리인구보급율(%)` }, footer: footerDecimal1, editable: false }, + { name: 'swrg_instlrt', fieldName: '하수도설치율(%)', header: { text: '하수도설치율(%)' }, footer: footerDecimal1, editable: false }, + + // [입력필드] 비고 - 수정 가능 + { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, + ], + + columnLayout: [ + { + name: 'groupA', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['sido', 'sgg'], + }, + 'rvbsn', + 'bstrm', + { + name: 'groupB', + hideChildHeaders: false, + header: { text: '수계영향권별분류' }, + items: ['mdbsn', 'lgbsn', 'mdmbsn'], + }, + 'specl_cntrpln_ar', + { + name: 'groupC', + hideChildHeaders: false, + header: { text: '행정참고자료인구' }, + items: ['total_popl', 'popl_sm', 'frgnr_popl_sm'], + }, + 'area', + 'popltn_sm', + 'ar_sm', + { + name: 'groupD', + hideChildHeaders: false, + header: { text: '하수처리구역내' }, + items: [ + 'swge_proc_zone_inner_sm', + { + name: 'pblswrgGroup', + hideChildHeaders: false, + header: { text: '공공하수처리인구(명)' }, + items: ['pblswrg_popltn_sm', 'pblswrg_prm_trt', 'pblswrg_scd_trt', 'pblswrg_tert_trt'], + }, + { + name: 'wstrGroup', + hideChildHeaders: false, + header: { text: '폐수처리인구(명)' }, + items: ['wstr_popltn_sm', 'wstr_prm_trt', 'wstr_scd_trt', 'wstr_tert_trt'], + }, + 'not_conect_popltn', + 'swge_proc_zone_inner_ar' + ], + }, + { + name: 'groupE', + hideChildHeaders: false, + header: { text: '하수처리구역외' }, + items: [ + 'swge_proc_zone_outer_sm', + 'town_unproc_popltn', + 'town_swtt_popltn', + 'town_wrrtn_popltn', + 'swge_proc_zone_outer_ar' + ], + }, + 'pblswrg_popltn_suprt', + 'adtrt_popltn_suprt', + 'swrg_instlrt', + 'rmk', + ] +}; \ No newline at end of file