From 4455cc3b55e98e23b45876d1c2dc4b679979223f Mon Sep 17 00:00:00 2001 From: leedj312 Date: Tue, 6 May 2025 23:08:26 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A7=80=EB=8F=84=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B8=B0=ED=83=80=20=EC=88=98=EC=A0=95=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ruseFcltMng/fcltReg/rainReg/page.tsx | 84 +-- .../app/ruseFcltMng/fcltReg/rswtReg/page.tsx | 35 +- .../fcltSttn/rainSttn/TableHead.tsx | 57 -- .../ruseFcltMng/fcltSttn/rainSttn/page.tsx | 36 +- .../ruseFcltMng/prfmncReg/chkgdnReg/page.tsx | 38 +- apps/wr/app/store/common/code/index.ts | 1 + apps/wr/app/store/common/type/headder.tsx | 23 + .../prfmncReg/chkgdnReg/rainChkgdn/index.tsx | 41 +- .../ruseFcltMng/fcltReg/rainReg/index.tsx | 113 ++-- .../ruseFcltMng/fcltReg/rswtReg/index.tsx | 316 +++++---- .../fcltSttn/pbnstSttn/headList.tsx | 6 +- .../fcltSttn/rainSttn/headList.tsx | 602 +++++++++--------- .../ruseFcltMng/fcltSttn/rainSttn/index.tsx | 120 +++- apps/wr/components/lib/func/TableData.tsx | 7 +- apps/wr/components/lib/func/commom.tsx | 29 +- .../ui/form/fcltReg/bdstReg/bdstReg.tsx | 166 +++-- .../ui/form/fcltReg/htdflReg/htdflRegForm.tsx | 180 ++++-- .../ui/form/fcltReg/rainReg/rainRegForm.tsx | 50 +- .../ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx | 163 +++-- .../ui/modal/chkgdExcel/chkgdExcel.tsx | 14 +- .../ui/modal/headChModal/headChModal.tsx | 83 +-- .../chkgdTable/rainChkgd/rainChkgdTable.tsx | 50 +- .../rainChkgd/rainChkgdTableModal.tsx | 13 - 23 files changed, 1185 insertions(+), 1042 deletions(-) delete mode 100644 apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/TableHead.tsx create mode 100644 apps/wr/app/store/common/type/headder.tsx delete mode 100644 apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTableModal.tsx diff --git a/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx b/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx index af78efb00..30ddd1f4a 100644 --- a/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx @@ -1,12 +1,11 @@ "use client"; import { useWrStore } from "@/app/store"; -import type { - chgBuilding, - customRainBdst, - TableUpperProps, +import { + type chgBuilding, + type customRainBdst, } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; import { tableData } from "@/components/lib/func/commom"; -import RainRegForm from "@/components/ui/form/fcltReg/rainReg/rainRegForm"; +import RainRegForm from "@/components/ui/form/fcltReg/rainReg/rainRegForm"; import BdstChgModal from "@/components/ui/modal/bdstChgModal/bdstChgModal"; import { BdstReg } from "@/components/ui/modal/bdstRegModal/bdstRegModal"; import { @@ -21,19 +20,17 @@ import { UiTable, } from "@common/business_components"; import ListDiv from "@common/business_components/ui/list_div"; -import { Button, TableHead, TableRow } from "@common/components"; +import { Button } from "@common/components"; import { useEffect, useState } from "react"; -import { headMakeColSpan } from "./TableHead"; - export default function Home() { - const { rain, code, init } = useWrStore((state) => { + const { rain, code, initRain, rainSearch, getRainData } = useWrStore((state) => { return state; }); const { rainRes } = rain; const [rainForm, setRainForm] = useState(); const [issNewReg, setIsNewReg] = useState(false); - + const [pageNation, setPageNation] = useState(1); const [bdstTable, setbdstTable] = useState(); const [searchTxt, setSearchTxt] = useState(); const [bdstChgProps, setBdstChgProps] = useState<{ @@ -41,16 +38,24 @@ export default function Home() { chgBuilding: chgBuilding[]; }>({ isOpen: false, chgBuilding: [] }); - const nodeList = headMakeColSpan(rain.upHeadList); useEffect(() => { if (!rain.isInit) { - init(undefined); + initRain('41'); } - }, [rain.isInit, init]); + }, [rain.isInit, initRain]); useEffect(() => { if (code.sggCd.length > 0) { - setbdstTable(tableData(rainRes, { code })); + const rainData = tableData(rainRes, { code }).map( + (item: customRainBdst) => { + return { + ...item, + bdstChgYn: item.chgBuilding.length > 0 ? "Y" : "N", + }; + } + ); + + setbdstTable(rainData); } }, [code, rainRes]); const cellClick: (val: number | undefined, headId: string) => void = ( @@ -76,8 +81,9 @@ export default function Home() { }; useEffect(() => { - console.log("rainForm", rainForm); - }, [rainForm]); + console.log("getPageNation", pageNation); + getRainData(pageNation, "41"); + }, [pageNation]); return ( <> @@ -88,7 +94,7 @@ export default function Home() { { @@ -96,24 +102,24 @@ export default function Home() { }} /> - +
- - + +
@@ -121,19 +127,19 @@ export default function Home() {
- + { cellClick(val, headId); }} + onPageChange={setPageNation} > - {nodeList} @@ -149,7 +155,7 @@ export default function Home() {
} - bodyClass="w-[90vw] max-w-none" + bodyClass="w-[30vw] max-w-none" open={issNewReg} onOpenChange={(open) => { setIsNewReg(open); diff --git a/apps/wr/app/ruseFcltMng/fcltReg/rswtReg/page.tsx b/apps/wr/app/ruseFcltMng/fcltReg/rswtReg/page.tsx index 473ac6889..597973ac9 100644 --- a/apps/wr/app/ruseFcltMng/fcltReg/rswtReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltReg/rswtReg/page.tsx @@ -23,28 +23,37 @@ import type { chgBuilding } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; import { headMakeColSpan } from "../rainReg/TableHead"; export default function Home() { - const { code, rswt, initRswt } = useWrStore((state) => state); - const nodeList = headMakeColSpan(rswt.upHeadList); + const { code, rswt, initRswt ,rswtBdstSearch,getRswtBdstData} = useWrStore((state) => state); const [rswtForm, setRswtForm] = useState(); const [searchTxt, setSearchTxt] = useState(); const [issNewReg, setIsNewReg] = useState(false); + const [pageNation, setPageNation] = useState(1); const [bdstTable, setbdstTable] = useState(); const [bdstChgProps, setBdstChgProps] = useState<{ isOpen: boolean; chgBuilding: chgBuilding[]; }>({ isOpen: false, chgBuilding: [] }); - const { rswtRes } = rswt; useEffect(() => { if (!rswt.isInit) { - initRswt(undefined); + initRswt('41'); } }, [rswt.isInit, initRswt]); useEffect(() => { if (code.sggCd.length > 0) { - setbdstTable(tableData(rswtRes, { code })); + const rswtData = tableData(rswtRes, { code }).map( + (item: customRswtBdst) => { + return { + ...item, + bdstChgYn: item.chgBuilding.length > 0 ? "Y" : "N", + bdstUsgCd: item.reuseBuilding[0]?.bdstUsgCd + }; + } + ); + console.log(rswtData) + setbdstTable(rswtData); } }, [code, rswtRes]); const cellClick: (val: number | undefined, headId: string) => void = ( @@ -69,6 +78,10 @@ export default function Home() { const bdstChgModal = (chgBuilding: chgBuilding[]) => { setBdstChgProps({ isOpen: true, chgBuilding: chgBuilding }); }; + useEffect(() => { + getRswtBdstData(pageNation, "41"); + }, [pageNation]); + return ( <> @@ -93,7 +106,7 @@ export default function Home() { size={"sm"} className="mr-4 " onClick={(e) => { - initRswt(searchTxt || ""); + rswtBdstSearch(searchTxt || "",pageNation,'41'); }} > 조회 @@ -117,12 +130,12 @@ export default function Home() { - {nodeList} + cellClick={cellClick} + onPageChange={setPageNation} + >
diff --git a/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/TableHead.tsx b/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/TableHead.tsx deleted file mode 100644 index 7b7065ffa..000000000 --- a/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/TableHead.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import type { chHeadType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn"; -import type { TableTripleProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; -import { TableHead, TableRow } from "@common/components/ui"; - -export const headMakeTriple = ( - upHeadList: TableTripleProps[], - makeHeadNm: chHeadType[], - rowCount: number = 2 -) => { - return ( - <> - {Array.from({ length: rowCount }).map((_, i) => ( - - {upHeadList - .filter((head: TableTripleProps) => head.visible == true) - .map((head: TableTripleProps) => - !head.upSequnce[i] ? ( - - {head.title} - - ) : head.upSequnce[i] === 1 ? ( - ch.headNm === head.upName[i]) - ?.length - } - > - {makeHeadNm.find((ch) => ch.headNm === head.upName[i])?.text} - - ) : null - )} - - ))} - - {upHeadList.map((head: TableTripleProps) => - makeHeadNm.find( - (ch) => ch.headNm === head?.upName[1] && head.visible == true - ) ? ( - - {head.title} - - ) : null - )} - - - ); -}; \ No newline at end of file diff --git a/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx b/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx index 003e4cdf8..b537fcfcc 100644 --- a/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx @@ -15,7 +15,8 @@ import { import ListDiv from "@common/business_components/ui/list_div"; import { Button } from "@common/components/ui"; import { useCallback, useEffect, useRef, useState } from "react"; -import { headMakeTriple } from "./TableHead"; +import type { customRainBdst } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; +import { HeadMakeColSpan } from "@common/business_components/ui/table/HeadMakeColSpan"; export default function RainSttn() { const { code, rainSttn, rainSttnSearch } = @@ -23,11 +24,7 @@ export default function RainSttn() { const { rainSttnRes } = rainSttn; const [isChHead, setIsChHead] = useState(false); const ref = useRef({} as ReturnType); - const [bdstTable, setBdstTable] = useState(); - // const nodeList = headMakeTriple( - // rainSttn.rainSttHeadList, - // rainSttn.rainSttHeadNm - // ); + const [bdstTable, setBdstTable] = useState(); useEffect(() => { if (!rainSttn.isInit) { @@ -41,22 +38,43 @@ export default function RainSttn() { } }, [rainSttn.isInit, rainSttnSearch]); + useEffect(() => { - if (rainSttnRes.length > 0) { + if (rainSttnRes.length > 0 && code.cityCd.length>0) { const data = tableData(rainSttnRes, { code }); - const chData = data .map((item: any) => ({ + ...item, ...item.reuseBuilding[0], ...item.reuseBuilding[0].rainyObj, + // cityText:item.cityText, + // sggText:item.sggText, + // bdstNm: item.bdstNm, + // daddr:item.daddr, + // bdstUsgCd:item.bdstUsgCd, + // frstArchPrmsnDt:item.frstArchPrmsnDt, + // archArea:item.archArea, + // lawTrgtYn:item.lawTrgtYn, + // instlCmptnDt:item.instlCmptnDt, + // instlCst:item.instlCst, + + + + })) .filter((item: any) => item.rainyObj !== undefined); setBdstTable(chData); } }, [code, rainSttnRes, rainSttn.rainSttHeadList]); + + + useEffect(() =>{ +console.log(rainSttn.rainSttNodeList) + },[rainSttn.rainSttNodeList]) + useEffect(() => { if(rainSttn.excelList.length>0){ @@ -122,6 +140,7 @@ export default function RainSttn() { } headlist={rainSttn.rainSttHeadList} pageSize={0} total={0} @@ -130,7 +149,6 @@ export default function RainSttn() { throw new Error("Function not implemented."); }} > - {/* {nodeList} */} diff --git a/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx b/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx index 0e5feb399..fc8fb1e0a 100644 --- a/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx @@ -7,6 +7,7 @@ import { } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn"; import { excelDownload } from "@/components/lib/func/commom"; import ChkgdExcel from "@/components/ui/modal/chkgdExcel/chkgdExcel"; +import ChkgdModal from "@/components/ui/modal/chkgdModal/chkgdModal"; import RainChkgdTable from "@/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable"; import RainChkgdTableModal from "@/components/ui/table/chkgdTable/rainChkgd/rainChkgdTableModal"; import RswtChkgdTable from "@/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable"; @@ -23,16 +24,18 @@ import { import ListDiv from "@common/business_components/ui/list_div"; import { Button } from "@common/components/ui"; import { useCallback, useEffect, useState } from "react"; +import { Toaster } from "react-hot-toast"; //----------------------- export default function Page() { - const { code, rainChkgdn, rainChkInit,rainChkDetilUpdate, rainChkExcelDownload } = useWrStore((state) => { + const { code, rainChkgdn, rainChkInit,rainChkDetilUpdate, rainChkDelete , rainChkExcelDownload } = useWrStore((state) => { return state; }); const [isRegExcel, setIsRegExcel] = useState(false); const [searchTxt, setSearchTxt] = useState(); const [updateRainDetail, setUpdateRainDetail] = useState([]); + const [deleteIdx, setDeleteIdx ] = useState ([]); const [selFcltDiv, setSelFcltDiv] = useState("RNB"); const [isModal, setIsModal] = useState({ open: false, @@ -40,19 +43,19 @@ export default function Page() { }); const cellClick = () => { if(searchTxt) - rainChkInit(searchTxt,'41') + rainChkInit(searchTxt,'0') }; useEffect(() => { if (!rainChkgdn.isInit) { rainChkInit('2024','0'); + setIsModal({data:{}, open:rainChkgdn.isModalClose }) + setIsRegExcel(false) } }, [rainChkgdn.isInit, rainChkInit]); - - useEffect(() => { excelDownload(rainChkgdn.excelList ,'빗물이용시설 지도점검','sample_rainy.xlsx', 'A1:AN1'); }, [rainChkgdn.excelList]); @@ -60,10 +63,22 @@ export default function Page() { const excelClick= useCallback(()=>{ rainChkExcelDownload(code.cityCd, code.sggCd); }, [rainChkExcelDownload, code.cityCd, code.sggCd]); + + + const handleClick = useCallback((data:any) => { if(data) setIsModal({ open: true, data: data }); }, [isModal]); + const clickDelete=(data:number[])=>{ + if(data.length>0){ + data.forEach((data) =>{ + rainChkDelete( String(data) ) + }) + } + } + + return (
@@ -97,7 +112,7 @@ export default function Page() { > 조회 -
- { isModal && htdflForm != undefined ? ( - - ) : ( - <> - )} - {isModal ? ( -

- ○ 중수도 시설 정보{" "} -

- ) : ( - <> - )} - - + {isModal && htdflForm != undefined ? : <>} + {isModal ? ( +

+ ○ 중수도 시설 정보{" "} +

+ ) : ( + <> + )}
@@ -120,7 +118,7 @@ export default function HtdflRegForm({ render={({ field }) => ( ( { - field.onChange(Number(e.target.value)); + handleCommaNumberChange(e, field.onChange); }} + value={formatCommaNumber(field.value)} /> )} @@ -183,7 +181,7 @@ export default function HtdflRegForm({ render={({ field }) => ( ( ( { - field.onChange(Number(e.target.value)); + handleCommaNumberChange(e, field.onChange); }} + value={formatCommaNumber(field.value)} /> )} @@ -238,11 +236,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -273,11 +273,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -308,11 +310,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -325,7 +329,7 @@ export default function HtdflRegForm({ render={({ field }) => ( ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -368,10 +375,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -387,10 +397,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -404,10 +417,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -423,10 +439,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -440,10 +459,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -459,10 +481,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -476,10 +501,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -495,10 +523,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -512,10 +543,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -531,10 +565,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -548,10 +585,13 @@ export default function HtdflRegForm({ render={({ field }) => ( field.onChange(Number(e.target.value))} + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} diff --git a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx index 416561b99..30249fa68 100644 --- a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx @@ -15,6 +15,7 @@ import { useEffect, useState } from "react"; import { useForm, useWatch, type UseFormReturn } from "react-hook-form"; import { z } from "zod"; import BdstReg from "../bdstReg/bdstReg"; +import { formatCommaNumber, handleCommaNumberChange } from "@/components/lib/func/commom"; export default function RainRegForm({ rainForm, @@ -23,7 +24,7 @@ export default function RainRegForm({ rainForm: customRainBdst; isModal: boolean; }) { - const { code, rainReg, rainUpdate, rain } = useWrStore((state) => state); + const { code, rainBdstReg, rainBdstUpdate, rain } = useWrStore((state) => state); const { rainFcltCd } = code; const defaultValues: z.infer = rainZod.parse({}); @@ -87,9 +88,9 @@ useEffect(() =>{ const onSubmit =(values: z.infer)=> { if (isModal) { - rainReg(values); + rainBdstReg(values ,'41'); } else { - rainUpdate(values); + rainBdstUpdate(values, '41'); } } @@ -159,13 +160,11 @@ useEffect(() =>{ render={({ field }) => ( { - field.onChange(e.target.value === "" ? "" : Number(e.target.value)); - }} + className={selectClass} + placeholder="1,000,000" + type="text" + onChange={(e) => {handleCommaNumberChange(e, field.onChange) }} + value={formatCommaNumber(field.value)} /> )} @@ -209,9 +208,9 @@ useEffect(() =>{ field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => {handleCommaNumberChange(e, field.onChange) }} + value={formatCommaNumber(field.value)} /> )} @@ -250,9 +249,9 @@ useEffect(() =>{ field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => {handleCommaNumberChange(e, field.onChange) }} + value={formatCommaNumber(field.value)} readOnly={filtrTrtmfctYn!=='Y'} /> @@ -314,15 +313,12 @@ useEffect(() =>{ render={({ field }) => ( { - const value = e.target.value; - field.onChange(value === "" ? "" : Number(value)); - }} - value={field.value ?? 0} - readOnly={instlCstSprtYn!=='Y'} + type="text" + onChange={(e) => {handleCommaNumberChange(e, field.onChange) }} + value={formatCommaNumber(field.value)} + readOnly={instlCstSprtYn !== 'Y'} /> )} @@ -358,7 +354,7 @@ useEffect(() =>{ name="reuseBuilding.0.grntchBdstCertYr" render={({ field }) => ( - @@ -373,7 +369,7 @@ useEffect(() =>{ render={({ field }) => ( { name="reuseBuilding.0.grntchBdstCertGrd" render={({ field }) => ( - diff --git a/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx b/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx index 11dccc189..7696e88d7 100644 --- a/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx @@ -9,8 +9,8 @@ import { } from "@common/business_components/ui"; import { Button, Input } from "@common/components/ui"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useForm } from "react-hook-form"; -import { z } from "zod"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; import { useWrStore } from "@/app/store"; import { selectClass } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; import { @@ -19,6 +19,10 @@ import { } from "@/app/store/ruseFcltMng/fcltReg/rswtReg"; import { useEffect } from "react"; import BdstReg from "../bdstReg/bdstReg"; +import { + formatCommaNumber, + handleCommaNumberChange, +} from "@/components/lib/func/commom"; export default function RswtrRegForm({ rswtForm, @@ -27,78 +31,69 @@ export default function RswtrRegForm({ rswtForm: customRswtBdst; isModal: boolean; }) { - const { rswt, code ,rswtUpdate,rswtReg} = useWrStore((state) => state); - + const { rswt, code, rswtBdstUpdate, rswtBdstReg } = useWrStore((state) => state); const defaultValues: z.infer = rswtZod.parse({}); - const form = useForm>({ resolver: zodResolver(rswtZod), defaultValues: defaultValues, - - }) + }); - const [grntchBdstCertYn, instlCstSprtYn,filtrTrtmfctProcs] = form.watch([ + const [grntchBdstCertYn, instlCstSprtYn, filtrTrtmfctProcs] = form.watch([ "reuseBuilding.0.grntchBdstCertYn", "reuseBuilding.0.instlCstSprtYn", "reuseBuilding.0.rswtrObj.filtrTrtmfctProcs", ]); - const onSubmit =(values: z.infer) => { + const onSubmit = (values: z.infer) => { if (isModal) { - rswtReg(values); - } else { - rswtUpdate(values); - } - } - const cleanRswtData = (raw: any): z.infer =>{ + rswtBdstReg(values,'41'); + } else { + rswtBdstUpdate(values,'41'); + } + }; + const cleanRswtData = (raw: any): z.infer => { return { ...raw, - frstArchPrmsnDt: new Date(raw?.frstArchPrmsnDt||null), - archChgPrmsnDt: raw?.archChgPrmsnDt ? new Date(raw?.archChgPrmsnDt) : null, + frstArchPrmsnDt: new Date(raw?.frstArchPrmsnDt || null), + archChgPrmsnDt: raw?.archChgPrmsnDt + ? new Date(raw?.archChgPrmsnDt) + : null, reuseBuilding: (raw?.reuseBuilding || []).map((item: any) => ({ ...item, instlCmptnDt: new Date(item?.instlCmptnDt), operMngCd: item?.operMngCd ?? "", // null → "" - grntchBdstCertYr: typeof item?.grntchBdstCertYr === "string" - ? item?.grntchBdstCertYr - : "", // null → "" + grntchBdstCertYr: + typeof item?.grntchBdstCertYr === "string" + ? item?.grntchBdstCertYr + : "", // null → "" rswtrObj: { - ...item?.rswtrObj - } - })) + ...item?.rswtrObj, + }, + })), }; - } + }; + useEffect(() => { + console.log("form errors:", form.formState.errors); + }, [form.formState.errors]); -useEffect(() => { - console.log("form errors:", form.formState.errors); -}, [form.formState.errors]); + useEffect(() => { + console.log("filtrTrtmfctProcs ", filtrTrtmfctProcs); + if (grntchBdstCertYn === "N") { + form.setValue("reuseBuilding.0.grntchBdstCertYr", ""); + form.setValue("reuseBuilding.0.grntchBdstCertNo", ""); + form.setValue("reuseBuilding.0.grntchBdstCertGrd", ""); + } else if (instlCstSprtYn === "N") { + form.setValue("reuseBuilding.0.instlCstSprtAmt", 0); + } + }, [grntchBdstCertYn, instlCstSprtYn, filtrTrtmfctProcs]); - - -useEffect(() =>{ - - console.log("filtrTrtmfctProcs ", filtrTrtmfctProcs) - if(grntchBdstCertYn ==='N'){ - form.setValue('reuseBuilding.0.grntchBdstCertYr' ,"" ) - form.setValue('reuseBuilding.0.grntchBdstCertNo' ,"" ) - form.setValue('reuseBuilding.0.grntchBdstCertGrd' ,"" ) - }else if(instlCstSprtYn ==='N'){ - form.setValue('reuseBuilding.0.instlCstSprtAmt' ,0 ) - } -},[grntchBdstCertYn,instlCstSprtYn,filtrTrtmfctProcs ]) - - - - -useEffect(() => { - if(rswtZod) - form.reset( cleanRswtData(rswtForm)) + useEffect(() => { + if (rswtZod) form.reset(cleanRswtData(rswtForm)); }, [rswtForm]); - return (
@@ -106,20 +101,18 @@ useEffect(() => { {/*
*/}
-

- ○ 중수도 시설 정보 -

-
- {isModal && rswtForm != undefined ? ( - - ) : ( - <> - )} + {isModal && rswtForm != undefined ? : <>} {isModal ? (

○ 중수도 시설 정보{" "} @@ -160,11 +153,13 @@ useEffect(() => { render={({ field }) => ( field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -179,11 +174,13 @@ useEffect(() => { render={({ field }) => ( field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -197,11 +194,13 @@ useEffect(() => { render={({ field }) => ( field.onChange(Number(e.target.value))} + type="text" + onChange={(e) => { + handleCommaNumberChange(e, field.onChange); + }} + value={formatCommaNumber(field.value)} /> )} @@ -240,7 +239,7 @@ useEffect(() => { render={({ field }) => ( { render={({ field }) => ( { - field.onChange(Number(e.target.value)); + handleCommaNumberChange(e, field.onChange); }} - readOnly={instlCstSprtYn!=='Y'} + value={formatCommaNumber(field.value)} + readOnly={instlCstSprtYn !== "Y"} /> )} @@ -330,13 +329,13 @@ useEffect(() => { render={({ field }) => ( )} @@ -349,13 +348,12 @@ useEffect(() => { render={({ field }) => ( )} @@ -368,13 +366,12 @@ useEffect(() => { render={({ field }) => ( )} diff --git a/apps/wr/components/ui/modal/chkgdExcel/chkgdExcel.tsx b/apps/wr/components/ui/modal/chkgdExcel/chkgdExcel.tsx index 625fbdebd..895af4388 100644 --- a/apps/wr/components/ui/modal/chkgdExcel/chkgdExcel.tsx +++ b/apps/wr/components/ui/modal/chkgdExcel/chkgdExcel.tsx @@ -25,7 +25,6 @@ export default function ChkgdExcel({ type }: { type: string }) { }); const [files, setFiles] = useState(null); const [excelData , setExcelData] = useState() - const defaultValues: z.infer = rainRegExcel.parse({}); const form = useForm>({ @@ -36,17 +35,14 @@ export default function ChkgdExcel({ type }: { type: string }) { useEffect(() => { if (files) { const file = files[0]; - if(form.getValues("chckYr").length<1 ){ - alert("등록년도를 입력해주세요"); + ToastFormUi({body:"파일업로드 이전에 등록년도를 작성해주세요 " ,title:'지도점검 등록'}) setFiles(null) return } if (file) filePicked(file, 0).then((res) => { if (res !== undefined) - - console.log("exex ", excelToRainChkData(res, form.getValues("chckYr"))) setExcelData(excelToRainChkData(res, form.getValues("chckYr"))) }); } @@ -54,15 +50,13 @@ export default function ChkgdExcel({ type }: { type: string }) { const onSubmit =(values: z.infer)=> { if(values.chckYr ===''){ - console.log(values.chckYr) - ToastFormUi({body:"등록년도를 작성해주세요" ,title:'엑셀등록'}) + ToastFormUi({body:"등록년도를 작성해주세요" ,title:'지도점검 등록'}) return }else if(excelData ===undefined || excelData?.length === 0 ){ - ToastFormUi({body:"빈 파일입니다." ,title:'엑셀등록'}) + ToastFormUi({body:"빈 파일 및 파일 오류 입니다." ,title:'지도점검 등록'}) return } if (excelData) { - console.log("excelData ", excelData) rainChkExcelDataUPload(excelData); } } @@ -126,7 +120,7 @@ export default function ChkgdExcel({ type }: { type: string }) {

- + ); } diff --git a/apps/wr/components/ui/modal/headChModal/headChModal.tsx b/apps/wr/components/ui/modal/headChModal/headChModal.tsx index d6b30c199..2f1236f27 100644 --- a/apps/wr/components/ui/modal/headChModal/headChModal.tsx +++ b/apps/wr/components/ui/modal/headChModal/headChModal.tsx @@ -1,10 +1,9 @@ import { useWrStore } from "@/app/store"; -import type { TableProps } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg"; -import type { TableTripleProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; +import { rainSttnHeadListType } from "@/app/store/ruseFcltMng/fcltSttn/rainSttn/headList"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@common/business_components/ui"; import { Button, Checkbox } from "@common/components/ui"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; @@ -12,38 +11,34 @@ export default function HeadChModal({type }:{type: string }) { const { rainSttn ,rainChSttnHead} = useWrStore((state) => state); - const { rainSttHeadList } =rainSttn; - let items = rainSttHeadList.map(item => ({id:item.id, label:item.title, val:item.visible })); + const { rainSttHeadList, rainSttNodeList } =rainSttn; + let items = rainSttHeadList.map(item => ({id:item.id, title:item.title, val:item.visible })); - const FormSchema = z.object({ - data: z.array(z.string()).refine((value) => value.some((item) => item), { - message: "최소한 하나를 선택해주시길 바랍니다.", - - }), - }) - - const form = useForm>({ - resolver: zodResolver(FormSchema), - defaultValues: { - data: [], - }, - }) + // const FormSchema = + // z.object({ + // id: z.string().refine((value) => value.some((item) => item), { + // message: "최소한 하나를 선택해주시길 바랍니다.", + // }), + // visible: z.boolean() + // }) + + + const form = useForm>({ + resolver: zodResolver(rainSttnHeadListType), + defaultValues: [], + }) useEffect(() =>{ - form.reset({ data: items.map((el) => el.val!==undefined ? el.val.toString():undefined )}) - + form.reset(rainSttHeadList) },[rainSttHeadList]) - const onSubmit = (val : z.infer) =>{ - - if(val?.data.length > 0) - rainChSttnHead(val?.data, ) - + const onSubmit = (headList : z.infer ) =>{ + rainChSttnHead(headList) } return ( @@ -51,57 +46,41 @@ export default function HeadChModal({type }:{type: string }) {
- ( - +
- 조회항목 설정 - +

조회항목 설정

- {items.map((item) => ( + {items.map((item,index) => ( { return ( - { - return checked - ? field.onChange([...field.value, item.id]) - : field.onChange( - field.value?.filter( - (value) => value !== item.id - ) - ); - } - + field.onChange(checked); + return; + } } /> - {item.label} + {item.title} ); }} /> ))} - -
- )} - /> diff --git a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx b/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx index e9bc79108..4aa57fe5e 100644 --- a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx +++ b/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx @@ -14,14 +14,16 @@ import { } from "@common/components/ui"; import { useCallback, useEffect, useState } from "react"; export default function RainChkgdTable({ - detailUp, handleClick=() => {} + detailUp, + handleClick=() => {}, + deleteData }: { detailUp: (data: rainChkZodType[]) => void; handleClick?: (data:any) => void; + deleteData:(selectedIds:number[])=>void }) { const { code, rainChkgdn } = useWrStore((state) => state); const [makeTableData, setMakeTableData] = useState([]); - const { rainChk } = rainChkgdn; const [selectedIds, setSelectedIds] = useState([]); const [upRaintDetail, setUpRaintDetail] = useState([]); const toggleSelection = (pk: number, checked: boolean) => { @@ -34,9 +36,11 @@ export default function RainChkgdTable({ field: keyof (typeof makeTableData)[0], value: string | number ) => { + setMakeTableData((prev) => - prev.map((row, idx) => - idx === rowIndex ? { ...row, [field]: value } : row + prev.map((row, idx) => { + return idx === rowIndex ? { ...row, [field]: value } : row + } ) ); }; @@ -53,9 +57,9 @@ export default function RainChkgdTable({ useEffect(() => { - const rainChg = rainChk.map((item: any) => { + setSelectedIds([])// 셀렉트 초기화를 위한 작업 + const rainChg = rainChkgdn.rainChk.map((item: any) => { const bud = tableData([item.building], { code }); - return { ...item, ...bud[0], @@ -64,22 +68,28 @@ export default function RainChkgdTable({ }); const tableTotalData = rightTableData(rainChg) setMakeTableData(tableTotalData); - }, [rainChk, code]); + }, [rainChkgdn.rainChk, code]); useEffect(() => { - const selectedData = makeTableData.filter((item) => - selectedIds.includes(item.chkgdnPk) - ); - if (selectedData.length > 1) { - const updateTableData = rainChk + + + //데이터를 평탄화 한것중에 체크박스 선택한 테이블만 선택 + const selectedData = makeTableData.filter((item) =>selectedIds.includes(item.chkgdnPk)); + + if (selectedData.length > 0) { + const updateTableData = rainChkgdn.rainChk .map((rc) => { const newRainyDetail = rc.rainyDetails .map((rd) => { + + // 변경 데이터는 평탄화한 데이터 즉 루트에 변경되어 있음 이용용도까지 잇음 그걸로 찾기 const findRain = selectedData.find( (sd) => rd.chkgdnFk === sd.chkgdnPk && rd.utztnUsgCd === sd.utztnUsgCd ); + if (findRain != undefined) { + console.log(findRain) return { ...rd, ph: Number(findRain.ph), @@ -105,14 +115,28 @@ export default function RainChkgdTable({ } }) .filter(Boolean); + setUpRaintDetail(updateTableData as rainChkZodType[]); } - }, [makeTableData]); + }, [makeTableData,selectedIds]); useEffect(() => { detailUp(upRaintDetail); }, [upRaintDetail]); + + useEffect(() =>{ + if(selectedIds.length >0){ + // 삭제를 위한 데이터 삽입 + deleteData(selectedIds ) + } + },[selectedIds]) + + useEffect(() => { + + },[]) + + return ( diff --git a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTableModal.tsx b/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTableModal.tsx deleted file mode 100644 index 3cc5bdbbb..000000000 --- a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTableModal.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import ChkgdModal from "@/components/ui/modal/chkgdModal/chkgdModal"; -import { UiModal } from "@common/business_components"; - -export default function RainChkgdTableModal({ isModal, setIsModal }: { isModal: { open: boolean; data: any }; setIsModal: (value: { open: boolean; data: any }) => void }) { - return ( { - setIsModal({ open: !open, data: {} }); - }} - bodyClass={"w-[80vw] max-w-none"} - body={} - >) -} \ No newline at end of file