diff --git a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx
index e8e0d36e3..304fea591 100644
--- a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx
+++ b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx
@@ -23,9 +23,9 @@ import {
import dayjs from "dayjs";
import { ENDPOINT } from "@/shared/config";
+import { useUserStore } from "@/shared/lib";
import { CodeSelect } from "@/entities/code";
import {
- type AdstZoneResponseDto,
IMR_DETAIL_VISIBLE_COLUMNS_BY_STATS_CD,
IMR_DETAIL_VISIBLE_COLUMNS_DEFAULT,
imrApi,
@@ -36,8 +36,8 @@ import {
stAnlsRsltApi,
type StAnlsRsltResponse,
statisticsAnalysisMasterService,
- useStAnlsSidoCombo,
- useStAnlsSigunguCombo,
+ useSggList,
+ useSidoList,
} from "@/entities/statistics";
import {
Button,
@@ -54,6 +54,7 @@ import {
import DataGrid from "@/components/module/DataGrid";
import type { ColumnInfo } from "@/components/type/DataGrid.type";
+import { doList } from "@/components/util/column/input/DoList";
ChartJS.register(
CategoryScale,
@@ -71,7 +72,6 @@ type DateRangeValue = {
};
const EMPTY_DATA: never[] = [];
-const EMPTY_ADST_LIST: AdstZoneResponseDto[] = [];
function getImrDetailGridColumnInfo(statsCd: string): ColumnInfo {
const visible =
@@ -139,10 +139,17 @@ const ImrVerificationHistory = () => {
pageSize: 5,
});
- const { data: sidoData } = useStAnlsSidoCombo();
- const { data: sigunguData } = useStAnlsSigunguCombo(searchSido);
- const sidoOptions = sidoData ?? EMPTY_ADST_LIST;
- const sigunguOptions = sigunguData ?? EMPTY_ADST_LIST;
+ const userInfo = useUserStore((state) => state.userInfo);
+ const userInstSeCd = userInfo?.instSeCd;
+ const { data: sidoData } = useSidoList({ instSeCd: userInstSeCd });
+ const sidoOptions = sidoData?.sidoList ?? [];
+ const selectedSidoBsnmCd =
+ sidoOptions.find((item) => item.sido === searchSido)?.bsnmCd ?? "";
+ const { data: sigunguData } = useSggList(searchSido, {
+ instSeCd: userInstSeCd,
+ gugunSkipYn: doList.includes(selectedSidoBsnmCd) ? "N" : "Y",
+ });
+ const sigunguOptions = sigunguData ?? [];
const imrDetailColumnInfo = useMemo(
() => getImrDetailGridColumnInfo(selectedHistory?.statsCd ?? ""),
@@ -241,9 +248,15 @@ const ImrVerificationHistory = () => {
vrfcMthdCd: "IMR",
sort: "anlsSn,desc",
};
- if (searchSido !== "")
+ if (searchSido !== "") {
+ const selectedSggBsnmCd = sigunguOptions.find(
+ (item) => item.gugun === searchSigungu,
+ )?.bsnmCd;
params.sewerBzmnCd =
- searchSigungu !== "" ? searchSigungu : searchSido;
+ searchSigungu !== ""
+ ? (selectedSggBsnmCd ?? "")
+ : selectedSidoBsnmCd;
+ }
if (searchStatsYr) params.statsYr = searchStatsYr;
if (searchStatsCd) params.statsCd = searchStatsCd;
if (dateRange?.from)
@@ -406,10 +419,10 @@ const ImrVerificationHistory = () => {
{sidoOptions.map((opt) => (
- {opt.adstNm}
+ {opt.sido}
))}
@@ -431,10 +444,10 @@ const ImrVerificationHistory = () => {
{sigunguOptions.map((opt) => (
- {opt.adstNm}
+ {opt.gugun}
))}
diff --git a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx
index 76bd6c0ae..f30dc87d7 100644
--- a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx
+++ b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx
@@ -20,8 +20,8 @@ import {
statisticsVerificationResultColumnInfo,
type StatisticsVerificationSubFilterState,
type StatsInputStatusList,
- useStAnlsSidoCombo,
- useStAnlsSigunguCombo,
+ useSggList,
+ useSidoList,
useStatsVrfcRptData,
useStatsVrfcRsltData,
type VerifyResultItem,
@@ -53,6 +53,7 @@ import {
ApprovalInputDialog,
} from "@/components/statistics/verification/ApprovalInputDialog";
import type { CellEditedCallbackParams } from "@/components/type/DataGrid.type";
+import { doList } from "@/components/util/column/input/DoList";
import { toGridRows } from "@/components/util/grid/gridFunction";
const getYearOptions = () => {
@@ -175,10 +176,15 @@ function StatisticsVerificationReport() {
const prevLengthRef = useRef(0);
const rejectedVrfcSnRef = useRef>(new Set());
- const { data: sidoData } = useStAnlsSidoCombo();
- const { data: sigunguData } = useStAnlsSigunguCombo(
- filters.sewerBzmnCd ?? "",
- );
+ const userInstSeCd = userInfo?.instSeCd;
+ const { data: sidoData } = useSidoList({ instSeCd: userInstSeCd });
+ const sidoList = sidoData?.sidoList ?? [];
+ const selectedSidoBsnmCd = filters.ctpvSewerBzmnCd ?? "";
+ const { data: sigunguData } = useSggList(filters.ctpvNm ?? "", {
+ instSeCd: userInstSeCd,
+ gugunSkipYn: doList.includes(selectedSidoBsnmCd) ? "N" : "Y",
+ });
+
const detailParams = useMemo(
() => ({
statsYr: filters.statsYr,
@@ -577,12 +583,10 @@ function StatisticsVerificationReport() {
label="시도"
value={filters.ctpvSewerBzmnCd ?? ""}
onChange={handleFilterChange("ctpvNm")}
- options={
- sidoData?.map((item) => ({
- label: item.adstNm,
- value: item.adstCd,
- })) ?? []
- }
+ options={sidoList.map((item) => ({
+ label: item.sido,
+ value: item.bsnmCd,
+ }))}
/>
({
- label: item.adstNm,
- value: item.adstCd,
+ label: item.gugun,
+ value: item.bsnmCd,
})) ?? []
}
/>
diff --git a/apps/st/src/entities/statistics/api/queries.ts b/apps/st/src/entities/statistics/api/queries.ts
index 5335864f4..3b5fad7d8 100644
--- a/apps/st/src/entities/statistics/api/queries.ts
+++ b/apps/st/src/entities/statistics/api/queries.ts
@@ -4,6 +4,7 @@ import { ENDPOINT } from "@/shared/config";
import type { VerifyResultPageData } from "../model/general-verification-interface";
import type { SewerStUserSearchParams } from "../model/sewer-st-user-interface";
+import type { SearchCondition } from "../model/statistics-interface";
import type {
StatisticsVerificationFilterState,
StatisticsVerificationSubFilterState,
@@ -14,9 +15,53 @@ import { generalverificationApiService } from "./general-verification-service";
import { sewerStUserApi } from "./sewer-st-user-service";
import { statisticsAnalysisMasterService } from "./statistics-analysis-master-service";
import { stAnlsRsltApi } from "./statistics-analysis-result-api";
+import { statisticsApi } from "./statistics-service";
const DETAIL_PAGE_SIZE = 100;
+const EMPTY_SEARCH_CONDITION: SearchCondition = {
+ yearList: [],
+ sidoList: [],
+};
+
+export function useSidoList(params?: { instSeCd?: string }) {
+ return useQuery({
+ queryKey: [
+ ENDPOINT.ST_SERVICE.COMMON,
+ "search-condition",
+ params?.instSeCd ?? "",
+ ],
+ queryFn: async () => {
+ const response = await statisticsApi.getSidoList(params);
+ if (response.status !== "success")
+ throw new Error(response.message);
+ return response.data ?? EMPTY_SEARCH_CONDITION;
+ },
+ });
+}
+
+export function useSggList(
+ sidoName: string,
+ params?: { instSeCd?: string; gugunSkipYn?: "Y" | "N" },
+) {
+ return useQuery({
+ queryKey: [
+ ENDPOINT.ST_SERVICE.COMMON,
+ "sgg",
+ sidoName,
+ params?.instSeCd ?? "",
+ params?.gugunSkipYn ?? "",
+ ],
+ queryFn: async () => {
+ const response = await statisticsApi.getSggList(sidoName, params);
+ if (response.status !== "success")
+ throw new Error(response.message);
+ return response.data ?? [];
+ },
+ enabled: Boolean(sidoName) && sidoName !== "ALL",
+ });
+}
+
export const useStAnlsSidoCombo = () => {
return useQuery({
queryKey: [ENDPOINT.STATVERIFY_SERVICE.ST_ANLS_MST, "sido"],
diff --git a/apps/st/src/entities/statistics/index.ts b/apps/st/src/entities/statistics/index.ts
index c8045b1f3..90dfb00f6 100644
--- a/apps/st/src/entities/statistics/index.ts
+++ b/apps/st/src/entities/statistics/index.ts
@@ -17,6 +17,8 @@ export {
} from "./api/notice-talk/queries";
export {
useSewerStUserList,
+ useSggList,
+ useSidoList,
useStAnlsSidoCombo,
useStAnlsSigunguCombo,
useStatsVrfcRptData,
@@ -74,12 +76,6 @@ export {
type ImrLogResponse,
} from "./model/imr/imr-interface";
export { imrVerificationHistoryColumns } from "./model/imr/imr-verification-history-columns";
-export {
- type StatsInputStatusApproveBatchRequest,
- type StatsInputStatusApproveItem,
- type StatsInputStatusApproveKind,
- type StatsInputStatusApproveResponse,
-} from "./model/statistics-interface";
export { type StatsInputStatusList } from "./model/input/statistics-input-status-interface";
export { userListColumns } from "./model/notice-talk/notice-talk-sending-columns";
export {
@@ -130,6 +126,12 @@ export {
type ApproveRequest,
type RejectRequest,
} from "./model/statistics-approval-interface";
+export {
+ type StatsInputStatusApproveBatchRequest,
+ type StatsInputStatusApproveItem,
+ type StatsInputStatusApproveKind,
+ type StatsInputStatusApproveResponse,
+} from "./model/statistics-interface";
export {
statisticsVerificationReportColumnInfo,
statisticsVerificationResultColumnInfo,