feat : 13. 하수도 서비스 수준

valueType,numberFormat 추가,컬럼명 변경
This commit is contained in:
2026-01-16 11:52:23 +09:00
parent 35a44ff7aa
commit 8552957fb5
2 changed files with 40 additions and 34 deletions
@@ -7,8 +7,9 @@ import ApproveButton from "@/components/button/ApproveButton";
import ReviewOpinionButton from "@/components/button/ReviewOpinionButton"; import ReviewOpinionButton from "@/components/button/ReviewOpinionButton";
import ReturnButton from "@/components/button/ReturnButton"; import ReturnButton from "@/components/button/ReturnButton";
import { SewerageServiceLevelInfoListRvw } from "@/components/util/column/review/SewerageServiceLevelColumnRvw"; import { SewerageServiceLevelInfoListRvw } from "@/components/util/column/review/SewerageServiceLevelRvwColumn";
// 하수도 통계 관리 13. 하수도 서비스 수준
const SewerageServiceLevelRvw = () => { const SewerageServiceLevelRvw = () => {
const [rowDataMap, setRowDataMap] = useState<Map<string, Record<string, string | number>[]>>(new Map()); const [rowDataMap, setRowDataMap] = useState<Map<string, Record<string, string | number>[]>>(new Map());
@@ -35,11 +36,13 @@ const SewerageServiceLevelRvw = () => {
return ( return (
<> <>
<SearchForm userMenual={true} fctName={true} /> <SearchForm userMenual={true} fctName={true} />
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]"> <div className="card !py-0">
<ReviewOpinionButton reviewOpinionFunc={reviewOpinionFunc} /> <div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
<ApproveButton approveFunc={approveFunc} /> <ReviewOpinionButton reviewOpinionFunc={reviewOpinionFunc} />
<ReturnButton returnFunc={returnFunc} /> <ApproveButton approveFunc={approveFunc} />
<SaveButton saveFunc={saveFunc} /> <ReturnButton returnFunc={returnFunc} />
<SaveButton saveFunc={saveFunc} />
</div>
</div> </div>
<TabDataGrid columnInfo={SewerageServiceLevelInfoListRvw} isExcelImport={false} rowDataMap={rowDataMap} setRowDataMap={setRowDataMap} /> <TabDataGrid columnInfo={SewerageServiceLevelInfoListRvw} isExcelImport={false} rowDataMap={rowDataMap} setRowDataMap={setRowDataMap} />
</> </>
@@ -1,3 +1,6 @@
import { ValueType } from "realgrid";
// 하수도 통계 관리 13. 하수도 서비스 수준
const rawServiceLevelList = [ const rawServiceLevelList = [
{ {
tabKey: 'a', tabKey: 'a',
@@ -5,26 +8,26 @@ const rawServiceLevelList = [
rowStartNum: 2, rowStartNum: 2,
fixedColumns: 2, fixedColumns: 2,
columns: [ columns: [
/* 1. 기본 정보 (Band: Left) */ /* 1. 기본 정보 */
{ name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } },
{ name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } },
{ name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } },
/* 2. 하수처리 인구 */ /* 2. 하수처리 인구 (정수 반영) */
{ name: 'POPLTN_SM', fieldName: 'POPLTN_SM', header: { text: '하수처리인구\n(명)' } }, { name: 'POPLTN_SM', fieldName: 'POPLTN_SM', header: { text: '하수처리인구\n(명)' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
/* 3. 민원유형 (단위: 건) */ /* 3. 민원유형 (단위: 건 / 정수 반영) */
{ name: 'CVPL_CM', fieldName: 'CVPL_CM', header: { text: '총계' } }, { name: 'CVPL_CM', fieldName: 'CVPL_CM', header: { text: '총계' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CVPL_DCWTR_QLTWTR', fieldName: 'CVPL_DCWTR_QLTWTR', header: { text: '악취' } }, { name: 'CVPL_DCWTR_QLTWTR', fieldName: 'CVPL_DCWTR_QLTWTR', header: { text: '악취' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CVPL_BSML', fieldName: 'CVPL_BSML', header: { text: '하수관로' } }, { name: 'CVPL_BSML', fieldName: 'CVPL_BSML', header: { text: '하수관로' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CVPL_FIVW', fieldName: 'CVPL_FIVW', header: { text: '배수설비' } }, { name: 'CVPL_FIVW', fieldName: 'CVPL_FIVW', header: { text: '배수설비' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CVPL_POLLUTN_ACDNT', fieldName: 'CVPL_POLLUTN_ACDNT', header: { text: '맨홀' } }, { name: 'CVPL_POLLUTN_ACDNT', fieldName: 'CVPL_POLLUTN_ACDNT', header: { text: '맨홀' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CVPL_SSOS', fieldName: 'CVPL_SSOS', header: { text: '정화조' } }, { name: 'CVPL_SSOS', fieldName: 'CVPL_SSOS', header: { text: '정화조' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CVPL_CHRGE', fieldName: 'CVPL_CHRGE', header: { text: '하수도요금' } }, { name: 'CVPL_CHRGE', fieldName: 'CVPL_CHRGE', header: { text: '하수도요금' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CVPL_ETC', fieldName: 'CVPL_ETC', header: { text: '기타' } }, { name: 'CVPL_ETC', fieldName: 'CVPL_ETC', header: { text: '기타' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
/* 4. 성과 지표 및 비고 */ /* 4. 성과 지표 및 비고 (소수점 1자리 반영) */
{ name: 'STDR_POPLTN_PER_CVPL', fieldName: 'STDR_POPLTN_PER_CVPL', header: { text: '기준인구당\n민원건수\n(건/10,000명)' } }, { name: 'STDR_POPLTN_PER_CVPL', fieldName: 'STDR_POPLTN_PER_CVPL', header: { text: '기준인구당\n민원건수\n(건/10,000명)' }, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' },
{ name: 'RMK', fieldName: 'RMK', header: { text: '비고' } } { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }
], ],
columnLayout: [ columnLayout: [
@@ -55,26 +58,26 @@ const rawServiceLevelList = [
rowStartNum: 2, rowStartNum: 2,
fixedColumns: 5, fixedColumns: 5,
columns: [ columns: [
/* 1. 기본 및 시설 정보 (Band: Left) */ /* 1. 기본 및 시설 정보 */
{ name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } }, { name: 'SIDO', fieldName: 'SIDO', header: { text: '시도' } },
{ name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } }, { name: 'GUGUN', fieldName: 'GUGUN', header: { text: '시군구' } },
{ name: 'BSC_FCT_NM', fieldName: 'BSC_FCT_NM', header: { text: '처리장명' } }, { name: 'BSC_FCT_NM', fieldName: 'BSC_FCT_NM', header: { text: '처리장명' } },
{ name: 'FCT_CPC', fieldName: 'FCT_CPC', header: { text: '시설용량\n(㎥/일)' } }, { name: 'FCT_CPC', fieldName: 'FCT_CPC', header: { text: '시설용량\n(㎥/일)' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } }, { name: 'YR_GBN', fieldName: 'YR_GBN', header: { text: '구분' } },
/* 2. 처리장 전체 면적 */ /* 2. 처리장 전체 면적 (소수점 1자리 반영) */
{ name: 'PRCPLT_AR', fieldName: 'PRCPLT_AR', header: { text: '처리장\n면적(㎡)' } }, { name: 'PRCPLT_AR', fieldName: 'PRCPLT_AR', header: { text: '처리장\n면적(㎡)' }, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' },
/* 3. 주민친화시설 면적 상세 (단위: ㎡) */ /* 3. 주민친화시설 면적 상세 (단위: ㎡ / 정수 반영) */
{ name: 'TOTAL_AR', fieldName: 'TOTAL_AR', header: { text: '총계' } }, { name: 'TOTAL_AR', fieldName: 'TOTAL_AR', header: { text: '총계' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'RESTRM_AR', fieldName: 'RESTRM_AR', header: { text: '휴게시설' } }, { name: 'RESTRM_AR', fieldName: 'RESTRM_AR', header: { text: '휴게시설' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CHILDPLAY_AR', fieldName: 'CHILDPLAY_AR', header: { text: '어린이놀이공간' } }, { name: 'CHILDPLAY_AR', fieldName: 'CHILDPLAY_AR', header: { text: '어린이놀이공간' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'ALSFC_AR', fieldName: 'ALSFC_AR', header: { text: '체력단련시설' } }, { name: 'ALSFC_AR', fieldName: 'ALSFC_AR', header: { text: '체력단련시설' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'PLGRND_AR', fieldName: 'PLGRND_AR', header: { text: '운동시설' } }, { name: 'PLGRND_AR', fieldName: 'PLGRND_AR', header: { text: '운동시설' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'PRKPLCE_AR', fieldName: 'PRKPLCE_AR', header: { text: '주차장' } }, { name: 'PRKPLCE_AR', fieldName: 'PRKPLCE_AR', header: { text: '주차장' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'CTLSTT_AR', fieldName: 'CTLSTT_AR', header: { text: '교육 및\n문화시설' } }, { name: 'CTLSTT_AR', fieldName: 'CTLSTT_AR', header: { text: '교육 및\n문화시설' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'NRPRK_AR', fieldName: 'NRPRK_AR', header: { text: '습지조성\n(생태공원)' } }, { name: 'NRPRK_AR', fieldName: 'NRPRK_AR', header: { text: '습지조성\n(생태공원)' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
{ name: 'ETC_AR', fieldName: 'ETC_AR', header: { text: '기타' } }, { name: 'ETC_AR', fieldName: 'ETC_AR', header: { text: '기타' }, valueType: ValueType.NUMBER, numberFormat: '#,##0' },
/* 4. 비고 */ /* 4. 비고 */
{ name: 'RMK', fieldName: 'RMK', header: { text: '비고' } } { name: 'RMK', fieldName: 'RMK', header: { text: '비고' } }