[st] feat: 시도/시군구 조회 쿼리 변경

This commit is contained in:
2026-08-20 11:47:50 +09:00
parent a1c96e9e98
commit 725976b5c0
4 changed files with 100 additions and 36 deletions
@@ -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 = () => {
<SelectContent>
{sidoOptions.map((opt) => (
<SelectItem
key={opt.adstCd}
value={opt.adstCd}
key={opt.adstDstrCd}
value={opt.sido}
>
{opt.adstNm}
{opt.sido}
</SelectItem>
))}
</SelectContent>
@@ -431,10 +444,10 @@ const ImrVerificationHistory = () => {
<SelectContent>
{sigunguOptions.map((opt) => (
<SelectItem
key={opt.adstCd}
value={opt.adstCd}
key={opt.adstDstrCd}
value={opt.gugun}
>
{opt.adstNm}
{opt.gugun}
</SelectItem>
))}
</SelectContent>
@@ -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<Set<number>>(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,
}))}
/>
<FilterSelect
label="시군구"
@@ -590,8 +594,8 @@ function StatisticsVerificationReport() {
onChange={handleFilterChange("sggNm")}
options={
sigunguData?.map((item) => ({
label: item.adstNm,
value: item.adstCd,
label: item.gugun,
value: item.bsnmCd,
})) ?? []
}
/>
@@ -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"],
+8 -6
View File
@@ -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,