Merge commit '3b19ff32c80bfe7fa2c4f19bd1cf14a9b9485f25' into iipbs/wr/regForTest

This commit is contained in:
leedj312
2025-07-08 13:12:56 +09:00
8 changed files with 890 additions and 857 deletions
+4 -4
View File
@@ -123,9 +123,9 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
if (!featureData) return;
///////////////////////////////////////////// 피쳐데이터 선택 시 각 시설별 데이터 처리 ///////////////////////////////////////////////
useEffect(() => {
const layerId = getSelectedLayers();
if (featureData && typeof featureData.getProperties === "function") {
const selectedVal = featureData.getProperties();
const layerId = getSelectedLayers();
let featureCd = layerId == '하수재이용시설' ? selectedVal?.swtrmt_fclt_cd : layerId == '빗물이용시설' || layerId == '중수도시설' ? selectedVal?.bdst_nm : layerId == '하수처리시설' ? 'a' : null;
if (featureCd && featureCd !== fcltPk) {
if (layerId == '하수재이용시설') {
@@ -157,9 +157,9 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
setHtdflDetailModal({ isOpen: true, data: htdflSttnRes[0] });
setViewMode("detail")
}
else if(layerId =='하수처리시설') setViewMode('nothing')
else if(layerId =='하수처리시설') onClose();
}
} else if (seletectedLayerNm) { setViewMode("list") }
} else if (layerId === null && seletectedLayerNm) { setViewMode("list") }
}, [featureData]);
///////////////////////////////////////////// 피쳐데이터 선택 시 각 시설별 데이터 처리 ///////////////////////////////////////////////
@@ -179,7 +179,7 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
};
const getSelectedLayers = () => {
let result = null;
const layers = gisMap ? gisMap.getLayers().getArray() : []; // gisMap이 null인지 확인 후 레이어 가져오기
const layers = gisMap ? gisMap.getLayers().getArray().filter((l:any) => l.getVisible()) : []; // gisMap이 null인지 확인 후 레이어 가져오기
let featureLayer: { get: (key: string) => any } = { get: (key: string) => null }; // 피처가 속한 레이어를 찾기 위한 변수
layers.forEach((layer: any) => {
const source = layer.getSource();
@@ -43,7 +43,7 @@ export default function Home() {
useEffect(() => {
if (!htdfl.isInit) {
initHtdflReg('41')
initHtdflReg('0')
}
}, [htdfl.isInit, initHtdflReg]);
useEffect(() => {
@@ -89,7 +89,7 @@ export default function Home() {
// setBdstChgProps({ isOpen: true, chgBuilding: chgBuilding });
// };
useEffect(() => {
getHtdflBdstData(pageNation, "41");
getHtdflBdstData(pageNation, "0");
}, [pageNation]);
return (
@@ -115,9 +115,9 @@ export default function Home() {
size={"sm"}
onClick={() => {
if(searchTxt&&searchTxt.length>0){
htdflNmSearch(String(41),searchTxt)
htdflNmSearch(String(0),searchTxt)
}else{
initHtdflReg(String(41) );
initHtdflReg(String(0) );
}
}}
@@ -181,10 +181,26 @@ export const rswtPrscCdMthdCd = [
];
export const htdPowerMthdCd= [
{
val: "해당없음",
text: "해당없음",
},
{
val: "석탄화력발전",
text: "석탄화력발전",
},
{
val: "화력발전",
text: "화력발전",
},
{
val: "수력발전",
text: "수력발전",
},
{
val: "태양관발전",
text: "태양관발전",
},
];
//(공업용수/양식장/농업용수)
@@ -134,7 +134,7 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = (
...state,
rain: {
...state.rain,
rainRes: rainRes,
rainRes: rainRes.data,
isInit: false,
},
}));
@@ -89,7 +89,7 @@ export default function BdstReg({ form, type }: { form: any; type?: string }) {
return (
<>
<h1 className={formH1Class}> { type !== "HTB"?"건축물 기본 정보": '발전소 기본 정보'}</h1>
<h1 className={formH1Class}> { type !== "HTB"?"건축물 기본 정보": '시설 기본 정보'}</h1>
<div className="grid grid-cols-6 gap-2 mt-4">
<div className="col-span-3">
<FormField
@@ -140,10 +140,10 @@ export default function BdstReg({ form, type }: { form: any; type?: string }) {
control={form.control}
name="bdstNm"
render={({ field }) => (
<FormUi label={ type !== "HTB"?"건축물명": '발전소명'}>
<FormUi label={ type !== "HTB"?"건축물명": '시설명'}>
<Input
className={selectClass}
placeholder= {type !== "HTB"?"건축물 명 입력하세요":'발전소명 입력하세요' }
placeholder= {type !== "HTB"?"건축물 명 입력하세요":'시설명 입력하세요' }
type="text"
{...field}
/>
@@ -156,7 +156,7 @@ export default function BdstReg({ form, type }: { form: any; type?: string }) {
control={form.control}
name="daddr"
render={({ field }) => (
<FormUi label= { type !== "HTB"?"건축물 주소": '발전소 주소'} >
<FormUi label= { type !== "HTB"?"건축물 주소": '시설 주소'} >
<Input
className={selectClass}
placeholder="위치를 입력해주세요"
File diff suppressed because it is too large Load Diff
@@ -19,7 +19,7 @@ import {
FormUi,
SelectBox,
} from "@common/business_components/ui";
import { Button, Input } from "@common/components/ui";
import { Button, Input, ScrollArea } from "@common/components/ui";
import { zodResolver } from "@hookform/resolvers/zod";
import { useEffect } from "react";
import { useForm, type UseFormReturn } from "react-hook-form";
@@ -64,7 +64,7 @@ export default function RswtrRegForm({
};
const filtrTrtmfctCpct = form.watch('reuseBuilding.0.rswtrObj.filtrTrtmfctCpct')
const cleanRswtData = (raw: any): z.infer<typeof rswtZod> => {
const cleanRswtData = (raw: any): z.infer<typeof rswtZod> => {
console.log('raw ', raw)
return {
@@ -82,7 +82,7 @@ export default function RswtrRegForm({
: new Date(), // item?.instlCmptnDt가 유효하지 않으면 현재 날짜로 초기화
operMngCd: item?.operMngCd ?? "", // null → ""
instlCstSprtYn: item?.instlCstSprtYn || code.yn[0]?.val, // null → "Y"
grntchBdstCertYn: item?.grntchBdstCertYn|| code.yn[0]?.val,
grntchBdstCertYn: item?.grntchBdstCertYn || code.yn[0]?.val,
rswtrObj: {
...item?.rswtrObj,
filtrTrtmfctYn: item?.rainyObj?.filtrTrtmfctYn || code.yn[0]?.val,
@@ -96,10 +96,10 @@ export default function RswtrRegForm({
// useEffect(() =>{
// console.log(' formform ', form.watch())
// },[form.formState])
useEffect(() =>{
useEffect(() => {
console.log(' filtrTrtmfctCpct ', filtrTrtmfctCpct)
},[filtrTrtmfctCpct])
}, [filtrTrtmfctCpct])
useEffect(() => {
console.log("form errors:", form.formState.errors);
}, [form.formState.errors]);
@@ -119,7 +119,7 @@ export default function RswtrRegForm({
form.setValue("reuseBuilding.0.grntchBdstCertGrd", "확인불가");
} else if (instlCstSprtYn === "D") {
form.setValue("reuseBuilding.0.instlCstSprtAmt", -1);
}
}
}, [grntchBdstCertYn, instlCstSprtYn, filtrTrtmfctProcs, form]);
@@ -148,334 +148,335 @@ export default function RswtrRegForm({
)}
</div>
</div>
{isModal && rswtForm != undefined ? <BdstReg form={form} /> : <></>}
{isModal ? (
<h1 className="pl-3 text-xl col-span-10 mt-4 ">
중수도 시설 정보{" "}
</h1>
) : (
<></>
)}
<h1 className={formH1Class}>기본정보</h1>
<div className="grid grid-cols-4 gap-2 mt-4">
<div className="col-span-2">
<FormField
control={form.control}
name="reuseBuilding.0.instlCmptnDt"
render={({ field }) => (
<FormUi label="설치완료일">
<DatePicker
mode="single"
field={{
value:
field.value && !isNaN(new Date(field.value).getTime())
? new Date(field.value)
: new Date(), // Provide a default Date value
onChange: (date) => field.onChange(date),
}}
selectClass={"w-full"}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
<div className="col-span-2">
<FormField
control={form.control}
name="reuseBuilding.0.instlCst"
render={({ field }) => {
const value = field.value;
const isUnknown = value === null || value === -1; // 또는 Number(value) === -1
return (
<FormUi label="설치비">
<Input
className={selectClass}
placeholder="1,000,000"
type="text"
value={
isUnknown ? "확인불가" : formatCommaNumber(value)
}
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
field.onChange(""); // 초기화
}
}}
onChange={(e) => {
if (readonly) return;
handleMinusNumberChange(e, field.onChange);
<ScrollArea className="h-[37vh]">
{isModal && rswtForm != undefined ? <BdstReg form={form} /> : <></>}
{isModal ? (
<h1 className="pl-3 text-xl col-span-10 mt-4 ">
중수도 시설 정보{" "}
</h1>
) : (
<></>
)}
<h1 className={formH1Class}>기본정보</h1>
<div className="grid grid-cols-4 gap-2 mt-4">
<div className="col-span-2">
<FormField
control={form.control}
name="reuseBuilding.0.instlCmptnDt"
render={({ field }) => (
<FormUi label="설치완료일">
<DatePicker
mode="single"
field={{
value:
field.value && !isNaN(new Date(field.value).getTime())
? new Date(field.value)
: new Date(), // Provide a default Date value
onChange: (date) => field.onChange(date),
}}
selectClass={"w-full"}
readOnly={readonly}
/>
</FormUi>
);
}}
/>
</div>
</div>
<div className=" my-4">
<h1 className={formH1Class}>중수도 시설 정보</h1>
</div>
<div className="grid grid-cols-12 gap-1 mt-4">
<div className="col-span-4">
<FormField
control={form.control}
name="reuseBuilding.0.rswtrObj.filtrTrtmfctCpct"
render={({ field }) => {
const value = field.value;
const isUnknown = value === null || value === -1; // 또는 Number(value) === -1
return (
<FormUi label="처리시설 용량">
<Input
className={selectClass}
placeholder=""
type="text"
value={
isUnknown ? "확인불가" : formatCommaNumber(value)
}
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
console.log('value')
field.onChange(""); // 초기화
)}
/>
</div>
<div className="col-span-2">
<FormField
control={form.control}
name="reuseBuilding.0.instlCst"
render={({ field }) => {
const value = field.value;
const isUnknown = value === null || value === -1; // 또는 Number(value) === -1
return (
<FormUi label="설치비">
<Input
className={selectClass}
placeholder="1,000,000"
type="text"
value={
isUnknown ? "확인불가" : formatCommaNumber(value)
}
}}
onChange={(e) => {
if (readonly) return;
handleMinusNumberChange(e, field.onChange);
}}
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
field.onChange(""); // 초기화
}
}}
onChange={(e) => {
if (readonly) return;
handleMinusNumberChange(e, field.onChange);
}}
readOnly={readonly}
/>
</FormUi>
);
}}
/>
</div>
</div>
<div className=" my-4">
<h1 className={formH1Class}>중수도 시설 정보</h1>
</div>
<div className="grid grid-cols-12 gap-1 mt-4">
<div className="col-span-4">
<FormField
control={form.control}
name="reuseBuilding.0.rswtrObj.filtrTrtmfctCpct"
render={({ field }) => {
const value = field.value;
const isUnknown = value === null || value === -1; // 또는 Number(value) === -1
return (
<FormUi label="처리시설 용량">
<Input
className={selectClass}
placeholder=""
type="text"
value={
isUnknown ? "확인불가" : formatCommaNumber(value)
}
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
console.log('value')
field.onChange(""); // 초기화
}
}}
onChange={(e) => {
if (readonly) return;
handleMinusNumberChange(e, field.onChange);
}}
readOnly={readonly}
/>
</FormUi>
);
}}
/>
</div>
<div className="col-span-4">
<FormField
control={form.control}
name="reuseBuilding.0.rswtrObj.orgwtKndCd"
render={({ field }) => (
<FormUi label="원수 종류">
<SelectBox
className={""}
label={""}
selectClass={selectClass}
selectArray={code.orgwtKndCd}
onSelectValue={readonly ? () => { } : field.onChange}
value={field.value ?? code.orgwtKndCd[0]?.val}
readOnly={readonly}
/>
</FormUi>
);
}}
/>
</div>
<div className="col-span-4">
<FormField
control={form.control}
name="reuseBuilding.0.rswtrObj.orgwtKndCd"
render={({ field }) => (
<FormUi label="원수 종류">
<SelectBox
className={""}
label={""}
selectClass={selectClass}
selectArray={code.orgwtKndCd}
onSelectValue={readonly ? () => {} : field.onChange}
value={field.value ?? code.orgwtKndCd[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
<div className="col-span-4">
<FormField
control={form.control}
name="reuseBuilding.0.rswtrObj.filtrTrtmfctProcs"
render={({ field }) => (
<FormUi label="주요처리공정">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.rswtPrscCdMthdCd}
onSelectValue={readonly ? () => {} : field.onChange}
value={field.value ?? code.rswtPrscCdMthdCd[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
</div>
<div className=" my-2">
<h1 className={formH1Class}>인센티브 정보</h1>
</div>
<div>
<h2 className={formH2Class}>설치비 지원</h2>
</div>
<div className="grid grid-cols-2 gap-2 mt-4">
<div className="col-span-1">
<FormField
control={form.control}
name="reuseBuilding.0.instlCstSprtYn"
render={({ field }) => (
<FormUi label="설치비 지원여부">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.bdstIncenYn}
onSelectValue={readonly ? () => {} : field.onChange}
value={field.value ?? code.bdstIncenYn[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
<div className="col-span-1">
<FormField
control={form.control}
name="reuseBuilding.0.instlCstSprtAmt"
render={({ field }) => {
const value = field.value;
const isUnknown = value === null || value === -1; // 또는 Number(value) === -1
return (
<FormUi label="지원금액(원)">
<Input
className={selectClass}
placeholder=""
type="text"
readOnly={readonly || isUnknown}
value={
isUnknown ? "확인불가" : formatCommaNumber(value)
}
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
field.onChange(""); // 초기화
}
}}
onChange={(e) => {
if (readonly) return;
handleMinusNumberChange(e, field.onChange);
}}
disabled={instlCstSprtYn === "N"||instlCstSprtYn === "D"}
)}
/>
</div>
<div className="col-span-4">
<FormField
control={form.control}
name="reuseBuilding.0.rswtrObj.filtrTrtmfctProcs"
render={({ field }) => (
<FormUi label="주요처리공정">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.rswtPrscCdMthdCd}
onSelectValue={readonly ? () => { } : field.onChange}
value={field.value ?? code.rswtPrscCdMthdCd[0]?.val}
readOnly={readonly}
/>
</FormUi>
);
}}
/>
)}
/>
</div>
</div>
</div>
<div>
<h2 className={formH2Class}>녹색건축물 인증</h2>
</div>
<div className="grid grid-cols-6 gap-2 mt-4">
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertYn"
render={({ field }) => (
<FormUi label="인증여부">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.bdstIncenYn}
onSelectValue={readonly ? () => {} : field.onChange}
value={field.value || code.yn[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
<div className=" my-2">
<h1 className={formH1Class}>인센티브 정보</h1>
</div>
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertYr"
render={({ field }) =>
{
const isUnknown = field.value === null || field.value === "0000"; // 또는 Number(value) === -1
return (
<FormUi label="인증년도">
<Input
className={selectClass}
placeholder="2024"
type=""
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
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 == "N" || grntchBdstCertYn == "D"}
max={4}
/>
</FormUi>
)}}
/>
<div>
<h2 className={formH2Class}>설치비 지원</h2>
</div>
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertNo"
render={({ field }) =>
{
<div className="grid grid-cols-2 gap-2 mt-4">
<div className="col-span-1">
<FormField
control={form.control}
name="reuseBuilding.0.instlCstSprtYn"
render={({ field }) => (
<FormUi label="설치비 지원여부">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.bdstIncenYn}
onSelectValue={readonly ? () => { } : field.onChange}
value={field.value ?? code.bdstIncenYn[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
<div className="col-span-1">
<FormField
control={form.control}
name="reuseBuilding.0.instlCstSprtAmt"
render={({ field }) => {
const value = field.value;
const isUnknown = value === null || value === -1; // 또는 Number(value) === -1
return (
<FormUi label="지원금액(원)">
<Input
className={selectClass}
placeholder=""
type="text"
readOnly={readonly || isUnknown}
value={
isUnknown ? "확인불가" : formatCommaNumber(value)
}
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
field.onChange(""); // 초기화
}
}}
onChange={(e) => {
if (readonly) return;
handleMinusNumberChange(e, field.onChange);
}}
disabled={instlCstSprtYn === "N" || instlCstSprtYn === "D"}
/>
</FormUi>
);
}}
/>
</div>
</div>
<div>
<h2 className={formH2Class}>녹색건축물 인증</h2>
</div>
<div className="grid grid-cols-6 gap-2 mt-4">
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertYn"
render={({ field }) => (
<FormUi label="인증여부">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.bdstIncenYn}
onSelectValue={readonly ? () => { } : field.onChange}
value={field.value || code.yn[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertYr"
render={({ field }) => {
const isUnknown = field.value === null || field.value === "0000"; // 또는 Number(value) === -1
return (
<FormUi label="인증번호">
<Input
className={selectClass}
placeholder="ab1234678"
type=""
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
field.onChange(""); // 초기화
}
}}
value={
isUnknown?'확인불가':field.value ?? ""}
onChange={(e) => {
if (readonly) return
if (e.target.value === '확인불가') {
field.onChange('');
}else{
field.onChange(e.target.value);
}
}}
disabled={grntchBdstCertYn == "N" || grntchBdstCertYn == "D"}
return (
<FormUi label="인증년도">
<Input
className={selectClass}
placeholder="2024"
type=""
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
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 == "N" || grntchBdstCertYn == "D"}
max={4}
/>
</FormUi>
)
}}
/>
</div>
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertNo"
render={({ field }) => {
const isUnknown = field.value === null || field.value === "0000"; // 또는 Number(value) === -1
return (
<FormUi label="인증번호">
<Input
className={selectClass}
placeholder="ab1234678"
type=""
onFocus={() => {
// 입력 시 자동으로 확인불가 해제
if (isUnknown && !readonly) {
field.onChange(""); // 초기화
}
}}
value={
isUnknown ? '확인불가' : field.value ?? ""}
onChange={(e) => {
if (readonly) return
if (e.target.value === '확인불가') {
field.onChange('');
} else {
field.onChange(e.target.value);
}
}}
disabled={grntchBdstCertYn == "N" || grntchBdstCertYn == "D"}
/>
</FormUi>
)}}
/>
/>
</FormUi>
)
}}
/>
</div>
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertGrd"
render={({ field }) => (
<FormUi label="인증등급">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.bdstGrntchClass}
onSelectValue={readonly ? () => { } : field.onChange}
value={field.value ?? code.bdstGrntchClass[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
</div>
<div className="col-span-3">
<FormField
control={form.control}
name="reuseBuilding.0.grntchBdstCertGrd"
render={({ field }) => (
<FormUi label="인증등급">
<SelectBox
className={""}
selectClass={selectClass}
label={""}
selectArray={code.bdstGrntchClass}
onSelectValue={readonly ? () => {} : field.onChange}
value={field.value ?? code.bdstGrntchClass[0]?.val}
readOnly={readonly}
/>
</FormUi>
)}
/>
</div>
</div>
</ScrollArea>
</form>
</Form>
</div>
@@ -561,15 +561,17 @@ GisApp.core.prototype = {
*/
setLayerOnMap: function (layerIds, visible, addQurryFlter) {
for (let i in layerIds) {
let id = layerIds[i];
let layer = this.getLayerById(id);
if (layer) {
layer.setVisible(visible);
} else if (visible) {
const layerCode = GisApp.layerCode[id];
if(!layerCode.lyrTyNm) continue;
const queryFlter = layerCode?.flterSql || '' + ' ' + (addQurryFlter || '');
layerCode['flterSql'] = queryFlter;
//layer = this.addWmsLayer(layerCode);
//layer = this.addWmsLayer(layerCode);
layer = this.addWfsLayer(layerCode);
}
}