지도점검 현황 완료

This commit is contained in:
leedj312
2025-05-19 17:13:43 +09:00
parent 7da488dbbf
commit 8423bd9dac
18 changed files with 611 additions and 86 deletions
@@ -10,6 +10,7 @@ export const headMakeprfmnc = (
<>
<TableRow>
{upHeadList
.filter((data) => data.visible != false)
.map((head: TableUpperProps) =>
!head.upSequnce ? (
<TableHead
@@ -37,7 +37,8 @@ export default function Page() {
rainChkDelete,
rainChkExcelDownload,
rainChkHeadChange,
isRainSttn,
rswtChkgdnInit,
rswtChkDetilsUpdate,
rswtChkDelete,
@@ -70,13 +71,15 @@ export default function Page() {
useEffect(() => {
if (!rainChkgdn.isInit) {
rainChkInit("2024", "0");
setIsModal({ data: {}, open: rainChkgdn.isModalClose });
isRainSttn(false)
setIsModal({ data: {}, open: false });
setIsRegExcel(false);
}
if (!rswtChkgdn.isInit) {
rswtChkgdnInit("2024", "0");
setIsModal({ data: {}, open: rainChkgdn.isModalClose });
setIsModal({ data: {}, open: false });
setIsRegExcel(false);
}
}, [rainChkgdn.isInit, rainChkInit]);
@@ -136,7 +139,6 @@ export default function Page() {
const clickDelete = (data: number[],selFcltDiv:string) => {
if (data.length > 0) {
if(selFcltDiv === "RNB"){
rainChkDelete(data);
@@ -147,15 +149,17 @@ export default function Page() {
};
const chkUpdateTable =(selFcltDiv:string) =>{
if(selFcltDiv === "RNB"){
rainChkDetilUpdate(updateRainDetail)
}else{
console.log("updateRswtDetail ", updateRswtDetail)
rswtChkDetilsUpdate(updateRswtDetail)
}
}
return (
<ContentsDiv>
<div className="grid grid-cols-4 gap-4 ">
@@ -236,12 +240,14 @@ export default function Page() {
deleteData={setDeleteIdx}
detailUp={setUpdateRainDetail}
handleClick={handleClick}
rainChkData={rainChkgdn.rainChk}
/>
) : (
<RswtChkgdTable
detaiRswtlUpdate={setUpdateRSwtDetail}
deleteRswtData={setDeleteIdx}
handleRswtClick={handleClick}
rswtChkData={rswtChkgdn.rswtChkRes}
/>
) }
</ListDiv>
@@ -30,17 +30,18 @@ import { Toaster } from "react-hot-toast";
export default function Page() {
const {
code,
rainChkgdn,
rswtChkgdn,
rainChkSttn,
rswtChkSttn,
rainChkInit,
rswtChkgdnInit,
rainChkHeadChange,
rswtChkHeadChange
rainChkSttnInit,
rainChkSttnSearch,
rswtChkSttnInit,
isRainSttn,
isRswtSttn
} = useWrStore((state) => {
return state;
});
const [isRegExcel, setIsRegExcel] = useState(false);
const [searchTxt, setSearchTxt] = useState<string>();
const [selFcltDiv, setSelFcltDiv] = useState("RNB");
const [isModal, setIsModal] = useState({
@@ -48,33 +49,26 @@ export default function Page() {
data: {},
});
const cellClick = () => {
if (searchTxt) rainChkInit(searchTxt, "0");
if (searchTxt) rainChkSttnSearch(searchTxt, "0");
};
useEffect(() => {
if (!rainChkgdn.isInit) {
rainChkInit("2024", "0");
if (!rainChkSttn.isInit) {
isRainSttn(true)
rainChkSttnInit( "0");
setIsModal({ data: {}, open: false });
}
}, [rainChkgdn.isInit, rainChkInit]);
}, [rainChkSttn.isInit, rainChkSttnInit]);
useEffect(() => {
if (!rswtChkgdn.isInit) {
rswtChkgdnInit("2024", "0");
if (!rswtChkSttn.isInit) {
setIsModal({ data: {}, open: false });
rswtChkSttnInit( "0");
isRswtSttn(true)
}
},[rswtChkgdn.isInit, rswtChkgdnInit])
},[rswtChkSttn.isInit, rswtChkSttnInit])
useEffect(() => {
rainChkgdn.isSttn=true
rswtChkgdn.isSttn=true
if (rainChkgdn.isSttn &&rswtChkgdn.isSttn) {
rainChkHeadChange({rainChkgdn}, false);
rswtChkHeadChange({rswtChkgdn}, false);
}
}, [rainChkgdn.isSttn ,rswtChkgdn.isSttn]);
@@ -84,8 +78,32 @@ export default function Page() {
},
[isModal]
);
const excelDown=() =>{
console.log("excelDown" , rainChkSttn.sttnExcelList)
if(rainChkSttn.sttnExcelList && selFcltDiv === "RNB"){
excelDownload(
rainChkSttn.sttnExcelList,
"빗물이용시설 지도점검 현황",
"sample_rainChkSttn.xlsx",
"A1:Q1",
3
);
}else if(rswtChkSttn.sttnExcelList && selFcltDiv === "RST"){
console.log("rswtChkSttn " , rswtChkSttn.sttnExcelList)
excelDownload(
rswtChkSttn.sttnExcelList,
"중수도시설 지도점검 현황",
"sample_rswtChkSttn.xlsx",
"A1:Q1",
3
);
}
}
return (
<ContentsDiv>
<div className="grid grid-cols-4 gap-4 ">
@@ -105,11 +123,11 @@ export default function Page() {
className={"col-span-3 w-full h-full text-2xl"}
label={"시설구분"}
selectClass={""}
selectArray={rainChkgdn.fcltDiv}
selectArray={rainChkSttn.fcltDiv}
onSelectValue={(val: string | number) =>
setSelFcltDiv(String(val))
}
value={selFcltDiv ?? rainChkgdn.fcltDiv[0]?.val}
value={selFcltDiv ?? rainChkSttn.fcltDiv[0]?.val}
/>
</SearchFormLeft>
<SearchFormRight>
@@ -125,8 +143,8 @@ export default function Page() {
</Button>
</div>
<div className="flex flex-row space-x-2 pt-3">
<Button color="green" size={"sm"} onClick={() =>{}}>
양식받기
<Button color="green" size={"sm"} onClick={(e) =>{excelDown()}}>
다운로드
</Button>
</div>
</div>
@@ -142,12 +160,14 @@ export default function Page() {
deleteData={() => {}}
detailUp={() => {}}
handleClick={handleClick}
rainChkData={rainChkSttn.rainChkRes}
/>
) : (
<RswtChkgdTable
detaiRswtlUpdate={() => {}}
deleteRswtData={() => {}}
handleRswtClick={handleClick}
rswtChkData={rswtChkSttn.rswtChkRes}
/>
)}
</ListDiv>
@@ -33,6 +33,8 @@ export const rainChkZod = z.object({
chkgdnPk: z.number().nullable(),
bdstRuseFcltFk: z.number(),
chckYmd: z.string(),
cityText:z.string().nullish(),
sggText:z.string().nullish(),
prcsCpct: z.number().nullable(),
spwtPositn: z.string().nullable(),
regDt: z.string().nullable(),
@@ -122,6 +124,7 @@ export const rainHeadNmExport: chHeadType[] = [
export const rainChkgdnHeadListExport: TableUpperProps[] = [
{ id: "order", title: "순번", rowSpan: true },
{ id: "checkBox", title: "선택", rowSpan: true },
{ id: "cityText", title: "시도", rowSpan: true },
{ id: "sggText", title: "시군구", rowSpan: true },
{ id: "bdstNm", title: "시설명", rowSpan: true },
@@ -116,6 +116,7 @@ export const rswtHeadNmExport: chHeadType[] = [
export const rswtChkHeadListExport: TableUpperProps[] = [
{ id: "order", title: "순번", rowSpan: true },
{ id: "checkBox", title: "선택", rowSpan: true },
{ id: "cityText", title: "시도" ,rowSpan: true },
{ id: "sggText", title: "시군구",rowSpan: true },
{ id: "bdstNm", title: "시설명" ,rowSpan: true},
@@ -0,0 +1,41 @@
import type { rainChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn";
type rainSttnExcelType = {
bdstInfoPk: number;
ctpvCd: 1;
sggCd: 1001;
daddr: "string3";
bdstNm: "string";
frstArchPrmsnDt: "2025-03-25";
archArea: 0;
regDt: "2025-04-16";
rgtr: null;
mdfcnDt: "2025-04-16";
mdfr: null;
};
export const buildingExcelRainSttn = (excelList: any[]) => {
const excelData: string[][] = [];
excelList.forEach((item, index) => {
excelData.push([
String(item.cityText) ?? "",
String(item.sggText) ?? "",
String(item.bdstNm) ?? "",
item.operMngCd || String(item.operMngCd)===null? String(item.operMngCd) : "",
String(item.oilqMeasMthd) ?? "",
String(item.anlOperCst) ?? "",
String(item.dtfcltCpct) ?? "",
String(item.chckYmd) ?? "",
String(item.utztnUsgCd) ?? "",
String(item.totalSplyUswtrUtztnQnt) ?? "",
String(item.totalRuseFcltUtztnQnt) ?? "",
String(item.ph) ?? "",
String(item.trbt) ?? "",
String(item.grssClfg) ?? "",
String(item.vltnDt) ?? "",
String(item.vltnMttr) ?? "",
String(item.levyAmt) ?? "",
]);
});
return excelData;
};
@@ -2,7 +2,6 @@ import type { TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
export const rainChkgdnHeadSttnExport: TableUpperProps[] = [
{ id: 'order', title: "순번", rowSpan: true },
{ id: "checkBox", title: "체크박스", rowSpan: true },
{ id: "cityText", title: "시도", rowSpan: true },
{ id: "sggText", title: "시군구", rowSpan: true },
{ id: "bdstNm", title: "시설명", rowSpan: true },
@@ -59,7 +58,7 @@ export const rainChkgdnHeadSttnExport: TableUpperProps[] = [
},
];
export const ruseHeadListExport: TableUpperProps[] = [
export const ruseSttnHeadListExport: TableUpperProps[] = [
{ id: "utztnUsgCd", title: "이용용도" },
{ id: "ruseTotal", title: "계", upName: "ruseWater", upSequnce: 1 },
{ id: "ruse01", title: "1월", upName: "ruseWater", upSequnce: 2 },
@@ -76,7 +75,7 @@ export const ruseHeadListExport: TableUpperProps[] = [
{ id: "ruse12", title: "12월", upName: "ruseWater", upSequnce: 13 },
];
export const splHeadListExport: TableUpperProps[] = [
export const splSttnHeadListExport: TableUpperProps[] = [
{ id: "utztnUsgCd", title: "이용용도" },
{ id: "splTotal", title: "계", upName: "splWater", upSequnce: 1 },
{ id: "spl01", title: "1월", upName: "splWater", upSequnce: 2 },
@@ -1,54 +1,66 @@
import type { rainChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn";
import {
rainHeadNmExport,
rainChkgdnHeadListExport,
type chHeadType,
} from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList";
import { type TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
import { getFetch } from "@/components/lib/api";
import { ToastFormUi } from "@/components/ui/toast/toastFromUi";
import type { SelectDataType } from "@common/business_components/ui";
import { rainChkgdnHeadSttnExport, ruseSttnHeadListExport, splSttnHeadListExport } from "./headList";
import { rainHeadNmExport, type chHeadType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList";
import { buildingExcelRainSttn } from "./excel";
const fcltDiv = [
{ val: "RST", text: "중수도시설" },
{ val: "RNB", text: "빗물이용시설" },
];
const rainHeadNm = rainHeadNmExport;
const rainChkgdnHeadList = rainChkgdnHeadListExport;
const rainChkgdnHeadList = rainChkgdnHeadSttnExport;
const ruseHeadList = ruseSttnHeadListExport;
const splHeadList = splSttnHeadListExport;
const rainHeadNm = rainHeadNmExport
const rainChk: rainChkZodType[] = [];
export type rainChkSttnState = {
rainChkSttn: {
rainChkgdnHeadList: TableUpperProps[];
rainChkSttn: rainChkZodType[];
rainHeadNm: chHeadType[];
rainChkRes: rainChkZodType[];
fcltDiv: SelectDataType[];
rainChkgdnHeadList: TableUpperProps[];
rainHeadNm:chHeadType[];
ruseHeadList: TableUpperProps[];
splHeadList: TableUpperProps[];
sttnExcelList:[]
isInit: boolean;
isSttn:boolean;
};
};
type rainChkSttnActions = {
rainChkSttnInit: (searchTxt: string, sggCd: string) => void;
rainChkSttnInit: ( sggCd: string) => void;
rainChkSttnSearch: (searchTxt: string, sggCd: string) => void;
isRainSttn:(isSttn:boolean) => void;
getRainSttnExcel:(excelList:rainChkZodType[]) => void;
};
export type rainChkSttnType = rainChkSttnState & rainChkSttnActions;
export const rainChkSttnStateExport: rainChkSttnState = {
rainChkSttn: {
rainChkgdnHeadList: rainChkgdnHeadList,
rainHeadNm: rainHeadNm,
rainChkSttn: [],
rainChkRes: [],
fcltDiv: fcltDiv,
rainChkgdnHeadList: rainChkgdnHeadList,
ruseHeadList: ruseHeadList,
splHeadList: splHeadList,
rainHeadNm:rainHeadNm,
isInit: false,
sttnExcelList:[],
isSttn:false,
},
};
const initFetch = async (txt: string | undefined, sgg: string | undefined) => {
const rainRes = await getFetch(
"wr",
`/reuseChk/rainy` + (txt ? `/${txt}` : "2024") + (sgg ? `/${sgg}` : "/0")
`/reuseChk/rainy/` + (txt ? `${txt}` : "2024") + (sgg ? `/${sgg}` : "/0")
);
return rainRes;
};
@@ -56,7 +68,22 @@ export const rainChkSttnActionsExport: (set: any) => rainChkSttnActions = (
set: any
) => {
return {
rainChkSttnInit: async (searchTxt: string, sggCd: string) => {
rainChkSttnInit: async ( sggCd: string) => {
try {
const rainChkRes = await initFetch(undefined, sggCd);
return set((state: rainChkSttnState) => ({
...state,
rainChkSttn: {
...state.rainChkSttn,
rainChkRes:rainChkRes
},
}));
} catch (error) {
console.log(error);
}
},
rainChkSttnSearch: async (searchTxt: string, sggCd: string) => {
try {
const rainChkRes = await initFetch(searchTxt, sggCd);
@@ -70,6 +97,33 @@ export const rainChkSttnActionsExport: (set: any) => rainChkSttnActions = (
} catch (error) {
console.log(error);
}
},
},isRainSttn :(isSttn:boolean) =>{
try {
return set((state: rainChkSttnState) => ({
...state,
rainChkSttn: {
...state.rainChkSttn,
isSttn:isSttn
},
}));
} catch (error) {
console.log(error);
}
},getRainSttnExcel: async (excelList:rainChkZodType[]) => {
try {
const excelData = buildingExcelRainSttn(excelList)
return set((state: rainChkSttnState) => ({
...state,
rainChkSttn: {
...state.rainChkSttn,
sttnExcelList:excelData
},
}));
} catch (error) {
console.log(error);
}
}
};
};
@@ -0,0 +1,34 @@
export const buildingExcelRswtSttn = (excelList: any[]) => {
const excelData: string[][] = [];
excelList.forEach((item, index) => {
excelData.push([
String(item.cityText) ?? "",
String(item.sggText) ?? "",
String(item.bdstNm) ?? "",
item.operMngCd===null ? "":item.operMngCd,
String(item.anlOperCst) ?? "",
String(item.prcsCpct) ?? "",
item.spwtPositn===null ? "":item.spwtPositn,
item.chckYmd ?? "",
String(item.utztnUsgCd) ?? "",
String(item.splyUswtrUtztnQnt) ?? "",
String(item.ruseFcltUtztnQnt) ?? "",
String(item.grssClfgUswtr) ?? "",
String(item.combResdch) ?? "",
String(item.trbt) ?? "",
String(item.bod) ?? "",
String(item.smll) ?? "",
String(item.tn) ?? "",
String(item.tph) ?? "",
String(item.ph) ?? "",
String(item.clIonQnt) ?? "",
String(item.vltnDt) ?? "",
String(item.vltnMttr) ?? "",
String(item.levyAmt) ?? "",
]);
});
return excelData;
};
@@ -0,0 +1,142 @@
import type { TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
export const rswtChkSttnHeadListExport: TableUpperProps[] = [
{ id: "order", title: "순번", rowSpan: true },
{ id: "cityText", title: "시도", rowSpan: true },
{ id: "sggText", title: "시군구", rowSpan: true },
{ id: "bdstNm", title: "시설명", rowSpan: true },
{ id: "operMngCd", title: "운영관리형태", rowSpan: true },
{ id: "anlOperCst", title: "연간운영비(원/년)", rowSpan: true },
{ id: "prcsCpct", title: "처리용량(m³)", rowSpan: true },
{ id: "spwtPositn", title: "채수지점", rowSpan: true },
{ id: "chckYmd", title: "점검일", rowSpan: true },
{ id: "utztnUsgCd", title: "이용용도" },
{ id: "splyUswtrUtztnQnt", title: "연간보급수이용량(m³)", type: "number" },
{ id: "ruseFcltUtztnQnt", title: "연간중수도이용량(m³)", type: "number" },
{
id: "grssClfgUswtr",
title: "총대장균군수",
upName: "useQuilty",
upSequnce: 1,
type: "number",
},
{
id: "combResdch",
title: "결합잔류염소",
upName: "useQuilty",
upSequnce: 2,
type: "number",
},
{
id: "trbt",
title: "탁도",
upName: "useQuilty",
upSequnce: 3,
type: "number",
},
{
id: "bod",
title: "BOD",
upName: "useQuilty",
upSequnce: 4,
type: "number",
},
{
id: "smll",
title: "냄새",
upName: "useQuilty",
upSequnce: 5,
type: "number",
},
{
id: "crmty",
title: "색도",
upName: "useQuilty",
upSequnce: 6,
type: "number",
},
{ id: "tn", title: "T-N", upName: "useQuilty", upSequnce: 7, type: "number" },
{
id: "tph",
title: "T-P",
upName: "useQuilty",
upSequnce: 8,
type: "number",
},
{ id: "ph", title: "PH", upName: "useQuilty", upSequnce: 9, type: "number" },
{
id: "clIonQnt",
title: "염화물",
upName: "useQuilty",
upSequnce: 10,
type: "number",
},
{
id: "vltnDt",
title: "부과일(위반일)",
upName: "feeHist",
upSequnce: 1,
type: "text",
},
{
id: "vltnMttr",
title: "위반사항",
upName: "feeHist",
upSequnce: 2,
type: "text",
},
{
id: "levyAmt",
title: "부과금액(천원)",
upName: "feeHist",
upSequnce: 3,
type: "number",
},
];
export const rswtDetailSttnHeadListExport: TableUpperProps[] = [
{ id: "utztnUsgCd", title: "이용용도" },
{
id: "grssClfgUswtr",
title: "총대장균군수",
upName: "detailQulity",
upSequnce: 2,
},
{
id: "combResdch",
title: "결합잔류염소",
upName: "detailQulity",
upSequnce: 3,
},
{
id: "trbt",
title: "탁도",
upName: "detailQulity",
upSequnce: 4,
},
{ id: "bod", title: "BOD", upName: "detailQulity", upSequnce: 5 },
{
id: "smll",
title: "냄새",
upName: "detailQulity",
upSequnce: 6,
},
{
id: "crmty",
title: "색도",
upName: "detailQulity",
upSequnce: 7,
},
{ id: "tn", title: "T-N", upName: "detailQulity", upSequnce: 8},
{ id: "tph", title: "T-P", upName: "detailQulity", upSequnce: 9 },
{ id: "ph", title: "PH", upName: "detailQulity", upSequnce: 10 },
{
id: "clIonQnt",
title: "염화물",
upName: "detailQulity",
upSequnce: 11,
},
];
@@ -0,0 +1,108 @@
import { rswtHeadNmExport } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList";
import { rswtChkSttnHeadListExport, rswtDetailSttnHeadListExport } from "./headList";
import type { TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
import type { chHeadType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList";
import type { sheetParameter } from "@common/business_components/ui";
import type { rswtChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn";
import { getFetch } from "@/components/lib/api";
import { buildingExcelRswtSttn } from "./excel";
const rswtChkHeadList = rswtChkSttnHeadListExport;
const rswtDetailHeadList = rswtDetailSttnHeadListExport;
const rswtHeadNm = rswtHeadNmExport;
export type rswtChkSttnState = {
rswtChkSttn: {
rswtChkSttnHeadList: TableUpperProps[];
rswtDetailSttnHeadList: TableUpperProps[];
rswtSttnHeadNm: chHeadType[];
sttnExcelList: [];
rswtChkRes: rswtChkZodType[];
isInit: boolean;
isSttn: boolean;
};
};
type rswtChkSttnActions = {
rswtChkSttnInit: ( sggCd: string) => void;
isRswtSttn: (isSttn:boolean) => void;
getRswtSttnExcel:(excelList:rswtChkZodType[]) => void;
};
export type rswtChkSttnType = rswtChkSttnState & rswtChkSttnActions;
export const rswtChkStateExport: rswtChkSttnState = {
rswtChkSttn: {
rswtChkSttnHeadList: rswtChkHeadList,
rswtDetailSttnHeadList: rswtDetailHeadList,
rswtSttnHeadNm: rswtHeadNm,
sttnExcelList: [],
rswtChkRes: [],
isInit: false,
isSttn:false,
},
};
const initFetch = async (year: string | undefined, sgg: string | undefined) => {
const rswtChkRes = await getFetch(
"wr",
`/reuseChk/reuseWater/` +
(year ? `${year}` : "2024") +
(sgg ? `/${sgg}` : "/0")
);
return rswtChkRes;
};
export const rswtChkSttnActionsExport: (set: any) => rswtChkSttnActions = (
set: any
) => {
return {
rswtChkSttnInit: async ( sggCd: string) => {
try {
const rswtChkRes = await initFetch("2024", sggCd);
return set((state: rswtChkSttnState) => ({
...state,
rswtChkSttn: {
...state.rswtChkSttn,
rswtChkRes: rswtChkRes,
isInit: false,
},
}));
} catch (error) {
console.log(error);
}
},isRswtSttn :(isSttn:boolean) =>{
try {
return set((state: rswtChkSttnState) => ({
...state,
rswtChkSttn: {
...state.rswtChkSttn,
isSttn:isSttn
},
}));
} catch (error) {
console.log(error);
}
},getRswtSttnExcel: async (excelList:rswtChkZodType []) => {
try {
const excelData = buildingExcelRswtSttn(excelList)
return set((state: rswtChkSttnState) => ({
...state,
rswtChkSttn: {
...state.rswtChkSttn,
sttnExcelList:excelData
},
}));
} catch (error) {
console.log(error);
}
}
};
};
+8 -3
View File
@@ -83,6 +83,7 @@ import {
type rainChkSttnState,
type rainChkSttnType,
} from "./prfmncSttn/chkgdnSttn/rainChkgdnSttn";
import { rswtChkStateExport, rswtChkSttnActionsExport, type rswtChkSttnState, type rswtChkSttnType } from "./prfmncSttn/chkgdnSttn/rswtChkgdnSttn";
export type WrStore = comCodeType &
pubFacType &
@@ -96,7 +97,8 @@ export type WrStore = comCodeType &
rainSttnType &
rswtSttnType &
htdflSttnType &
rainChkSttnType;
rainChkSttnType&
rswtChkSttnType;
export const StoreZus = (
initState: comCodeState &
@@ -111,7 +113,8 @@ export const StoreZus = (
rainSttnState &
rswtSttnState &
htdflSttnState &
rainChkSttnState
rainChkSttnState&
rswtChkSttnState
= {
...comCodeStateExport,
...pubFacStateExport,
@@ -126,6 +129,7 @@ export const StoreZus = (
...rswtSttnStateExport,
...htdflSttnStateExport,
...rainChkSttnStateExport,
...rswtChkStateExport,
}
) => {
return createStore<WrStore>()((set) => {
@@ -149,7 +153,8 @@ export const StoreZus = (
...rainSttnActionsExport(set),
...rswtSttnActionsExport(set),
...htdflSttnActionsExport(set),
...rainChkSttnActionsExport(set)
...rainChkSttnActionsExport(set),
...rswtChkSttnActionsExport(set)
};
});
};
+18 -2
View File
@@ -97,7 +97,10 @@ export const chRowspanTable = (
<>
{makeTableData.map((row, rowIndex) => (
<TableRow key={rowIndex}>
{headList.map((head) => {
{headList
.map((head) => {
const key = head.id;
const isMerged = head.rowSpan;
const value = row[key];
@@ -120,7 +123,7 @@ export const chRowspanTable = (
rowSpan={rowspan}
className="align-middle text-center whitespace-nowrap"
>
{key === "chekcBox" ? (
{key === "checkBox" ? (
<Checkbox
checked={selectedIds.includes(row.chkgdnPk)}
onCheckedChange={(checked) =>
@@ -164,3 +167,16 @@ export const chRowspanTable = (
</>
);
};
export const headVisibleChange= (headList: TableUpperProps[] , isEdit :boolean) => {
return headList.forEach(( head) => {
if(head.edit!== undefined)
head.edit=isEdit;
if(head.id==='checkBox' ){
head.visible=false
}
});
}
@@ -8,11 +8,23 @@ import type { splRuseWaterType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgd
import type { rswtrPolutionsZode } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList";
import type { z } from "zod";
import React from "react";
import type { TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
export default function ChkgdModal({ type, obj }: { type: string; obj: any }) {
const { rainChkgdn, rswtChkgdn, rainChkGuidUpdate, rwstPolAndGuideUpdate } =
useWrStore((state) => state);
const {
rainChkgdn,
rswtChkgdn,
rainChkSttn,
rswtChkSttn,
rainChkGuidUpdate,
rwstPolAndGuideUpdate,
} = useWrStore((state) => state);
const [guidData, setGuidData] = useState<splRuseWaterType[]>();
const [headList, setHeadList] = useState<{
splHeadList: TableUpperProps[];
ruseHeadList: TableUpperProps[];
rswtDetailHeadList: TableUpperProps[];
}>({ splHeadList: [], ruseHeadList: [], rswtDetailHeadList: [] });
const [polutionData, setPolutionData] = useState<Record<string, any[]>>({
"1": [] as z.infer<typeof rswtrPolutionsZode>[],
@@ -43,6 +55,30 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) {
clIonQnt: 0,
});
///현황일 경우 input 비활성화 한다.
useEffect(() => {
if (rainChkSttn.isSttn) {
setHeadList({
splHeadList: rainChkSttn.splHeadList,
ruseHeadList: rainChkSttn.ruseHeadList,
rswtDetailHeadList: type === "RNB" ? [] : rswtChkSttn.rswtDetailSttnHeadList,
});
} else {
setHeadList({
splHeadList: rainChkgdn.splHeadList,
ruseHeadList: rainChkgdn.ruseHeadList,
rswtDetailHeadList:
type === "RNB" ? [] : rswtChkgdn.rswtDetailHeadList,
});
}
}, [
rainChkSttn.isSttn,
rainChkgdn.splHeadList,
rainChkSttn.splHeadList,
rswtChkgdn.rswtDetailHeadList,
rswtChkSttn.rswtDetailSttnHeadList
]);
useEffect(() => {
const result = obj.guideDetails?.reduce((acc: any, cur: any) => {
const code = cur.utztnUsgCd;
@@ -197,7 +233,7 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) {
<h3 className="text-2xl font-bold text-gray-900">
{"○" + "" + `(${obj.bdstNm})`}
</h3>
{!rainChkgdn.isSttn ? (
{!rainChkSttn.isSttn ? (
<Button className="" onClick={allDataUpdate}>
저장
</Button>
@@ -214,7 +250,7 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) {
</div>
<GuideDetailsTable
chgRes={guidData || []}
headList={ruseHeadList}
headList={headList.ruseHeadList}
type={""}
setChGuidData={(data) => {
setChGuidData(data);
@@ -227,7 +263,7 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) {
</div>
<GuideDetailsTable
chgRes={guidData || []}
headList={splHeadList}
headList={headList.splHeadList}
type={""}
setChGuidData={(data) => {
setChGuidData(data);
@@ -248,7 +284,7 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) {
</div>
<GuideDetailsTable
chgRes={value}
headList={rswtChkgdn?.rswtDetailHeadList}
headList={headList?.rswtDetailHeadList}
type={""}
setChGuidData={(data) => {
getPolutionData(data);
@@ -2,9 +2,12 @@
import { headMakeprfmnc } from "@/app/ruseFcltMng/prfmncReg/chkgdnReg/TableHead";
import { useWrStore } from "@/app/store";
import type { rainChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn";
import type { chHeadType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList";
import type { TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
import { tableData } from "@/components/lib/func/commom";
import {
chRowspanTable,
headVisibleChange,
rainChkTableData
} from "@/components/lib/func/TableData";
import {
@@ -16,16 +19,21 @@ import { useCallback, useEffect, useState } from "react";
export default function RainChkgdTable({
detailUp,
handleClick=() => {},
deleteData
deleteData,
rainChkData,
}: {
detailUp: (data: rainChkZodType[]) => void;
handleClick?: (data:any) => void;
deleteData:(selectedIds:number[])=>void
rainChkData?: rainChkZodType[];
}) {
const { code, rainChkgdn } = useWrStore((state) => state);
const { code, rainChkgdn ,rainChkSttn,getRainSttnExcel } = useWrStore((state) => state);
const [makeTableData, setMakeTableData] = useState<any[]>([]);
const [selectedIds, setSelectedIds] = useState<number[]>([]);
const [upRaintDetail, setUpRaintDetail] = useState<rainChkZodType[]>([]);
const [headList, setHeadList] = useState< {headList:TableUpperProps[],upHeadList:chHeadType[]}>({headList:[], upHeadList:[]});
const toggleSelection = (pk: number, checked: boolean) => {
setSelectedIds((prev) =>
checked ? [...prev, pk] : prev.filter((item) => item !== pk)
@@ -60,20 +68,24 @@ export default function RainChkgdTable({
useEffect(() => {
setSelectedIds([])// 셀렉트 초기화를 위한 작업
const rainChg = rainChkgdn.rainChk.map((item: any) => {
const bud = tableData([item.building], { code });
return {
...item,
...bud[0],
rowspan: item.rainyDetails?.length,
};
});
const tableTotalData = rainChkTableData(rainChg)
setMakeTableData(tableTotalData);
}, [rainChkgdn.rainChk, code]);
if(rainChkData){
const rainChg = rainChkData.map((item: any) => {
const bud = tableData([item.building], { code });
return {
...item,
...bud[0],
rowspan: item.rainyDetails?.length,
};
});
setMakeTableData(rainChkTableData(rainChg));
}
}, [rainChkData, code]);
useEffect(() => {
//데이터를 평탄화 한것중에 체크박스 선택한 테이블만 선택
//현황 페이지에서 필요한 엑셀 데이터를 바뀔때마다 넣기 위해서
getRainSttnExcel(makeTableData);
const selectedData = makeTableData.filter((item) =>selectedIds.includes(item.chkgdnPk));
if (selectedData.length > 0) {
@@ -123,6 +135,7 @@ export default function RainChkgdTable({
useEffect(() => {
detailUp(upRaintDetail);
}, [upRaintDetail]);
useEffect(() =>{
@@ -133,19 +146,38 @@ export default function RainChkgdTable({
},[selectedIds])
///현황일 경우 input 비활성화 한다.
useEffect(() => {
if(rainChkSttn.isSttn){
setHeadList({
headList: rainChkSttn.rainChkgdnHeadList,
upHeadList: rainChkSttn.rainHeadNm
})
}else{
setHeadList({
headList: rainChkgdn.rainChkgdnHeadList,
upHeadList: rainChkgdn.rainHeadNm
})
}
}, [rainChkSttn.isSttn, rainChkgdn.rainChkgdnHeadList , rainChkSttn.rainChkgdnHeadList]);
return (
<Table variant="secondary">
<TableHeader className="font-bold">
{headMakeprfmnc(
rainChkgdn?.rainChkgdnHeadList,
rainChkgdn?.rainHeadNm
headList?.headList,
headList?.upHeadList
)}
</TableHeader>
<TableBody>
{chRowspanTable(
makeTableData,
rainChkgdn.rainChkgdnHeadList,
headList.headList,
handleChange,
toggleSelection,
selectedIds,
@@ -1,9 +1,12 @@
"use client";
import { headMakeprfmnc } from "@/app/ruseFcltMng/prfmncReg/chkgdnReg/TableHead";
import { useWrStore } from "@/app/store";
import type { chHeadType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList";
import type {
rswtChkZodType,
rswtrChkDetailsZodType,
} from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn";
import type { TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
import { tableData } from "@/components/lib/func/commom";
import {
chRowspanTable,
@@ -16,14 +19,17 @@ export default function RswtChkgdTable({
detaiRswtlUpdate,
handleRswtClick = () => {},
deleteRswtData,
rswtChkData,
}: {
detaiRswtlUpdate: (data: rswtrChkDetailsZodType[]) => void;
handleRswtClick?: (data: any) => void;
deleteRswtData: (selectedIds: number[]) => void;
rswtChkData: rswtChkZodType[];
}) {
const { code, rswtChkgdn, rswtChkgdnInit, rswtChkPolAndGuide } = useWrStore(
const { code, rswtChkgdn,rswtChkSttn , rswtChkgdnInit, rswtChkPolAndGuide,getRswtSttnExcel } = useWrStore(
(state) => state
);
const [headList, setHeadList] = useState< {headList:TableUpperProps[],upHeadList:chHeadType[]}>({headList:[], upHeadList:[]});
const [makeTableData, setMakeTableData] = useState<any[]>([]);
const [selectedIds, setSelectedIds] = useState<number[]>([]);
@@ -61,6 +67,8 @@ export default function RswtChkgdTable({
}, [rswtChkgdn.rswtChkPolGuide]);
useEffect(() => {
console.log("makeTableData ", makeTableData)
getRswtSttnExcel(makeTableData)
const selectedData = makeTableData
.map((item) => {
return {
@@ -78,8 +86,9 @@ export default function RswtChkgdTable({
useEffect(() => {
setSelectedIds([]); // 셀렉트 초기화를 위한 작업
const tableTotalData = rswtChkTableData(rswtChkgdn.rswtChkRes);
const rswtChkData = tableTotalData.map((item: any) => {
const tableTotalData = rswtChkTableData(rswtChkData);
const makeRswtChkData = tableTotalData.map((item: any) => {
const bud = tableData([item.building], { code });
return {
...item,
@@ -87,8 +96,8 @@ export default function RswtChkgdTable({
rowspan: item.rswtrDetails?.length,
};
});
setMakeTableData(rswtChkData);
}, [rswtChkgdn.rswtChkRes, code]);
setMakeTableData(makeRswtChkData);
}, [rswtChkData, code]);
useEffect(() => {
detaiRswtlUpdate(upRswttDetail);
@@ -101,17 +110,35 @@ export default function RswtChkgdTable({
}
}, [selectedIds]);
///현황일 경우 input 비활성화 한다.
useEffect(() => {
if(rswtChkSttn.isSttn){
setHeadList({
headList: rswtChkSttn.rswtChkSttnHeadList,
upHeadList: rswtChkSttn.rswtSttnHeadNm
})
}else{
setHeadList({
headList: rswtChkgdn.rswtChkHeadList,
upHeadList: rswtChkgdn.rswtHeadNm
})
}
}, [rswtChkSttn.isSttn, rswtChkgdn.rswtChkHeadList , rswtChkSttn.rswtChkSttnHeadList]);
return (
<>
<Table variant="secondary">
<TableHeader className="font-bold">
{headMakeprfmnc(rswtChkgdn?.rswtChkHeadList, rswtChkgdn?.rswtHeadNm)}
{headMakeprfmnc(headList?.headList, headList?.upHeadList)}
</TableHeader>
<TableBody>
{chRowspanTable(
makeTableData,
rswtChkgdn.rswtChkHeadList,
headList.headList,
handleChange,
toggleSelection,
selectedIds,
Binary file not shown.
Binary file not shown.