diff --git a/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx b/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx index 3608cddab..48f6aa452 100644 --- a/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx @@ -40,7 +40,7 @@ export default function RswtSttn() { chBuilding: chgBuilding[]; }>({ isOpen: false, chBuilding: [] }); - const codeData = getCityOrSgg(ref); + const codeCityOrSgg = getCityOrSgg(ref); const cellClick=(index:number|undefined, headId: string)=>{ @@ -50,9 +50,10 @@ const cellClick=(index:number|undefined, headId: string)=>{ }else if( headId==='chBuildingYn' && index!==undefined && bdstTable!==undefined){ if ( bdstTable[index] && - bdstTable[index]?.chgBuilding[0]?.bdstChgNm!==null + bdstTable[index]?.chBuildingYn ==='Y' ) { + setBdstChgProps({ isOpen:true , chBuilding: bdstTable[index].chgBuilding}); } } @@ -73,7 +74,7 @@ const cellClick=(index:number|undefined, headId: string)=>{ ...item, ...item.reuseBuilding[0], ...item.reuseBuilding[0]?.rswtrObj, - chBuildingYn:item?.chgBuilding[0]?.bdstChgNm!==null?'Y':'N' + chBuildingYn:item?.chgBuilding[0]?.bdstChgNm!==null &&item?.chgBuilding.length>0?'Y':'N' })) .filter( (item: customRswtBdst) => @@ -97,19 +98,14 @@ const cellClick=(index:number|undefined, headId: string)=>{ const excelClick = useCallback( (returnType: ReturnType) => { - let con; - if (returnType.sigunValue != "0") { - con = returnType.sigunValue; - } else { - con = returnType.sidoValue; - } - rswtSttnSearch(1, "10000", con); + if(codeCityOrSgg) + rswtSttnSearch(1, "10000", codeCityOrSgg); }, - [rswtSttnSearch] + [rswtSttnSearch,codeCityOrSgg] ); useEffect(() => { - if (codeData != null) rswtSttnSearch(pageNation, "20", codeData); + if (codeCityOrSgg != null) rswtSttnSearch(pageNation, "20", codeCityOrSgg); }, [pageNation]); return ( @@ -138,13 +134,8 @@ const cellClick=(index:number|undefined, headId: string)=>{ leftChildren={undefined} queryClick={function (returnType: ReturnType): void { // '{partValue: 'A', sidoValue: '0', sigunValue: '0', regionValue: '0', unitWaterShedValue: '0', …}' - let con; - if (returnType.sigunValue != "0") { - con = returnType.sigunValue; - } else { - con = returnType.sidoValue; - } - rswtSttnSearch(1, "20", con); + if(codeCityOrSgg) + rswtSttnSearch(1, "20", codeCityOrSgg); }} excelClick={excelClick} initClick={function (): void {}} diff --git a/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx b/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx index d713d7933..83be9ee24 100644 --- a/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx @@ -2,7 +2,7 @@ import { useWrStore } from "@/app/store"; import { type rainChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn"; -import type { rswtChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn"; +import type { rswtChkZodType, rswtrChkDetailsZodType } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn"; import { excelArrayDownload, excelDownload, @@ -36,12 +36,13 @@ export default function Page() { rainChkDetilUpdate, rainChkDelete, rainChkExcelDownload, + rainChkHeadChange, rswtChkgdnInit, - rswtChkDetilUpdate, + rswtChkDetilsUpdate, rswtChkDelete, rswtrChkExcelDownload, - rswtChkPolAndGuide, + rswtChkHeadChange, } = useWrStore((state) => { return state; }); @@ -50,11 +51,10 @@ export default function Page() { const [updateRainDetail, setUpdateRainDetail] = useState( [] ); - const [updateRswtDetail, setUpdateRSwtDetail] = useState( + const [updateRswtDetail, setUpdateRSwtDetail] = useState( [] ); const [deleteIdx, setDeleteIdx] = useState([]); - const [deleteIdxRSwt, setDeleteIdxRswt] = useState([]); const [selFcltDiv, setSelFcltDiv] = useState("RNB"); const [isModal, setIsModal] = useState({ @@ -82,7 +82,6 @@ export default function Page() { }, [rainChkgdn.isInit, rainChkInit]); useEffect(() => { - console.log("rswtChkgdn.excelList ", rswtChkgdn.excelList); if (rswtChkgdn.excelList[0]?.data.length > 1) excelArrayDownload( @@ -117,15 +116,27 @@ export default function Page() { const handleClick = useCallback( (data: any) => { - if (data) setIsModal({ open: true, data: data }); + + if (data) setIsModal({ open: !isModal.open, data: data }); }, [isModal] ); + useEffect(() => { + rainChkgdn.isSttn=false + rswtChkgdn.isSttn=false + if (!rainChkgdn.isSttn &&!rswtChkgdn.isSttn) { + rainChkHeadChange({rainChkgdn}, true); + rswtChkHeadChange({rswtChkgdn}, true); + } + }, [rainChkgdn.isSttn ,rswtChkgdn.isSttn]); + + const clickDelete = (data: number[],selFcltDiv:string) => { + if (data.length > 0) { if(selFcltDiv === "RNB"){ rainChkDelete(data); @@ -138,7 +149,9 @@ export default function Page() { if(selFcltDiv === "RNB"){ rainChkDetilUpdate(updateRainDetail) }else{ - rswtChkDetilUpdate(updateRswtDetail) + + console.log("updateRswtDetail ", updateRswtDetail) + rswtChkDetilsUpdate(updateRswtDetail) } } @@ -183,7 +196,7 @@ export default function Page() {
-
@@ -172,16 +139,16 @@ export default function Page() { {selFcltDiv === "RNB" ? ( {}} + detailUp={() => {}} handleClick={handleClick} /> ) : ( - + {}} + deleteRswtData={() => {}} + handleRswtClick={handleClick} + /> )} @@ -192,14 +159,8 @@ export default function Page() { setIsModal({ open: !open, data: {} }); }} bodyClass={"w-[80vw] max-w-none"} - body={} + body={} > - } - /> ); diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx index c39456095..24674727e 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx @@ -86,6 +86,7 @@ export const buildingToExcelType = ( export const excelToRainChkData = (excelData: any, year: string) => { const rainChkgdData: rainChkZodType[] = excelData.map((item: any) => { + if (item["점검일"] !== undefined) { const makeGuidDetail = Array.from({ length: 12 }, (_, i) => { let month = `${i + 1}`; const splyData = item[`보급_${month}월`]; @@ -124,7 +125,7 @@ export const excelToRainChkData = (excelData: any, year: string) => { }, ], }; - }); - + } + }).filter((el: any) => el !== undefined); return rainChkgdData; }; diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx index 356d513c1..6a60ec582 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx @@ -113,7 +113,7 @@ export type splRuseWaterType = { }; export const rainHeadNmExport: chHeadType[] = [ - { headNm: "useQuilty", text: "이용수질(필요시)", length: 4 }, + { headNm: "useQuilty", text: "이용수질(필요시)", length: 3 }, { headNm: "feeHist", text: "과태료 부과내역", length: 3 }, { headNm: "ruseWater", text: "연간보급수 이용량(m³)", length: 13 }, { headNm: "detailQulity", text: "분기", length: 11 }, @@ -157,14 +157,7 @@ export const rainChkgdnHeadListExport: TableUpperProps[] = [ type: "number", edit: true, }, - { - id: "etc", - title: "기타", - upName: "useQuilty", - upSequnce: 4, - type: "number", - edit: true, - }, + { id: "vltnDt", title: "부과일(위반일)", @@ -225,53 +218,3 @@ export const splHeadListExport: TableUpperProps[] = [ { id: "spl12", title: "12월", upName: "splWater", upSequnce: 13, edit: true }, ]; -export const rswtDetailHeadListExport: TableUpperProps[] = [ - { id: "utztnUsgCd", title: "이용용도" }, - - { - id: "grssClfgUswtr", - title: "총대장균군수", - upName: "detailQulity", - upSequnce: 2, - edit: true, - }, - { - id: "combResdch", - title: "결합잔류염소", - upName: "detailQulity", - upSequnce: 3, - edit: true, - }, - { - id: "trbt", - title: "탁도", - upName: "detailQulity", - upSequnce: 4, - edit: true, - }, - { id: "bod", title: "BOD", upName: "detailQulity", upSequnce: 5, edit: true }, - { - id: "smll", - title: "냄새", - upName: "detailQulity", - upSequnce: 6, - edit: true, - }, - { - id: "crmty", - title: "색도", - upName: "detailQulity", - upSequnce: 7, - edit: true, - }, - { id: "tn", title: "T-N", upName: "detailQulity", upSequnce: 8, edit: true }, - { id: "tph", title: "T-P", upName: "detailQulity", upSequnce: 9, edit: true }, - { id: "ph", title: "PH", upName: "detailQulity", upSequnce: 10, edit: true }, - { - id: "clIonQnt", - title: "염화물", - upName: "detailQulity", - upSequnce: 11, - edit: true, - }, -]; diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/index.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/index.tsx index b160413fd..0cdc4a9b8 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/index.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/index.tsx @@ -3,25 +3,36 @@ import { TEST_UUID, type TableUpperProps, } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; -import { deleteFectch, fetchType, getFetch, postFectch, putFectch } from "@/components/lib/api"; +import { + deleteFectch, + fetchType, + getFetch, + postFectch, + putFectch, +} from "@/components/lib/api"; import { ToastFormUi } from "@/components/ui/toast/toastFromUi"; import type { SelectDataType } from "@common/business_components/ui"; import { z } from "zod"; import { buildingToExcelType } from "./excel"; -import { rainChkgdnHeadListExport, rainChkZod, rainHeadNmExport, rswtDetailHeadListExport, ruseHeadListExport, splHeadListExport, type chHeadType } from "./headList"; - +import { + rainChkgdnHeadListExport, + rainChkZod, + rainHeadNmExport, + ruseHeadListExport, + splHeadListExport, + type chHeadType, +} from "./headList"; export type rainChkZodType = z.infer; - const fcltDiv = [ +const fcltDiv = [ { val: "RST", text: "중수도시설" }, { val: "RNB", text: "빗물이용시설" }, ]; - const rainHeadNm=rainHeadNmExport; - const rainChkgdnHeadList=rainChkgdnHeadListExport; - const ruseHeadList=ruseHeadListExport; - const splHeadList=splHeadListExport; - const rswtDetailHeadList=rswtDetailHeadListExport; +const rainHeadNm = rainHeadNmExport; +const rainChkgdnHeadList = rainChkgdnHeadListExport; +const ruseHeadList = ruseHeadListExport; +const splHeadList = splHeadListExport; const rainChk: rainChkZodType[] = []; @@ -32,11 +43,11 @@ export type rainChkgdnState = { rainHeadNm: chHeadType[]; ruseHeadList: TableUpperProps[]; splHeadList: TableUpperProps[]; - rswtDetailHeadList: TableUpperProps[]; isInit: boolean; isModalClose: boolean; - fcltDiv:SelectDataType[] + fcltDiv: SelectDataType[]; excelList: []; + isSttn: boolean; }; }; @@ -44,9 +55,13 @@ type rainChkgdnActions = { rainChkInit: (sggCd: string, searchTxt: string) => void; rainChkDetilUpdate(rainChk: rainChkZodType[]): Promise; rainChkGuidUpdate(rainChk: rainChkZodType): Promise; - rainChkExcelDownload(sidoCode: SelectDataType[], sggCode: SelectDataType[]): Promise - rainChkExcelDataUPload(excelData: rainChkZodType[]): Promise - rainChkDelete(chkgdnPks: number[]): Promise + rainChkExcelDownload( + sidoCode: SelectDataType[], + sggCode: SelectDataType[] + ): Promise; + rainChkExcelDataUPload(excelData: rainChkZodType[]): Promise; + rainChkDelete(chkgdnPks: number[]): Promise; + rainChkHeadChange: (rainChkgdn: rainChkgdnState, isEdit :boolean) => void; }; export type rainChkgdnType = rainChkgdnState & rainChkgdnActions; @@ -58,16 +73,15 @@ export const rainChkgdnStateExport: rainChkgdnState = { rainChk: rainChk, splHeadList: splHeadList, ruseHeadList: ruseHeadList, - rswtDetailHeadList: rswtDetailHeadList, isInit: false, isModalClose: false, excelList: [], - fcltDiv:fcltDiv + fcltDiv: fcltDiv, + isSttn: false, }, }; const makeMdfrChk = (data: rainChkZodType[], type: string, toDo: string) => { - const chData = data.map((item) => { item.mdfr = TEST_UUID; item.rgtr = TEST_UUID; @@ -78,10 +92,10 @@ const makeMdfrChk = (data: rainChkZodType[], type: string, toDo: string) => { }); } else { } - }) + return item; + }); return chData; - }; const initFetch = async (txt: string | undefined, sgg: string | undefined) => { @@ -96,25 +110,33 @@ export const rainChkgdnActionsExport: (set: any) => rainChkgdnActions = ( set: any ) => { return { - rainChkExcelDownload: async (sidoCode: SelectDataType[], sggCode: SelectDataType[]) => { - + rainChkExcelDownload: async ( + sidoCode: SelectDataType[], + sggCode: SelectDataType[] + ) => { // 로그인한 아이디의 시도 or 시군구로 들어가야하는데 현재는 그냥 0으로 하드코딩 - const data = await getFetch(fetchType.WR, `/reuseFc/buildingFlg/${buildingType.RNB}/41`) + const data = await getFetch( + fetchType.WR, + `/reuseFc/buildingFlg/${buildingType.RNB}/41` + ); const excelList = buildingToExcelType(data, sidoCode, sggCode); set((state: rainChkgdnState) => ({ rainChkgdn: { ...state.rainChkgdn, - excelList: excelList + excelList: excelList, }, })); }, rainChkExcelDataUPload: async (excelData: rainChkZodType[]) => { try { - const res = await postFectch("/reuseChk/rainyExcel", excelData); + const res = await postFectch("/reuseChk/rainy", excelData); if (res.ok) { - ToastFormUi({ body: "지도점검 등록이 완료되었습니다. ", title: '지도점검 등록' }) + ToastFormUi({ + body: "지도점검 등록이 완료되었습니다. ", + title: "지도점검 등록", + }); } - const rainChkRes = await initFetch('2024', '0'); + const rainChkRes = await initFetch("2024", "0"); return set((state: rainChkgdnState) => ({ ...state, rainChkgdn: { @@ -124,7 +146,10 @@ export const rainChkgdnActionsExport: (set: any) => rainChkgdnActions = ( })); } catch (error) { console.log(error); - ToastFormUi({ body: "지도점검 등록이 실패되었습니다.", title: '지도점검 등록' }) + ToastFormUi({ + body: "지도점검 등록이 실패되었습니다.", + title: "지도점검 등록", + }); } }, rainChkInit: async (searchTxt: string, sggCd: string) => { @@ -146,11 +171,14 @@ export const rainChkgdnActionsExport: (set: any) => rainChkgdnActions = ( try { const chData = await makeMdfrChk(rainChk, "rain", "rainDetil"); - const res = await postFectch("/reuseChk/rainyExcel", chData); + const res = await postFectch("/reuseChk/rainy", chData); if (res.ok) { - ToastFormUi({ body: "지도점검 보급수 및 밋물이용량 수정이 완료되었습니다. ", title: '지도점검 수정' }) + ToastFormUi({ + body: "지도점검 보급수 및 밋물이용량 수정이 완료되었습니다. ", + title: "지도점검 수정", + }); } - const rainChkRes = await initFetch('2024', '0'); + const rainChkRes = await initFetch("2024", "0"); return set((state: rainChkgdnState) => ({ ...state, rainChkgdn: { @@ -168,9 +196,12 @@ export const rainChkgdnActionsExport: (set: any) => rainChkgdnActions = ( //const chData = await makeMdfrChk(rainChk, "guideDetails", "rainDetil"); const res = await putFectch("/reuseChk/rainy", rainChk); if (res.ok) { - ToastFormUi({ body: "지도점검 수질 및 과태료 수정이 완료되었습니다. ", title: '지도점검 수정' }) + ToastFormUi({ + body: "지도점검 수질 및 과태료 수정이 완료되었습니다. ", + title: "지도점검 수정", + }); } - const rainChkRes = await initFetch('2024', '0'); + const rainChkRes = await initFetch("2024", "0"); return set((state: rainChkgdnState) => ({ ...state, rainChkgdn: { @@ -181,17 +212,18 @@ export const rainChkgdnActionsExport: (set: any) => rainChkgdnActions = ( } catch (error) { console.log(error); } - - }, rainChkDelete: async (chkgdnPks: number[]) => { try { const res = await deleteFectch(`/reuseChk/rainy`, chkgdnPks); if (res.ok) { - ToastFormUi({ body: "삭제가 완료되었습니다. ", title: '지도점검 삭제' }) + ToastFormUi({ + body: "삭제가 완료되었습니다. ", + title: "지도점검 삭제", + }); } - const rainChkRes = await initFetch('2024', '0'); + const rainChkRes = await initFetch("2024", "0"); return set((state: rainChkgdnState) => ({ ...state, rainChkgdn: { @@ -200,12 +232,40 @@ export const rainChkgdnActionsExport: (set: any) => rainChkgdnActions = ( }, })); } catch (error) { - ToastFormUi({ body: "삭제를 실패했습니다.. ", title: '지도점검 삭제' }) - + ToastFormUi({ body: "삭제를 실패했습니다.. ", title: "지도점검 삭제" }); } - } - + }, + rainChkHeadChange: async (rainChkgdn: rainChkgdnState , isEdit :boolean) => { + try { + const rainChkgdnHeadList = rainChkgdn.rainChkgdn.rainChkgdnHeadList; + const splHeadList = rainChkgdn.rainChkgdn.splHeadList; + const ruseHeadList = rainChkgdn.rainChkgdn.ruseHeadList; + rainChkgdnHeadList.forEach(( head) => { + if(head.edit!== undefined) + head.edit=isEdit; + }); + splHeadList.forEach((head) => { + if(head.edit!== undefined) + head.edit=isEdit; + }); + ruseHeadList.forEach((head) => { + if(head.edit!== undefined) + head.edit=isEdit; + }); + return set((state: rainChkgdnState) => ({ + ...state, + rainChkgdn: { + ...state.rainChkgdn, + rainChkgdnHeadList: rainChkgdnHeadList, + splHeadList:splHeadList, + ruseHeadList:ruseHeadList + }, + })); + } catch (error) { + console.log(error); + } + }, }; }; diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx index 846838c38..e37708cc0 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx @@ -73,6 +73,19 @@ export const rswtrPolutionsZode = z.object({ edit:z.boolean().nullish() }); +export const rswtrDetailsZod = z.object({ + chkgdnDtlPk: z.string().nullish(), + chkgdnFk: z.string().nullish(), + utztnUsgCd: z.string(), + vltnDt: z.string(), + vltnMttr: z.string(), + levyAmt: z.number(), + regDt: z.string().nullish(), + rgtr: z.string().nullish(), + mdfcnDt: z.string().nullish(), + mdfr: z.string().nullish(), +}) + export const rswtChkgdZod = z.object({ chkgdnPk: z.number().nullish(), bdstRuseFcltFk: z.number().nullish(), @@ -90,21 +103,10 @@ export const rswtChkgdZod = z.object({ building: buildingZod, guideDetails: z.array(guideDetail), reuseBuilding: reuseBuildingZod, - rswtrDetail: z.array( - z.object({ - chkgdnDtlPk: z.string().nullish(), - chkgdnFk: z.string().nullish(), - utztnUsgCd: z.string(), - vltnDt: z.string(), - vltnMttr: z.string(), - levyAmt: z.string(), - regDt: z.string().nullish(), - rgtr: z.string().nullish(), - mdfcnDt: z.string().nullish(), - mdfr: z.string().nullish(), - }) + rswtrDetails: z.array( + rswtrDetailsZod ), - rswtrPollution: z.array(rswtrPolutionsZode), + rswtrPollutions: z.array(rswtrPolutionsZode), }); export const rswtHeadNmExport: chHeadType[] = [ @@ -173,3 +175,56 @@ export const rswtChkHeadListExport: TableUpperProps[] = [ type: "number", edit:true }]; + + + export const rswtDetailHeadListExport: TableUpperProps[] = [ + { id: "utztnUsgCd", title: "이용용도" }, + + { + id: "grssClfgUswtr", + title: "총대장균군수", + upName: "detailQulity", + upSequnce: 2, + edit: true, + }, + { + id: "combResdch", + title: "결합잔류염소", + upName: "detailQulity", + upSequnce: 3, + edit: true, + }, + { + id: "trbt", + title: "탁도", + upName: "detailQulity", + upSequnce: 4, + edit: true, + }, + { id: "bod", title: "BOD", upName: "detailQulity", upSequnce: 5, edit: true }, + { + id: "smll", + title: "냄새", + upName: "detailQulity", + upSequnce: 6, + edit: true, + }, + { + id: "crmty", + title: "색도", + upName: "detailQulity", + upSequnce: 7, + edit: true, + }, + { id: "tn", title: "T-N", upName: "detailQulity", upSequnce: 8, edit: true }, + { id: "tph", title: "T-P", upName: "detailQulity", upSequnce: 9, edit: true }, + { id: "ph", title: "PH", upName: "detailQulity", upSequnce: 10, edit: true }, + { + id: "clIonQnt", + title: "염화물", + upName: "detailQulity", + upSequnce: 11, + edit: true, + }, + ]; + \ No newline at end of file diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/index.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/index.tsx index 85f3c5be5..110c684bf 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/index.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/index.tsx @@ -11,30 +11,37 @@ import { fetchType, getFetch, postFectch, + putFectch, } from "@/components/lib/api"; import { buildingType } from "@/app/store/common/code"; import { rswtMakeExcelSample } from "./excel"; import { rswtChkgdZod, rswtChkHeadListExport, + rswtDetailHeadListExport, rswtHeadNmExport, + rswtrDetailsZod, } from "./headList"; import { z } from "zod"; import { ToastFormUi } from "@/components/ui/toast/toastFromUi"; import { type chHeadType } from "../rainChkgdn/headList"; const rswtChkHeadList = rswtChkHeadListExport; +const rswtDetailHeadList = rswtDetailHeadListExport; const rswtHeadNm = rswtHeadNmExport; export type rswtChkZodType = z.infer; - +export type rswtrChkDetailsZodType = z.infer; export type rswtChkgdnState = { rswtChkgdn: { rswtChkHeadList: TableUpperProps[]; + rswtDetailHeadList: TableUpperProps[]; + rswtHeadNm: chHeadType[]; excelList: [typeof sheetParameter]; rswtChkRes: rswtChkZodType[]; rswtChkPolGuide: rswtChkZodType[]; isInit: boolean; + isSttn:boolean }; }; @@ -46,9 +53,10 @@ type rswtChkgdnActions = { ): Promise; rswtChkExceDataUpload: (excelData: rswtChkZodType[]) => void; rswtChkDelete: (chkgdnPks: number[]) => void; - rswtChkDetilUpdate: (rswtChk: rswtChkZodType[]) => void; + rswtChkDetilsUpdate: (rswtChkDetails: rswtrChkDetailsZodType[]) => void; rswtChkPolAndGuide: (chkGdnPk: number) => void; - rwstUpdatePolAndGuide:(rswtChk: rswtChkZodType[]) => void; + rwstPolAndGuideUpdate: (rswtChk: rswtChkZodType[]) => void; + rswtChkHeadChange: (rswtChkgdn: rswtChkgdnState, isEdit: boolean) => void; }; export type rswtChkgdnType = rswtChkgdnState & rswtChkgdnActions; @@ -56,11 +64,13 @@ export type rswtChkgdnType = rswtChkgdnState & rswtChkgdnActions; export const rswtChkgdnStateExport: rswtChkgdnState = { rswtChkgdn: { rswtChkHeadList: rswtChkHeadList, + rswtDetailHeadList: rswtDetailHeadList, rswtHeadNm: rswtHeadNm, excelList: [{ data: [[]], headerNum: 0, headerRange: "A1:V3" }], rswtChkRes: [], rswtChkPolGuide: [], isInit: false, + isSttn:false, }, }; @@ -74,19 +84,18 @@ const initFetch = async (year: string | undefined, sgg: string | undefined) => { return rswtChkRes; }; -const makeMdfrChk = (data: rswtChkZodType[], type: string) => { +const makeMdfrChk = (data: rswtChkZodType[] | rswtrChkDetailsZodType[]) => { const chData = data.map((item) => { item.mdfr = TEST_UUID; item.rgtr = TEST_UUID; - if (type === "rswtrDetail") { - item.rswtrDetail.forEach((item) => { - item.mdfr = TEST_UUID; - item.rgtr = TEST_UUID; + if ("rswtrPollutions" in item) { + item?.rswtrPollutions.forEach((pollution) => { + pollution.mdfr = TEST_UUID; + pollution.rgtr = TEST_UUID; }); - } + } return item; - } -); + }); return chData; }; @@ -141,7 +150,6 @@ export const rswtChkgdnActionsExport: (set: any) => rswtChkgdnActions = ( rswtChkExceDataUpload: async (excelData: rswtChkZodType[]) => { try { const res = await postFectch("/reuseChk/reuseWater", excelData); - const rswtMessage: string[] = []; if (res.ok) { ToastFormUi({ body: "지도점검 등록이 완료되었습니다.", @@ -153,18 +161,21 @@ export const rswtChkgdnActionsExport: (set: any) => rswtChkgdnActions = ( ...state, rswtChkgdn: { ...state.rswtChkgdn, - rswtMessage: rswtMessage, }, })); } catch (error) { console.log(error); } }, - rswtChkDetilUpdate: async (rswtChk: rswtChkZodType[]) => { + rswtChkDetilsUpdate: async (rswtChk: rswtrChkDetailsZodType[]) => { try { - const chData = await makeMdfrChk(rswtChk, "rswtrDetail"); + const chData = await makeMdfrChk(rswtChk); - const res = await postFectch("/reuseChk/reuseWater", chData); + console.log("chData ", chData); + + console.log("rswtChk ", rswtChk); + + const res = await putFectch("/reuseChk/reuseWater", chData); if (res.ok) { ToastFormUi({ body: "지도점검 과태료 수정 수정이 완료되었습니다. ", @@ -222,11 +233,13 @@ export const rswtChkgdnActionsExport: (set: any) => rswtChkgdnActions = ( })); } catch (error) {} }, - rwstUpdatePolAndGuide: async (rswtChk: rswtChkZodType[]) => { + rwstPolAndGuideUpdate: async (rswtChk: rswtChkZodType[]) => { try { - const chData = await makeMdfrChk(rswtChk, "rswtrDetail"); - console.log("chData" , chData) - const res = await postFectch("/reuseChk/reuseWater", chData); + const chData = await makeMdfrChk(rswtChk); + const res = await putFectch( + `/reuseChk/reuseWater/${rswtChk[0]?.chkgdnPk}`, + chData[0] + ); if (res.ok) { ToastFormUi({ body: "지도점검 연간 수질 및 보급수/중수도 수정이 완료되었습니다. ", @@ -243,8 +256,31 @@ export const rswtChkgdnActionsExport: (set: any) => rswtChkgdnActions = ( })); } catch (error) { console.log(error); - alert("수정에 실패하였습니다."); + ToastFormUi({ + body: "지도점검 연간 수질 및 보급수/중수도 수정이 실패하였습니다.. ", + title: "지도점검 수정", + }); } }, + rswtChkHeadChange: async (rswtChkgdn: rswtChkgdnState, isEdit: boolean) => { + try { + const rswtChkHeadList = rswtChkgdn.rswtChkgdn.rswtChkHeadList; + const rswtDetailHeadList = rswtChkgdn.rswtChkgdn.rswtDetailHeadList; + rswtChkHeadList.forEach((head) => { + if (head.edit !== undefined) head.edit = isEdit; + }); + rswtDetailHeadList.forEach((head) => { + if (head.edit !== undefined) head.edit = isEdit; + }); + return set((state: rswtChkgdnState) => ({ + ...state, + rswtChkgdn: { + ...state.rswtChkgdn, + rswtChkHeadList: rswtChkHeadList, + rswtDetailHeadList: rswtDetailHeadList, + }, + })); + } catch (e) {} + }, }; }; diff --git a/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/headList.tsx b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/headList.tsx new file mode 100644 index 000000000..4cb16df01 --- /dev/null +++ b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/headList.tsx @@ -0,0 +1,164 @@ +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 }, + { id: "operMngCd", title: "운영관리형태", rowSpan: true }, + { id: "oilqMeasMthd", title: "유량측정방법", rowSpan: true }, + { id: "anlOperCst", title: "연간운영비(원/년)", rowSpan: true }, + { id: "dtfcltCpct", title: "빗물저류조용량(m³)", rowSpan: true }, + { id: "chckYmd", title: "점검일", rowSpan: true }, + { id: "utztnUsgCd", title: "이용용도" }, + { id: "totalSplyUswtrUtztnQnt", title: "연간보급수이용량(m³)" }, + { id: "totalRuseFcltUtztnQnt", title: "연간빗물이용량(m³)" }, + { + id: "ph", + title: "PH", + upName: "useQuilty", + upSequnce: 1, + type: "number", + }, + { + id: "trbt", + title: "탁도", + upName: "useQuilty", + upSequnce: 2, + type: "number", + }, + { + id: "grssClfg", + title: "총대장균군수", + upName: "useQuilty", + upSequnce: 3, + 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 ruseHeadListExport: TableUpperProps[] = [ + { id: "utztnUsgCd", title: "이용용도" }, + { id: "ruseTotal", title: "계", upName: "ruseWater", upSequnce: 1 }, + { id: "ruse01", title: "1월", upName: "ruseWater", upSequnce: 2 }, + { id: "ruse02", title: "2월", upName: "ruseWater", upSequnce: 3 }, + { id: "ruse03", title: "3월", upName: "ruseWater", upSequnce: 4 }, + { id: "ruse04", title: "4월", upName: "ruseWater", upSequnce: 5 }, + { id: "ruse05", title: "5월", upName: "ruseWater", upSequnce: 6 }, + { id: "ruse06", title: "6월", upName: "ruseWater", upSequnce: 7 }, + { id: "ruse07", title: "7월", upName: "ruseWater", upSequnce: 8 }, + { id: "ruse08", title: "8월", upName: "ruseWater", upSequnce: 9 }, + { id: "ruse09", title: "9월", upName: "ruseWater", upSequnce: 10 }, + { id: "ruse10", title: "10월", upName: "ruseWater", upSequnce: 11 }, + { id: "ruse11", title: "11월", upName: "ruseWater", upSequnce: 12 }, + { id: "ruse12", title: "12월", upName: "ruseWater", upSequnce: 13 }, +]; + +export const splHeadListExport: TableUpperProps[] = [ + { id: "utztnUsgCd", title: "이용용도" }, + { id: "splTotal", title: "계", upName: "splWater", upSequnce: 1 }, + { id: "spl01", title: "1월", upName: "splWater", upSequnce: 2 }, + { id: "spl02", title: "2월", upName: "splWater", upSequnce: 3 }, + { id: "spl03", title: "3월", upName: "splWater", upSequnce: 4 }, + { id: "spl04", title: "4월", upName: "splWater", upSequnce: 5 }, + { id: "spl05", title: "5월", upName: "splWater", upSequnce: 6 }, + { id: "spl06", title: "6월", upName: "splWater", upSequnce: 7 }, + { id: "spl07", title: "7월", upName: "splWater", upSequnce: 8 }, + { id: "spl08", title: "8월", upName: "splWater", upSequnce: 9 }, + { id: "spl09", title: "9월", upName: "splWater", upSequnce: 10 }, + { + id: "spl10", + title: "10월", + upName: "splWater", + upSequnce: 11, + }, + { + id: "spl11", + title: "11월", + upName: "splWater", + upSequnce: 12, + }, + { + id: "spl12", + title: "12월", + upName: "splWater", + upSequnce: 13, + }, +]; + +export const rswtDetailHeadListExport: 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, + }, +]; diff --git a/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/index.tsx b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/index.tsx new file mode 100644 index 000000000..714057be0 --- /dev/null +++ b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/index.tsx @@ -0,0 +1,75 @@ +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"; + +const fcltDiv = [ + { val: "RST", text: "중수도시설" }, + { val: "RNB", text: "빗물이용시설" }, +]; + +const rainHeadNm = rainHeadNmExport; +const rainChkgdnHeadList = rainChkgdnHeadListExport; + +const rainChk: rainChkZodType[] = []; + +export type rainChkSttnState = { + rainChkSttn: { + rainChkgdnHeadList: TableUpperProps[]; + rainChkSttn: rainChkZodType[]; + rainHeadNm: chHeadType[]; + fcltDiv: SelectDataType[]; + isInit: boolean; + }; +}; + +type rainChkSttnActions = { + rainChkSttnInit: (searchTxt: string, sggCd: string) => void; +}; + +export type rainChkSttnType = rainChkSttnState & rainChkSttnActions; + +export const rainChkSttnStateExport: rainChkSttnState = { + rainChkSttn: { + rainChkgdnHeadList: rainChkgdnHeadList, + rainHeadNm: rainHeadNm, + rainChkSttn: [], + fcltDiv: fcltDiv, + isInit: false, + }, +}; + +const initFetch = async (txt: string | undefined, sgg: string | undefined) => { + const rainRes = await getFetch( + "wr", + `/reuseChk/rainy` + (txt ? `/${txt}` : "2024") + (sgg ? `/${sgg}` : "/0") + ); + return rainRes; +}; +export const rainChkSttnActionsExport: (set: any) => rainChkSttnActions = ( + set: any +) => { + return { + rainChkSttnInit: async (searchTxt: string, sggCd: string) => { + try { + const rainChkRes = await initFetch(searchTxt, sggCd); + + return set((state: rainChkSttnState) => ({ + ...state, + rainChkSttn: { + ...state.rainChkSttn, + rainChkRes:rainChkRes + }, + })); + } catch (error) { + console.log(error); + } + }, + }; +}; diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/htdflReg/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/htdflReg/index.tsx index f3ed3d318..a26173ed3 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltReg/htdflReg/index.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/htdflReg/index.tsx @@ -101,7 +101,7 @@ export type htdflFacState = { }; }; type htdflFacSActions = { - initHtdfl: (code: string | number) => void; + initHtdfl: (code: string ) => void; htdflBdstUpdate:(data: customHtdflBdst, code:string|number) => void; htdflBdstReg:(data: customHtdflBdst, code:string|number) => void; getHtdflBdstData:(pageNation:number, code:string|number) =>void; @@ -154,7 +154,7 @@ export const htdflFacActionsExport: (set: any) => htdflFacSActions = ( }, - initHtdfl: async (code: string | number) => { + initHtdfl: async (code: string ) => { try { const htdflRes = await initFetch(code); set((state: htdflFacState) => { diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/rswtReg/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/rswtReg/index.tsx index bd7473bbb..d7b734d5b 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltReg/rswtReg/index.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/rswtReg/index.tsx @@ -12,7 +12,7 @@ export const rswtZod = z.object({ bdstNm: z.string().default(""), frstArchPrmsnDt: z.date().default(() => new Date()), archChgPrmsnDt: z.coerce.date().nullish().default(null), - + chBuildingYn :z.string().nullish(), archArea: z.number().default(0), archChgArea: z.number().default(0), rgtr: z.string().nullish().default(null), diff --git a/apps/wr/app/store/store.tsx b/apps/wr/app/store/store.tsx index 69813547b..ab2e78277 100644 --- a/apps/wr/app/store/store.tsx +++ b/apps/wr/app/store/store.tsx @@ -1,14 +1,40 @@ import { createStore } from "zustand/vanilla"; -import { codeActionExport, comCodeStateExport, getCityCd, getEnvPartCd, getMiddleRegionCd, getRegionCd, getSggCd, getUnitWaterShedCd, type comCodeState, type comCodeType } from "./common/code"; +import { + codeActionExport, + comCodeStateExport, + getCityCd, + getEnvPartCd, + getMiddleRegionCd, + getRegionCd, + getSggCd, + getUnitWaterShedCd, + type comCodeState, + type comCodeType, +} from "./common/code"; import { matDmdActionsExport, matDmdStateExport, type matDmdState, type matDmdType, } from "./matDmd"; -import { rainChkgdnActionsExport, rainChkgdnStateExport, type rainChkgdnState, type rainChkgdnType } from "./prfmncReg/chkgdnReg/rainChkgdn"; -import { rswtChkgdnActionsExport, rswtChkgdnStateExport, type rswtChkgdnState, type rswtChkgdnType } from "./prfmncReg/chkgdnReg/rswrtChkgdn"; -import { bdstActionsExport, bdstStateExport, type bdstFulType, type bdstState } from "./ruseFcltMng/fcltReg/bdstReg"; +import { + rainChkgdnActionsExport, + rainChkgdnStateExport, + type rainChkgdnState, + type rainChkgdnType, +} from "./prfmncReg/chkgdnReg/rainChkgdn"; +import { + rswtChkgdnActionsExport, + rswtChkgdnStateExport, + type rswtChkgdnState, + type rswtChkgdnType, +} from "./prfmncReg/chkgdnReg/rswrtChkgdn"; +import { + bdstActionsExport, + bdstStateExport, + type bdstFulType, + type bdstState, +} from "./ruseFcltMng/fcltReg/bdstReg"; import { htdflFacActionsExport, htdflFacStateExport, @@ -33,38 +59,59 @@ import { type rswtFacState, type rswtFacType, } from "./ruseFcltMng/fcltReg/rswtReg"; -import { rainSttnActionsExport, rainSttnStateExport, type rainSttnState, type rainSttnType } from "./ruseFcltMng/fcltSttn/rainSttn"; -import { rswtSttnActionsExport, rswtSttnStateExport, type rswtSttnState, type rswtSttnType } from "./ruseFcltMng/fcltSttn/rswtSttn"; -import { htdflSttnActionsExport, htdflSttnStateExport, type htdflSttnState, type htdflSttnType } from "./ruseFcltMng/fcltSttn/htdflSttn"; +import { + rainSttnActionsExport, + rainSttnStateExport, + type rainSttnState, + type rainSttnType, +} from "./ruseFcltMng/fcltSttn/rainSttn"; +import { + rswtSttnActionsExport, + rswtSttnStateExport, + type rswtSttnState, + type rswtSttnType, +} from "./ruseFcltMng/fcltSttn/rswtSttn"; +import { + htdflSttnActionsExport, + htdflSttnStateExport, + type htdflSttnState, + type htdflSttnType, +} from "./ruseFcltMng/fcltSttn/htdflSttn"; +import { + rainChkSttnActionsExport, + rainChkSttnStateExport, + type rainChkSttnState, + type rainChkSttnType, +} from "./prfmncSttn/chkgdnSttn/rainChkgdnSttn"; -export type WrStore = comCodeType& +export type WrStore = comCodeType & pubFacType & rainFacType & rswtFacType & matDmdType & - htdflFacType& - bdstFulType& - rainChkgdnType& - rswtChkgdnType& - rainSttnType& - rswtSttnType& - htdflSttnType - ; + htdflFacType & + bdstFulType & + rainChkgdnType & + rswtChkgdnType & + rainSttnType & + rswtSttnType & + htdflSttnType & + rainChkSttnType; -export const StoreZus = ( - initState: comCodeState& +export const StoreZus = ( + initState: comCodeState & rainFacState & pubFacState & rswtFacState & matDmdState & htdflFacState & bdstState & - rainChkgdnState& - rswtChkgdnState& - rainSttnState& - rswtSttnState& - htdflSttnState - + rainChkgdnState & + rswtChkgdnState & + rainSttnState & + rswtSttnState & + htdflSttnState & + rainChkSttnState = { ...comCodeStateExport, ...pubFacStateExport, @@ -77,16 +124,17 @@ export const StoreZus = ( ...rswtChkgdnStateExport, ...rainSttnStateExport, ...rswtSttnStateExport, - ...htdflSttnStateExport + ...htdflSttnStateExport, + ...rainChkSttnStateExport, } ) => { return createStore()((set) => { - getSggCd(set); - getCityCd(set); - getRegionCd(set); - getMiddleRegionCd(set); - getUnitWaterShedCd(set) - getEnvPartCd(set) + getSggCd(set); + getCityCd(set); + getRegionCd(set); + getMiddleRegionCd(set); + getUnitWaterShedCd(set); + getEnvPartCd(set); return { ...initState, ...pubFacActionsExport(set), @@ -100,7 +148,8 @@ export const StoreZus = ( ...rswtChkgdnActionsExport(set), ...rainSttnActionsExport(set), ...rswtSttnActionsExport(set), - ...htdflSttnActionsExport(set) + ...htdflSttnActionsExport(set), + ...rainChkSttnActionsExport(set) }; }); }; diff --git a/apps/wr/components/lib/func/TableData.tsx b/apps/wr/components/lib/func/TableData.tsx index 2e51d7680..e5f6c00db 100644 --- a/apps/wr/components/lib/func/TableData.tsx +++ b/apps/wr/components/lib/func/TableData.tsx @@ -21,7 +21,6 @@ export const rainChkTableData = (chkData: rainChkZodType[]) => { return acc; }, {}); - return selectTotal; // 모든 키: `${chkgdnFk}_${utztnUsgCd}` 형태 }); @@ -56,12 +55,12 @@ export const rswtChkTableData = (chkData: rswtChkZodType[]) => { // 1. chkgdnFk + utztnUsgCd 기준 누계 정보 만들기 const makeRswtData: any[] = []; chkData.forEach((root) => { - root.rswtrDetail.forEach((detail) => { + root.rswtrDetails.forEach((detail) => { let flatRswtChk = {}; const findGuide = root.guideDetails.find( (guide) => guide.utztnUsgCd === detail.utztnUsgCd ); - const findPoluttion = root.rswtrPollution.find( + const findPoluttion = root.rswtrPollutions.find( (polution) => polution.utztnUsgCd === detail.utztnUsgCd ); const operMngCd = root?.reuseBuilding.operMngCd; @@ -79,7 +78,6 @@ export const rswtChkTableData = (chkData: rswtChkZodType[]) => { return makeRswtData; }; - export const chRowspanTable = ( makeTableData: any[], headList: TableUpperProps[], @@ -92,6 +90,7 @@ export const chRowspanTable = ( selectedIds: number[], handleCellClick: (index: number, headId: string) => void ) => { + let order =0 // rowspan된 셀 렌더링 여부 추적용 const renderedMap = new Map>(); return ( @@ -102,11 +101,13 @@ export const chRowspanTable = ( const key = head.id; const isMerged = head.rowSpan; const value = row[key]; - // 병합 대상이면 중복 렌더링 여부 판단 if (isMerged) { const renderedSet = renderedMap.get(key) ?? new Set(); - if (renderedSet.has(rowIndex)) return null; // 이미 렌더링된 셀은 skip + if (renderedSet.has(rowIndex)) { + + return null; // 이미 렌더링된 셀은 skip + } const rowspan = row.rowspan ?? 1; for (let i = 0; i < rowspan; i++) { @@ -119,13 +120,15 @@ export const chRowspanTable = ( rowSpan={rowspan} className="align-middle text-center whitespace-nowrap" > - {key === "order" ? ( + {key === "chekcBox" ? ( toggleSelection(row.chkgdnPk, checked === true) } > + ) : key === "order" ? ( + ++order ) : ( value )} @@ -154,6 +157,7 @@ export const chRowspanTable = ( )} ); + })} ))} diff --git a/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx b/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx index 390e17318..161b58ab8 100644 --- a/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx +++ b/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx @@ -97,6 +97,10 @@ export default function ChkgdExcel({ type }: { type: string }) { }; } }); + + console.log("total data ", totalData) + + console.log("polutionData data ", polutionData) const guideKey = new Set(guideData.map(keyGenerator)); const onlypolution = polutionData.filter( @@ -107,8 +111,7 @@ export default function ChkgdExcel({ type }: { type: string }) { ...totalData, ...onlypolution ] - - setExcelRswtData(listTotalData); + setExcelRswtData(listTotalData); } }); } diff --git a/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx b/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx index d12de4cee..13da8a8bd 100644 --- a/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx +++ b/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx @@ -10,9 +10,8 @@ import type { z } from "zod"; import React from "react"; export default function ChkgdModal({ type, obj }: { type: string; obj: any }) { - const { rainChkgdn, rainChkGuidUpdate ,rwstUpdatePolAndGuide } = useWrStore( - (state) => state - ); + const { rainChkgdn, rswtChkgdn, rainChkGuidUpdate, rwstPolAndGuideUpdate } = + useWrStore((state) => state); const [guidData, setGuidData] = useState(); const [polutionData, setPolutionData] = useState>({ @@ -28,12 +27,6 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) { "4": [] as z.infer[], }); - - const rswtnodeList = headMakeprfmnc( - rainChkgdn?.rswtDetailHeadList, - rainChkgdn?.rainHeadNm - ); - const { rainChk, ruseHeadList, splHeadList } = rainChkgdn; const [updateData, setUpdateData] = useState(); @@ -79,17 +72,19 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) { }, []); setGuidData(result); - if (obj.rswtrPollution) { + if (obj.rswtrPollutions) { const resultPolution: Record = { "1": [], "2": [], "3": [], "4": [], }; - obj.rswtrPollution.forEach((item: z.infer) => { - const nodeKey = String(item.node); - resultPolution[nodeKey]?.push(item); - }); + obj.rswtrPollutions.forEach( + (item: z.infer) => { + const nodeKey = String(item.node); + resultPolution[nodeKey]?.push(item); + } + ); // 각 노드에 대해 합계/평균 추가 Object.entries(resultPolution).forEach(([nodeKey, items]) => { @@ -135,7 +130,6 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) { } }, [obj]); - const setChGuidData = (data: splRuseWaterType[]) => { if (data.length > 0) { setUpdateData(data); @@ -152,10 +146,6 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) { ); const month = item.ym?.slice(4); - - if (month === undefined || month === null) { - console.log("month ", month); - } if (findObj) { const ruseMonthKey = `ruse${month}` as keyof splRuseWaterType; const splMonthKey = `spl${month}` as keyof splRuseWaterType; @@ -172,39 +162,25 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) { } }); obj.guideDetails = realGuideDetail; - - - - if(type ==='RNB'){ - + if (type === "RNB") { rainChkGuidUpdate(obj); - }else{ - - - const polution = Object.values(upPolutionData).flat() ; - obj.rswtrPollution = polution; - - console.log("obj ", obj) - rwstUpdatePolAndGuide([obj]); + } else { + const polution = Object.values(upPolutionData) + .flat() + .filter((item) => item.utztnUsgCd !== "평균"); + obj.rswtrPollutions = polution; + rwstPolAndGuideUpdate([obj]); } }; - - - const getPolutionData = (data: z.infer[]) => { - console.log("data " ,data) - const getNode = Number(data[0]?.node) + const getPolutionData = (data: z.infer[]) => { + const getNode = Number(data[0]?.node); setUpPolutionData((prevPolutionData) => ({ ...prevPolutionData, [getNode]: data, })); - }; - useEffect(() =>{ - console.log('upPolutionData ', upPolutionData) - },[upPolutionData]) - return ( <>
@@ -219,12 +195,15 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) {

- {"○" + "" + `(${"11"})`} + {"○" + "" + `(${obj.bdstNm})`}

- - + {!rainChkgdn.isSttn ? ( + + ) : ( + <> + )}
@@ -269,7 +248,7 @@ export default function ChkgdModal({ type, obj }: { type: string; obj: any }) { { getPolutionData(data); diff --git a/apps/wr/components/ui/modal/sttn/sttnDetailModal/sttnDetailModal.tsx b/apps/wr/components/ui/modal/sttn/sttnDetailModal/sttnDetailModal.tsx index 9a2929ffd..d7f10ddd1 100644 --- a/apps/wr/components/ui/modal/sttn/sttnDetailModal/sttnDetailModal.tsx +++ b/apps/wr/components/ui/modal/sttn/sttnDetailModal/sttnDetailModal.tsx @@ -9,8 +9,9 @@ import type { customHtdflBdst } from "@/app/store/ruseFcltMng/fcltReg/htdflReg"; import { useWrStore } from "@/app/store"; import { useEffect, useState } from "react"; import type { CommonTableProps } from "@/app/store/common/type/headder"; -import { rainChkTableData } from "@/components/lib/func/TableData"; +import { rainChkTableData, rswtChkTableData } from "@/components/lib/func/TableData"; import { HeadMakeColSpan } from "@common/business_components/ui/table/HeadMakeColSpan"; +import type { rswtChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn"; export default function SttnDetailModal({ type, @@ -19,7 +20,7 @@ export default function SttnDetailModal({ type: string; formObj: any; }) { - const { code, rainSttn, rswtSttn, rainSttnChkSearch } = useWrStore( + const { code, rainSttn, rswtSttn, rainSttnChkSearch,rswtChkPolAndGuide } = useWrStore( (state) => state ); const [detailData, setDetailData] = useState({ @@ -33,6 +34,7 @@ export default function SttnDetailModal({ rainSttnChkSearch(formObj.reuseBuilding[0].bdstRuseFcltPk); } else if (type === "RST") { + // rswtChkPolAndGuide(formObj.reuseBuilding[0].bdstRuseFcltPk) } }, [type, formObj]); @@ -62,7 +64,16 @@ export default function SttnDetailModal({ node:rainSttn.rainSttnDetailNodeList, data: data, }); - } else if (type === "RST") { + } else if (type === "RST" && rswtSttn.rswtSttnRes) { + // const tableTotalData = rswtChkTableData(rswtSttn.rswtSttnRes as unknown as rswtChkZodType[]); + + // setDetailData({ + // head: rswtSttn.rswtSttHeadList, + // node:rswtSttn.rswtSttNodeList, + // // data: tableTotalData, + // }); + + } }, [rainSttn.rainChkRes]); diff --git a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx b/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx index a26cf0541..ed3f590b1 100644 --- a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx +++ b/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx @@ -50,8 +50,10 @@ export default function RainChkgdTable({ headId === "totalSplyUswtrUtztnQnt" || headId === "totalRuseFcltUtztnQnt" ) { + handleClick(makeTableData[index]) } + },[makeTableData, handleClick]); diff --git a/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx b/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx index 5af06f421..d9caa86fd 100644 --- a/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx +++ b/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx @@ -1,27 +1,35 @@ "use client"; - import { headMakeprfmnc } from "@/app/ruseFcltMng/prfmncReg/chkgdnReg/TableHead"; import { useWrStore } from "@/app/store"; -import type { rswtChkZodType } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn"; +import type { + rswtrChkDetailsZodType, +} from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn"; import { tableData } from "@/components/lib/func/commom"; -import { chRowspanTable, rswtChkTableData } from "@/components/lib/func/TableData"; +import { + chRowspanTable, + rswtChkTableData, +} from "@/components/lib/func/TableData"; import { Table, TableBody, TableHeader } from "@common/components/ui"; -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; export default function RswtChkgdTable({ detaiRswtlUpdate, handleRswtClick = () => {}, deleteRswtData, }: { - detaiRswtlUpdate: (data: rswtChkZodType[]) => void; + detaiRswtlUpdate: (data: rswtrChkDetailsZodType[]) => void; handleRswtClick?: (data: any) => void; deleteRswtData: (selectedIds: number[]) => void; }) { - const { code, rswtChkgdn, rswtChkgdnInit,rswtChkPolAndGuide } = useWrStore((state) => state); + const { code, rswtChkgdn, rswtChkgdnInit, rswtChkPolAndGuide } = useWrStore( + (state) => state + ); const [makeTableData, setMakeTableData] = useState([]); const [selectedIds, setSelectedIds] = useState([]); - const [upRaintDetail, setUpRaintDetail] = useState([]); + const [upRswttDetail, setUpRswttDetail] = useState( + [] + ); const toggleSelection = (pk: number, checked: boolean) => { setSelectedIds((prev) => checked ? [...prev, pk] : prev.filter((item) => item !== pk) @@ -41,93 +49,57 @@ export default function RswtChkgdTable({ const handleCellClick = useCallback( (index: number, headId: string) => { - if ( - headId === "splyUswtrUtztnQnt" || - headId === "ruseFcltUtztnQnt" - ) { - //handleRswtClick(makeTableData[index]); - rswtChkPolAndGuide(makeTableData[index].chkgdnPk) + if (headId === "splyUswtrUtztnQnt" || headId === "ruseFcltUtztnQnt") { + rswtChkPolAndGuide(makeTableData[index].chkgdnPk); } }, [makeTableData, handleRswtClick] ); - useEffect(() =>{ - if(rswtChkgdn.rswtChkPolGuide.length > 0) - handleRswtClick(rswtChkgdn.rswtChkPolGuide[0]) - },[rswtChkgdn.rswtChkPolGuide]) + useEffect(() => { + if (rswtChkgdn.rswtChkPolGuide.length > 0) + handleRswtClick(rswtChkgdn.rswtChkPolGuide[0]); + }, [rswtChkgdn.rswtChkPolGuide]); - - useEffect(() => { - //데이터를 평탄화 한것중에 체크박스 선택한 테이블만 선택 - const selectedData = makeTableData.filter((item) =>selectedIds.includes(item.chkgdnPk)); - - if (selectedData.length > 0) { - const updateTableData = makeTableData - .map((rc) => { - const newRswtDetail = rc.rswtrDetail - .map((rd:any) => { - - // 변경 데이터는 평탄화한 데이터 즉 루트에 변경되어 있음 이용용도까지 잇음 그걸로 찾기 - const findRswt = selectedData.find( - (sd) => - rd.chkgdnFk === sd.chkgdnPk && rd.utztnUsgCd === sd.utztnUsgCd - ); - - if (findRswt != undefined) { - console.log(findRswt) - return { - ...rd, - vltnDt: findRswt.vltnDt, - vltnMttr: findRswt.vltnMttr, - levyAmt: Number(findRswt.levyAmt), - }; - } else { - return undefined; - } - }) - .filter(Boolean); - if (newRswtDetail[0] != undefined) { - return { - ...rc, - rswtrDetail: newRswtDetail, - }; - } else { - return undefined; - } - }) - .filter(Boolean); - - - setUpRaintDetail(updateTableData as rswtChkZodType[]); - } - }, [makeTableData,selectedIds]); - - useEffect(() => { - setSelectedIds([])// 셀렉트 초기화를 위한 작업 - const tableTotalData = rswtChkTableData(rswtChkgdn.rswtChkRes) - const rswtChkData = tableTotalData.map((item: any) => { - const bud = tableData([item.building], { code }); + useEffect(() => { + const selectedData = makeTableData + .map((item) => { return { - ...item, - ...bud[0], - rowspan: item.rswtrDetail?.length, + chkgdnFk: item.chkgdnFk, + utztnUsgCd: item.utztnUsgCd, + vltnDt: item.vltnDt, + vltnMttr: item.vltnMttr, + levyAmt: Number(item.levyAmt), }; - }); - setMakeTableData(rswtChkData); - }, [rswtChkgdn.rswtChkRes, code]); + }) + .filter((item) => selectedIds.includes(item.chkgdnFk)); - useEffect(() => { - detaiRswtlUpdate(upRaintDetail); - }, [upRaintDetail]); - - useEffect(() =>{ - if(selectedIds.length >0){ - // 삭제를 위한 데이터 삽입 - deleteRswtData(selectedIds ) - } - },[selectedIds]) - + if (selectedData) setUpRswttDetail(selectedData); + }, [makeTableData, selectedIds]); + useEffect(() => { + setSelectedIds([]); // 셀렉트 초기화를 위한 작업 + const tableTotalData = rswtChkTableData(rswtChkgdn.rswtChkRes); + const rswtChkData = tableTotalData.map((item: any) => { + const bud = tableData([item.building], { code }); + return { + ...item, + ...bud[0], + rowspan: item.rswtrDetails?.length, + }; + }); + setMakeTableData(rswtChkData); + }, [rswtChkgdn.rswtChkRes, code]); + + useEffect(() => { + detaiRswtlUpdate(upRswttDetail); + }, [upRswttDetail]); + + useEffect(() => { + if (selectedIds.length > 0) { + // 삭제를 위한 데이터 삽입 + deleteRswtData(selectedIds); + } + }, [selectedIds]); return ( <>