From 117082c8621eb6bde622d5f137032ef8d7bf23b8 Mon Sep 17 00:00:00 2001 From: rsone001 Date: Thu, 23 Jul 2026 14:26:11 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[st]=20-=20fix:=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=ED=95=AD?= =?UTF-8?q?=EB=AA=A9=20=EC=B6=94=EA=B0=80=20=EC=8B=9C=20=ED=95=B4=EB=8B=B9?= =?UTF-8?q?=EC=82=AC=ED=95=AD=EC=97=86=EC=9D=8C=20false=EB=A1=9C=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8D=98=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../input/ExcretaTreatmentFacilityInp.tsx | 1 + .../statistics/input/PumpingStationInp.tsx | 1 + .../input/SewageExcretaRelatedInp.tsx | 7 +-- .../input/SewageExcretaSlurgeInp.tsx | 1 + .../input/SewageReservoirPumpInp.tsx | 1 + .../statistics/input/WaterReuseInp.tsx | 47 ++++++++++--------- 6 files changed, 30 insertions(+), 28 deletions(-) diff --git a/apps/st/src/components/statistics/input/ExcretaTreatmentFacilityInp.tsx b/apps/st/src/components/statistics/input/ExcretaTreatmentFacilityInp.tsx index 2b5eb6dc5..8aa9b1231 100644 --- a/apps/st/src/components/statistics/input/ExcretaTreatmentFacilityInp.tsx +++ b/apps/st/src/components/statistics/input/ExcretaTreatmentFacilityInp.tsx @@ -872,6 +872,7 @@ const ExcretaTreatmentFacilityInp = () => { flushSync(() => { setSggOptions(list); setRowData([...currentRows, newRow]); + setIsNotApplicable(false); }); }; diff --git a/apps/st/src/components/statistics/input/PumpingStationInp.tsx b/apps/st/src/components/statistics/input/PumpingStationInp.tsx index 09910a3df..0ba599429 100644 --- a/apps/st/src/components/statistics/input/PumpingStationInp.tsx +++ b/apps/st/src/components/statistics/input/PumpingStationInp.tsx @@ -856,6 +856,7 @@ const PumpingStationInp = () => { flushSync(() => { setSggOptions(list); setRowData([...currentRows, newRow]); + setIsNotApplicable(false); }); }; diff --git a/apps/st/src/components/statistics/input/SewageExcretaRelatedInp.tsx b/apps/st/src/components/statistics/input/SewageExcretaRelatedInp.tsx index 974b47556..6fc83def9 100644 --- a/apps/st/src/components/statistics/input/SewageExcretaRelatedInp.tsx +++ b/apps/st/src/components/statistics/input/SewageExcretaRelatedInp.tsx @@ -1681,12 +1681,6 @@ const SewageExcretaRelatedInp = () => { return; } - const noApplicable = isNotApplicableByTab.get(tabKey) ?? false; - if (noApplicable) { - alert("해당사항 없음이 체크된 상태에서는 항목을 추가할 수 없습니다."); - return; - } - let list = sggOptions; if (sggOptionsSidoRef.current !== ctx.sido || list.length === 0) { list = await loadSggOptions(ctx.sido); @@ -1715,6 +1709,7 @@ const SewageExcretaRelatedInp = () => { next.set(tabKey, [...currentRows, newRow]); return next; }); + setIsNotApplicableForTab(tabKey, false); }); commitToolbarSnapshotForLoadedTab( diff --git a/apps/st/src/components/statistics/input/SewageExcretaSlurgeInp.tsx b/apps/st/src/components/statistics/input/SewageExcretaSlurgeInp.tsx index 90ad9e99c..4ddc75984 100644 --- a/apps/st/src/components/statistics/input/SewageExcretaSlurgeInp.tsx +++ b/apps/st/src/components/statistics/input/SewageExcretaSlurgeInp.tsx @@ -1809,6 +1809,7 @@ const SewageExcretaSlurgeInp = () => { next.set(tabKey, [...currentRows, newRow]); return next; }); + setIsNotApplicableForTab(tabKey, false); }); const statusInfo = tabStatusInfoMap.get(tabKey) ?? null; diff --git a/apps/st/src/components/statistics/input/SewageReservoirPumpInp.tsx b/apps/st/src/components/statistics/input/SewageReservoirPumpInp.tsx index 6d0f8104b..80a9eb537 100644 --- a/apps/st/src/components/statistics/input/SewageReservoirPumpInp.tsx +++ b/apps/st/src/components/statistics/input/SewageReservoirPumpInp.tsx @@ -1426,6 +1426,7 @@ const SewageReservoirPumpInp = () => { next.set(tabKey, [...currentRows, newRow]); return next; }); + setIsNotApplicableForTab(tabKey, false); }); const statusInfo = tabStatusInfoMap.get(tabKey) ?? null; diff --git a/apps/st/src/components/statistics/input/WaterReuseInp.tsx b/apps/st/src/components/statistics/input/WaterReuseInp.tsx index d3ef54a83..d003934bc 100644 --- a/apps/st/src/components/statistics/input/WaterReuseInp.tsx +++ b/apps/st/src/components/statistics/input/WaterReuseInp.tsx @@ -117,7 +117,10 @@ const ARTICLE_EDIT_TAB_KEYS = new Set([ TreatWaterReuseBusinessApprStatusInpColumn.tabKey, ]); -const NO_APPLICABLE_TAB_KEYS = ARTICLE_EDIT_TAB_KEYS; +const NO_APPLICABLE_TAB_KEYS = new Set([ + PublicSewageTreatWaterReuseInpColumn.tabKey, + ...ARTICLE_EDIT_TAB_KEYS, +]); const WATER_REUSE_TAB_BY_KEY = new Map( WaterReuseInpTabList.map((tab) => [tab.tabKey, tab]), @@ -1073,19 +1076,11 @@ const WaterReuseInp = () => { return; } - if (isPublicSewageTab) { - const currentData = getTabGridRows(tabKey); - if (currentData.length === 0) { - alert("제출할 데이터가 없습니다."); - return; - } - } else { - const noApplicable = isNotApplicableByTab.get(tabKey) ?? false; - const currentData = getTabGridRows(tabKey); - if (!noApplicable && currentData.length === 0) { - alert("해당사항 없음을 체크해주세요."); - return; - } + const noApplicable = isNotApplicableByTab.get(tabKey) ?? false; + const currentData = getTabGridRows(tabKey); + if (!noApplicable && currentData.length === 0) { + alert("해당사항 없음을 체크해주세요."); + return; } if (await confirm("제출 하시겠습니까?")) { @@ -1179,17 +1174,20 @@ const WaterReuseInp = () => { }; if (isPublicSewageTab) { + const noApplicable = isNotApplicableByTab.get(tabKey) ?? false; const currentData = getTabGridRows(tabKey); - const submitList = currentData.map(buildPublicSewageTreatWaterReuseSaveItem); - if (submitList.length === 0) { - alert("제출할 데이터가 없습니다."); + const submitList = noApplicable + ? [] + : currentData.map(buildPublicSewageTreatWaterReuseSaveItem); + if (!noApplicable && submitList.length === 0) { + alert("해당사항 없음을 체크해주세요."); return; } response = await statisticsInputWaterReuseApi.submitPublicSewageTreatWaterReuse({ ...submitRequestBase, userId: userInfo.userUnqId, - noApplicable: false, + noApplicable, submitList, }); } else { @@ -1420,9 +1418,13 @@ const WaterReuseInp = () => { }; if (tabKey === PublicSewageTreatWaterReuseInpColumn.tabKey) { + const noApplicable = isNotApplicableByTab.get(tabKey) ?? false; const currentData = getTabGridRows(tabKey); - if (currentData.length === 0) { - alert("저장할 데이터가 없습니다."); + const saveList = noApplicable + ? [] + : currentData.map(buildPublicSewageTreatWaterReuseSaveItem); + if (!noApplicable && saveList.length === 0) { + alert("해당사항 없음을 체크해주세요."); return; } @@ -1433,8 +1435,8 @@ const WaterReuseInp = () => { await statisticsInputWaterReuseApi.savePublicSewageTreatWaterReuse({ ...requestBase, userId: userInfo.userUnqId, - noApplicable: false, - saveList: currentData.map(buildPublicSewageTreatWaterReuseSaveItem), + noApplicable, + saveList, }); if (response.status === "success") { @@ -1792,6 +1794,7 @@ const WaterReuseInp = () => { next.set(tabKey, [...currentRows, newRow]); return next; }); + setIsNotApplicableForTab(tabKey, false); }); const statusInfo = tabStatusInfoMap.get(tabKey) ?? null; From 3d3b978070ec2e48d751f35753e205eda770e749 Mon Sep 17 00:00:00 2001 From: rsone001 Date: Thu, 23 Jul 2026 16:36:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[st]=20-=20fix:=20=EA=B2=80=ED=86=A0?= =?UTF-8?q?=EC=9D=B4=EB=A0=A5=EC=A1=B0=ED=9A=8C=20request=20=EB=88=84?= =?UTF-8?q?=EB=9D=BD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/statistics/input/StatisticsReviewHistory.tsx | 3 +++ apps/st/src/entities/statistics/model/statistics-interface.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/apps/st/src/components/statistics/input/StatisticsReviewHistory.tsx b/apps/st/src/components/statistics/input/StatisticsReviewHistory.tsx index ddd8bc8dc..e0a0da381 100644 --- a/apps/st/src/components/statistics/input/StatisticsReviewHistory.tsx +++ b/apps/st/src/components/statistics/input/StatisticsReviewHistory.tsx @@ -44,6 +44,9 @@ const StatisticsReviewHistory = () => { statsYr: values.year.trim(), ...(values.bsnmCd?.trim() ? { sewerBzmnCd: values.bsnmCd.trim() } : {}), ...(values.sido && values.sido !== "ALL" ? { ctpvNm: values.sido } : {}), + ...(values.gugun?.trim() && values.gugun !== "ALL" + ? { sggNm: values.gugun.trim() } + : {}), }); if (res.status === "success" && Array.isArray(res.data)) { diff --git a/apps/st/src/entities/statistics/model/statistics-interface.ts b/apps/st/src/entities/statistics/model/statistics-interface.ts index 2b533d955..b27b1dfc8 100644 --- a/apps/st/src/entities/statistics/model/statistics-interface.ts +++ b/apps/st/src/entities/statistics/model/statistics-interface.ts @@ -455,6 +455,7 @@ export interface StatiscicsManagementReviewHistoryRequest { statsYr: string; sewerBzmnCd?: string; ctpvNm?: string; + sggNm?: string; statsCd?: string; } From d1d8a1eff37f239500d6a0cd5dd76422df8a35a2 Mon Sep 17 00:00:00 2001 From: bicochan Date: Fri, 24 Jul 2026 10:47:57 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[st]=20feat:=20=ED=86=B5=EA=B3=84=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=A6=AC=ED=8F=AC=ED=8A=B8=20=EC=8B=9C?= =?UTF-8?q?=EB=8F=84/=EC=8B=9C=EA=B5=B0=EA=B5=AC=20=EC=85=80=EB=A0=89?= =?UTF-8?q?=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatisticsVerificationReport.tsx | 35 +++++++++++++++---- .../statistics-verification-report-types.ts | 6 +++- .../ui/panels/schedule-info-panel.tsx | 4 +-- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx index 38797a591..0ad30c6de 100644 --- a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx +++ b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx @@ -213,7 +213,14 @@ function StatisticsVerificationReport() { })), }); - const statisticsVerificationReportQuery = useStatsVrfcRptData(filters); + const { + ctpvSewerBzmnCd: _, + sggSewerBzmnCd: __, + ...statisticsVerificationReportFilters + } = filters; + const statisticsVerificationReportQuery = useStatsVrfcRptData( + statisticsVerificationReportFilters, + ); const statisticsVerificationResultQuery = useStatsVrfcRsltData(detailParams); @@ -399,12 +406,16 @@ function StatisticsVerificationReport() { optionData?: { label: string; value: string }, ) => { resetReportState(); - if (key === "sewerBzmnCd") { + + // 시도 변경 시 + if (key === "ctpvNm") { setFilters((prev) => ({ ...prev, + sewerBzmnCd: value, ctpvNm: optionData?.label, - sewerBzmnCd: optionData?.value, + ctpvSewerBzmnCd: value, sggNm: "", + sggSewerBzmnCd: "", })); setSubFilters((prev) => ({ ...prev, @@ -414,6 +425,18 @@ function StatisticsVerificationReport() { })); return; } + + // 시군구 변경 시 + if (key === "sggNm") { + setFilters((prev) => ({ + ...prev, + sewerBzmnCd: value, + sggNm: optionData?.label, + sggSewerBzmnCd: value, + })); + return; + } + if (key === "statsCd") { setSubFilters((prev) => ({ ...prev, statsCd: "" })); } @@ -540,8 +563,8 @@ function StatisticsVerificationReport() {
({ label: item.adstNm, @@ -551,7 +574,7 @@ function StatisticsVerificationReport() { /> ({ diff --git a/apps/st/src/entities/statistics/model/statistics-verification-report/statistics-verification-report-types.ts b/apps/st/src/entities/statistics/model/statistics-verification-report/statistics-verification-report-types.ts index d81ee98ee..46e74c8b5 100644 --- a/apps/st/src/entities/statistics/model/statistics-verification-report/statistics-verification-report-types.ts +++ b/apps/st/src/entities/statistics/model/statistics-verification-report/statistics-verification-report-types.ts @@ -2,7 +2,11 @@ import type { VerifyResultSearchRequest } from "../general-verification-interfac import type { StatsInputStatusListRequestParams } from "../input/statistics-input-status-interface"; export type StatisticsVerificationFilterState = - StatsInputStatusListRequestParams; + StatsInputStatusListRequestParams & { + // 셀렉트 표시용 시도, 시군구 코드 + ctpvSewerBzmnCd?: string | null; + sggSewerBzmnCd?: string | null; + }; export type StatisticsVerificationSubFilterState = VerifyResultSearchRequest; diff --git a/apps/st/src/pages/statistics/ui/panels/schedule-info-panel.tsx b/apps/st/src/pages/statistics/ui/panels/schedule-info-panel.tsx index 05a0fe3ff..f6054adf4 100644 --- a/apps/st/src/pages/statistics/ui/panels/schedule-info-panel.tsx +++ b/apps/st/src/pages/statistics/ui/panels/schedule-info-panel.tsx @@ -91,7 +91,7 @@ export function ScheduleInfoPanel({ params }: ScheduleInfoPanelProps) { size="lg" className="font-semibold" > - {data.inptSeCd}차 입력기간 + 입력기간

{dayjs(data.inptBgngYmd).format( @@ -119,7 +119,7 @@ export function ScheduleInfoPanel({ params }: ScheduleInfoPanelProps) { color="gray" className="font-semibold" > - {data.vrfcSeCd}차 검증기간 + 검증기간

{dayjs(data.vrfcBgngYmd).format(