This commit is contained in:
2025-09-11 12:42:55 +09:00
12 changed files with 43 additions and 57 deletions
@@ -1,9 +1,9 @@
import React, { use } from 'react';
import React from 'react';
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { SelectBox } from '@common/business_components/ui';
import { Button, Input, Label } from '@common/components';
import useStore from '../../../store/useStore';
import useSearchModalStore from '../../../store/useSearchModalStore';
import useStore from '@/store/useStore';
import useSearchModalStore from '@/store/useSearchModalStore';
import useSearchModal from './useSearchModal';
import useOperationTab from './useOperationTab';
@@ -1,6 +1,5 @@
'use client'
import React, { useEffect, useState } from 'react';
import React, { useEffect } from 'react';
import LoadingOverlay from '@/components/ui/LoadingBar';
import useReportTab from './useReportTab';
import { useReportTabStore } from '@/store/useReportTabStore';
@@ -1,12 +1,10 @@
import LoadingOverlay from '@/components/ui/LoadingBar';
import { UiModal, UITab, UiTable } from '@common/business_components/ui';
import { Button } from '@common/components/ui';
import React, { useMemo } from 'react';
import React, { useEffect, useMemo } from 'react';
import { Toaster } from "react-hot-toast";
import useSearchModalStore from '../../../store/useSearchModalStore';
import {
ExclnSewagePumpCol2, MsSwageMhlCol2, MsSwagePplCol2, stofcbrCol2, SwtrmtFcltCol2, SwtrmtPrcsZoneCol2
} from '../components/common/table';
import useSearchModalStore from '@/store/useSearchModalStore';
import { ExclnSewagePumpCol2, MsSwageMhlCol2, MsSwagePplCol2, stofcbrCol2, SwtrmtFcltCol2, SwtrmtPrcsZoneCol2 } from '../components/common/table';
import BasicTab, { BASIC_TYPES } from './basicTab';
import OperationTab from './operationTab';
import ReportTab from './reportTab';
@@ -16,18 +14,24 @@ import useOperationTab from './useOperationTab';
const SearchModal: React.FC = () => {
const {
showTable,
isSearchModalOpen, setIsSearchModalOpen,
activeTab, basicType, workType,
tableData, detailTableData,
tableCount, detailTableCount,
curPage, detailCurPage,
detailBizId,
isLoading, isDetailLoading,
isResetPage, isResetDetailPage,
isResetSelection, isResetDetailSelection,
setActiveTab,
setCurPage, setDetailCurPage,
setIsResetPage, setIsResetDetailPage,
setDetailBizId,
setIsResetDetailSelection,
resetFilters
} = useSearchModalStore();
const { TABS, viewMultipleFeature } = useSearchModal();
const { TABS, viewMultipleFeature, fetchFilteredData } = useSearchModal();
const { handleBasicCellClick, basicExcelDownload } = useBasicTab();
const {
WORK_TYPES,
@@ -39,7 +43,8 @@ const SearchModal: React.FC = () => {
handleOperationCellClick,
handleOperationResultCellClick,
operationExcelDownload,
operationResultExcelDownload
operationResultExcelDownload,
handleOperationPageNation
} = useOperationTab();
@@ -69,6 +74,24 @@ const SearchModal: React.FC = () => {
return [];
}, [activeTab, workType]);
useEffect(() => {
resetFilters();
}, [activeTab, basicType, workType]);
// 페이지 변경 시마다 데이터 fetch
useEffect(() => {
setIsResetPage(false);
setIsResetDetailPage(true);
setDetailBizId(0);
if (showTable) fetchFilteredData();
}, [curPage]);
// 페이지 변경 시마다 데이터 fetch
useEffect(() => {
setIsResetDetailSelection(false);
if (showTable) handleOperationPageNation(Number(detailBizId));
}, [detailCurPage]);
const renderBody = () => (
<>
@@ -1,5 +1,4 @@
// 우수토실
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { Button } from '@common/components';
import React from 'react';
@@ -1,5 +1,4 @@
// 하수맨홀
import React from 'react';
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { Button, Input, Label } from '@common/components';
@@ -1,5 +1,4 @@
// 하수펌프장
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { Button, Input, Label } from '@common/components';
import React from 'react';
@@ -1,5 +1,4 @@
// 하수관로
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { SelectBox } from '@common/business_components/ui';
import { Button, Input, Label } from '@common/components';
@@ -1,5 +1,4 @@
// 하수처리시설
import React from 'react';
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
import { Button, Input, Label } from '@common/components';
@@ -186,15 +186,13 @@ export default function useBasicTab() {
if (cqlFilters.length > 0) queryParams.append('cqlFiter', cqlFilters.join(' and '));
const res = await getData(`v1/fclts?${queryParams.toString()}`);
// const res = await axios.get(`${API_URL}/v1/fclts?${queryParams.toString()}`);
console.log('onDownload res', res);
const mhlUsgCdMap = new Map(MS_SWAGE_MHL_USE_CODES.map(code => [code.val?.trim(), code.text]));
const pplUsgCdMap = new Map(MS_SWAGE_PPL_USE_CODES.map(code => [code.val?.trim(), code.text]));
const ctpvMap = new Map(ctpv.map(code => [code.val?.trim(), code.text]));
const sggMap = new Map(sgg.map(code => [code.val?.trim(), code.text]));
const mappedContent = (res.data.data || []).map((item: any) => {
const mappedContent = (res.data || []).map((item: any) => {
const formattedItem = formatDisplayData(item);
let ctpvCd = item?.ctpvCd ?? formattedItem?.ctpvCd ?? '';
@@ -306,8 +304,6 @@ export default function useBasicTab() {
const label = BASIC_TYPES.find((type) => type.val === basicType)?.text
const fileName = `${label} 조회 결과_${todayYear}${todayMonth}${todayDate}`;
console.log(`excelData: ${excelData}, label: ${label}, fileName: ${fileName}`);
await downloadExcelWithKoreanHeaders({
data: excelData as JSON[],
fileName: fileName,
@@ -347,15 +347,13 @@ export default function useOperationTab() {
try {
const RequestDTO: Record<string, string> = {
size: '10000',
size: '100',
bizId: String(detailBizId),
};
const apiStartTime = performance.now();
const res = await getData(`v1/bizInfo/fclts?${new URLSearchParams(RequestDTO).toString()}`);
const apiEndTime = performance.now();
const mappingStartTime = performance.now();
console.log('res', res);
// 헤더 매핑 정의
const headerMapping: { [key: string]: string } = {
'fcltMngNo': '관리번호',
@@ -1,4 +1,3 @@
import { useEffect } from 'react';
import { getData } from "@/components/lib/api";
import { formatDisplayData } from '@/components/lib/utils/formatDisplayValue';
import useStore from '../../../store/useStore';
@@ -9,11 +8,9 @@ import useOperationTab from './useOperationTab';
export default function useSearchModal() {
const {
activeTab, basicType, workType,
showTable,
activeTab, workType,
tableData, detailTableData,
curPage, detailCurPage,
detailBizId,
curPage,
var1, var2,
yearFilter,
todayYear, todayMonth, todayDate,
@@ -25,12 +22,10 @@ export default function useSearchModal() {
setIsLoading,
setIsResetPage, setIsResetDetailPage,
setIsResetSelection, setIsResetDetailSelection,
setDetailBizId,
resetFilters,
getDateString
} = useSearchModalStore();
const { fetchBasicFilteredData } = useBasicTab();
const { OPERATION_TABLE_SIZE, handleOperationPageNation } = useOperationTab();
const { OPERATION_TABLE_SIZE } = useOperationTab();
const { BIZ_TY_CD } = useStore();
const TABS = [
@@ -39,25 +34,6 @@ export default function useSearchModal() {
{ val: "report", text: "하수도정비기본계획보고서" },
];
useEffect(() => {
resetFilters();
}, [activeTab, basicType, workType]);
// 페이지 변경 시마다 데이터 fetch
useEffect(() => {
setIsResetPage(false);
setIsResetDetailPage(true);
setDetailBizId(0);
console.log(`curPage: ${curPage}, showTable: ${showTable}`);
if (showTable && curPage > 1) fetchFilteredData();
}, [curPage]);
// 페이지 변경 시마다 데이터 fetch
useEffect(() => {
setIsResetDetailSelection(false);
if (showTable) handleOperationPageNation(Number(detailBizId));
}, [detailCurPage]);
// 검색 API 호출 함수
const fetchFilteredData = async () => {
setIsLoading(true); // 로딩 시작
@@ -167,5 +143,5 @@ export default function useSearchModal() {
}
}
return { TABS, getDateString, handleSearch, viewMultipleFeature };
return { TABS, getDateString, handleSearch, viewMultipleFeature, fetchFilteredData };
};
-1
View File
@@ -1,5 +1,4 @@
import { create } from "zustand";
import { type SelectDataType } from "@common/business_components";
// 날짜 조합 함수