빗물/중수도/온배수 엑셀 다운로드 수정, 페이징 처리 완료

This commit is contained in:
jyha00
2025-07-08 18:44:45 +09:00
parent 21610c9c9f
commit 657361a141
7 changed files with 129 additions and 95 deletions
@@ -39,7 +39,7 @@ export default function HtdflSttn() {
const { code, htdflSttn, htdflSttnSearch, initHtdfl } = useWrStore(
(state) => state
);
const { htdflSttnRes } = htdflSttn;
const { htdflSttnRes, htdflSttnResCount } = htdflSttn;
const ref = useRef<ReturnType>({} as ReturnType);
@@ -61,8 +61,8 @@ export default function HtdflSttn() {
const excelClick = useCallback(() => {
// 최신 검색 조건 반영
const con = getConValue();
htdflSttnSearch(true, 1, "20", String(con), fcltNm, code.cityCd, code.sggCd);
}, [htdflSttnSearch, objSearch, code.cityCd, code.sggCd]);
htdflSttnSearch(true, pageNation, String(htdflSttnResCount), String(con), fcltNm, code.cityCd, code.sggCd);
}, [htdflSttnSearch, objSearch, code.cityCd, code.sggCd, pageNation, fcltNm, htdflSttnResCount]);
useEffect(() => {
htdflSttnSearch(false, pageNation, "20", String(getConValue()), fcltNm, code.cityCd, code.sggCd);
@@ -120,7 +120,7 @@ export default function HtdflSttn() {
useEffect(() => {
if (!htdflSttn.isInit) {
initHtdfl(1, "20", "0", fcltNm, code.cityCd, code.sggCd);
initHtdfl(false, 1, "20", "0", fcltNm, code.cityCd, code.sggCd);
}
}, [htdflSttn.isInit, initHtdfl]);
@@ -152,7 +152,10 @@ export default function HtdflSttn() {
label="시도"
selectClass={""}
selectArray={code.cityCd}
onSelectValue={getSelCity}
onSelectValue={(val) => {
getSelCity(val)
setPageNation(1)
}}
/>
<SelectBox
className="col-span-2 w-1/6 h-full text-2xl ml-4"
@@ -160,7 +163,10 @@ export default function HtdflSttn() {
selectClass={""}
selectArray={selectSgg || []}
value={objSearch.sgg} // value props 추가
onSelectValue={getSgg}
onSelectValue={(val) => {
getSgg(val)
setPageNation(1)
}}
/>
<div className="col-span-2 flex flex-row space-x-2">
<Label className="w-28 mt-2 text-xl text-gray-600">
@@ -219,7 +225,7 @@ export default function HtdflSttn() {
}
headlist={htdflSttn.htdflSttHeadList}
pageSize={20}
total={100000}
total={htdflSttnResCount || 0}
cellClick={(index: number | undefined, headId: string) => {
cellClick(index ?? undefined, headId);
}}
@@ -39,7 +39,7 @@ export default function RainSttn() {
const { code, rainSttn, rainSttnSearch, rainSttnInit } = useWrStore(
(state) => state
);
const { rainSttnRes } = rainSttn;
const { rainSttnRes, rainSttnResCount } = rainSttn;
const ref = useRef<ReturnType>({} as ReturnType);
const [pageNation, setPageNation] = useState(1);
@@ -96,7 +96,7 @@ export default function RainSttn() {
useEffect(() => {
if (!rainSttn.isInit) {
rainSttnInit(1, "20", "0", fcltNm, code.cityCd, code.sggCd);
rainSttnInit(false, 1, "20", "0", fcltNm, code.cityCd, code.sggCd);
}
}, [rainSttn.isInit, rainSttnInit]);
@@ -132,7 +132,7 @@ export default function RainSttn() {
}, [code, rainSttnRes, rainSttn.rainSttHeadList]);
useEffect(() => {
rainSttnSearch(pageNation, "20", String(getConValue()), fcltNm, code.cityCd, code.sggCd);
rainSttnSearch(false, pageNation, "20", String(getConValue()), fcltNm, code.cityCd, code.sggCd);
}, [pageNation]);
useEffect(() => {
@@ -150,8 +150,8 @@ export default function RainSttn() {
const excelClick = useCallback(() => {
// 최신 검색 조건 반영
const con = getConValue();
rainSttnSearch(1, "10000", String(con), fcltNm, code.cityCd, code.sggCd);
}, [rainSttnSearch, objSearch, code.cityCd, code.sggCd]);
rainSttnSearch(true, pageNation, String(rainSttnResCount), String(con), fcltNm, code.cityCd, code.sggCd);
}, [rainSttnSearch, objSearch, code.cityCd, code.sggCd, pageNation, fcltNm, rainSttnResCount]);
return (
<>
@@ -167,7 +167,10 @@ export default function RainSttn() {
label="시도"
selectClass={""}
selectArray={code.cityCd}
onSelectValue={getSelCity}
onSelectValue={(val) => {
getSelCity(val)
setPageNation(1)
}}
/>
<SelectBox
className="col-span-2 w-1/6 h-full text-2xl ml-4"
@@ -175,7 +178,10 @@ export default function RainSttn() {
selectClass={""}
selectArray={selectSgg || []}
value={objSearch.sgg} // value props 추가
onSelectValue={getSgg}
onSelectValue={(val) => {
getSgg(val)
setPageNation(1)
}}
/>
<div className="col-span-2 flex flex-row space-x-2">
<Label className="w-28 mt-2 text-xl text-gray-600">
@@ -197,7 +203,7 @@ export default function RainSttn() {
size={"sm"}
onClick={() => {
const con = getConValue();
rainSttnSearch(pageNation, "20", String(con), fcltNm, code.cityCd, code.sggCd);
rainSttnSearch(false, pageNation, "20", String(con), fcltNm, code.cityCd, code.sggCd);
}}
>
조회
@@ -234,7 +240,7 @@ export default function RainSttn() {
}
headlist={rainSttn.rainSttHeadList}
pageSize={20}
total={100000}
total={rainSttnResCount || 0}
cellClick={(index: number | undefined, headId: string) => { cellClick(index ?? undefined, headId) }}
onPageChange={setPageNation}
></UiTable>
@@ -2,13 +2,13 @@ import type { SelectDataType } from "@common/business_components/ui";
import type { customHtdflBdst } from "../../fcltReg/htdflReg";
export const excelHtdflSttnParsing = (
data: customHtdflBdst[],
excel: customHtdflBdst[],
sidoCode: SelectDataType[],
sggCode: SelectDataType[]
): string[][] => {
const excelExportData: string[][] = [];
data.forEach((item) => {
excel.data.forEach((item) => {
excelExportData.push([
sidoCode.find((sido) => sido.val === item.ctpvCd.toString())?.text ?? "",
sggCode.find((sgg) => sgg.val === item.sggCd.toString())?.text ?? "",
@@ -4,7 +4,7 @@ import type { sttnHeadListType } from "../rainSttn/headList";
import type { z } from "zod";
import { controlHeadView } from "../rainSttn";
import type { customHtdflBdst } from "../../fcltReg/htdflReg";
import { fetchType, getFetch } from "@/components/lib/api";
import { fetchType, getFetch, getFetchWithCount } from "@/components/lib/api";
import type { SelectDataType } from "@common/business_components/ui";
import { excelHtdflSttnParsing } from "./excel";
@@ -18,16 +18,16 @@ export type htdflSttnState = {
htdflSttNodeList: CommonTableProps[];
htdflSttnRes: customHtdflBdst[]
excelList: [];
htdflSttnResCount: number;
};
};
type htdflSttnActions = {
initHtdfl: (page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void;
htdflSttnSearch: (isExcel:boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void;
initHtdfl: (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void;
htdflSttnSearch: (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void;
htdflChSttnHead: (
headList: z.infer<typeof sttnHeadListType>,
) => void;
@@ -42,12 +42,13 @@ export const htdflSttnStateExport: htdflSttnState = {
htdflSttnRes: [],
excelList: [],
isInit: false,
htdflSttnResCount: 1,
},
};
const initFetch = async (page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => {
const htdflRes = await getFetch(
const htdflRes = await getFetchWithCount(
"wr",
`/drain/facilityList` +
(page ? `/${page}` : "/1") +
@@ -63,30 +64,45 @@ export const htdflSttnActionsExport: (set: any) => htdflSttnActions = (
set: any
) => {
return {
initHtdfl: async (page: number, total: string, con: string, txt: string,
initHtdfl: async (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => {
try {
const htdflSttnRes = await initFetch(page, total, con, txt, sidoCode, sggCode);
set((state: htdflSttnState) => {
return {
...state,
htdflSttn: {
...state.htdflSttn,
htdflSttnRes: htdflSttnRes,
isInit: false,
},
};
});
if (isExcel) {
const htdflExcel = excelHtdflSttnParsing(htdflSttnRes, sidoCode, sggCode);
set((state: htdflSttnState) => {
return {
...state,
htdflSttn: {
...state.htdflSttn,
excelList: htdflExcel,
htdflSttnResCount: htdflSttnRes.count
},
};
});
} else {
set((state: htdflSttnState) => {
return {
...state,
htdflSttn: {
...state.htdflSttn,
htdflSttnRes: htdflSttnRes.data,
htdflSttnResCount: htdflSttnRes.count,
isInit: false,
},
};
});
}
} catch (error) {
console.log(error);
}
},
htdflSttnSearch: async (isExcel:boolean, page: number, total: string, con: string, txt: string,
htdflSttnSearch: async (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => {
try {
const htdflSttnRes = await getFetch(
const htdflSttnRes = await getFetchWithCount(
fetchType.WR,
`/drain/facilityList` +
(page ? `/${page}` : "/1") +
@@ -103,6 +119,7 @@ export const htdflSttnActionsExport: (set: any) => htdflSttnActions = (
htdflSttn: {
...state.htdflSttn,
excelList: htdflExcel,
htdflSttnResCount: htdflSttnRes.count
},
};
});
@@ -112,7 +129,8 @@ export const htdflSttnActionsExport: (set: any) => htdflSttnActions = (
...state,
htdflSttn: {
...state.htdflSttn,
htdflSttnRes: htdflSttnRes,
htdflSttnRes: htdflSttnRes.data,
htdflSttnResCount: htdflSttnRes.count,
isInit: false,
},
};
@@ -2,13 +2,13 @@ import type { SelectDataType } from "@common/business_components/ui";
import type { customRainBdst } from "../../fcltReg/rainReg";
export const excelRainSttnParsing = (
data: customRainBdst[],
excel: customRainBdst[],
sidoCode: SelectDataType[],
sggCode: SelectDataType[]
): string[][] => {
const excelExportData: string[][] = [];
data.forEach((item) => {
excel.data.forEach((item) => {
excelExportData.push([
sidoCode.find((sido) => sido.val === item.ctpvCd.toString())?.text ?? "",
sggCode.find((sgg) => sgg.val === item.sggCd.toString())?.text ?? "",
@@ -1,5 +1,5 @@
import type { rainChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn";
import { fetchType, getFetch } from "@/components/lib/api";
import { fetchType, getFetch, getFetchWithCount } from "@/components/lib/api";
import {
type customRainBdst,
} from "../../fcltReg/rainReg";
@@ -96,15 +96,16 @@ export type rainSttnState = {
rainChkRes: rainChkZodType
excelList: [];
isInit: boolean;
rainSttnResCount: number;
};
};
type rainSttnActions = {
rainSttnInit: (page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void
rainSttnSearch: (page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void;
rainSttnInit: (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void
rainSttnSearch: (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => void;
rainChSttnHead: (
headList: z.infer<typeof sttnHeadListType>,
) => void;
@@ -123,6 +124,7 @@ export const rainSttnStateExport: rainSttnState = {
rainChkRes: rainChkRes,
excelList: [],
isInit: false,
rainSttnResCount: 1,
},
};
@@ -130,12 +132,12 @@ export const rainSttnActionsExport: (set: any) => rainSttnActions = (
set: any
) => {
return {
rainSttnInit: async (page: number, total: string, con: string, txt: string,
rainSttnInit: async (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => {
try {
const rainSttnRes = await getFetch(
const rainSttnRes = await getFetchWithCount(
fetchType.WR,
`/reuseFc/rainyInfoList` +
(page ? `/${page}` : "/1") +
@@ -143,33 +145,7 @@ export const rainSttnActionsExport: (set: any) => rainSttnActions = (
(con ? `/${con}` : "/0") +
(txt ? `/${txt}` : "")
);
set((state: rainSttnState) => {
return {
...state,
rainSttn: {
...state.rainSttn,
rainSttnRes: rainSttnRes,
isInit: false,
},
};
});
} catch (e) {
console.log(e)
}
},
rainSttnSearch: async (page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => {
try {
const rainSttnRes = await getFetch(
fetchType.WR,
`/reuseFc/rainyInfoList` +
(page ? `/${page}` : "/1") +
(total ? `/${total}` : "/20") +
(con ? `/${con}` : "/0") +
(txt ? `/${txt}` : "")
);
if (Number(total) > 9000) {
if (isExcel) {
const rainExcel = excelRainSttnParsing(rainSttnRes, sidoCode, sggCode);
set((state: rainSttnState) => {
return {
@@ -177,6 +153,48 @@ export const rainSttnActionsExport: (set: any) => rainSttnActions = (
rainSttn: {
...state.rainSttn,
excelList: rainExcel,
rainSttnResCount: rainSttnRes.count,
},
};
});
} else {
set((state: rainSttnState) => {
return {
...state,
rainSttn: {
...state.rainSttn,
rainSttnRes: rainSttnRes.data,
rainSttnResCount: rainSttnRes.count,
isInit: false,
},
};
});
}
} catch (e) {
console.log(e)
}
},
rainSttnSearch: async (isExcel: boolean, page: number, total: string, con: string, txt: string,
sidoCode: SelectDataType[],
sggCode: SelectDataType[]) => {
try {
const rainSttnRes = await getFetchWithCount(
fetchType.WR,
`/reuseFc/rainyInfoList` +
(page ? `/${page}` : "/1") +
(total ? `/${total}` : "/20") +
(con ? `/${con}` : "/0") +
(txt ? `/${txt}` : "")
);
if (isExcel) {
const rainExcel = excelRainSttnParsing(rainSttnRes, sidoCode, sggCode);
set((state: rainSttnState) => {
return {
...state,
rainSttn: {
...state.rainSttn,
excelList: rainExcel,
rainSttnResCount: rainSttnRes.count,
},
};
});
@@ -186,7 +204,8 @@ export const rainSttnActionsExport: (set: any) => rainSttnActions = (
...state,
rainSttn: {
...state.rainSttn,
rainSttnRes: rainSttnRes,
rainSttnRes: rainSttnRes.data,
rainSttnResCount: rainSttnRes.count,
isInit: false,
},
};
@@ -71,7 +71,6 @@ export const rswtSttnActionsExport: (set: any) => rswtSttnActions = (
(con ? `/${con}` : "/0") +
(txt ? `/${txt}` : "")
);
console.log("rswtSttnResㅇㅇ", rswtSttnRes)
if (isExcel) {
const rswtExcel = excelRSwtSttnParsing(rswtSttnRes, sidoCode, sggCode);
set((state: rswtSttnState) => {
@@ -97,20 +96,6 @@ export const rswtSttnActionsExport: (set: any) => rswtSttnActions = (
},
};
});
// }
// set((state: rswtSttnState) => {
// return {
// ...state,
// rswtSttn: {
// ...state.rswtSttn,
// rswtSttnRes: rswtSttnRes.data,
// rswtSttnResCount: rswtSttnRes.count,
// excelList: rswtExcel,
// isInit: false,
// },
// };
// });
} catch (e) {
console.log(e)
}