From 7ea2521a93727e4d754bf872fe42ffe369d2c5ae Mon Sep 17 00:00:00 2001 From: leedj312 Date: Tue, 1 Jul 2025 20:27:20 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AC=BC=EC=9E=AC=EC=9D=B4=EC=9A=A9=2031?= =?UTF-8?q?=EB=B2=88=EA=B9=8C=EC=A7=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/matMng/coMng/coSttn/page.tsx | 21 +- .../app/ruseFcltMng/fcltReg/rainReg/page.tsx | 2 +- apps/wr/app/store/common/code/index.ts | 29 +- .../ruseFcltMng/fcltReg/rainReg/index.tsx | 36 +- .../ruseFcltMng/fcltReg/rainReg/type.tsx | 15 +- apps/wr/components/lib/func/commom.tsx | 27 +- .../ui/form/fcltReg/bdstReg/bdstReg.tsx | 23 +- .../fcltReg/pbnstReg/buseReg/bugRegForm.tsx | 73 ++-- .../mngRegFormDetail/mngRegFormDetail.tsx | 2 +- .../ui/form/fcltReg/rainReg/rainRegForm.tsx | 396 ++++++++++++------ .../fcltReg/bdstRegModal/bdstRegModal.tsx | 16 +- .../components/ui/searchInput/searchInput.tsx | 3 - 12 files changed, 418 insertions(+), 225 deletions(-) diff --git a/apps/wr/app/matMng/coMng/coSttn/page.tsx b/apps/wr/app/matMng/coMng/coSttn/page.tsx index 163195756..181a5d82f 100644 --- a/apps/wr/app/matMng/coMng/coSttn/page.tsx +++ b/apps/wr/app/matMng/coMng/coSttn/page.tsx @@ -77,15 +77,18 @@ export default function CoSttn() { }, [coSttn.isInit, coSttnInit]); useEffect(() => { - if (coSttnRes?.length > 0 && code.cityCd.length > 0) { - const data = tableData(coSttnRes, { code }); - const chData = data.map((item: any) => ({ - ...item, - })); - // .filter((item: any) => item !== undefined); - setBdstTable(chData); - } else if (coSttnRes.length == 0) { - setBdstTable([]); + if(coSttnRes){ + + if (coSttnRes?.length > 0 && code.cityCd.length > 0) { + const data = tableData(coSttnRes, { code }); + const chData = data.map((item: any) => ({ + ...item, + })); + // .filter((item: any) => item !== undefined); + setBdstTable(chData); + } else if (coSttnRes?.length == 0) { + setBdstTable([]); + } } }, [coSttnRes, code]); diff --git a/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx b/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx index 2fa8b12b8..607b90886 100644 --- a/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltReg/rainReg/page.tsx @@ -158,7 +158,7 @@ export default function Home() { } + body={} bodyClass="w-[68vw] max-w-none h-[90vh]" open={issNewReg} onOpenChange={(open) => { diff --git a/apps/wr/app/store/common/code/index.ts b/apps/wr/app/store/common/code/index.ts index 83d87d738..17ea1f2e7 100644 --- a/apps/wr/app/store/common/code/index.ts +++ b/apps/wr/app/store/common/code/index.ts @@ -9,7 +9,26 @@ const yn: SelectDataType[] = [ { val: 'Y', text: 'Y' }, { val: 'N', text: 'N' }, ] +const bdstFilterYn: SelectDataType[] = [ + { val: 'Y', text: 'Y' }, + { val: 'N', text: 'N' }, + { val: 'D', text: '확인불가' }, + { val: 'F', text: '미가동' }, +] +// 최우수(그린1)/우수(그린2), 우량(그린3), 일반(그린4), 확인불가 체크 +const bdstGrntchClass: SelectDataType[] = [ + { val: '최우수(그린1)', text: '최우수(그린1)' }, + { val: '우수(그린2)', text: '우수(그린2)' }, + { val: '우량(그린3)', text: '우량(그린3)' }, + { val: '일반(그린4)', text: '일반(그린4)' }, + { val: '확인불가', text: '확인불가' }, +] +const bdstIncenYn: SelectDataType[] = [ + { val: 'Y', text: 'Y' }, + { val: 'N', text: 'N' }, + { val: 'D', text: '확인불가' }, +] //처리장연계/자체+연계/자체처리 const erctUswtrPrcsMeth : SelectDataType[]= [ { val: '처리장연계', text: '처리장연계' }, @@ -204,6 +223,9 @@ export type comCodeState = { ruseBizMthdCd: SelectDataType[]; rusePrcsMthdCd: SelectDataType[]; erctUswtrPrcsMeth: SelectDataType[]; + bdstFilterYn: SelectDataType[]; + bdstIncenYn: SelectDataType[]; + bdstGrntchClass:SelectDataType[]; }; }; @@ -217,7 +239,7 @@ export const getSggCd = async (set: any) => { })); */ const sggCd = [ - { text: "전체", val: '0' }, + // { text: "전체", val: '0' }, ...sgg .map((item: any) => ({ text: item.gugun || '', @@ -356,7 +378,10 @@ export const comCodeStateExport: comCodeState = { ruseSeCd:ruseSeCd, ruseBizMthdCd: ruseBizMthdCd, rusePrcsMthdCd:rusePrcsMthdCd, - erctUswtrPrcsMeth:erctUswtrPrcsMeth + erctUswtrPrcsMeth:erctUswtrPrcsMeth, + bdstFilterYn:bdstFilterYn, + bdstIncenYn:bdstIncenYn, + bdstGrntchClass:bdstGrntchClass }, }; diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx index 372a4bd9a..9a6c73e4e 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx @@ -10,7 +10,7 @@ export const TEST_UUID= '2d4b151d-1828-41e0-91d9-4cd28ea1cc7e' const rainyObjSchema = z.object({ bdstReuseFcltFk: z.number().nullish(), pntfColKnd: z.string().min(1, { message: validationMessages.requiredSelect("종류") }), - pntfColArea: z.number().positive({ message: validationMessages.required("면적(m³)") }), + pntfColArea: z.number().nullish() , dtfcltCpct: z.number().default(0), filtrTrtmfctYn: z.string().default("Y"), filtrTrtmfctCpct: z.number().nullish().default(0), @@ -162,29 +162,27 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = ( const test =await makeRstr(data); const res = await postFectch("/reuseFc/rainyInfo", test); - if(res.ok){ + if(res.status===200){ if(data.chgBuilding.length > 0){ - await res.json().then((resData: any) => { - const chPK = resData?.data?.bdstInfoPk - const makeCh= resData.data.chgBuilding.map((item: chgBuilding) => + + const chPK = res?.data?.bdstInfoPk + const makeCh= res.data.chgBuilding.map((item: chgBuilding) => ( { ...item, bdstInfoFk: chPK, }) ); - const chch= postFectch("/reuseFc/chgBuilding", makeCh); - return chch; - }).then((chch: any) => { - - console.log('chch ', chch) + const chch= await postFectch("/reuseFc/chgBuilding", makeCh); if(chch.status ===200) { - toast.success("등록이 완료되었습니다."); - + toast.success("건축물 등록이 완료되었습니다."); + }else{ + toast.error("건축물 증축/개축/중축 오류입니다."); } - }) }else{ - toast.success("등록이 완료되었습니다."); + toast.success("건축물 등록이 완료되었습니다."); } + }else{ + toast.error("건축물 등록이 완료되었습니다."); } const rainRes = await initFetch(code); set((state: rainFacState) => ({ @@ -197,7 +195,7 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = ( })); } catch (e) { console.log("e", e); - alert("등록 오류입니다."); + toast.error("등록시 오류가 발생하였습니다."); } finally { } }, @@ -205,9 +203,9 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = ( try { const chData =await makeMdfr(data); const res = await putFectch("/reuseFc/rainyInfo", chData); - console.log('rainUpdate', res); - if(res.ok){ - alert(" 수정이 완료되었습니다.") + if(res.status === 200){ + toast.success("수정이 완료되었습니다."); + } const rainRes = await initFetch(code); set((state: rainFacState) => ({ @@ -220,7 +218,7 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = ( })); } catch (e) { console.log("e", e); - alert("업데이트 오류입니다."); + toast.error("수정시 오류가 발생하였습니다."); } finally { } } diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/type.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/type.tsx index 6e28c3e76..59d6633a2 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/type.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/type.tsx @@ -17,19 +17,28 @@ export const baseReuseBuildingSchema = z.object({ instlCstSprtYn: z.string().default("Y"), instlCstSprtAmt: z.number().nullish(), grntchBdstCertYn: z.string().default("Y"), - grntchBdstCertYr: z.string().default("").refine( + grntchBdstCertYr: z + .string() + .max(4, { message: validationMessages.yearFormat }) + .refine( (year) => year.length === 0 || /^\d{4}$/.test(year), { message: validationMessages.yearFormat, } - ), + ) + .nullish(), grntchBdstCertNo: z.string().default(""), grntchBdstCertGrd: z.string().default(""), crgRdctYn: z.string().default("N").nullish(), /// 안쓰는 값 crgRdctBss: z.string().default("").nullish(), /// 안쓰는 값 crgRdctAmt: z.number().default(0), // 안쓰는 값 ruseFcltFlg: z.string().default(""), - bdstUsgCd: z.number().min(1, { message: validationMessages.requiredSelect("건축물용도") }).default(0), + bdstUsgCd: z + .number() + .default(0) + .refine((val) => val === -1 || val >= 1, { + message: validationMessages.requiredSelect("건축물용도"), + }), lawTrgtYn: z.string().default("Y"), rgtr: z.string().nullish(), mdfr: z.string().nullish(), diff --git a/apps/wr/components/lib/func/commom.tsx b/apps/wr/components/lib/func/commom.tsx index e5dfc8c0c..8569d4eb3 100644 --- a/apps/wr/components/lib/func/commom.tsx +++ b/apps/wr/components/lib/func/commom.tsx @@ -9,12 +9,22 @@ import { import type { RefObject } from "react"; export const getCity = (val: string, sggCd: SelectDataType[]) => { - const data = sggCd - .filter((item) => String(item.val).substring(0, 2) === val) + + let data:any + if(val !=='0'){ + data = sggCd + .filter((item) => String(item.val).substring(0, 2) === val) + .map((item) => ({ + val: item.val, + text: item.text, // 한국어 텍스트 + })); + }else{ + data = sggCd .map((item) => ({ val: item.val, text: item.text, // 한국어 텍스트 })); + } data.unshift({ val: "0", text: "전체" }); return data; }; @@ -103,7 +113,18 @@ export const handleCommaNumberChange = ( ) => { const raw = e.target.value.replace(/,/g, ""); if (!/^\d*$/.test(raw)) return; - onChange(raw === "" ? "" : Number(raw)); + onChange(raw === "" ? "" : Number(raw)); +}; + + +// onchange 텍스트를 숫자로 and ,제거 +export const handleMinusNumberChange = ( + e: React.ChangeEvent, + onChange: (value: number | "") => void +) => { + const raw = e.target.value.replace(/,/g, ""); + if (!/^\d*$/.test(raw)) return; + onChange(raw === "" ? -1 : Number(raw)); }; // 숫자입력시 , 삽입 diff --git a/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx b/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx index 0d00454e2..c1bf7e2ca 100644 --- a/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx +++ b/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx @@ -16,8 +16,7 @@ import { type SelectDataType, } from "@common/business_components"; import { Button, Checkbox, Input } from "@common/components"; -import { Check } from "lucide-react"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useState } from "react"; import { useFieldArray } from "react-hook-form"; export default function BdstReg({ form }: { form: any }) { @@ -37,12 +36,6 @@ export default function BdstReg({ form }: { form: any }) { bdstUsgCd: "", }); }; -// 잠깐 주석처리 - // const removeLastItem = () => { - // if (fields.length > 0) { - // remove(fields.length - 1); - // } - // }; const removeSelected = () => { const idxsToRemove = fields .map((item, idx) => selectedIds.includes(item.id) ? idx : -1) @@ -100,7 +93,7 @@ export default function BdstReg({ form }: { form: any }) { return ( <>

- 건축물 시설 정보 + 건축물 기본 정보

@@ -155,7 +148,7 @@ export default function BdstReg({ form }: { form: any }) { @@ -168,10 +161,10 @@ export default function BdstReg({ form }: { form: any }) { control={form.control} name="daddr" render={({ field }) => ( - + @@ -225,7 +218,7 @@ export default function BdstReg({ form }: { form: any }) { { handleCommaNumberChange(e, field.onChange); @@ -324,8 +317,8 @@ export default function BdstReg({ form }: { form: any }) { handleCommaNumberChange(e, f.onChange)} - value={formatCommaNumber(f.value)} + onChange={e => f.onChange} + value={f.value} className={selectClass} /> 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 17983edf2..d2f9b79e6 100644 --- a/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx @@ -30,7 +30,11 @@ import { Button, DataTable, Input, Label } from "@common/components"; import { useEffect, useRef, useState } from "react"; import { useFieldArray, useForm, type UseFormReturn } from "react-hook-form"; import MngRegFormDetail from "../mngReg/mngRegFormDetail/mngRegFormDetail"; -import { safeDate } from "@/components/lib/func/commom"; +import { + formatCommaNumber, + handleCommaNumberChange, + safeDate, +} from "@/components/lib/func/commom"; import SearchInputText from "@/components/ui/searchInput/searchInput"; import SdmInsertForm from "@common/business_components/ui/sdmInsertForm"; import type { DemandCompType } from "@common/business_components/ui/sdmInsertForm/form"; @@ -82,54 +86,57 @@ export function PbnstBuseForm({ }>({ isMoal: false, data: {} as DemandCompType }); useEffect(() => { - const etc= isNaN(Number(form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.etc`))) + const etc = isNaN( + Number(form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.etc`)) + ); let total = (form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.gvsbs`) ?? 0) + (form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.lcep`) ?? 0) + - (form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.cusrAlotm`) ?? 0) - - if( !etc ) { - total+=Number(form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.etc`)) - } + (form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.cusrAlotm`) ?? 0); + + if (!etc) { + total += Number( + form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.etc`) + ); + } form.setValue(`items.${indexMng}.fcBizs.${indexBiz}.totalMoney`, total); }, [ form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.gvsbs`), form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.lcep`), form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.cusrAlotm`), - form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.etc`) + form.getValues(`items.${indexMng}.fcBizs.${indexBiz}.etc`), ]); + const fcOrgwts = form.watch(`items.${indexMng}.fcBizs.${indexBiz}.fcOrgwts`); - const fcOrgwts = form.watch( `items.${indexMng}.fcBizs.${indexBiz}.fcOrgwts`) - - useEffect(() =>{ - - console.log('fcOrgwts ', fcOrgwts) - if(fcOrgwts&&fcOrgwts?.length>0){ + useEffect(() => { + console.log("fcOrgwts ", fcOrgwts); + if (fcOrgwts && fcOrgwts?.length > 0) { const swtrmtFcltFkList = fcOrgwts.map((item) => item.swtrmtFcltFk); - console.log('swtrmtFcltFkList ', swtrmtFcltFkList) + console.log("swtrmtFcltFkList ", swtrmtFcltFkList); - if(swtrmtFcltFkList.length > 0){ - getFcOrgwts(swtrmtFcltFkList.filter((item): item is string => item != null), fcOrgwts?.length) + if (swtrmtFcltFkList.length > 0) { + getFcOrgwts( + swtrmtFcltFkList.filter((item): item is string => item != null), + fcOrgwts?.length + ); } } - },[fcOrgwts]) - - useEffect(() =>{ + }, [fcOrgwts]); + useEffect(() => { if (fcOrgwtsNmList && fcOrgwtsNmList.length > 0) { - - console.log('fcOrgwtsNmList ', fcOrgwtsNmList) - console.log('fcOrgwts ', fcOrgwts) + console.log("fcOrgwtsNmList ", fcOrgwtsNmList); + console.log("fcOrgwts ", fcOrgwts); fcOrgwts?.forEach((item, index) => { const orgwtNm = fcOrgwtsNmList.find( (orgwt) => orgwt.bscFctCd === item.swtrmtFcltFk )?.bscFctNm; - console.log('orgwtNm ', orgwtNm) + console.log("orgwtNm ", orgwtNm); if (orgwtNm) { form.setValue( `items.${indexMng}.fcBizs.${indexBiz}.fcOrgwts.${index}.ruseUtztnFcltNm`, @@ -137,10 +144,8 @@ export function PbnstBuseForm({ ); } }); - } - - },[fcOrgwtsNmList,fcOrgwts]) - + } + }, [fcOrgwtsNmList, fcOrgwts]); // fcBizs 데이터가 변경될 때마다 차수 선택 목록을 업데이트합니다. useEffect(() => { @@ -294,7 +299,6 @@ export function PbnstBuseForm({ setSumCpct(sum); }, [form.formState, indexMng, indexBiz]); - const pbnstBiz = form.watch(`items.${indexMng}.fcBizs`); return ( <> @@ -527,7 +531,9 @@ export function PbnstBuseForm({ ).map((field, index) => (
{ - f.onChange(Number(e.target.value)); + handleCommaNumberChange(e, f.onChange); }} + value={formatCommaNumber(f.value)} /> )} @@ -691,7 +697,6 @@ export function PbnstBuseForm({ )} />
-

))}
diff --git a/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegFormDetail/mngRegFormDetail.tsx b/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegFormDetail/mngRegFormDetail.tsx index 6e13058ab..30fab689e 100644 --- a/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegFormDetail/mngRegFormDetail.tsx +++ b/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegFormDetail/mngRegFormDetail.tsx @@ -97,7 +97,7 @@ export default function MngRegFormDetail({ : [] } onSelectValue={field.onChange} - value={field.value.trim()} + value={field.value?.trim() ??""} readOnly={formHead.option === "readOnly"} /> ); diff --git a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx index fc4ed566e..b893f9bf4 100644 --- a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx @@ -4,29 +4,38 @@ import { useWrStore } from "@/app/store"; import { rainZod, selectClass, - type customRainBdst + type customRainBdst, } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; import { formH1Class, formH2Class } from "@/components/lib/class/comClass"; import { formatCommaNumber, handleCommaNumberChange, + handleMinusNumberChange, } from "@/components/lib/func/commom"; import { DatePicker, FormUi } from "@common/business_components"; -import { Form, FormField, SelectBox } from "@common/business_components/ui"; -import { Button, Input } from "@common/components/ui"; +import { + Form, + FormField, + FormLabel, + SelectBox, +} from "@common/business_components/ui"; +import { Button, Checkbox, Input, Label } 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"; import BdstReg from "../bdstReg/bdstReg"; +import toast from "react-hot-toast"; export default function RainRegForm({ rainForm, isModal, - readonly = false + readonly = false, + setIsModal }: { rainForm: customRainBdst; isModal: boolean; + setIsModal?:(modal:boolean) => void readonly?: boolean; }) { const { code, rainBdstReg, rainBdstUpdate, rain } = useWrStore( @@ -38,6 +47,7 @@ export default function RainRegForm({ resolver: zodResolver(rainZod), defaultValues: defaultValues, }); + const instlCst = form.watch(`reuseBuilding.0.instlCst`); const [grntchBdstCertYn, instlCstSprtYn, filtrTrtmfctYn] = form.watch([ "reuseBuilding.0.grntchBdstCertYn", @@ -69,7 +79,7 @@ export default function RainRegForm({ ? item?.grntchBdstCertYr : "", // null → "" instlCstSprtYn: item?.instlCstSprtYn ?? "Y", // null → "Y" - grntchBdstCertYn:item?.grntchBdstCertYn??"Y", + grntchBdstCertYn: item?.grntchBdstCertYn ?? "Y", rainyObj: { ...item?.rainyObj, filtrTrtmfctYn: item?.rainyObj?.filtrTrtmfctYn ?? "Y", @@ -79,7 +89,6 @@ export default function RainRegForm({ }; useEffect(() => { - if (grntchBdstCertYn === "N") { form.setValue("reuseBuilding.0.grntchBdstCertYr", ""); form.setValue("reuseBuilding.0.grntchBdstCertNo", ""); @@ -90,15 +99,25 @@ export default function RainRegForm({ form.setValue("reuseBuilding.0.rainyObj.filtrTrtmfctCpct", 0); form.setValue("reuseBuilding.0.rainyObj.filtrTrtmfctPrs", ""); } + + if(grntchBdstCertYn === "D") { + form.setValue("reuseBuilding.0.grntchBdstCertYr", "0000"); + form.setValue("reuseBuilding.0.grntchBdstCertNo", "확인불가"); + form.setValue("reuseBuilding.0.grntchBdstCertGrd", "확인불가"); + }else if (instlCstSprtYn === "D") { + form.setValue("reuseBuilding.0.instlCstSprtAmt", -1); + } else if (filtrTrtmfctYn === "D") { + form.setValue("reuseBuilding.0.rainyObj.filtrTrtmfctCpct", -1); + form.setValue("reuseBuilding.0.rainyObj.filtrTrtmfctPrs", "확인불가"); + } + }, [grntchBdstCertYn, instlCstSprtYn, filtrTrtmfctYn]); - - +const [regCtpvCd , regSggcd] = form.watch(['ctpvCd','sggCd']) // form 값이 변경될 때마다 로그 출력 useEffect(() => { - const subscription = form.watch((value) => { - }); + const subscription = form.watch((value) => {}); return () => subscription.unsubscribe(); }, [form]); @@ -108,7 +127,15 @@ export default function RainRegForm({ const onSubmit = (values: z.infer) => { if (isModal) { - rainBdstReg(values, "41"); + const data = regCtpvCd?regCtpvCd:regSggcd?regSggcd:'noCd' + + if(data ==='noCd'){ + toast.error("시도/시군구 코드를 선택해야합니다."); + return + } + + rainBdstReg(values, data); + setIsModal(false) } else { rainBdstUpdate(values, "41"); } @@ -125,10 +152,14 @@ export default function RainRegForm({

