빗물/중수도/온배수 등록 시, 지도점검 등록, 삭제 시, 실적 등록, 삭제 시 confirm 창 추가

This commit is contained in:
jyha00
2025-07-14 10:19:00 +09:00
parent fc424a2f46
commit 8dc47fc805
6 changed files with 76 additions and 38 deletions
@@ -11,6 +11,7 @@ import {
type rswtrChkDetailsZodType,
} from "@/app/store/prfmncReg/chkgdnReg/rswrtChkgdn";
import {
confirmToast,
excelArrayDownload,
excelDownload,
yearOptions,
@@ -39,6 +40,7 @@ import {
} from "@common/components/ui/tooltip";
import { useCallback, useEffect, useState } from "react";
import toast, { Toaster } from "react-hot-toast";
import { useTranslation } from "react-i18next";
export default function Page() {
const {
@@ -201,12 +203,19 @@ export default function Page() {
}
}, [rainChkgdn.isSttn, rswtChkgdn.isSttn]);
const { t } = useTranslation('base');
const clickDelete = (data: number[], selFcltDiv: string) => {
if (data.length > 0) {
if (selFcltDiv === "RNB") {
rainChkDelete(data, searchYear);
const handleConfirm = async () => {
rainChkDelete(data, searchYear);
};
confirmToast(t('isDeleteMsg'), handleConfirm);
} else {
rswtChkDelete(data, searchYear);
const handleConfirm = async () => {
rswtChkDelete(data, searchYear);
};
confirmToast(t('isDeleteMsg'), handleConfirm);
}
}
};
@@ -1,7 +1,7 @@
"use client";
import { useWrStore } from "@/app/store";
import type { pubHasuType } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
import { excelDownload, yearOptions } from "@/components/lib/func/commom";
import { confirmToast, excelDownload, yearOptions } from "@/components/lib/func/commom";
import PbnPrfExcelModal from "@/components/ui/modal/chkgd/pbnPrfExcelModal/pbnPrfExcelModal";
import {
ContentsDiv,
@@ -37,12 +37,13 @@ import {
type PrfType,
} from "@/app/store/prfmncReg/pbnstPrfmncReg/type";
import { excelToPbnPrfData } from "@/app/store/prfmncReg/pbnstPrfmncReg/excel";
import { useTranslation } from "react-i18next";
export default function prfmncPrfmncReg() {
const { code, prfmnc, prfmncHasuInit, prfmnRegData,prfmncHasuNmSearch } = useWrStore(
const { code, prfmnc, prfmncHasuInit, prfmnRegData, prfmncHasuNmSearch } = useWrStore(
(state) => state
);
const { pbnstPrfmncHeadList, monthHeadList, prfmncRes,prfmncResCount } = prfmnc;
const { pbnstPrfmncHeadList, monthHeadList, prfmncRes, prfmncResCount } = prfmnc;
const [bdstTable, setbdstTable] = useState<FcPrfType[]>();
const [searchTxt, setSearchTxt] = useState<string>();
const [isExcelOpen, setIsExcelOPen] = useState<{
@@ -65,20 +66,40 @@ export default function prfmncPrfmncReg() {
"A1:O1"
);
}, [prfmnc.excelList]);
/*
const onSave = useCallback(
async() => {
if (pbnstRuseFcltPk) {
await prfmnRegData(pageNation,'41',
excelToPbnPrfData(
inputData as unknown as JSON[],
searchYear,
pbnstRuseFcltPk
) as unknown as PrfType
);
// cellClick(cellNum)
}
}, [inputData, searchYear, pbnstRuseFcltPk, pageNation,cellNum]);*/
const onSave = useCallback(
async() => {
if (pbnstRuseFcltPk) {
await prfmnRegData(pageNation,'41',
const { t } = useTranslation('base');
const onSave = useCallback(() => {
const handleConfirm = async () => {
if (!pbnstRuseFcltPk) return;
prfmnRegData(
pageNation,
'41',
excelToPbnPrfData(
inputData as unknown as JSON[],
searchYear,
pbnstRuseFcltPk
) as unknown as PrfType
) as unknown as PrfType,
searchYear
);
// cellClick(cellNum)
}
}, [inputData, searchYear, pbnstRuseFcltPk, pageNation,cellNum]);
};
confirmToast(t('isUpdateMsg'), handleConfirm);
}, [inputData, searchYear, pbnstRuseFcltPk, pageNation, cellNum]);
const cellClick = useCallback(
(index: number | undefined) => {
@@ -165,13 +186,13 @@ export default function prfmncPrfmncReg() {
useEffect(() => {
if (!prfmnc.isInit) {
const year = new Date().getFullYear()
prfmncHasuInit(1, "41",String(year));
prfmncHasuInit(1, "41", String(year));
}
}, [prfmnc.isInit, prfmncHasuInit]);
useEffect(() => {
if(prfmncRes&&prfmncRes.length>0){
if (prfmncRes && prfmncRes.length > 0) {
setbdstTable(prfmncRes);
}
@@ -224,14 +245,14 @@ export default function prfmncPrfmncReg() {
<div className="flex flex-row space-x-2">
<Button size={"sm"} onClick={(e) => {
if(searchTxt&&searchTxt?.length>0){
prfmncHasuNmSearch(1,'41',searchYear,searchTxt)
if (searchTxt && searchTxt?.length > 0) {
prfmncHasuNmSearch(1, '41', searchYear, searchTxt)
setPageNation(1)
}else{
prfmncHasuInit(1,'41',searchYear)
} else {
prfmncHasuInit(1, '41', searchYear)
setPageNation(1)
}
}}>
조회
</Button>
@@ -282,8 +303,8 @@ export default function prfmncPrfmncReg() {
setCellNum(index ?? 0);
}}
onPageChange={
(page) =>{
prfmncHasuInit(page, "41",searchYear);
(page) => {
prfmncHasuInit(page, "41", searchYear);
setPageNation(page)
}}
children={undefined}
@@ -303,7 +324,7 @@ export default function prfmncPrfmncReg() {
<TableHeader className="font-bold">
{headMakeprfmnc(monthHeadList, [])}
</TableHeader>
<TableBody key={prfmnc.pageKey+'pageKey'}>
<TableBody key={prfmnc.pageKey + 'pageKey'}>
{InputTableBody(inputData ?? [], monthHeadList, setInputData)}
</TableBody>
</Table>
@@ -319,14 +340,14 @@ export default function prfmncPrfmncReg() {
setIsExcelOPen={(open) => {
setIsExcelOPen({ ...isExcelOpen, isModal: open })
}}
setModalExcelData={ async(excelData ) =>{
await prfmnRegData(pageNation,'41',
setModalExcelData={async (excelData) => {
await prfmnRegData(pageNation, '41',
excelData,
searchYear
);
// 데이터 저장 후 UI 업데이트는 useEffect가 감지하여 처리하므로 여기서는 호출하지 않습니다.
}
}
}
></PbnPrfExcelModal>
}
open={isExcelOpen.isModal}
@@ -19,11 +19,13 @@ import {
import { useEffect, useState } from "react";
import BdstReg from "../bdstReg/bdstReg";
import {
confirmToast,
formatCommaNumber,
handleCommaNumberChange,
} from "@/components/lib/func/commom";
import { formH1Class } from "@/components/lib/class/comClass";
import toast from "react-hot-toast";
import { useTranslation } from "react-i18next";
export default function HtdflRegForm({
htdflForm,
@@ -48,20 +50,25 @@ export default function HtdflRegForm({
const bdstNm = form.watch("bdstNm");
const isPowerPlant = bdstNm?.includes("발전소");
const { t } = useTranslation('base');
const onSubmit = (values: z.infer<typeof hdtflZod>) => {
if (isModal) {
const data = regCtpvCd ? regCtpvCd : regSggcd ? regSggcd : "noCd";
if (data === "noCd") {
toast.error("시도/시군구 코드를 선택해야합니다.");
return;
}
htdflBdstReg(values, data);
if (setIsModal) setIsModal(false);
const handleConfirm = async () => {
htdflBdstReg(values, data);
if (setIsModal) setIsModal(false);
};
confirmToast(t('isInsertMsg'), handleConfirm);
} else {
const handleConfirm = async () => {
htdflBdstUpdate(values, "0");
};
confirmToast(t('isUpdateMsg'), handleConfirm);
htdflBdstUpdate(values, "0");
}
};
@@ -90,15 +97,15 @@ export default function HtdflRegForm({
};
};
const [divStyle, setDivStyle] = useState("h-[53vh]");
useEffect(()=>{
if(isModal===true){
useEffect(() => {
if (isModal === true) {
setDivStyle("h-[53vh] max-h-[37vh]")
}else if(readonly===true){
} else if (readonly === true) {
setDivStyle("h-[62vh]")
}else{
} else {
setDivStyle("h-[53vh]")
}
},[isModal,readonly]);
}, [isModal, readonly]);
useEffect(() => {
console.log("form errors:", form.formState.errors);
@@ -146,7 +146,7 @@ export default function RainRegForm({
rainBdstReg(values, data);
if (setIsModal) setIsModal(false);
};
confirmToast(t('isUpdateMsg'), handleConfirm);
confirmToast(t('isInsertMsg'), handleConfirm);
} else {
const handleConfirm = async () => {
rainBdstUpdate(values, "41");
@@ -72,7 +72,7 @@ export default function RswtrRegForm({
rswtBdstReg(values, "41");
if (setIsModal) setIsModal(false);
};
confirmToast(t('isUpdateMsg'), handleConfirm);
confirmToast(t('isInsertMsg'), handleConfirm);
} else {
const handleConfirm = async () => {
+1
View File
@@ -10,6 +10,7 @@
"fileDateErrMsg": "파일업로드 이전에 등록년도를 작성해주세요.",
"isDeleteMsg": "선택한 정보를 삭제하시겠습니까?",
"isUpdateMsg": "수정한 정보를 저장하시겠습니까?",
"isInsertMsg": "등록하시겠습니까?",
"excelDownErrMsg": "다운로드할 데이터가 없습니다.",
"alreadyInsertedErrMsg": "사업자번호 {{num}}(은)는 이미 등록되었습니다. 다시 등록해주세요.",