refactor: 07. 분뇨처리시설 컬럼 파일로 분리 & footer 적용

- ExcretaTreatmentFacilityMngColumn.ts 파일 생성
- 기존 ExcretaTreatmentFacilityMng.tsx 컴포넌트 내 컬럼 정의 별도 파일로 분리
-  footer 설정 적용 (소수점 3자리, 소수점 1자리, 정수)
- editable 속성 추가
This commit is contained in:
2026-01-05 17:19:57 +09:00
parent 96aecb9847
commit 2bf04dd288
2 changed files with 119 additions and 105 deletions
@@ -6,106 +6,10 @@ import LastYearDataButton from "@/components/button/LastYearDataButton";
import SubmitExceptionButton from "@/components/button/SubmitExceptionButton";
import { useState } from "react";
import { ExcretaTreatmentFacilityMngColumn } from "@/components/util/column/management/ExcretaTreatmentFacilityMngColumn"
// 하수도 통계 관리 > 07. 분뇨처리시설
const ExcretaTreatmentFacilityMng = () => {
const columns = [
// 행정구역
{ name: 'sido', fieldName: '시도', header: { text: '시도' } },
{ name: 'gugun', fieldName: '시군구', header: { text: '시군구' } },
// 기본 정보
{ name: 'ecscs_nm', fieldName: '시설명', header: { text: '시설명' } },
{ name: 'locplcs', fieldName: '소재지', header: { text: '소재지' } },
{ name: 'telno', fieldName: '전화번호', header: { text: '전화번호' } },
// 날짜 정보
{ name: 'comp_dt', fieldName: '준공일 yyyy-mm-dd', header: { text: '준공일 yyyy-mm-dd' } },
{ name: 'rn_dt', fieldName: '가동개시일 yyyy-mm-dd', header: { text: '가동개시일 yyyy-mm-dd' } },
// 사업비/용량 정보
{ name: 'wct', fieldName: '사업비', header: { text: '사업비(백만원)' } },
{ name: 'ecscs_cpcty', fieldName: '시설용량', header: { text: '시설용량(m³/일)' } },
{ name: 'process_cpcty', fieldName: '처리량', header: { text: '처리량(m³/일)' } },
{ name: 'opr_daycnt', fieldName: '가동일수', header: { text: '가동일수(일/년)' } },
// 처리 공법 및 연계
{ name: 'trt_msrc', fieldName: '처리공법', header: { text: '처리공법' } },
{ name: 'cntc_prcplt', fieldName: '연계처리장명', header: { text: '연계처리장명' } },
{ name: 'assct_trt_cpc', fieldName: '연계처리량', header: { text: '연계처리량(m³/일)' } },
// 유입수질 (TOC만 포함)
{ name: 'infl_wqlt_bod', fieldName: '유입BOD', header: { text: 'BOD' } },
{ name: 'infl_wqlt_toc', fieldName: '유입TOC', header: { text: 'TOC' } },
{ name: 'infl_wqlt_ss', fieldName: '유입SS', header: { text: 'SS' } },
{ name: 'infl_wqlt_tn', fieldName: '유입T-N', header: { text: 'T-N' } },
{ name: 'infl_wqlt_tp', fieldName: '유입T-P', header: { text: 'T-P' } },
{ name: 'infl_wqlt_clfgrpcnt', fieldName: '유입대장균군수', header: { text: '대장균군수' } },
// 방류수질 (TOC만 포함)
{ name: 'effl_wqlt_bod', fieldName: '방류BOD', header: { text: 'BOD' } },
{ name: 'effl_wqlt_toc', fieldName: '방류TOC', header: { text: 'TOC' } },
{ name: 'effl_wqlt_ss', fieldName: '방류SS', header: { text: 'SS' } },
{ name: 'effl_wqlt_tn', fieldName: '방류T-N', header: { text: 'T-N' } },
{ name: 'effl_wqlt_tp', fieldName: '방류T-P', header: { text: 'T-P' } },
{ name: 'effl_wqlt_clfgrpcnt', fieldName: '방류대장균군수', header: { text: '대장균군수' } },
// 방류수역
{ name: 'rvbsn', fieldName: '수계', header: { text: '수계' } },
{ name: 'bstrm', fieldName: '지류', header: { text: '지류' } },
{ name: 'lgbsn', fieldName: '중권역', header: { text: '중권역' } },
{ name: 'mdmbsn', fieldName: '소권역', header: { text: '소권역' } },
// 운영 정보
{ name: 'oper_mth', fieldName: '운영주체(자체/공기업/민간위탁)', header: { text: '운영주체(자체/공기업/민간위탁)' } },
{ name: 'cntc_prcplt_cpc', fieldName: '직원총수', header: { text: '직원총수(명)' } },
{ name: 'safe_acdnt_co', fieldName: '안전사고건수', header: { text: '안전사고건수(건/인/년)' } },
// 기타
{ name: 'rmk', fieldName: '비고', header: { text: '비고' } },
];
const columnLayout = [
{
name: 'adminGroup',
hideChildHeaders: false,
header: { text: '행정구역' },
items: ['sido', 'gugun'],
},
'ecscs_nm',
'locplcs',
'telno',
'comp_dt',
'rn_dt',
'wct',
'ecscs_cpcty',
'process_cpcty',
'opr_daycnt',
'trt_msrc',
'cntc_prcplt',
'assct_trt_cpc',
{
name: 'influenceGroup',
hideChildHeaders: false,
header: { text: '유입수질(mg/L, 개/mL)' },
items: ['infl_wqlt_bod', 'infl_wqlt_toc', 'infl_wqlt_ss', 'infl_wqlt_tn', 'infl_wqlt_tp', 'infl_wqlt_clfgrpcnt'],
},
{
name: 'effluentGroup',
hideChildHeaders: false,
header: { text: '방류수질(mg/L, 개/mL)' },
items: ['effl_wqlt_bod', 'effl_wqlt_toc', 'effl_wqlt_ss', 'effl_wqlt_tn', 'effl_wqlt_tp', 'effl_wqlt_clfgrpcnt'],
},
{
name: 'dischargeGroup',
hideChildHeaders: false,
header: { text: '방류수역' },
items: ['rvbsn', 'bstrm', 'lgbsn', 'mdmbsn'],
},
'oper_mth',
'cntc_prcplt_cpc',
'safe_acdnt_co',
'rmk',
];
const submitExceptionFunc = () => {
console.log('submit exception');
@@ -117,16 +21,16 @@ const ExcretaTreatmentFacilityMng = () => {
// 지난년도 데이터 가져오기 로직
};
const saveFunc = () => {
console.log('save');
// 저장 로직
};
const submitFunc = () => {
console.log('submit');
// 제출 로직
};
const saveFunc = () => {
console.log('save');
// 저장 로직
};
const [rowData, setRowData] = useState<Record<string, string | number>[]>([]);
return (
@@ -135,12 +39,10 @@ const ExcretaTreatmentFacilityMng = () => {
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
<SubmitExceptionButton SubmitExceptionFunc={submitExceptionFunc} />
<LastYearDataButton getLastYearDataFunc={getLastYearDataFunc} />
</div>
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
<SaveButton saveFunc={saveFunc} />
<SubmitButton submitFunc={submitFunc} />
</div>
<DataGrid columnInfo={{ columns, columnLayout }} rowStartNum={2} fixedColumns={2} isExcelImport={true} rowData={rowData} setRowData={setRowData} />
<DataGrid columnInfo={ExcretaTreatmentFacilityMngColumn} rowStartNum={2} fixedColumns={2} isExcelImport={true} rowData={rowData} setRowData={setRowData} />
</>
);
};
@@ -0,0 +1,112 @@
import { footerInt, footerDecimal1, footerDecimal3 } from "@/components/util/grid/footerSummary";
/**
* 하수도 통계 관리 > 07. 분뇨처리시설
* 단일 Tab
*/
export const ExcretaTreatmentFacilityMngColumn = {
columns: [
// 행정구역
{ name: 'sido', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'gugun', fieldName: '시군구', header: { text: '시군구' } },
// 기본 정보
{ name: 'ecscs_nm', fieldName: '시설명', header: { text: '시설명' } },
{ name: 'locplcs', fieldName: '소재지', header: { text: '소재지' } },
{ name: 'telno', fieldName: '전화번호', header: { text: '전화번호' } },
// 날짜 정보
{ name: 'comp_dt', fieldName: '준공일 yyyy-mm-dd', header: { text: '준공일 yyyy-mm-dd' } },
{ name: 'rn_dt', fieldName: '가동개시일 yyyy-mm-dd', header: { text: '가동개시일 yyyy-mm-dd' } },
// 사업비/용량 정보
{ name: 'wct', fieldName: '사업비(백만원)', header: { text: '사업비(백만원)' }, footer: footerInt },
{ name: 'ecscs_cpcty', fieldName: '시설용량(m³/일)', header: { text: '시설용량(m³/일)' } },
{ name: 'process_cpcty', fieldName: '처리량(m³/일)', header: { text: '처리량(m³/일)' }, footer: footerDecimal1 },
{ name: 'opr_daycnt', fieldName: '가동일수(일/년)', header: { text: '가동일수(일/년)' }, footer: footerInt },
// 처리 공법 및 연계
{ name: 'trt_msrc', fieldName: '처리공법', header: { text: '처리공법' } },
{ name: 'cntc_prcplt', fieldName: '연계처리장명', header: { text: '연계처리장명' } },
{ name: 'assct_trt_cpc', fieldName: '연계처리량(m³/일)', header: { text: '연계처리량(m³/일)' } },
// 유입수질
{ name: 'infl_wqlt_bod', fieldName: '유입BOD', header: { text: 'BOD' }, footer: footerDecimal3 },
{ name: 'infl_wqlt_toc', fieldName: '유입TOC', header: { text: 'TOC' }, footer: footerDecimal3 },
{ name: 'infl_wqlt_ss', fieldName: '유입SS', header: { text: 'SS' }, footer: footerDecimal3 },
{ name: 'infl_wqlt_tn', fieldName: '유입T-N', header: { text: 'T-N' }, footer: footerDecimal3 },
{ name: 'infl_wqlt_tp', fieldName: '유입T-P', header: { text: 'T-P' }, footer: footerDecimal3 },
{ name: 'infl_wqlt_clfgrpcnt', fieldName: '유입대장균군수', header: { text: '대장균군수' }, footer: footerDecimal3 },
// 방류수질
{ name: 'effl_wqlt_bod', fieldName: '방류BOD', header: { text: 'BOD' }, footer: footerDecimal3 },
{ name: 'effl_wqlt_toc', fieldName: '방류TOC', header: { text: 'TOC' }, footer: footerDecimal3 },
{ name: 'effl_wqlt_ss', fieldName: '방류SS', header: { text: 'SS' }, footer: footerDecimal3 },
{ name: 'effl_wqlt_tn', fieldName: '방류T-N', header: { text: 'T-N' }, footer: footerDecimal3 },
{ name: 'effl_wqlt_tp', fieldName: '방류T-P', header: { text: 'T-P' }, footer: footerDecimal3 },
{ name: 'effl_wqlt_clfgrpcnt', fieldName: '방류대장균군수', header: { text: '대장균군수' }, footer: footerDecimal3 },
// 방류수역
{ name: 'rvbsn', fieldName: '수계', header: { text: '수계' } },
{ name: 'bstrm', fieldName: '지류', header: { text: '지류' } },
{ name: 'lgbsn', fieldName: '중권역', header: { text: '중권역' } },
{ name: 'mdmbsn', fieldName: '소권역', header: { text: '소권역' } },
// 운영 정보
{ name: 'oper_mth', fieldName: '운영주체(자체/공기업/민간위탁)', header: { text: '운영주체(자체/공기업/민간위탁)' } },
{ name: 'cntc_prcplt_cpc', fieldName: '직원총수(명)', header: { text: '직원총수(명)' }, footer: footerInt },
{ name: 'administration_opiton', fieldName: '행정직(명)', header: { text: '행정직(명)' }, footer: footerInt }, // 운영에만 존재하는 컬럼
{ name: 'technology_option', fieldName: '기술직(명)', header: { text: '기술직(명)' }, footer: footerInt }, // 운영에만 존재하는 컬럼
{ name: 'etc_option', fieldName: '기타(명)', header: { text: '기타(명)' }, footer: footerInt }, // 운영에만 존재하는 컬럼
{ name: 'safe_acdnt_co', fieldName: '안전사고건수(건/인/년)', header: { text: '안전사고건수(건/인/년)' }, footer: footerInt },
// 기타
{ name: 'rmk', fieldName: '비고', header: { text: '비고' } },
],
columnLayout: [
{
name: 'adminGroup',
hideChildHeaders: false,
header: { text: '행정구역' },
items: ['sido', 'gugun'],
},
'ecscs_nm',
'locplcs',
'telno',
'comp_dt',
'rn_dt',
'wct',
'ecscs_cpcty',
'process_cpcty',
'opr_daycnt',
'trt_msrc',
'cntc_prcplt',
'assct_trt_cpc',
{
name: 'influenceGroup',
hideChildHeaders: false,
header: { text: '유입수질(mg/L, 개/mL)' },
items: ['infl_wqlt_bod', 'infl_wqlt_toc', 'infl_wqlt_ss', 'infl_wqlt_tn', 'infl_wqlt_tp', 'infl_wqlt_clfgrpcnt'],
},
{
name: 'effluentGroup',
hideChildHeaders: false,
header: { text: '방류수질(mg/L, 개/mL)' },
items: ['effl_wqlt_bod', 'effl_wqlt_toc', 'effl_wqlt_ss', 'effl_wqlt_tn', 'effl_wqlt_tp', 'effl_wqlt_clfgrpcnt'],
},
{
name: 'dischargeGroup',
hideChildHeaders: false,
header: { text: '방류수역' },
items: ['rvbsn', 'bstrm', 'lgbsn', 'mdmbsn'],
},
'oper_mth',
'cntc_prcplt_cpc',
'administration_opiton',
'technology_option',
'etc_option',
'safe_acdnt_co',
'rmk',
]
};