- {isModal ? "건축물 운영정보" : "빗물이용시설 정보"} + {isModal ? "건축물 정보" : "빗물이용시설 정보"}

{!readonly && ( - )} @@ -142,12 +173,9 @@ export default function RainRegForm({ ) : ( <> )} -

- 기본정보 -

- -
-
+

기본정보

+
+
field.onChange(date), + onChange: (date: Date | undefined) => + field.onChange(date), }} selectClass={"w-full"} readOnly={readonly} @@ -170,48 +199,95 @@ export default function RainRegForm({ />
-
+
( - - { - if (!readonly) handleCommaNumberChange(e, field.onChange); - }} - value={formatCommaNumber(field.value)} - readOnly={readonly} - /> - - )} + name={`reuseBuilding.0.instlCst`} + render={({ field }) => { + const value = field.value; + const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 + return ( +
+ + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } + }} + onChange={(e) => { + if (readonly ) return; + handleMinusNumberChange(e, field.onChange); + }} + /> + +
+ ); + }} />
-

- 빗물이용시설 정보 -

+

빗물이용시설 정보

-

집수면

+

집수면 및 저류조

-
-
+
+
+ + + { + const isUnknown = field.value === null || field.value === -1; // 또는 Number(value) === -1 + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } + }} + onChange={(e) => { + if (readonly ) return; + handleMinusNumberChange(e, field.onChange); + }} + readOnly={readonly} + /> + + ) + }} + /> +
+
( - + { } : field.onChange} + onSelectValue={readonly ? () => {} : field.onChange} value={field.value ?? rainFcltCd[0]?.val} readOnly={readonly} /> @@ -219,24 +295,40 @@ export default function RainRegForm({ )} />
-
+
( - - { - if (!readonly) handleCommaNumberChange(e, field.onChange); - }} - value={formatCommaNumber(field.value)} - readOnly={readonly} - /> - - )} + render={({ field }) => { + const value = field.value; + const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 + return ( +
+ + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } + }} + onChange={(e) => { + if (readonly ) return; + handleMinusNumberChange(e, field.onChange); + }} + readOnly={readonly} + /> + + +
+ ); + }} />
@@ -255,8 +347,8 @@ export default function RainRegForm({ className={""} selectClass={selectClass} label={""} - selectArray={code.yn} - onSelectValue={readonly ? () => { } : field.onChange} + selectArray={code.bdstFilterYn} + onSelectValue={readonly ? () => {} : field.onChange} value={field.value ?? code.yn[0]?.val} readOnly={readonly} /> @@ -268,47 +360,68 @@ export default function RainRegForm({ ( + render={({ field }) => + + + { + const isUnknown = field.value === null || field.value === -1; // 또는 Number(value) === -1 + return( { - if (!readonly) handleCommaNumberChange(e, field.onChange); + value={ + isUnknown ? "확인불가" : formatCommaNumber(field.value) + } + onFocus={() => { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } }} - value={formatCommaNumber(field.value)} - readOnly={readonly } + onChange={(e) => { + if (readonly ) return; + handleMinusNumberChange(e, field.onChange); + }} + readOnly={readonly} disabled={filtrTrtmfctYn !== "Y"} /> - )} + ) + }} />
( - - - - )} + render={({ field }) => { + const value = field.value; + const isUnknown = value === null || value === "-"; // 또는 Number(value) === -1 + + return ( +
+ + + + +
+ ); + }} />
-

- 인센티브 정보 -

+

인센티브 정보

설치비 지원

@@ -324,8 +437,8 @@ export default function RainRegForm({ className={""} selectClass={selectClass} label={""} - selectArray={code.yn} - onSelectValue={readonly ? () => { } : field.onChange} + selectArray={code.bdstIncenYn} + onSelectValue={readonly ? () => {} : field.onChange} value={field.value ?? code.yn[0]?.val} readOnly={readonly} /> @@ -337,24 +450,38 @@ export default function RainRegForm({ ( - - { - if (!readonly) handleCommaNumberChange(e, field.onChange); + render={({ field }) => + { + const value = field.value; + const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } }} - value={formatCommaNumber(field.value)} - readOnly={instlCstSprtYn !== "Y"} - /> - - )} + onChange={(e) => { + if (readonly ) return; + handleMinusNumberChange(e, field.onChange); + }} + disabled={instlCstSprtYn !== "Y"} + /> + + )} + } />
-

녹색건축물 인증

@@ -369,8 +496,8 @@ export default function RainRegForm({ className={""} selectClass={selectClass} label={""} - selectArray={code.yn} - onSelectValue={readonly ? () => { } : field.onChange} + selectArray={code.bdstIncenYn} + onSelectValue={readonly ? () => {} : field.onChange} value={field.value ?? code.yn[0]?.val} /> @@ -381,20 +508,38 @@ export default function RainRegForm({ ( - - { - if (!readonly) field.onChange(e); - }} - readOnly={grntchBdstCertYn !== "Y"} - /> - - )} + render={({ field }) => + { + const isUnknown = field.value === null || field.value === "0000"; // 또는 Number(value) === -1 + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } + }} + value={ + + isUnknown?'확인불가':field.value ?? ""} + onChange={(e) => { + if (readonly) return + + if (e.target.value === '확인불가') { + field.onChange('0000'); + }else{ + field.onChange(e.target.value); + } + }} + disabled={grntchBdstCertYn !== "Y"} + /> + + )} + } />
@@ -411,7 +556,7 @@ export default function RainRegForm({ onChange={(e) => { if (!readonly) field.onChange(e); }} - readOnly={grntchBdstCertYn !== "Y"} + disabled={grntchBdstCertYn !== "Y"} /> )} @@ -423,15 +568,14 @@ export default function RainRegForm({ name="reuseBuilding.0.grntchBdstCertGrd" render={({ field }) => ( - { - if (!readonly) field.onChange(e); - }} - readOnly={grntchBdstCertYn !== "Y"} + {} : field.onChange} + value={field.value ?? code.bdstGrntchClass[0]?.val} + readOnly={readonly} /> )} diff --git a/apps/wr/components/ui/modal/fcltReg/bdstRegModal/bdstRegModal.tsx b/apps/wr/components/ui/modal/fcltReg/bdstRegModal/bdstRegModal.tsx index 205846bb4..6ab1b25c4 100644 --- a/apps/wr/components/ui/modal/fcltReg/bdstRegModal/bdstRegModal.tsx +++ b/apps/wr/components/ui/modal/fcltReg/bdstRegModal/bdstRegModal.tsx @@ -29,10 +29,11 @@ export type objSearchType = { interface BdstRegProps { moType: T; + isModal:boolean; setIsModal?: (open: boolean) => void; } -export function BdstReg({ moType,setIsModal }: BdstRegProps) { +export function BdstReg({ moType,setIsModal,isModal }: BdstRegProps) { const { rain, code, bdst,findBdst } = useWrStore((state) => { return state; }); @@ -45,13 +46,13 @@ export function BdstReg({ moType,setIsModal }: BdstRegProps const getSelCity = (val: string | number) => { const cityValue = String(val); // Ensure val is treated as a string const data = getCity(cityValue, code.sggCd); + setSelectSgg(data); - getSgg(data[0]?.val || ""); + // getSgg(data[0]?.val || ""); setObjSearch({ city: cityValue, sgg: '' }); }; const getSgg = (val: string | number) => { - console.log(val); setObjSearch({...objSearch,sgg: String(val)}) }; @@ -85,10 +86,7 @@ export function BdstReg({ moType,setIsModal }: BdstRegProps if (data) { setRainBdstForm(data); } - - } - } useEffect(()=>{ @@ -122,7 +120,7 @@ export function BdstReg({ moType,setIsModal }: BdstRegProps
-

건축물 목록

+

건축물 목록 (유의 사항: 신규등록하려는 건축물이 목록에 없을 경우 하단 건축물 정보에 추가하여 주시기 바랍니다.)

({ moType,setIsModal }: BdstRegProps
{ moType === 'RNB'? - + :moType==='RST' - ? {setIsModal}}> + ? {setIsModal}}> : } diff --git a/apps/wr/components/ui/searchInput/searchInput.tsx b/apps/wr/components/ui/searchInput/searchInput.tsx index 796c8c298..be63b9685 100644 --- a/apps/wr/components/ui/searchInput/searchInput.tsx +++ b/apps/wr/components/ui/searchInput/searchInput.tsx @@ -62,9 +62,6 @@ export default function SearchInputText({ document.removeEventListener("mousedown", handleClickOutside); }; }, []); -useEffect(() =>{ - console.log('searchList ', searchList) -},[searchList]) return (