From 80036ed876c5e0c475a435ea8e102f2626aadd3f Mon Sep 17 00:00:00 2001 From: rsone001 Date: Tue, 17 Mar 2026 10:03:35 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=ED=8E=8C=ED=94=84=EC=9E=A5=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistics/review/PumpingStationRvw.tsx | 2 +- .../column/review/PumpingStationRvwColumn.ts | 8 ++-- .../util/column/review/SewagePipeRvwColumn.ts | 47 +++++++++++-------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/apps/st/src/components/statistics/review/PumpingStationRvw.tsx b/apps/st/src/components/statistics/review/PumpingStationRvw.tsx index 346a9ef33..fc5d8c2c6 100644 --- a/apps/st/src/components/statistics/review/PumpingStationRvw.tsx +++ b/apps/st/src/components/statistics/review/PumpingStationRvw.tsx @@ -85,7 +85,7 @@ const PumpingStationRvw = () => { return (
- +
diff --git a/apps/st/src/components/util/column/review/PumpingStationRvwColumn.ts b/apps/st/src/components/util/column/review/PumpingStationRvwColumn.ts index 3c22c517c..54dbfcedd 100644 --- a/apps/st/src/components/util/column/review/PumpingStationRvwColumn.ts +++ b/apps/st/src/components/util/column/review/PumpingStationRvwColumn.ts @@ -88,10 +88,10 @@ export const rawPumpingStationInfoList = { ] }, { name: 'pumpstNm', fieldName: 'pumpstNm', header: { text: '펌프장명' }, mergeCells: true }, - { name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '처리장명' } }, // bscFctNm -> swtrmtFcltNm - { name: 'pumpSeNm', fieldName: 'pumpSeNm', header: { text: '구분\n(합류/분류)' } }, // pumpCls -> pumpSeNm - { name: 'impdFcltPstnCn', fieldName: 'impdFcltPstnCn', header: { text: '위치' } }, // addr -> impdFcltPstnCn - { name: 'oprtngStrtYmd', fieldName: 'oprtngStrtYmd', header: { text: '가동년월일' } }, // rnDt -> oprtngStrtYmd + { name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '처리장명' } }, + { name: 'pumpSeNm', fieldName: 'pumpSeNm', header: { text: '구분\n(합류/분류)' } }, + { name: 'impdFcltPstnCn', fieldName: 'impdFcltPstnCn', header: { text: '위치' } }, + { name: 'oprtngStrtYmd', fieldName: 'oprtngStrtYmd', header: { text: '가동년월일' } }, { name: 'planMltvArea', fieldName: 'planMltvArea', header: { text: '계획배수면적\n(km2)' }, footer: footerDecimal3ArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.000' diff --git a/apps/st/src/components/util/column/review/SewagePipeRvwColumn.ts b/apps/st/src/components/util/column/review/SewagePipeRvwColumn.ts index ae445b22d..1adb4eadf 100644 --- a/apps/st/src/components/util/column/review/SewagePipeRvwColumn.ts +++ b/apps/st/src/components/util/column/review/SewagePipeRvwColumn.ts @@ -1,8 +1,13 @@ import { ValueType } from "realgrid"; -const baseYear = new Date().getFullYear(); +import dayjs from 'dayjs'; import { footerIntArrayByDivision, footerDecimal3ArrayByDivision, footerAvgDecimalArrayByDivision } from "@/components/util/grid/footerSummary"; import type { GridView } from "@/components/type/DataGrid.type"; + +const currentYear = dayjs().year() - 1; +const startYear = 1996; +const totalCount = currentYear - startYear + 1 + 1; + // 하수도 통계 관리 02. 하수관로 const rawList = [ { @@ -248,7 +253,7 @@ const rawList = [ } ] }, - { name: 'prcsFcltCpct', fieldName: 'prcsFcltCpct', header: { text: '하수처리\n시설용량\n(㎥/일)' }, footer: footerIntArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, + { name: 'prcsFcltCpct', fieldName: 'prcsFcltCpct', header: { text: '하수처리\n시설용량\n(㎥/일)' },valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, { name: 'prcsZoneArea', fieldName: 'prcsZoneArea', header: { text: '합계' }, footer: footerDecimal3ArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.000' }, { name: 'cbsysPrcsZoneArea', fieldName: 'cbsysPrcsZoneArea', header: { text: '합류식' }, footer: footerDecimal3ArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.000' }, { name: 'sprsysPrcsZoneArea', fieldName: 'sprsysPrcsZoneArea', header: { text: '분류식' }, footer: footerDecimal3ArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.000' }, @@ -273,19 +278,19 @@ const rawList = [ { name: 'addrGroup', header: { text: '행정구역' }, items: [ - { column: 'ctpvNm', footerUserSpans: [{ colspan: 4 }, { colspan: 4 }] }, + { column: 'ctpvNm', footerUserSpans: [{ colspan: 6 }, { colspan: 6 }] }, 'sggNm', 'admdstNm' ] }, 'swtrmtFcltNm','prcsFcltCpct', 'displayYear', - { name: 'areaGroup', header: { text: '처리구역면적(㎢)' }, items: ['prcsZoneArea', 'cbsysPrcsZoneArea', 'sprsysPrcsZoneArea'] }, // name 변경됨 + { name: 'areaGroup', header: { text: '처리구역면적(㎢)' }, items: ['prcsZoneArea', 'cbsysPrcsZoneArea', 'sprsysPrcsZoneArea'] }, 'sprsysVartnRt', - { name: 'drainGroup', header: { text: '배수설비(개소)' }, items: ['mltvEqpmCnt', 'cbsysMltvEqpmCnt', 'sprsysMltvEqpmCnt'] }, // name 변경됨 + { name: 'drainGroup', header: { text: '배수설비(개소)' }, items: ['mltvEqpmCnt', 'cbsysMltvEqpmCnt', 'sprsysMltvEqpmCnt'] }, { name: 'pipeGroup', header: { text: '하수관로' }, items: [ 'wholFcltPrlg', - { name: 'trunkGroup', header: { text: '차집/오수간선(m)' }, items: ['wholIcptgAtlfcPrlg', 'icptgPrlg', 'atlfcsPrlg'] }, // name 변경됨 + { name: 'trunkGroup', header: { text: '차집/오수간선(m)' }, items: ['wholIcptgAtlfcPrlg', 'icptgPrlg', 'atlfcsPrlg'] }, { name: 'siteGroup', header: { text: '토실/토구(개소)' }, items: [ @@ -383,18 +388,18 @@ const rawList = [ { name: 'lyngPrlgSum', fieldName: 'lyngPrlg', header: { text: '매설연장(m)' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, { name: 'dmltnPrlgSum', fieldName: 'dmltnPrlg', header: { text: '철거연장(m)' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, - /* 동적 연도 컬럼 (1996년이전[yy30] ~ 2025년[yy1]) */ - ...Array.from({ length: 30 }, (_, i) => { - const dtoNum = 30 - i; // 30, 29, ..., 1 + + ...Array.from({ length: totalCount }, (_, i) => { + const dtoNum = totalCount - i; - const wholField = `yy${dtoNum}PrlgWhol`; + const wholField = `yy${dtoNum}PrlgWhol`; const lyngField = `yy${dtoNum}LyngPrlg`; const dmltnField = `yy${dtoNum}DmltnPrlg`; - + return [ - { name: `${wholField}_col`, fieldName: wholField, header: { text: '계' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, - { name: `${lyngField}_col`, fieldName: lyngField, header: { text: '매설연장(m)' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, - { name: `${dmltnField}_col`, fieldName: dmltnField, header: { text: '철거연장(m)' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' } + { name: wholField, fieldName: wholField, header: { text: '계' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, + { name: lyngField, fieldName: lyngField, header: { text: '매설연장(m)' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' }, + { name: dmltnField, fieldName: dmltnField, header: { text: '철거연장(m)' }, footer: footerAvgDecimalArrayByDivision, valueType: ValueType.NUMBER, numberFormat: '#,##0.0' } ]; }).flat(), @@ -404,15 +409,17 @@ const rawList = [ 'displayYear', { name: 'summaryGroup', header: { text: '총계' }, items: ['pipeByPrstWholSum','lyngPrlgSum', 'dmltnPrlgSum'] }, - ...Array.from({ length: 30 }, (_, i) => { - const dtoNum = 30 - i; - const yearLabel = i === 0 ? '1996년이전' : `${1995 + i}년`; - const wholField = `yy${dtoNum}PrlgWhol`; + ...Array.from({ length: totalCount }, (_, i) => { + + const dtoNum = totalCount - i; + const yearLabel = i === 0 + ? '1996년이전' + : `${startYear + (i - 1)}년`; return { name: `group_${yearLabel}`, header: { text: yearLabel }, - items: [`${wholField}_col`, `yy${dtoNum}LyngPrlg_col`, `yy${dtoNum}DmltnPrlg_col`] + items: [`yy${dtoNum}PrlgWhol`, `yy${dtoNum}LyngPrlg`, `yy${dtoNum}DmltnPrlg`] }; }), 'rmrk' @@ -512,7 +519,7 @@ const rawList = [ name: 'addrGroup', header: { text: '행정구역' }, items: [ - { column: 'ctpvNm', footerUserSpans: [{ colspan: 4 }, { colspan: 4 }] }, + { column: 'ctpvNm', footerUserSpans: [{ colspan: 6 }, { colspan: 6 }] }, 'sggNm', 'admdstNm', ] From 685ba15baa519b54871b7ae5939bb08fc2c8f16b Mon Sep 17 00:00:00 2001 From: rsone001 Date: Tue, 17 Mar 2026 10:07:08 +0900 Subject: [PATCH 2/3] =?UTF-8?q?st:=20feat:=20=EC=9D=BC=EB=B0=98=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EA=B4=80=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/st/src/components/module/SearchForm.tsx | 4 +- .../GeneralVerificationManagement.tsx | 271 +++++--- .../generalVerification/DetailComponent.tsx | 93 +++ .../generalVerification/RegistDialog.tsx | 613 ++++++++++++++++++ .../management/GeneralVerificationColumn.tsx | 45 +- apps/st/src/entities/code/index.ts | 1 + .../entities/code/ui/code-select-with-all.tsx | 48 ++ .../api/general-verification-service.ts | 66 ++ .../model/general-verification-interface.ts | 91 ++- ...neral-verification-master-submit-schema.ts | 28 + apps/st/src/shared/config/api.ts | 1 + 11 files changed, 1144 insertions(+), 117 deletions(-) create mode 100644 apps/st/src/components/statistics/verification/generalVerification/DetailComponent.tsx create mode 100644 apps/st/src/components/statistics/verification/generalVerification/RegistDialog.tsx create mode 100644 apps/st/src/entities/code/ui/code-select-with-all.tsx create mode 100644 apps/st/src/entities/statistics/api/general-verification-service.ts create mode 100644 apps/st/src/entities/statistics/model/general-verification-master-submit-schema.ts diff --git a/apps/st/src/components/module/SearchForm.tsx b/apps/st/src/components/module/SearchForm.tsx index 54cdfe486..5bc809787 100644 --- a/apps/st/src/components/module/SearchForm.tsx +++ b/apps/st/src/components/module/SearchForm.tsx @@ -229,12 +229,12 @@ const SearchForm = (props: SearchFormProps = {}) => {
{mergedProps.fctName &&
-