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/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/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; 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-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; } 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(