diff --git a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx index 56096015f..4304945bd 100644 --- a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx @@ -44,7 +44,6 @@ import { zodResolver } from "@hookform/resolvers/zod"; import moment from "moment"; import { useEffect, useRef, useState } from "react"; import { useForm, useWatch } from "react-hook-form"; -import { Toaster } from "react-hot-toast"; import { z } from "zod"; @@ -305,6 +304,7 @@ export default function CoMatRvw() { headName={"수요매칭검토현황"} tableData={dmdMatData || []} headlist={coRvwHeadList} + widthFixed={true} pageSize={13} total={coMatRvwCount} cellClick={(index: number | undefined) => { @@ -770,7 +770,6 @@ export default function CoMatRvw() { - ); } diff --git a/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx b/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx index edda29ac6..9fc636427 100644 --- a/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx @@ -23,7 +23,6 @@ import ListDiv from "@common/business_components/ui/list_div"; import { Button, Label } from "@common/components/ui"; import { useAlertStore } from "@/src/shared/lib"; import { useEffect, useState } from "react"; -import { Toaster } from "react-hot-toast"; import { useTranslation } from "react-i18next"; import * as XLSX from "xlsx"; @@ -44,6 +43,7 @@ export default function RuseCaseMng() { const [selectUtz, setSelectUtz] = useState(""); const [name, setName] = useState(""); const [resetPage, isResetPage] = useState(false); + const [displayRuseCaseMngList, setDisplayRuseCaseMngList] = useState(ruseCaseMngList); const { t } = useTranslation("base"); const alert = useAlertStore((state) => state.setMessage); @@ -56,6 +56,19 @@ export default function RuseCaseMng() { ruseCaseMngInit(); }, []); + useEffect(() => { + const sewageOutUseCodeList = code.sewageOutFclttUse ?? []; + + setDisplayRuseCaseMngList( + ruseCaseMngList.map((item) => ({ + ...item, + grnteWqUsg: + sewageOutUseCodeList.find((codeItem) => codeItem.val === item.grnteWqUsg)?.text ?? + item.grnteWqUsg, + })) + ); + }, [code.sewageOutFclttUse, ruseCaseMngList]); + // 시도 선택 const getSelCity = (val: string | number) => { const cityValue = String(val); @@ -133,7 +146,8 @@ export default function RuseCaseMng() { item.ruseFcltUsg, item.ruseFcltSplyCpct, item.ruseFcltPrcsMsrc, - item.grnteWqUsg, + code.sewageOutFclttUse.find((codeItem) => codeItem.val === item.grnteWqUsg)?.text ?? + item.grnteWqUsg, item.grnteWqGrssClfg, item.grnteWqCombResdch, item.grnteWqTrbt, @@ -313,8 +327,9 @@ export default function RuseCaseMng() {
- {/* 엑셀 등록 모달 */} 재이용검토이력 */ "use client"; @@ -7,13 +7,13 @@ import { useWrStore } from "@/app/store"; import { btnClass } from "@/app/store/common/code"; import { type RvwHistTableType } from "@/app/store/matDmd/coMatRvw/type"; import { - confirmToast, formatPhoneNumber, getCity, getdmdMatFlag, tableData, yearOptions, } from "@/components/lib/func/common"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; import type { objSearchType } from "@/components/ui/modal/fcltReg/bdstRegModal/bdstRegModal"; import { ContentsDiv, @@ -30,7 +30,6 @@ import { Button, Label } from "@common/components/ui"; import { useAlertStore } from "@/src/shared/lib"; import moment from "moment"; import { useCallback, useEffect, useState } from "react"; -import { Toaster } from "react-hot-toast"; import { useTranslation } from "react-i18next"; export default function RuseRvwHstry() { const { @@ -45,6 +44,7 @@ export default function RuseRvwHstry() { const { rvwHistRes, ruseHistHeadList, rvwHistCount } = ruseHist; const { regAuthrtYn } = auth; const alert = useAlertStore((state) => state.setMessage); + const { confirm } = useConfirm(); const [pageNation, setPageNatiion] = useState(1); @@ -146,7 +146,7 @@ export default function RuseRvwHstry() { }, [rvwHistData] ); - const confrirmToast = () => { + const confrirmToast = async () => { const completeData = rvwHistData ?.map((item) => { if (item?.completeYn.chk && item.splyFcltFlg === "검토완료") { @@ -156,31 +156,14 @@ export default function RuseRvwHstry() { .filter((item) => item !== undefined); if (completeData && completeData?.length > 0) { - confirmToast(t('isMatchFinishMsg'), () => ruseRvwComplete(completeData as number[])); + if (await confirm(t("isMatchFinishMsg"))) { + const message = await ruseRvwComplete(completeData as number[]); + alert(message); + } // const handleConfirm = async () => { // ruseRvwComplete(completeData as number[]); // }; - // toast((t) => ( - // - // 매칭완료를 진행하시겠습니까? - //
- //
- // - // - //
- //
- // )); } else { alert(t('isNotMatchFinishMsg')); } @@ -217,6 +200,9 @@ export default function RuseRvwHstry() { dmdCoNm: item.demandCo?.dmdCoNm, daddr: item.demandCo?.daddr, telno: formatPhoneNumber(item.demandCo?.telno || ""), + useUsgCd: + code.sewageOutFclttUse.find((codeItem) => codeItem.val === item.useUsgCd)?.text ?? + item.useUsgCd, dmndTmng: item?.dmndTmng ? moment(item?.dmndTmng).format("YYYY-MM-DD") : "없음", @@ -232,7 +218,7 @@ export default function RuseRvwHstry() { setRvwHistData(tableData(data, { code })); } - }, [rvwHistRes]); + }, [code.sewageOutFclttUse, rvwHistRes]); return ( @@ -317,7 +303,7 @@ export default function RuseRvwHstry() { > 조회 - @@ -334,6 +320,7 @@ export default function RuseRvwHstry() { headName={"재이용검토현황"} tableData={rvwHistData || []} headlist={ruseHistHeadList} + widthFixed={true} pageSize={20} total={rvwHistCount} cellClick={(index: number | undefined, headId: string) => { @@ -347,7 +334,6 @@ export default function RuseRvwHstry() { - ); } diff --git a/apps/wr/app/(with-layout)/matMng/coMng/coSttn/page.tsx b/apps/wr/app/(with-layout)/matMng/coMng/coSttn/page.tsx index 872284783..71ec60cf0 100644 --- a/apps/wr/app/(with-layout)/matMng/coMng/coSttn/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMng/coSttn/page.tsx @@ -1,4 +1,4 @@ -"use client"; +"use client"; /** * 수요처관리 @@ -8,7 +8,6 @@ import { btnClass } from "@/app/store/common/code"; import { excelCoSttnParsing } from "@/app/store/matDmd/coSttn/excel"; import { fetchType, getFetch } from "@/components/lib/api"; import { - //confirmToast, excelDownload, formatPhoneNumber, getCity, @@ -32,7 +31,6 @@ import type { DemandCompType } from "@common/business_components/ui/sdmInsertFor import { Button } from "@common/components/ui"; import moment from "moment"; import { useCallback, useEffect, useState } from "react"; -// import toast, { Toaster } from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { useAlertStore } from "@/src/shared/lib"; import { useConfirm } from "@frontend-opensource/use-react-hooks"; @@ -181,13 +179,11 @@ export default function CoSttn() { const message = await coSttnPwInit(dmdInfoId); alert(message); }; - //confirmToast( t('isInitPw', { dmdInfoId: dmdInfoSliceId }), handleConfirm, 'text-2xl'); if (await confirm(t('isInitPw', { dmdInfoId: dmdInfoSliceId }))) { await handleConfirm(); } } else { alert("비밀번호 초기화를 원하는 행을 선택해주세요."); - // toast.error("비밀번호 초기화를 원하는 행을 선택해주세요.") } } @@ -345,6 +341,7 @@ export default function CoSttn() { coSttnSearch(String(page), "13", String(con)); }} resetSelection={isResetSelection} + widthFixed={true} > @@ -373,7 +370,6 @@ export default function CoSttn() { } >
- {/* */} ); } diff --git a/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx b/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx index 1509e2081..1aafb4318 100644 --- a/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx @@ -11,7 +11,6 @@ import ListDiv from "@common/business_components/ui/list_div"; import { Button, Label, ScrollArea } from "@common/components/ui"; import { useAlertStore } from "@/src/shared/lib"; import { useEffect, useState, useRef } from "react"; -import { Toaster } from "react-hot-toast"; export default function DrgtSttn() { const { code, drgt, drgtSearch, drgtModalSearch, drgtInit } = useWrStore((state) => state); @@ -292,7 +291,6 @@ export default function DrgtSttn() { bodyClass={"w-[50vw] max-w-none h-[80vh]"} body={} /> - ) diff --git a/apps/wr/app/(with-layout)/matMng/coMng/ldrmntCoSttn/page.tsx b/apps/wr/app/(with-layout)/matMng/coMng/ldrmntCoSttn/page.tsx index 6279d9987..4bbaa3a43 100644 --- a/apps/wr/app/(with-layout)/matMng/coMng/ldrmntCoSttn/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMng/ldrmntCoSttn/page.tsx @@ -5,7 +5,6 @@ import { btnClass } from "@/app/store/common/code"; import { type customLdrmnt } from "@/app/store/matDmd/ldrmntCoSttn"; import { ldrmntHeadListExport } from "@/app/store/matDmd/ldrmntCoSttn/headList"; import { - confirmToast, excelDownload, getCity, tableData @@ -27,9 +26,9 @@ import { } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Button } from "@common/components/ui"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { useAlertStore } from "@/src/shared/lib"; import { useCallback, useEffect, useState } from "react"; -import { Toaster } from "react-hot-toast"; import { useTranslation } from "react-i18next"; export default function LdrmntCoSttn() { @@ -48,6 +47,7 @@ export default function LdrmntCoSttn() { const [isDownloadClicked, setIsDownloadClicked] = useState(false); const { t } = useTranslation('base'); const alert = useAlertStore((state) => state.setMessage); + const { confirm } = useConfirm(); const { regAuthrtYn, mdfcnAuthrtYn } = auth; const excelClick = useCallback(() => { @@ -248,7 +248,7 @@ export default function LdrmntCoSttn() {
- + { cellClick(index ?? undefined) }} onPageChange={setPageNation} resetPageNo={resetPage} + widthFixed={true} />
@@ -277,7 +278,9 @@ export default function LdrmntCoSttn() { setDetailModal({ ...detailModal, isOpen: false }); ldrmntSearch(false, pageNation, '20', computeCityNm(), searchTxt || ""); }; - confirmToast(t('isUpdateMsg'), handleConfirm); + if (await confirm(t("isUpdateMsg"))) { + await handleConfirm(); + } }} />} /> @@ -289,7 +292,6 @@ export default function LdrmntCoSttn() { bodyClass={"w-[40vw] max-w-none"} body={ setIsExcelOpen({ isModal: isOpen })} />} /> -
diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/htdflReg/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/htdflReg/page.tsx index acc44571f..d8f52297c 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/htdflReg/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/htdflReg/page.tsx @@ -18,7 +18,6 @@ import { import ListDiv from "@common/business_components/ui/list_div"; import { Button } from "@common/components"; import { useEffect, useRef, useState } from "react"; -import { Toaster } from "react-hot-toast"; export default function Home() { const { @@ -183,7 +182,6 @@ export default function Home() { }} /> - ); diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/pbnstReg/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/pbnstReg/page.tsx index 87dff04fd..0a243a41f 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/pbnstReg/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/pbnstReg/page.tsx @@ -30,7 +30,7 @@ import { btnClass } from "@/app/store/common/code"; import { Tabs, TabsList, TabsTrigger, TabsContent } from "@common/components"; import { useCallback, useEffect, useRef, useState } from "react"; import ListDiv from "@common/business_components/ui/list_div"; -import { confirmToast, tableData } from "@/components/lib/func/common"; +import { tableData } from "@/components/lib/func/common"; import type { customPbnst, fcBizType, @@ -44,13 +44,13 @@ import { import { PbnstMngForm } from "@/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm"; import { PbnstBuseForm } from "@/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm"; import { PbnstRegModal } from "@/components/ui/modal/fcltReg/pbnstRegModal/pbnstRegModal"; -import { Toaster } from "react-hot-toast"; import { writeRgtrAndMdfr } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg"; import { useFieldArray, useForm, type FieldErrors } from "react-hook-form"; // FieldErrors 타입 추가 import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { createDefaultPbnstItem } from "./utilsZod"; import { useTranslation } from "react-i18next"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { useAlertStore } from "@/src/shared/lib"; export default function PublicReuseFaciltyInsert() { const { @@ -67,6 +67,7 @@ export default function PublicReuseFaciltyInsert() { } = useWrStore((state) => state); const { t } = useTranslation("base"); + const { confirm } = useConfirm(); const alert = useAlertStore((state) => state.setMessage); const { pubFacHeadList, pbnstHasuResCount, pbnstHasuRes, pbnstRes } = pbnst; const { regAuthrtYn, mdfcnAuthrtYn, laeSeCd } = auth; @@ -137,30 +138,29 @@ export default function PublicReuseFaciltyInsert() { }); const handleConfirm = async () => { - Promise.allSettled([ + const [resFclt, resBiz] = await Promise.allSettled([ pbnstRuseFcltUpdate(pbnst as customPbnst[]), pbnstRuseBizUpdate(bizs), - ]).then(([resFclt, resBiz]) => { - const isFcltSuccess = resFclt.status === "fulfilled"; - const isBizSuccess = resBiz.status === "fulfilled"; - if (isFcltSuccess && isBizSuccess) { - alert("하수 재이용 시설 및 사업이 수정되었습니다."); - // 메시지 표시, 페이지 이동 등 - } else { - let message = ""; - // ✅ 각각 어떤 항목이 실패했는지도 로그/알림 처리 - if (!isFcltSuccess) { - message = "하수재이용 시설 "; - } - if (!isBizSuccess) { - message += "하수재이용 시설 사업 "; - } - alert(message + "오류 입니다 "); - pubHasuInit("1", laeSeCd); + ]); + const isFcltSuccess = resFclt.status === "fulfilled"; + const isBizSuccess = resBiz.status === "fulfilled"; + if (isFcltSuccess && isBizSuccess) { + alert("하수 재이용 시설 및 사업이 수정되었습니다."); + } else { + let message = ""; + if (!isFcltSuccess) { + message = "하수재이용 시설 "; } - }); + if (!isBizSuccess) { + message += "하수재이용 시설 사업 "; + } + alert(message + "오류 입니다 "); + pubHasuInit("1", laeSeCd); + } }; - confirmToast(t("isUpdatetMsg"), handleConfirm); + if (await confirm(t("isUpdatetMsg"))) { + await handleConfirm(); + } }; // 폼 유효성 검사 실패 시 호출될 함수 @@ -330,9 +330,7 @@ export default function PublicReuseFaciltyInsert() { onClick={() => { // pbnstMngData([] as customPbnst[]); if (!selectRow) { - alert( - "재시용시설을 등록할 하수리시시설을 테이블에서 선택하고 등록버튼을 눌러주세요" - ); + alert("재시용시설을 등록할 하수처리시설을 목록에서 선택하고\n 등록버튼을 눌러주세요"); return; } else { appendPbnstRuseFclt(); @@ -433,9 +431,7 @@ export default function PublicReuseFaciltyInsert() { onClick={() => { // pbnstMngData([] as customPbnst[]); if (!selectRow) { - alert( - "하수리시시설을 테이블을 선택하고 등록버튼을 눌러주세요" - ); + alert("하수처리시설을 목록에서 선택하고\n 등록버튼을 눌러주세요"); return; } else { appendPbnstRuseFclt(); @@ -454,7 +450,10 @@ export default function PublicReuseFaciltyInsert() { form={form} // form prop 전달 setPbnstInsert={(data) => { if (data) { - pbnstInsert(data); // pbnstInsert 함수 호출 + void (async () => { + const message = await pbnstInsert(data); + alert(message); + })(); setIsRuseReg({ isModal: false }); } }} @@ -470,7 +469,6 @@ export default function PublicReuseFaciltyInsert() { }} />
- ); diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rainReg/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rainReg/page.tsx index 9dd14c844..82344fa1f 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rainReg/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rainReg/page.tsx @@ -20,7 +20,6 @@ import { import ListDiv from "@common/business_components/ui/list_div"; import { Button } from "@common/components"; import { useEffect, useRef, useState } from "react"; -import { Toaster } from "react-hot-toast"; @@ -199,7 +198,6 @@ export default function Home() { }} /> - ); diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rswtReg/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rswtReg/page.tsx index ec2c7eda8..845ebf0e8 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rswtReg/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltReg/rswtReg/page.tsx @@ -20,7 +20,6 @@ import { import ListDiv from "@common/business_components/ui/list_div"; import { Button } from "@common/components"; import { useEffect, useRef, useState } from "react"; -import { Toaster } from "react-hot-toast"; /** @@ -202,7 +201,6 @@ export default function Home() { }} /> - ); diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/htdflSttn/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/htdflSttn/page.tsx index 1eb3fdbdb..2f31e616c 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/htdflSttn/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/htdflSttn/page.tsx @@ -1,4 +1,4 @@ -/** +/** * 온배수시설 현황 */ "use client"; @@ -34,7 +34,7 @@ import ListDiv from "@common/business_components/ui/list_div"; import { HeadMakeColSpan } from "@common/business_components/ui/table/HeadMakeColSpan"; import { Button, Label } from "@common/components/ui"; import { useCallback, useEffect, useRef, useState } from "react"; -import toast, { Toaster } from "react-hot-toast"; +import { useAlertStore } from "@/src/shared/lib"; import { useTranslation } from "react-i18next"; export default function HtdflSttn() { @@ -58,6 +58,7 @@ export default function HtdflSttn() { // chBuilding: chgBuilding[]; // }>({ isOpen: false, chBuilding: [] }); const [fcltNm, setFcltNm] = useState(""); + const alert = useAlertStore((state) => state.setMessage); console.log("laeSeCd : ", laeSeCd); useEffect(() => { @@ -128,7 +129,7 @@ export default function HtdflSttn() { sheetArray ); } else { - toast.error(t('excelDownErrMsg')); + alert(t('excelDownErrMsg')); } isDownloadTriggered.current = false; }, [htdflSttn.excelList, code]); @@ -241,6 +242,7 @@ export default function HtdflSttn() { }} onPageChange={setPageNation} resetPageNo={resetPage} + widthFixed={true} > @@ -275,7 +277,6 @@ export default function HtdflSttn() { body={} /> - ); } diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/pbnstSttn/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/pbnstSttn/page.tsx index 185af81b9..3e085ea89 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/pbnstSttn/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/pbnstSttn/page.tsx @@ -1,4 +1,4 @@ -/** +/** * 하수재이용 시설 현황 * 재이용시설 현황 - 하수재이용시설 현황 * - layout.tsx에 의해 공통 레이아웃이 적용됨 @@ -30,7 +30,7 @@ import ListDiv from "@common/business_components/ui/list_div"; import { HeadMakeColSpan } from "@common/business_components/ui/table/HeadMakeColSpan"; import { Button, Label } from "@common/components/ui"; import { useCallback, useEffect, useRef, useState } from "react"; -import toast, { Toaster } from "react-hot-toast"; +import { useAlertStore } from "@/src/shared/lib"; import { useTranslation } from "react-i18next"; @@ -61,6 +61,7 @@ export default function PbnstSttn() { const isDownloadTriggered = useRef(false); const [pbnRuseNm, setPbnRuseNm] = useState(""); const { t } = useTranslation("base"); + const alert = useAlertStore((state) => state.setMessage); const excelClick = useCallback(() => { isDownloadTriggered.current = true; pbnstSttnSearch( @@ -119,7 +120,7 @@ export default function PbnstSttn() { sheetArray ); } else { - toast.error(t("excelDownErrMsg")); + alert(t("excelDownErrMsg")); } isDownloadTriggered.current = false; }, [pbnstSttn.excelList]); @@ -226,6 +227,7 @@ export default function PbnstSttn() { setIsReset(false); }} resetPageNo={isReset} + widthFixed={true} > @@ -269,7 +271,6 @@ export default function PbnstSttn() { }} /> - ); } diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rainSttn/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rainSttn/page.tsx index 781b418fa..9de317a08 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rainSttn/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rainSttn/page.tsx @@ -1,4 +1,4 @@ -/** +/** * 빗물이용시설 현황 */ "use client"; @@ -32,7 +32,7 @@ import ListDiv from "@common/business_components/ui/list_div"; import { HeadMakeColSpan } from "@common/business_components/ui/table/HeadMakeColSpan"; import { Button, Label } from "@common/components/ui"; import { useCallback, useEffect, useRef, useState } from "react"; -import toast, { Toaster } from "react-hot-toast"; +import { useAlertStore } from "@/src/shared/lib"; import { useTranslation } from "react-i18next"; export default function RainSttn() { @@ -58,6 +58,7 @@ export default function RainSttn() { const [fcltNm, setFcltNm] = useState(""); const { t } = useTranslation("base"); + const alert = useAlertStore((state) => state.setMessage); const cellClick = (index: number | undefined) => { if (index !== undefined && bdstTable !== undefined) { @@ -173,7 +174,7 @@ export default function RainSttn() { sheetArray ); } else { - toast.error(t("excelDownErrMsg")); + alert(t("excelDownErrMsg")); } isDownloadTriggered.current = false; }, [rainSttn.excelList]); @@ -286,6 +287,7 @@ export default function RainSttn() { }} onPageChange={setPageNation} resetPageNo={resetPage} + widthFixed={true} > @@ -318,7 +320,6 @@ export default function RainSttn() { body={} /> - ); } diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rswtSttn/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rswtSttn/page.tsx index 8ddd0cc7c..c95c7aafe 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rswtSttn/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/fcltSttn/rswtSttn/page.tsx @@ -1,4 +1,4 @@ -/** +/** * 중수도시설 현황 */ "use client"; @@ -32,7 +32,7 @@ import ListDiv from "@common/business_components/ui/list_div"; import { HeadMakeColSpan } from "@common/business_components/ui/table/HeadMakeColSpan"; import { Button, Label } from "@common/components/ui"; import { useCallback, useEffect, useRef, useState } from "react"; -import toast, { Toaster } from "react-hot-toast"; +import { useAlertStore } from "@/src/shared/lib"; import { useTranslation } from "react-i18next"; export default function RswtSttn() { @@ -52,6 +52,7 @@ export default function RswtSttn() { const [detailModal, setDetailModal] = useState<{ isOpen: boolean, data: customRswtBdst | undefined }>({ data: undefined, isOpen: false }) const [fcltNm, setFcltNm] = useState(""); const { t } = useTranslation('base'); + const alert = useAlertStore((state) => state.setMessage); const cellClick = (index: number | undefined) => { if ( index !== undefined && bdstTable !== undefined) { @@ -143,7 +144,7 @@ export default function RswtSttn() { sheetArray ); } else { - toast.error(t('excelDownErrMsg')); + alert(t('excelDownErrMsg')); } isDownloadTriggered.current = false; }, [rswtSttn.excelList]); @@ -243,6 +244,7 @@ export default function RswtSttn() { cellClick={(index: number | undefined) => { cellClick(index ?? undefined) }} onPageChange={setPageNation} resetPageNo={resetPage} + widthFixed={true} > @@ -278,7 +280,6 @@ export default function RswtSttn() { /> - ); } diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/TableHead.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/TableHead.tsx index 28ba6c512..72069f4d8 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/TableHead.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/TableHead.tsx @@ -17,6 +17,7 @@ export const headMakeprfmnc = ( className={`border border-gray-600 px-2 py-1 `} rowSpan={2} key={head.id} + style={{ width: head.widthPercent ? `${head.widthPercent}%` : undefined }} > {head.title} @@ -28,6 +29,7 @@ export const headMakeprfmnc = ( colSpan={ makeHeadNm?.find((ch) => ch.headNm === head.upName)?.length } + style={{ width: head.widthPercent ? `${head.widthPercent}%` : undefined }} > {makeHeadNm?.find((ch) => ch.headNm === head.upName)?.text} @@ -43,6 +45,7 @@ export const headMakeprfmnc = ( {head.title} @@ -51,4 +54,4 @@ export const headMakeprfmnc = ( ); - }; \ No newline at end of file + }; diff --git a/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx b/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx index 28f1e01b2..363f07e82 100644 --- a/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx +++ b/apps/wr/app/(with-layout)/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx @@ -1,4 +1,4 @@ -"use client"; +"use client"; import { useWrStore } from "@/app/store"; import { btnClass } from "@/app/store/common/code"; @@ -11,11 +11,11 @@ import { type rswtrChkDetailsZodType, } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn"; import { - confirmToast, excelArrayDownload, excelDownload, yearOptions, } from "@/components/lib/func/common"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; import ChkgdExcel from "@/components/ui/modal/chkgd/chkgdExcel/chkgdExcel"; import ChkgdModal from "@/components/ui/modal/chkgd/chkgdModal/chkgdModal"; import RainChkgdTable from "@/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable"; @@ -38,7 +38,7 @@ import { TooltipTrigger, } from "@common/components/ui/tooltip"; import { useCallback, useEffect, useRef, useState } from "react"; -import toast, { Toaster } from "react-hot-toast"; +import { useAlertStore } from "@/src/shared/lib"; import { useTranslation } from "react-i18next"; export default function Page() { @@ -66,6 +66,7 @@ export default function Page() { return state; }); const { regAuthrtYn, mdfcnAuthrtYn, delAuthrtYn,laeSeCd } = auth; + const { confirm } = useConfirm(); const [isRegExcel, setIsRegExcel] = useState(false); const [updateRainDetail, setUpdateRainDetail] = useState([]); const [updateRswtDetail, setUpdateRSwtDetail] = useState([]); @@ -236,33 +237,42 @@ export default function Page() { }, [rainChkgdn.isSttn, rswtChkgdn.isSttn]); const { t } = useTranslation('base'); - const clickDelete = (data: number[], selFcltDiv: string) => { + const alert = useAlertStore((state) => state.setMessage); + const clickDelete = async (data: number[], selFcltDiv: string) => { if (data.length > 0) { if (selFcltDiv === "RNB") { const handleConfirm = async () => { - rainChkDelete(data, searchYear); + const message = await rainChkDelete(data, searchYear); + alert(message); }; - confirmToast(t('isDeleteMsg'), handleConfirm); + if (await confirm(t("isDeleteMsg"))) { + await handleConfirm(); + } } else { const handleConfirm = async () => { - rswtChkDelete(data, searchYear); + const message = await rswtChkDelete(data, searchYear); + alert(message); }; - confirmToast(t('isDeleteMsg'), handleConfirm); + if (await confirm(t("isDeleteMsg"))) { + await handleConfirm(); + } } } }; - const chkUpdateTable = (selFcltDiv: string) => { + const chkUpdateTable = async (selFcltDiv: string) => { if (selFcltDiv === "RNB") { if (updateRainDetail && updateRainDetail.length > 0) { - rainChkDetilUpdate(updateRainDetail, searchYear); + const message = await rainChkDetilUpdate(updateRainDetail, searchYear); + alert(message); } else { - toast.error("수정을 원하는 행을 선택하고 저장버튼을 눌러주세요 "); + alert("수정을 원하는 행을 선택하고 저장버튼을 눌러주세요 "); } } else { if (updateRswtDetail && updateRswtDetail.length > 0) { - rswtChkDetilsUpdate(updateRswtDetail, searchYear); + const message = await rswtChkDetilsUpdate(updateRswtDetail, searchYear); + alert(message); } else { - toast.error("수정을 원하는 행을 선택하고 저장버튼을 눌러주세요 "); + alert("수정을 원하는 행을 선택하고 저장버튼을 눌러주세요 "); } } }; @@ -330,7 +340,7 @@ export default function Page() { - - - - )); + if (await confirm("검토완료 변경시 공사비는 변경할수 없습니다.\n진행하시겠습니까?")) { + const message = await coMatRvwUpdate( pk, form.getValues("dmdInfoId"), data ); + alert(message); + } } else { - const message = await coMatRvwUpdate( - pk, - form.getValues("dmdInfoId"), - data - ); + const message = await coMatRvwUpdate( pk, form.getValues("dmdInfoId"), data ); alert(message); } }else{ - alert('후보지를 먼저 선택해주세요') + alert('후보지를 먼저 선택해주세요'); } } } else if (type === "hist") { @@ -277,7 +251,8 @@ export default function ConCostForm({ delete value.ruseUtztnFcltNm; console.log("onSubmit data ", pk); - ruseRvwCalUpdate(value); + const message = await ruseRvwCalUpdate(value); + alert(message); } }; diff --git a/apps/wr/components/ui/form/fcltReg/htdflReg/htdflRegForm.tsx b/apps/wr/components/ui/form/fcltReg/htdflReg/htdflRegForm.tsx index 55e01174c..0a147ac4b 100644 --- a/apps/wr/components/ui/form/fcltReg/htdflReg/htdflRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/htdflReg/htdflRegForm.tsx @@ -9,11 +9,12 @@ import { import { selectClass } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; import { formH1Class } from "@/components/lib/class/comClass"; import { - confirmToast, formatCommaNumber, handleCommaNumberChange, handleOnlyNumberChange, } from "@/components/lib/func/common"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; +import { useAlertStore } from "@/src/shared/lib"; import { Form, FormField, @@ -24,7 +25,6 @@ import { Button, Input, Label, ScrollArea } from "@common/components/ui"; import { zodResolver } from "@hookform/resolvers/zod"; import { useCallback, useEffect, useState } from "react"; import { useForm } from "react-hook-form"; -import toast from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { z } from "zod"; import BdstReg from "../bdstReg/bdstReg"; @@ -54,6 +54,8 @@ export default function HtdflRegForm({ defaultValues: defaultValues, }); const { laeSeCd } = auth; + const { confirm } = useConfirm(); + const alert = useAlertStore((state) => state.setMessage); const [regCtpvCd, regSggcd] = form.watch(["ctpvCd", "sggCd"]); @@ -65,33 +67,42 @@ export default function HtdflRegForm({ const myUUID = await getMyUUID(); if (!myUUID) { - toast.error(t('noUserInfoMsg')); + alert(t('noUserInfoMsg')); return; } if (isModal) { const data = regCtpvCd ? regCtpvCd : regSggcd ? regSggcd : "noCd"; if (data === "noCd") { - toast.error("시도/시군구 코드를 선택해야합니다."); + alert("시도/시군구 코드를 선택해야합니다."); return; } const handleConfirm = async () => { - htdflBdstReg(values, data,myUUID); + const message = await htdflBdstReg(values, data,myUUID); + alert(message); if (setIsModal) setIsModal(false); }; - confirmToast(t("isInsertMsg"), handleConfirm); + if (await confirm(t("isInsertMsg"))) { + await handleConfirm(); + } } else { const handleConfirm = async () => { - await htdflBdstUpdate(values, laeSeCd,myUUID); + const message = await htdflBdstUpdate(values, laeSeCd,myUUID); + alert(message); console.log(' htdflBdstUpdate ') resetHtdflTableIndex(0); }; - confirmToast(t("isUpdateMsg"), handleConfirm); + if (await confirm(t("isUpdateMsg"))) { + await handleConfirm(); + } } }; const onDelete = async () => { const code = htdflForm.ctpvCd ? htdflForm.ctpvCd : htdflForm.sggCd ? htdflForm.sggCd : "noCd"; - confirmToast(`정말 ${htdflForm.bdstNm} 시설을 삭제하시겠습니까?`, () => htdflBdstDelete(htdflForm, code)); + if (await confirm(`정말 ${htdflForm.bdstNm} 시설을 삭제하시겠습니까?`)) { + const message = await htdflBdstDelete(htdflForm, code); + alert(message); + } } const cleanHtdflData = (raw: any): z.infer => { diff --git a/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx b/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx index d2281cdd6..57f737a9d 100644 --- a/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx @@ -28,7 +28,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { useFieldArray, type UseFormReturn } from "react-hook-form"; import MngRegFormDetail from "../mngReg/mngRegFormDetail/mngRegFormDetail"; import { - //confirmToast, formatCommaNumber, handleCommaNumberChange, safeDate, @@ -39,7 +38,6 @@ import type { DemandCompType } from "@common/business_components/ui/sdmInsertFor import RuseMngTableForm from "@/components/ui/table/pbnstReg/ruseMngTableForm/ruseMngTableForm"; import type { SelectDataType } from "@common/business_components"; import { BuseWaterQulity } from "./buseWaterQulity/buseWaterQulity"; -// import toast from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { useAlertStore } from "@/src/shared/lib"; //import { useTranslation } from "react-i18next"; diff --git a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx index ab941f3b0..27033d0e2 100644 --- a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx @@ -8,10 +8,11 @@ import { } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; import { formH1Class, formH2Class } from "@/components/lib/class/comClass"; import { - confirmToast, formatCommaNumber, handleMinusNumberChange, } from "@/components/lib/func/common"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; +import { useAlertStore } from "@/src/shared/lib"; import { DatePicker, FormUi } from "@common/business_components"; import { Form, FormField, SelectBox } from "@common/business_components/ui"; import { Button, Input } from "@common/components/ui"; @@ -20,7 +21,6 @@ import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import BdstReg from "../bdstReg/bdstReg"; -import toast from "react-hot-toast"; import BdstAdd from "../bdstReg/bdstAdd"; import { useTranslation } from "react-i18next"; import { numSize, txtSize } from "@/app/store/common/code/basicCode"; @@ -48,6 +48,8 @@ export default function RainRegForm({ // defaultValues: defaultValues, }); const { t } = useTranslation('base'); + const { confirm } = useConfirm(); + const alert = useAlertStore((state) => state.setMessage); const [grntchBdstCertYn, instlCstSprtYn, filtrTrtmfctYn] = form.watch([ "reuseBuilding.0.grntchBdstCertYn", @@ -134,7 +136,7 @@ export default function RainRegForm({ const myUUID = await getMyUUID(); if (!myUUID) { - toast.error(t('noUserInfoMsg')); + alert(t('noUserInfoMsg')); return; } @@ -142,26 +144,35 @@ export default function RainRegForm({ const data = regCtpvCd ? regCtpvCd : regSggcd ? regSggcd : "noCd"; if (data === "noCd") { - toast.error("시도/시군구 코드를 선택해야합니다."); + alert("시도/시군구 코드를 선택해야합니다."); return; } const handleConfirm = async () => { - rainBdstReg(values, data,myUUID); + const message = await rainBdstReg(values, data,myUUID); + alert(message); if (setIsModal) setIsModal(false); }; - confirmToast(t('isInsertMsg'), handleConfirm); + if (await confirm(t("isInsertMsg"))) { + await handleConfirm(); + } } else { const handleConfirm = async () => { - await rainBdstUpdate(values, laeSeCd,myUUID); + const message = await rainBdstUpdate(values, laeSeCd,myUUID); + alert(message); resetRainTableIndex(0) }; - confirmToast(t('isUpdateMsg'), handleConfirm); + if (await confirm(t("isUpdateMsg"))) { + await handleConfirm(); + } } }; const onDelete = async () => { const code = rainForm.ctpvCd ? rainForm.ctpvCd : rainForm.sggCd ? rainForm.sggCd : "noCd"; - confirmToast(`정말 ${rainForm.bdstNm} 시설을 삭제하시겠습니까?`, () => rainBdstDelete(rainForm, code)); + if (await confirm(`정말 ${rainForm.bdstNm} 시설을 삭제하시겠습니까?`)) { + const message = await rainBdstDelete(rainForm, code); + alert(message); + } } useEffect(() => { diff --git a/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx b/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx index 6363474d4..61014d796 100644 --- a/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx @@ -8,10 +8,10 @@ import { } from "@/app/store/ruseFcltMng/fcltReg/rswtReg"; import { formH1Class, formH2Class } from "@/components/lib/class/comClass"; import { - confirmToast, formatCommaNumber, handleMinusNumberChange, } from "@/components/lib/func/common"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { DatePicker, Form, @@ -28,7 +28,7 @@ import BdstAdd from "../bdstReg/bdstAdd"; import BdstReg from "../bdstReg/bdstReg"; import { useTranslation } from "react-i18next"; import { numSize, txtSize } from "@/app/store/common/code/basicCode"; -import toast from "react-hot-toast"; +import { useAlertStore } from "@/src/shared/lib"; export default function RswtrRegForm({ rswtForm, @@ -52,6 +52,8 @@ export default function RswtrRegForm({ }, [isMap]); // const defaultValues: z.infer = rswtZod.parse({}); const { t } = useTranslation("base"); + const { confirm } = useConfirm(); + const alert = useAlertStore((state) => state.setMessage); const form = useForm>({ resolver: zodResolver(rswtZod), @@ -72,32 +74,41 @@ export default function RswtrRegForm({ const myUUID = await getMyUUID(); if (!myUUID) { - toast.error(t('noUserInfoMsg')); + alert(t('noUserInfoMsg')); return; } if (isModal) { const data = regCtpvCd ? regCtpvCd : regSggcd ? regSggcd : "noCd"; if (data === "noCd") { - toast.error("시도/시군구 코드를 선택해야합니다."); + alert("시도/시군구 코드를 선택해야합니다."); return; } const handleConfirm = async () => { - rswtBdstReg(values, data,myUUID); + const message = await rswtBdstReg(values, data,myUUID); + alert(message); if (setIsModal) setIsModal(false); }; - confirmToast(t("isInsertMsg"), handleConfirm); + if (await confirm(t("isInsertMsg"))) { + await handleConfirm(); + } } else { const handleConfirm = async () => { - rswtBdstUpdate(values, laeSeCd,myUUID); + const message = await rswtBdstUpdate(values, laeSeCd,myUUID); + alert(message); resetRswtTableIndex(0) }; - confirmToast(t("isUpdateMsg"), handleConfirm); + if (await confirm(t("isUpdateMsg"))) { + await handleConfirm(); + } } }; const onDelete = async () => { const code = rswtForm.ctpvCd ? rswtForm.ctpvCd : rswtForm.sggCd ? rswtForm.sggCd : "noCd"; - confirmToast(`정말 ${rswtForm.bdstNm} 시설을 삭제하시겠습니까?`, () => rswtBdstDelete(rswtForm, code)); + if (await confirm(`정말 ${rswtForm.bdstNm} 시설을 삭제하시겠습니까?`)) { + const message = await rswtBdstDelete(rswtForm, code); + alert(message); + } } const cleanRswtData = (raw: any): z.infer => { diff --git a/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx b/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx index ea0060a28..637d6af01 100644 --- a/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx +++ b/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx @@ -9,6 +9,7 @@ import { rswtExcelDataCheck, } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/excel"; import { showConfirmToast } from "@/components/lib/func/common"; +import { useAlertStore } from "@/src/shared/lib"; import { filePicked, filePickedArray, @@ -23,7 +24,6 @@ import { Button, Input } from "@common/components/ui"; import { zodResolver } from "@hookform/resolvers/zod"; import { useEffect, useRef, useState } from "react"; import { useForm } from "react-hook-form"; -import toast from "react-hot-toast"; import type { z } from "zod"; export default function ChkgdExcel({ @@ -46,6 +46,7 @@ export default function ChkgdExcel({ } = useWrStore((state) => { return state; }); + const alert = useAlertStore((state) => state.setMessage); const [excelData, setExcelData] = useState< rswtChkZodType[] | rainChkZodType[] >(); @@ -89,7 +90,7 @@ export default function ChkgdExcel({ useEffect(() => { if (file) { if (form.getValues("chckYr").length < 1) { - toast.error("파일업로드 이전에 등록년도를 작성해주세요 "); + alert("파일업로드 이전에 등록년도를 작성해주세요 "); setFile(null); return; } @@ -102,6 +103,9 @@ export default function ChkgdExcel({ res, form.getValues("chckYr") ); + if (excelData.message) { + alert(excelData.message); + } if (excelData.issues && excelData.issues.length > 0) { excelData.issues.some((err, index) => { showConfirmToast(err); @@ -190,33 +194,35 @@ export default function ChkgdExcel({ // ); // } - const onSubmit = (values: z.infer) => { + const onSubmit = async (values: z.infer) => { if (values.chckYr === "") { - toast.error("등록년도를 작성해주세요"); + alert("등록년도를 작성해주세요"); return; } if (type === "RNB") { if (excelData === undefined || excelData?.length === 0) { - toast.error("빈 파일 및 파일 오류 입니다."); + alert("빈 파일 및 파일 오류 입니다."); return; } else { - rainChkExcelDataUPload( + const message = await rainChkExcelDataUPload( excelData as rainChkZodType[], form.getValues("chckYr"), laeSeCd ); + alert(message); setIsRegExcel(false); setYearChange(form.getValues("chckYr")); } } else if (type === "RST") { if (excelRswtData === undefined || excelRswtData?.length === 0) { - toast.error("빈 파일 및 파일 오류 입니다."); + alert("빈 파일 및 파일 오류 입니다."); return; } else { - rswtChkExceDataUpload(excelRswtData as rswtChkZodType[], laeSeCd); + const message = await rswtChkExceDataUpload(excelRswtData as rswtChkZodType[], laeSeCd); + alert(message); setIsRegExcel(false); setYearChange(form.getValues("chckYr")); } diff --git a/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx b/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx index 4545100ab..95dfb3e94 100644 --- a/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx +++ b/apps/wr/components/ui/modal/chkgd/chkgdModal/chkgdModal.tsx @@ -4,6 +4,7 @@ import type { splRuseWaterType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgd import type { rswtrPolutionsZode } from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList"; import { codeToText } from "@/components/lib/func/common"; import { GuideDetailsTable } from "@/components/ui/table/chkgdTable/guideDetailTable/guideDetailTable"; +import { useAlertStore } from "@/src/shared/lib"; import { ScrollArea, Title } from "@common/business_components/ui"; import { Button } from "@common/components/ui"; import React, { useEffect, useState } from "react"; @@ -28,6 +29,7 @@ export default function ChkgdModal({ rainChkGuidUpdate, rwstPolAndGuideUpdate, } = useWrStore((state) => state); + const alert = useAlertStore((state) => state.setMessage); const [guidData, setGuidData] = useState(); const [headList, setHeadList] = useState<{ splHeadList: TableUpperProps[]; @@ -206,7 +208,7 @@ export default function ChkgdModal({ } }; - const allDataUpdate = () => { + const allDataUpdate = async () => { const realGuideDetail = obj.guideDetails; if (updateData === undefined || updateData.length === 0) return; @@ -233,14 +235,16 @@ export default function ChkgdModal({ }); obj.guideDetails = realGuideDetail; if (type === "RNB") { - rainChkGuidUpdate(obj); + const message = await rainChkGuidUpdate(obj); + alert(message); setIsModal(false); } else { const polution = Object.values(upPolutionData) .flat() .filter((item) => item.utztnUsgCd !== "평균"); obj.rswtrPollutions = polution; - rwstPolAndGuideUpdate([obj]); + const message = await rwstPolAndGuideUpdate([obj]); + alert(message); setIsModal(false); } }; diff --git a/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx b/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx index bbcc9497b..8f0445cd6 100644 --- a/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx +++ b/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx @@ -12,13 +12,14 @@ import { useForm } from "react-hook-form"; import type { z } from "zod"; export default function RuseCaseMngExcel({setIsExcelOpen}:{setIsExcelOpen: (isOpen:boolean)=>void}) { - const { insertRuseCaseMng } = useWrStore((state) => state); + const { insertRuseCaseMng, code } = useWrStore((state) => state); const alert = useAlertStore((state) => state.setMessage); const form = useForm>({ resolver: zodResolver(coRegExcel), }); const [file, setFiles] = useState(); + const sewageOutUseCodeList = code.sewageOutFclttUse ?? []; const onSubmit = () => { if (file) { @@ -125,7 +126,25 @@ export default function RuseCaseMngExcel({setIsExcelOpen}:{setIsExcelOpen: (isOp if(parsingExcel.ok&&parsingExcel.value){ - newArray.push(parsingExcel.value); + const parsedValue = { ...parsingExcel.value }; + const usageText = parsedValue.grnteWqUsg?.toString().trim(); + + if (usageText) { + const usageCode = sewageOutUseCodeList.find( + (codeItem) => codeItem.text.trim() === usageText + )?.val; + + if (!usageCode) { + isError.push([ + `${parsedValue.ruseBizNm || "행"} => [보증수질_용도별] '${usageText}' 에 해당하는 WR018 코드가 없습니다.`, + ]); + return; + } + + parsedValue.grnteWqUsg = usageCode; + } + + newArray.push(parsedValue); }else if(parsingExcel.errors){ isError.push(parsingExcel.errors); } diff --git a/apps/wr/components/ui/modal/fcltReg/pbnstRegModal/pbnstRegModal.tsx b/apps/wr/components/ui/modal/fcltReg/pbnstRegModal/pbnstRegModal.tsx index d8a9a733e..fcb6fe392 100644 --- a/apps/wr/components/ui/modal/fcltReg/pbnstRegModal/pbnstRegModal.tsx +++ b/apps/wr/components/ui/modal/fcltReg/pbnstRegModal/pbnstRegModal.tsx @@ -18,7 +18,7 @@ import { PbnstBuseForm } from "@/components/ui/form/fcltReg/pbnstReg/buseReg/bug import { type FieldErrors, type UseFormReturn } from "react-hook-form"; import { writeRgtrAndMdfr } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg"; import type { z } from "zod"; -import { confirmToast } from "@/components/lib/func/common"; +import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { useTranslation } from "react-i18next"; export function PbnstRegModal({ @@ -35,6 +35,7 @@ export function PbnstRegModal({ newIndexMng:number }) { const { t } = useTranslation("base"); + const { confirm } = useConfirm(); //TODO: 유즈 스테이트에 set만해도 되나? const [, setCurrentTab] = useState("mng"); @@ -50,7 +51,9 @@ export function PbnstRegModal({ setPbnstInsert(data[0]); } }; - confirmToast(t("isInsertMsg"), handleConfirm); + if (await confirm(t("isInsertMsg"))) { + handleConfirm(); + } }; const handleTabChange = (value: string) => { diff --git a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx b/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx index 9fb84e205..a8664063e 100644 --- a/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx +++ b/apps/wr/components/ui/table/chkgdTable/rainChkgd/rainChkgdTable.tsx @@ -190,7 +190,21 @@ export default function RainChkgdTable({ return ( <> - +
+ + {headList.headList + .filter((head) => head.visible !== false) + .map((head) => ( + + ))} + {headMakeprfmnc( headList?.headList, diff --git a/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx b/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx index 080084f93..5694c8085 100644 --- a/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx +++ b/apps/wr/components/ui/table/chkgdTable/rswtChkgd/rswtChkgdTable.tsx @@ -145,7 +145,21 @@ export default function RswtChkgdTable({ return ( <> -
+
+ + {headList.headList + .filter((head) => head.visible !== false) + .map((head) => ( + + ))} + {headMakeprfmnc(headList?.headList, headList?.upHeadList)} diff --git a/apps/wr/public/sample_ruseCaseMng.xlsx b/apps/wr/public/sample_ruseCaseMng.xlsx index 3676b4f71..6c6abd4c0 100644 Binary files a/apps/wr/public/sample_ruseCaseMng.xlsx and b/apps/wr/public/sample_ruseCaseMng.xlsx differ diff --git a/apps/wr/src/app/providers/app-provider.tsx b/apps/wr/src/app/providers/app-provider.tsx index 0497e1f52..88a10e46e 100644 --- a/apps/wr/src/app/providers/app-provider.tsx +++ b/apps/wr/src/app/providers/app-provider.tsx @@ -14,6 +14,7 @@ import { ConfirmDialog } from "../../shared/ui/confirm-dialog"; // import "./globals.css"; import i18next from "i18next"; import { I18nextProvider } from "react-i18next"; +import { Toaster } from "react-hot-toast"; import koBase from "@/public/locales/ko/message.json"; import { StoreProvider as WrStoreProvider } from "@/app/store"; //import { LoginApi } from "@/src/entities/auth"; @@ -54,6 +55,7 @@ const AppProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => { + diff --git a/apps/wr/src/entities/auth/api/login-service.ts b/apps/wr/src/entities/auth/api/login-service.ts index 77d114004..9f2671c76 100644 --- a/apps/wr/src/entities/auth/api/login-service.ts +++ b/apps/wr/src/entities/auth/api/login-service.ts @@ -17,6 +17,7 @@ export class LoginApiService implements LoginService { public async login(payload: ILogin): Promise { try { + tokenManager.clearAuthToken(); const response = await fetch( PROXY_HOST+ ENDPOINT.USER_SERVICE.LOGIN, { method: "POST", body: JSON.stringify({