diff --git a/apps/st/src/components/module/SearchForm.tsx b/apps/st/src/components/module/SearchForm.tsx index b48a6b6c3..cc938a282 100644 --- a/apps/st/src/components/module/SearchForm.tsx +++ b/apps/st/src/components/module/SearchForm.tsx @@ -250,6 +250,28 @@ const SearchForm = (props: SearchFormProps = {}) => { )} + {mergedProps.fctName && ( +
+ + + setValues({ + ...values, + fctName: e.target.value, + }) + } + autoComplete="off" + /> +
+ )} {mergedProps.isDetail && (
- {(mergedProps.fctName || mergedProps.userMenual) && ( -
- {mergedProps.fctName && ( -
- - - setValues({ - ...values, - fctName: e.target.value, - }) - } - autoComplete="off" - /> -
- )} - {mergedProps.userMenual && ( -
- -
- )} -
- )} ); diff --git a/apps/st/src/components/statistics/input/PublicSewageFacilityInp.tsx b/apps/st/src/components/statistics/input/PublicSewageFacilityInp.tsx index 0a8e1d277..fc3d1e66a 100644 --- a/apps/st/src/components/statistics/input/PublicSewageFacilityInp.tsx +++ b/apps/st/src/components/statistics/input/PublicSewageFacilityInp.tsx @@ -1,24 +1,20 @@ import { useState } from 'react'; import SearchForm from '@/components/module/SearchForm'; -import { DataGrid } from '@rsone/components'; +import DataGrid from '@/components/module/DataGrid'; +import SplitDataGrid from '@/components/module/SplitDataGrid'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@common/components'; import SubmitButton from '@/components/button/SumitButton'; import SaveButton from '@/components/button/SaveButton'; -import SubmitExceptionButton from '@/components/button/SubmitExceptionButton'; import OperateDataButton from '@/components/button/OperateDataButton'; -import UpdateOperateDataButton from "@/components/button/UpdateOperateDataButton" -import NotApplicableCheckButton from "@/components/button/NotApplicableCheckButton"; +import UpdateOperateDataButton from '@/components/button/UpdateOperateDataButton'; -import { PublicSewageFactInpColumn } from '@/components/util/column/input/PublicSewageFactInpColumn'; +import type { ColumnInfo, ColumnInfoList } from '@/components/type/DataGrid.type'; +import { PublicSewageFactInpColumnList } from '@/components/util/column/input/PublicSewageFactInpColumn/PublicSewageFactInpColumn'; // 하수도 통계 관리 > 06. 공공하수처리시설 const PublicSewageFacilityInp = () => { - - const SubmitExceptionFunc = () => { - console.log('submitException'); - // 예외제출 로직 - }; - + const submitFunc = () => { console.log('submit'); // 제출 로직 @@ -28,7 +24,7 @@ const PublicSewageFacilityInp = () => { console.log('save'); // 저장 로직 }; - + const getOperateDataFunc = () => { console.log('get operate data'); // 운영 데이터 가져오기 @@ -39,33 +35,109 @@ const PublicSewageFacilityInp = () => { // 운영 데이터 업데이트 로직 }; - const [rowData, setRowData] = useState[]>([]); - const [isNotApplicable, setIsNotApplicable] = useState(false); + const [rowDataMap, setRowDataMap] = useState[]>>(new Map()); + const [activeTab, setActiveTab] = useState( + PublicSewageFactInpColumnList[0]?.tabKey ?? 'ST00060001', + ); + + const getGridColumnInfo = ( + tab: ColumnInfoList, + ): ColumnInfo => ({ + columns: tab.columns ?? [], + columnLayout: tab.columnLayout ?? [], + }); return ( <>
- + +
-
-
- - - -
-
- + + + {PublicSewageFactInpColumnList.map((tab) => ( + + {tab.tabLabel || tab.tabKey} + + ))} + + + {PublicSewageFactInpColumnList.map((tab) => { + if (tab.isSplitGrid && tab.left && tab.right) { + const leftKey = tab.left.tabKey ?? `${tab.tabKey}_left`; + const rightKey = tab.right.tabKey ?? `${tab.tabKey}_right`; + return ( + + { + setRowDataMap((prev) => { + const next = new Map(prev); + const cur = next.get(leftKey) ?? []; + const n = + typeof updater === 'function' + ? (updater as (p: Record[]) => Record[])(cur) + : updater; + next.set(leftKey, n); + return next; + }); + }} + setRightRowData={(updater) => { + setRowDataMap((prev) => { + const next = new Map(prev); + const cur = next.get(rightKey) ?? []; + const n = + typeof updater === 'function' + ? (updater as (p: Record[]) => Record[])(cur) + : updater; + next.set(rightKey, n); + return next; + }); + }} + /> + + ); + } + + const gridColumnInfo = getGridColumnInfo(tab); + return ( + + { + setRowDataMap((prev) => { + const next = new Map(prev); + const cur = next.get(tab.tabKey) ?? []; + const n = + typeof updater === 'function' + ? (updater as (p: Record[]) => Record[])(cur) + : updater; + next.set(tab.tabKey, n); + return next; + }); + }} + showHeaderCheckbox={false} + enableSort={false} + /> + + ); + })} + ); }; diff --git a/apps/st/src/components/statistics/input/SewagePipeInp.tsx b/apps/st/src/components/statistics/input/SewagePipeInp.tsx index 5ea57e205..77d4484ca 100644 --- a/apps/st/src/components/statistics/input/SewagePipeInp.tsx +++ b/apps/st/src/components/statistics/input/SewagePipeInp.tsx @@ -8,6 +8,7 @@ import SubmitButton from "@/components/button/SumitButton"; import SaveButton from "@/components/button/SaveButton"; import LastYearDataButton from "@/components/button/LastYearDataButton"; import VerificationResultButton from "@/components/button/VerificationResultButton"; +import CancelSubmitButton from "@/components/button/CancelSubmitButton"; import { VerificationResultHistoryDialog } from "@/components/module/VerificationResultHistoryDialog"; import { SewagePipeInpColumnInfoList } from "@/components/util/column/input/sewagePipe/SewagePipeInpColumn"; @@ -26,12 +27,18 @@ import type { SeweragePipeInputVerificationResult, SeweragePipeRequestParams, } from "@/entities/statistics/model/input/statistics-sewage-pipe-input-interface"; -import { isInputPeriodCurrent } from "@/entities/statistics/model/input/statistics-sewage-supply-rate-input-interface"; +import { + type CheckInputPeriodItem, + getVerificationPeriodActionBlockedMessage, + isInputPeriodCurrent, +} from "@/entities/statistics/model/input/statistics-sewage-supply-rate-input-interface"; import { FactInstallStatusInpColumn } from "@/components/util/column/input/sewagePipe/FactInstallStatusInpColumn"; import { RegionalFactStatusInpColumn } from "@/components/util/column/input/sewagePipe/RegionalFactStatusInpColumn"; import { toGridRows } from "@/components/util/grid/gridFunction"; import { LoadingWithAnimation, Tabs, TabsContent, TabsList, TabsTrigger } from "@common/components"; import { getUserInfo } from "../../../../../../packages/common/components/src/api"; +import { statisticsApi } from "@/entities/statistics/api/statistics-service"; +import type { cancelSubmitRequest } from "@/entities/statistics/model/statistics-interface"; /** 탭별 status + 입력기간으로 편집 가능 여부 */ const computeTabEnterable = ( @@ -133,6 +140,7 @@ const SewagePipeInp = () => { const [statsCd, setStatsCd] = useState(''); const [tabStatsCdMap, setTabStatsCdMap] = useState>(new Map()); const [verificationHistoryOpen, setVerificationHistoryOpen] = useState(false); + const [periodCheckList, setPeriodCheckList] = useState([]); /** API 연결 전에도 검색 후 툴바 등 UI를 쓸 수 있게 함 */ const [hasSearched, setHasSearched] = useState(false); /** checkInputPeriod — columnInfo useMemo가 입력기간 변경을 반영하도록 state로도 유지 */ @@ -186,13 +194,13 @@ const SewagePipeInp = () => { activeTabRef.current = firstTabKey; setActiveTab(firstTabKey); setStatsCd(""); + setPeriodCheckList([]); }; const columnInfo = useMemo(() => { return SewagePipeInpColumnInfoList.map((tab: ColumnInfoList) => { const canEdit = - computeTabEnterable(tabStatusInfoMap.get(tab.tabKey) ?? null, inputPeriodEnterable) || - isAdminInfo; + computeTabEnterable(tabStatusInfoMap.get(tab.tabKey) ?? null, inputPeriodEnterable) || isAdminInfo; const applyEditable = (cols: ColumnConfig[] | undefined) => (cols ?? []).map((col: ColumnConfig) => canEdit @@ -430,7 +438,9 @@ const SewagePipeInp = () => { return; } - const periodOk = isInputPeriodCurrent(periodResponse.data); + const periods = Array.isArray(periodResponse.data) ? periodResponse.data : []; + setPeriodCheckList(periods); + const periodOk = isInputPeriodCurrent(periods); periodEnterableRef.current = periodOk; setInputPeriodEnterable(periodOk); @@ -524,10 +534,53 @@ const SewagePipeInp = () => { }; const submitFunc = () => { + const verificationBlocked = getVerificationPeriodActionBlockedMessage(periodCheckList); + if (verificationBlocked) { + alert(verificationBlocked); + return; + } console.log('submit'); // 제출 로직 }; + const cnacelSubmitFunc = async () => { + try { + if (await confirm('제출된 내용을 취소하시겠습니까?')) { + const verificationBlocked = getVerificationPeriodActionBlockedMessage(periodCheckList); + if (verificationBlocked) { + alert(verificationBlocked); + return; + } + + const userInfo = await getUserInfo(); + + const requestData: cancelSubmitRequest = { + sewerBzmnCd: searchValues?.bsnmCd ?? '', + ctpvNm: searchValues?.sido ?? '', + sggNm: searchValues?.gugun ?? '', + statsYr: searchValues?.year ?? '', + mdfrId: userInfo.userUnqId, + statsCd: statsCd, + }; + + const response = await statisticsApi.cancelSubmit(requestData); + + if (response.status === 'success') { + const values = lastSearchedValues ?? searchValues; + if (values) { + const refreshedParam = buildSewagePipeSearchParam(values); + await loadSewagePipeActiveTabData(activeTab, refreshedParam, values, true, false); + } + alert('제출 취소되었습니다.'); + } else { + alert(response.message ?? '제출 취소 중 오류가 발생했습니다.'); + } + } + } catch { + alert('제출 취소 중 오류가 발생했습니다.'); + } + }; + const refreshConnectionStatusAfterPopupSave = async () => { const searchParam = searchParamRef.current; const values = lastSearchedValues ?? searchValues; @@ -545,6 +598,11 @@ const SewagePipeInp = () => { }; const saveFunc = async () => { + const verificationBlocked = getVerificationPeriodActionBlockedMessage(periodCheckList); + if (verificationBlocked) { + alert(verificationBlocked); + return; + } if (!(await confirm("저장 하시겠습니까?"))) return; const values = lastSearchedValues ?? searchValues; @@ -743,10 +801,11 @@ const SewagePipeInp = () => { const gugunOkOrNotDoList = buildGugunOkForToolbar(lastSearchedValues); const searchContextForToolbar = lastSearchedValues ?? searchValues; + const activeTabStatus = tabStatusInfoMap.get(activeTab) ?? null; const activeTabToolbar = toolbarSnapshotByTab.get(activeTab) ?? computeTabToolbarSnapshot( - tabStatusInfoMap.get(activeTab) ?? null, + activeTabStatus, tabRowDataExists(rowDataMap, activeTab), hasSearched, searchContextForToolbar, @@ -754,11 +813,16 @@ const SewagePipeInp = () => { isAdminInfo, ); + const hideToolbarForConnectionTab = activeTab === "ST00020006"; const { - showSaveInToolbar, - showEnterableToolbarButtons, - showActionToolbarCard, + showSaveInToolbar: baseShowSaveInToolbar, + showEnterableToolbarButtons: baseShowEnterableToolbarButtons, + showActionToolbarCard: baseShowActionToolbarCard, } = activeTabToolbar; + const showSaveInToolbar = !hideToolbarForConnectionTab && baseShowSaveInToolbar; + const showEnterableToolbarButtons = + !hideToolbarForConnectionTab && baseShowEnterableToolbarButtons; + const showActionToolbarCard = !hideToolbarForConnectionTab && baseShowActionToolbarCard; return ( <> @@ -775,6 +839,9 @@ const SewagePipeInp = () => { )} + {activeTabStatus?.laeSbmsnSttsCd === "2" && ( + + )} {showSaveInToolbar && } diff --git a/apps/st/src/components/util/column/input/PublicSewageFactInpColumn.ts b/apps/st/src/components/util/column/input/PublicSewageFactInpColumn.ts deleted file mode 100644 index d070c9b9d..000000000 --- a/apps/st/src/components/util/column/input/PublicSewageFactInpColumn.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { footerInt, footerDecimal1, footerDecimal3 } from "@/components/util/grid/footerSummary"; -import { ValueType } from "realgrid"; - -/** - * 하수도 통계 관리 > 06. 공공하수처리시설 - * 단일 Tab - */ -export const PublicSewageFactInpColumn = { - columns: [ - // 행정구역 - { name: 'sidoCd', fieldName: '시도', header: { text: '시도' }, editable: false }, - { name: 'gugun', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } }, - - // 시설명 - { name: 'bscFctNm', fieldName: '시설명(500m³/일 이상/미만)', header: { text: '시설명(500m³/일 이상/미만)' }, editable: false }, - - // 소재지 - { name: 'addr', fieldName: '소재지', header: { text: '소재지' }, editable: false }, - - // 시설용량 - { name: 'fctCpc', fieldName: '시설용량(500m³/일 이상/미만)', header: { text: '시설용량(500m³/일 이상/미만)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // (m³/일) - { name: 'fctCpc1', fieldName: '물리적', header: { text: '물리적' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'fctCpc2', fieldName: '생물학적', header: { text: '생물학적' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'fctCpc3', fieldName: '고도', header: { text: '고도' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 유입하수량 - { name: 'totInflAmntAve', fieldName: '유입하수량(500m³/일 이상/미만)', header: { text: '유입하수량(500m³/일 이상/미만)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // (m³/일) - { name: 'pInflAmntAve', fieldName: '물리적', header: { text: '물리적' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'oInflAmntAve', fieldName: '생물학적', header: { text: '생물학적' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'aInflAmntAve', fieldName: '고도', header: { text: '고도' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 방류량 - { name: 'totTputAve', fieldName: '방류량(500m³/일 이상/미만)', header: { text: '방류량(500m³/일 이상/미만)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 방류량 - (m³/일) - { name: 'pTputAve', fieldName: '물리적', header: { text: '물리적' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'oTputAve', fieldName: '생물학적', header: { text: '생물학적' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'aTputAve', fieldName: '고도', header: { text: '고도' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 수질 - { name: 'inflAssctBfrWqltBod', fieldName: '유입BOD', header: { text: '유입BOD' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'efflWqltBod', fieldName: '방류BOD', header: { text: '방류BOD' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'inflAssctBfrWqltToc', fieldName: '유입TOC', header: { text: '유입TOC' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'efflWqltToc', fieldName: '방류TOC', header: { text: '방류TOC' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'inflAssctBfrWqltSs', fieldName: '유입SS', header: { text: '유입SS' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'efflWqltSs', fieldName: '방류SS', header: { text: '방류SS' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'inflAssctBfrWqltTn', fieldName: '유입T-N', header: { text: '유입T-N' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000' }, - { name: 'efflWqltTn', fieldName: '방류T-N', header: { text: '방류T-N' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000' }, - { name: 'inflAssctBfrWqltTp', fieldName: '유입T-P', header: { text: '유입T-P' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000' }, - { name: 'efflWqltTp', fieldName: '방류T-P', header: { text: '방류T-P' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000' }, - { name: 'inflAssctBfrWqltClfgrpcnt', fieldName: '유입총대장균군수', header: { text: '유입총대장균군수' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'efflWqltClfgrpcnt', fieldName: '방류총대장균군수', header: { text: '방류총대장균군수' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 처리특성 - { name: 'tmEfficiency', fieldName: '처리효율(%)', header: { text: '처리효율(%)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'pcLoad', fieldName: '처리부하량(kgBOD/D)', header: { text: '처리부하량(kgBOD/D)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'trtFrfHanNm', fieldName: '처리방법', header: { text: '처리방법' }, editable: false }, - - // 연계처리량 - { name: 'excretionsTot', fieldName: '분뇨', header: { text: '분뇨' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'stkrsngWstwtrTot', fieldName: '축산', header: { text: '축산' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'lchtTot', fieldName: '침출수', header: { text: '침출수' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'etcTot', fieldName: '기타', header: { text: '기타' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 시설정보 - { name: 'tel', fieldName: '전화번호', header: { text: '전화번호' }, editable: false }, - { name: 'rnDt', fieldName: '준공일', header: { text: '준공일' }, editable: false }, - { name: 'compDt', fieldName: '가동개시일', header: { text: '가동개시일' }, editable: false }, - { name: 'tot', fieldName: '사업비', header: { text: '사업비' }, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 방류수 소독방법 - { name: 'dsfctNm', fieldName: '방류수 소독방법', header: { text: '방류수 소독방법' }, editable: false }, - - // 방류수역 - { name: 'wbsnNm', fieldName: '수계', header: { text: '수계' }, editable: false }, - { name: 'rvNm', fieldName: '지류', header: { text: '지류' }, editable: false }, - { name: 'mdmbsn', fieldName: '세부단위구역', header: { text: '세부단위구역' }, editable: false }, - { name: 'efflWqltStndrdNm', fieldName: '지역구분', header: { text: '지역구분' }, editable: false }, - - // 방류수역 > 중권역 - { name: 'lgbsn', fieldName: '명칭', header: { text: '명칭' }, editable: false }, - { name: 'lgbsnBod', fieldName: '목표수질(BOD)', header: { text: '목표수질(BOD)' }, editable: false }, - - // 에너지 자립률 - { name: 'toeRt', fieldName: '에너지자립률(%)', header: { text: '에너지자립률(%)' }, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 에너지 자체 생산량 - { name: 'useQnty', fieldName: '에너지자체생산량(TOE)', header: { text: '에너지자체생산량(TOE)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 연간 총 에너지 사용량 - { name: 'toeSum', fieldName: '계(TOE)', header: { text: '계(TOE)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'elcpwAmnt', fieldName: '총 전력사용량(kWh)', header: { text: '총 전력사용량(kWh)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'toeQnty', fieldName: '자체 에너지사용량(TOE)', header: { text: '자체 에너지사용량(TOE)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - - // 하수처리량당 CO2배출량 - { name: 'co2Emissions', fieldName: '하수처리량당 CO2배출량(kgCO2/m³)', header: { text: '하수처리량당 CO2배출량(kgCO2/m³)' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000' }, - - // 운영주체 - { name: 'oprClsNm', fieldName: '운영주체(자체/공기업/민간대행)', header: { text: '운영주체(자체/공기업/민간대행)' }, editable: false }, - - // 위탁현황 - { name: 'trstOprEtpNm', fieldName: '위탁업체명', header: { text: '위탁업체명' } }, - { name: 'yrstpTrstCst', fieldName: '위탁비용(백만원/년)', header: { text: '위탁비용(백만원/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, - { name: 'trstOprDt', fieldName: '위탁계약기간(yyyy-mm-dd~yyyy-mm-dd)', header: { text: '위탁계약기간(yyyy-mm-dd~yyyy-mm-dd)' } }, - - // 기타 - { name: 'cntrTrtFctNm', fieldName: '중심처리시설', header: { text: '중심처리시설' } }, - { name: 'totWtrQrm', fieldName: '직원총수(명)', header: { text: '직원총수(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' }, - { name: 'safeAcdntCo', fieldName: '안전사고건수', header: { text: '안전사고건수' }, valueType: ValueType.NUMBER, dataFormat: '#,##0' }, - { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, - ], - - columnLayout: [ - { - name: 'administrative', - hideChildHeaders: false, - header: { text: '행정구역' }, - items: ['sidoCd', 'gugun'], - }, - 'bscFctNm', - 'addr', - 'fctCpc', - { - name: 'facilityCapacityDetail', - hideChildHeaders: false, - header: { text: '(m³/일)' }, - items: ['fctCpc1', 'fctCpc2', 'fctCpc3'], - }, - 'totInflAmntAve', - { - name: 'influentWaterDetail', - hideChildHeaders: false, - header: { text: '(m³/일)' }, - items: ['pInflAmntAve', 'oInflAmntAve', 'aInflAmntAve'], - }, - 'totTputAve', - { - name: 'effluentWaterDetail', - hideChildHeaders: false, - header: { text: '(m³/일)' }, - items: ['pTputAve', 'oTputAve', 'aTputAve'], - }, - 'inflAssctBfrWqltBod', - 'efflWqltBod', - 'inflAssctBfrWqltToc', - 'efflWqltToc', - 'inflAssctBfrWqltSs', - 'efflWqltSs', - 'inflAssctBfrWqltTn', - 'efflWqltTn', - 'inflAssctBfrWqltTp', - 'efflWqltTp', - 'inflAssctBfrWqltClfgrpcnt', - 'efflWqltClfgrpcnt', - 'tmEfficiency', - 'pcLoad', - 'trtFrfHanNm', - { - name: 'linkedTreatment', - hideChildHeaders: false, - header: { text: '연계처리량(m³/일) (500m³/일 이상/미만)' }, - items: ['excretionsTot', 'stkrsngWstwtrTot', 'lchtTot', 'etcTot'], - }, - 'tel', - 'rnDt', - 'compDt', - 'tot', - 'dsfctNm', - { - name: 'dischargeArea', - hideChildHeaders: false, - header: { text: '방류수역' }, - items: [ - 'wbsnNm', - 'rvNm', - 'mdmbsn', - 'efflWqltStndrdNm', - { - name: 'mediumWatershed', - hideChildHeaders: false, - header: { text: '중권역' }, - items: ['lgbsn', 'lgbsnBod'], - }, - ], - }, - 'toeRt', - 'useQnty', - { - name: 'energy', - hideChildHeaders: false, - header: { text: '연간 총 에너지 사용량(TOE)' }, - items: ['toeSum', 'elcpwAmnt', 'toeQnty'], - }, - 'co2Emissions', - 'oprClsNm', - { - name: 'consignmentStatus', - hideChildHeaders: false, - header: { text: '위탁현황' }, - items: ['trstOprEtpNm', 'yrstpTrstCst', 'trstOprDt'], - }, - 'cntrTrtFctNm', - 'totWtrQrm', - 'safeAcdntCo', - 'rmk', - ] -}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/MainFacilityInpColumn.ts b/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/MainFacilityInpColumn.ts new file mode 100644 index 000000000..eed27df03 --- /dev/null +++ b/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/MainFacilityInpColumn.ts @@ -0,0 +1,73 @@ +import { ValueType } from "realgrid"; + +export const MainFacilityColumn = { + columns: [ + { name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '시설명' }, editable: false }, + { name: 'fcltPstnCn', fieldName: 'fcltPstnCn', header: { text: '소재지' }, editable: false }, + { name: 'prxyBzentyNmCn', fieldName: 'prxyBzentyNmCn', header: { text: '위탁업체명' }, editable: false }, + { name: 'cnsgnCstVl', fieldName: 'cnsgnCstVl', header: { text: '위탁비용(백만원/년)' }, editable: false }, + { name: 'prxyCtrtCn', fieldName: 'prxyCtrtCn', header: { text: '위탁계약기간' }, editable: false }, + { name: 'isMainYn', fieldName: 'isMainYn', header: { text: '중심처리시설여부' }, editable: false }, + + { name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'fcltSn', fieldName: 'fcltSn', header: { text: '처리시설일련번호' }, visible: false, editable: false, valueType: ValueType.TEXT, styleName: 'rg-cell-readonly' }, + { name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '하수처리시설코드' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + ], + columnLayout: [ + 'swtrmtFcltNm', + 'fcltPstnCn', + 'prxyBzentyNmCn', + 'cnsgnCstVl', + 'prxyCtrtCn', + 'isMainYn', + 'admdstCd', + 'fcltSn', + 'swtrmtFcltCd', + 'sggNm', + 'admdstNm', + ], + rowStartNum: 1, + fixedColumns: 1, + tabKey: 'MainFacility', + tabLabel: '지자체별공공하수처리시설' +}; + +// Tab 6-2: 하수처리장별 연결 현황 (왼쪽 그리드) +export const MainFacilityTargetColumn = { + columns: [ + // 하수처리장 정보 + { name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '시설명' }, editable: false }, + { name: 'fcltPstnCn', fieldName: 'fcltPstnCn', header: { text: '소재지' }, editable: false }, + { name: 'mappedYn', fieldName: 'mappedYn', header: { text: '연결여부' }, editable: false }, + + { name: 'fcltSn', fieldName: 'fcltSn', header: { text: '처리시설일련번호' }, visible: false, editable: false, valueType: ValueType.TEXT, styleName: 'rg-cell-readonly' }, + { name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '하수처리시설코드' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'mainFcltSn', fieldName: 'mainFcltSn', header: { text: '연결된중심시설일련번호' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'isMainYn', fieldName: 'isMainYn', header: { text: '중심처리시설여부' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + ], + columnLayout: [ + 'swtrmtFcltNm', + 'fcltPstnCn', + 'mappedYn', + 'fcltSn', + 'swtrmtFcltCd', + 'admdstNm', + 'mainFcltSn', + 'isMainYn', + ], + rowStartNum: 1, + fixedColumns: 1, + tabKey: 'MainFacilityTarget', + tabLabel: '연결대상시설' +}; + +export const MainFacilityInpColumn = { + tabKey: 'ST00060002', + tabLabel: '중심 처리 시설', + isSplitGrid: true, + left: MainFacilityColumn, + right: MainFacilityTargetColumn, +}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/PublicSewageFactColumn.ts b/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/PublicSewageFactColumn.ts new file mode 100644 index 000000000..091286300 --- /dev/null +++ b/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/PublicSewageFactColumn.ts @@ -0,0 +1,220 @@ +import { footerInt, footerDecimal1, footerDecimal3 } from "@/components/util/grid/footerSummary"; +import { ValueType } from "realgrid"; + +/** + * 하수도 통계 관리 > 06. 공공하수처리시설 + */ +export const PublicSewageFactColumn = { + columns: [ + // 행정구역 + { name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, footer: { text: '합계' }, styleName: 'rg-cell-readonly' }, + + // 시설명 + { name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '시설명(500m³/일 이상/미만)' }, editable: false, styleName: 'rg-cell-readonly' }, + + // 소재지 + { name: 'impdFcltPstnCn', fieldName: 'impdFcltPstnCn', header: { text: '소재지' }, editable: false, styleName: 'rg-cell-readonly' }, + + // 시설용량 + { name: 'prcsFcltCpct', fieldName: 'prcsFcltCpct', header: { text: '시설용량(500m³/일 이상/미만)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-total' }, + + // (m³/일) + { name: 'prcsFcltPhysCpct', fieldName: 'prcsFcltPhysCpct', header: { text: '물리적' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, + { name: 'prcsFcltBoilCpct', fieldName: 'prcsFcltBoilCpct', header: { text: '생물학적' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, + { name: 'prcsFcltAltdCpct', fieldName: 'prcsFcltAltdCpct', header: { text: '고도' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, + + // 유입하수량 + { name: 'inflwSwageQnt', fieldName: 'inflwSwageQnt', header: { text: '유입하수량(500m³/일 이상/미만)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // (m³/일) + { name: 'inflwSwagePhysQnt', fieldName: 'inflwSwagePhysQnt', header: { text: '물리적' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, + { name: 'inflwSwageBoilQnt', fieldName: 'inflwSwageBoilQnt', header: { text: '생물학적' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, + { name: 'inflwSwageAltdQnt', fieldName: 'inflwSwageAltdQnt', header: { text: '고도' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, + + // 방류량 + { name: 'prcsQnt', fieldName: 'prcsQnt', header: { text: '방류량(500m³/일 이상/미만)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 방류량 - (m³/일) + { name: 'prcsPhysCpct', fieldName: 'prcsPhysCpct', header: { text: '물리적' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'prcsBoilCpct', fieldName: 'prcsBoilCpct', header: { text: '생물학적' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'prcsAltdCpct', fieldName: 'prcsAltdCpct', header: { text: '고도' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 수질 + { name: 'inflwBodVl', fieldName: 'inflwBodVl', header: { text: '유입BOD' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'dschgBodVl', fieldName: 'dschgBodVl', header: { text: '방류BOD' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'inflwTocQnt', fieldName: 'inflwTocQnt', header: { text: '유입TOC' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'dschgTocQnt', fieldName: 'dschgTocQnt', header: { text: '방류TOC' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'inflwSsQnt', fieldName: 'inflwSsQnt', header: { text: '유입SS' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'dschgSsQnt', fieldName: 'dschgSsQnt', header: { text: '방류SS' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'inflwTnVl', fieldName: 'inflwTnVl', header: { text: '유입T-N' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000', styleName: 'rg-cell-readonly' }, + { name: 'dschgTnVl', fieldName: 'dschgTnVl', header: { text: '방류T-N' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000', styleName: 'rg-cell-readonly' }, + { name: 'inflwTpVl', fieldName: 'inflwTpVl', header: { text: '유입T-P' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000', styleName: 'rg-cell-readonly' }, + { name: 'dschgTpVl', fieldName: 'dschgTpVl', header: { text: '방류T-P' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000', styleName: 'rg-cell-readonly' }, + { name: 'inflwGrssClfgVl', fieldName: 'inflwGrssClfgVl', header: { text: '유입총대장균군수' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'dschgGrssClfgVl', fieldName: 'dschgGrssClfgVl', header: { text: '방류총대장균군수' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 처리특성 + { name: 'prcsRt', fieldName: 'prcsRt', header: { text: '처리효율(%)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-total' }, + { name: 'prcsLodQnt', fieldName: 'prcsLodQnt', header: { text: '처리부하량(kgBOD/D)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-total' }, + { name: 'prcsMthdExpln', fieldName: 'prcsMthdExpln', header: { text: '처리방법' }, editable: false, styleName: 'rg-cell-readonly' }, + + // 연계처리량 + { name: 'wholHmnQnt', fieldName: 'wholHmnQnt', header: { text: '분뇨' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'wholLvstQnt', fieldName: 'wholLvstQnt', header: { text: '축산' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'wholEfntQnt', fieldName: 'wholEfntQnt', header: { text: '침출수' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'wholEtcQnt', fieldName: 'wholEtcQnt', header: { text: '기타' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 시설정보 + { name: 'telNo', fieldName: 'telNo', header: { text: '전화번호' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'cmptnStrtYmd', fieldName: 'cmptnStrtYmd', header: { text: '준공일' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'oprtngStrtYmd', fieldName: 'oprtngStrtYmd', header: { text: '가동개시일' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'wholBizVl', fieldName: 'wholBizVl', header: { text: '사업비' }, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 방류수 소독방법 + { name: 'eflntDsnfMthdExpln', fieldName: 'eflntDsnfMthdExpln', header: { text: '방류수 소독방법' }, editable: false, styleName: 'rg-cell-readonly' }, + + // 방류수역 + { name: 'wtsysNm', fieldName: 'wtsysNm', header: { text: '수계' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'trbtrNm', fieldName: 'trbtrNm', header: { text: '지류' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'dtlUnitZoneCn', fieldName: 'dtlUnitZoneCn', header: { text: '세부단위구역' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'rgnSeNm', fieldName: 'rgnSeNm', header: { text: '지역구분' }, editable: false, styleName: 'rg-cell-readonly' }, + + // 방류수역 > 중권역 + { name: 'msirbCn', fieldName: 'msirbCn', header: { text: '명칭' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'goalWqNo', fieldName: 'goalWqNo', header: { text: '목표수질(BOD)' }, editable: false, styleName: 'rg-cell-readonly' }, + + // 에너지 자립률 + { name: 'engySrlneRt', fieldName: 'engySrlneRt', header: { text: '에너지자립률(%)' }, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 에너지 자체 생산량 + { name: 'engyItslfPrdctnQnt', fieldName: 'engyItslfPrdctnQnt', header: { text: '에너지자체생산량(TOE)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 연간 총 에너지 사용량 + { name: 'anlEngyWholUseQnt', fieldName: 'anlEngyWholUseQnt', header: { text: '계(TOE)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'anlElpwrUseQnt', fieldName: 'anlElpwrUseQnt', header: { text: '총 전력사용량(kWh)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'itslfEngyUseQnt', fieldName: 'itslfEngyUseQnt', header: { text: '자체 에너지사용량(TOE)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + + // 하수처리량당 CO2배출량 + { name: 'swtrmtEmsnQnt', fieldName: 'swtrmtEmsnQnt', header: { text: '하수처리량당 CO2배출량(kgCO2/m³)' }, editable: false, footer: footerDecimal3, valueType: ValueType.NUMBER, dataFormat: '#,##0.000', styleName: 'rg-cell-total' }, + + // 운영주체 + { name: 'operMnbdCn', fieldName: 'operMnbdCn', header: { text: '운영주체(자체/공기업/민간대행)' }, editable: false, styleName: 'rg-cell-readonly' }, + + // 위탁현황 + { name: 'prxyBzentyNmCn', fieldName: 'prxyBzentyNmCn', header: { text: '위탁업체명' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'cnsgnCstVl', fieldName: 'cnsgnCstVl', header: { text: '위탁비용(백만원/년)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' }, + { name: 'prxyCtrtCn', fieldName: 'prxyCtrtCn', header: { text: '위탁계약기간' } }, + + // 기타 + { name: 'intgPrcsFcltCn', fieldName: 'intgPrcsFcltCn', header: { text: '중심처리시설' }, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'wholNope', fieldName: 'wholNope', header: { text: '직원총수(명)' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0', styleName: 'rg-cell-readonly' }, + { name: 'sftyAcdntEvntcsCnt', fieldName: 'sftyAcdntEvntcsCnt', header: { text: '안전사고건수' }, valueType: ValueType.NUMBER, dataFormat: '#,##0' }, + { name: 'rmk', fieldName: '비고', header: { text: '비고' } }, + { name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + { name: 'fcltSn', fieldName: 'fcltSn', header: { text: '처리시설일련번호' }, visible: false, editable: false, valueType: ValueType.TEXT, styleName: 'rg-cell-readonly' }, + { name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '하수처리시설코드' }, visible: false, editable: false, styleName: 'rg-cell-readonly' }, + ], + + columnLayout: [ + { + name: 'administrative', + hideChildHeaders: false, + header: { text: '행정구역' }, + items: ['ctpvNm', 'sggNm'], + }, + 'swtrmtFcltNm', + 'impdFcltPstnCn', + 'prcsFcltCpct', + { + name: 'facilityCapacityDetail', + hideChildHeaders: false, + header: { text: '(m³/일)' }, + items: ['prcsFcltPhysCpct', 'prcsFcltBoilCpct', 'prcsFcltAltdCpct'], + }, + 'inflwSwageQnt', + { + name: 'influentWaterDetail', + hideChildHeaders: false, + header: { text: '(m³/일)' }, + items: ['inflwSwagePhysQnt', 'inflwSwageBoilQnt', 'inflwSwageAltdQnt'], + }, + 'prcsQnt', + { + name: 'effluentWaterDetail', + hideChildHeaders: false, + header: { text: '(m³/일)' }, + items: ['prcsPhysCpct', 'prcsBoilCpct', 'prcsAltdCpct'], + }, + 'inflwBodVl', + 'dschgBodVl', + 'inflwTocQnt', + 'dschgTocQnt', + 'inflwSsQnt', + 'dschgSsQnt', + 'inflwTnVl', + 'dschgTnVl', + 'inflwTpVl', + 'dschgTpVl', + 'inflwGrssClfgVl', + 'dschgGrssClfgVl', + 'prcsRt', + 'prcsLodQnt', + 'prcsMthdExpln', + { + name: 'linkedTreatment', + hideChildHeaders: false, + header: { text: '연계처리량(m³/일) (500m³/일 이상/미만)' }, + items: ['wholHmnQnt', 'wholLvstQnt', 'wholEfntQnt', 'wholEtcQnt'], + }, + 'telNo', + 'cmptnStrtYmd', + 'oprtngStrtYmd', + 'wholBizVl', + 'eflntDsnfMthdExpln', + { + name: 'dischargeArea', + hideChildHeaders: false, + header: { text: '방류수역' }, + items: [ + 'wtsysNm', + 'trbtrNm', + 'dtlUnitZoneCn', + 'rgnSeNm', + { + name: 'mediumWatershed', + hideChildHeaders: false, + header: { text: '중권역' }, + items: ['msirbCn', 'goalWqNo'], + }, + ], + }, + 'engySrlneRt', + 'engyItslfPrdctnQnt', + { + name: 'energy', + hideChildHeaders: false, + header: { text: '연간 총 에너지 사용량(TOE)' }, + items: ['anlEngyWholUseQnt', 'anlElpwrUseQnt', 'itslfEngyUseQnt'], + }, + 'swtrmtEmsnQnt', + 'operMnbdCn', + { + name: 'consignmentStatus', + hideChildHeaders: false, + header: { text: '위탁현황' }, + items: ['prxyBzentyNmCn', 'cnsgnCstVl', 'prxyCtrtCn'], + }, + 'intgPrcsFcltCn', + 'wholNope', + 'sftyAcdntEvntcsCnt', + 'rmk', + 'admdstCd', + 'fcltSn', + 'swtrmtFcltCd', + ], + rowStartNum: 3, + fixedColumns: 2, + tabKey: 'ST00060001', + tabLabel: '공공 하수처리 시설' +}; \ No newline at end of file diff --git a/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/PublicSewageFactInpColumn.ts b/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/PublicSewageFactInpColumn.ts new file mode 100644 index 000000000..3a8345224 --- /dev/null +++ b/apps/st/src/components/util/column/input/PublicSewageFactInpColumn/PublicSewageFactInpColumn.ts @@ -0,0 +1,8 @@ +import type { ColumnInfoList } from "@/components/type/DataGrid.type"; +import { MainFacilityInpColumn } from "./MainFacilityInpColumn"; +import { PublicSewageFactColumn } from "./PublicSewageFactColumn"; + +export const PublicSewageFactInpColumnList: ColumnInfoList[] = [ + PublicSewageFactColumn, + MainFacilityInpColumn, +]; \ No newline at end of file diff --git a/apps/st/src/entities/statistics/model/input/statistics-sewage-supply-rate-input-interface.ts b/apps/st/src/entities/statistics/model/input/statistics-sewage-supply-rate-input-interface.ts index f88e9a08f..de49aee29 100644 --- a/apps/st/src/entities/statistics/model/input/statistics-sewage-supply-rate-input-interface.ts +++ b/apps/st/src/entities/statistics/model/input/statistics-sewage-supply-rate-input-interface.ts @@ -221,7 +221,7 @@ export function getVerificationPeriodActionBlockedMessage( const to = formatCheckInputYmdAsDash(v.endYmd); const range = from && to ? `${from} ~ ${to}` : [from, to].filter(Boolean).join(" ~ "); - return `검증기간에는 저장, 제출, 제출 취소를 할 수 없습니다.\n검증기간: ${range}`; + return `검증기간에는 저장, 제출, 제출 취소를\n 할 수 없습니다.\n(검증기간: ${range})`; } export interface StatisticsInputSewSupplyRateService {