Merge commit '965accac4abe027a947071e1758eb5413c322f7d' into iipbs/wr/dev
iipbs_wr / build (push) Waiting to run

This commit is contained in:
leedj312
2025-04-03 09:23:28 +09:00
14 changed files with 348 additions and 236 deletions
+2 -2
View File
@@ -19,9 +19,9 @@ export default function Home() {
<Button className="place-self-auto">
<Link href="matMng/matDmd/coReg">수요처 등록</Link>
</Button>
<Button className="place-self-auto">
{/* <Button className="place-self-auto">
<Link href="ruseFcltMng/fcltReg/htdflReg">온배수 등록</Link>
</Button>
</Button> */}
</div>
</>
);
@@ -21,6 +21,8 @@ import ListDiv from "@common/business_components/ui/list_div";
import { Button, TableHead, TableRow } from "@common/components";
import { useEffect, useState } from "react";
export const headMakeColSpan = (upHeadList: TableUpperProps[]) => {
return (
<>
@@ -32,7 +34,7 @@ export const headMakeColSpan = (upHeadList: TableUpperProps[]) => {
</TableHead>
) : head.upName === "upChangeRe" && head.upSequnce === 1 ? (
<TableHead key={head.id} rowSpan={1} colSpan={3}>
{"중축 개축 증축 "}
{"중축 개축 재축 "}
</TableHead>
) : null
)}
@@ -47,6 +49,10 @@ export const headMakeColSpan = (upHeadList: TableUpperProps[]) => {
</>
);
};
//-------------------------------------------------------------------------------------------------------
export default function Home() {
const { rain, code, init } = useWrStore((state) => {
return state;
@@ -54,10 +60,12 @@ export default function Home() {
const { rainRes } = rain;
const [rainForm, setRainForm] = useState<RainyBuilding>();
const [bdstTable, setbdstTable] = useState<RainyBuilding[]>();
const [searchTxt , setSearchTxt] = useState<string>()
const nodeList = headMakeColSpan(rain.upHeadList);
useEffect(() => {
if (!rain.isInit) {
init();
init(undefined);
}
}, [rain.isInit, init]);
@@ -65,12 +73,17 @@ export default function Home() {
if (code.sggCd.length > 0) {
const table = rainRes.map((item) => {
const sggText = code.sggCd.find(
(cd) => cd.val.toString() === item.sggCd
(cd) => cd.val === Number(item.sggCd)
)?.text;
const cityText = code.cityCd.find(
(cd) => cd.val.toString() === item.ctpvCd
(cd) => cd.val === Number(item.ctpvCd)
)?.text;
return { ...item, sggText: sggText, cityText: cityText };
const bdstusgText = code.bdstUsgCd.find(
(cd) =>cd.val === item?.reuseBuilding[0]?.bdstUsgCd
)
return { ...item, sggText: sggText, cityText: cityText ,bdsgUsgText:bdstusgText };
});
setbdstTable(table);
@@ -95,28 +108,26 @@ export default function Home() {
<SearchInput
className="col-span-3 my-7"
label="건물명"
textValue={""}
setText={function (): void {
throw new Error("Function not implemented.");
}}
textValue={searchTxt || ""}
setText={(e)=>{setSearchTxt(e)}}
/>
</SearchFormLeft>
<SearchFormRight>
<Button className="mr-4 rounded-lg">조회</Button>
<Button className="mr-4 rounded-lg" onClick={(e)=>{init(searchTxt||"")} }>조회</Button>
<UiModal
butNm="신규등록"
title="건축물 시설 등록(빗물이용시설)"
body={<BdstReg></BdstReg>}
body={<BdstReg moType="rain"></BdstReg>}
bodyClass="sm:max-w-7xl"
/>
</SearchFormRight>
</SearchDiv>
</div>
</div>
<div className="grid grid-cols-6 gap-4 ">
<div className="col-span-4">
<div className="grid grid-cols-6 gap-4 ">
<div className="col-span-4 max-h-full ovreflow-y-scroll">
<ListDiv>
<UiTable
<UiTable
tableData={bdstTable || []}
headlist={rain.upHeadList}
pageSize={100}
@@ -145,3 +156,6 @@ export default function Home() {
</>
);
}
@@ -1,69 +1,112 @@
'use client'
"use client";
import { useWrStore } from "@/app/store";
import type { TableUpperProps } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
import { RswtrRegForm } from "@/components/ui/form/fcltReg/rswtrReg/component";
import { ScrollArea, SearchDiv, SearchInput, UiTable } from "@common/business_components";
import { Button, TableHead, TableRow } from "@common/components";
const headMakeColSpan = (upHeadList: TableUpperProps[]) => {
return (<>
<TableRow>{
upHeadList.map((head: TableUpperProps) =>
(!head.upSequnce ? <TableHead rowSpan={2} key={head.id}>{head.title}</TableHead> :
head.upName === 'upChangeRe' && head.upSequnce === 1 ? <TableHead key={head.id} rowSpan={1} colSpan={3}>{'중축 개축 증축 '}</TableHead> : null))}
</TableRow>
<TableRow>
{upHeadList.map((head: TableUpperProps) =>
(head.upName === 'upChangeRe' ? <TableHead key={head.id}>{head.title}</TableHead> : null))}
</TableRow>
</>)
}
import { BdstReg } from "@/components/ui/modal/bdstReg/component";
import {
ContentsDiv,
ScrollArea,
SearchDiv,
SearchFormLeft,
SearchFormRight,
SearchInput,
Title,
UiModal,
UiTable,
} from "@common/business_components";
import ListDiv from "@common/business_components/ui/list_div";
import { Button} from "@common/components";
import { headMakeColSpan } from "../rainReg/page";
import { useEffect, useState } from "react";
import type { RswtBuilding } from "@/app/store/ruseFcltMng/fcltReg/rswtReg";
export default function Home() {
const {rswt} = useWrStore((state) => state);
const { code,rswt,initRswt } = useWrStore((state) => state);
const nodeList = headMakeColSpan(rswt.upHeadList);
const total = 100;
const [bdstTable, setbdstTable] = useState<RswtBuilding[]>();
const {rswtRes} = rswt;
const headName = () => {
return (
<h1 className="pl-3 text-xl">○건축물 목록</h1>
)
}
useEffect(() => {
if (!rswt.isInit) {
initRswt(undefined);
}
}, [rswt.isInit, initRswt]);
useEffect(() => {
if (code.sggCd.length > 0) {
console.log(rswtRes)
const table = rswtRes?.map((item) => {
const sggText = code.sggCd.find(
(cd) => cd.val === Number(item.sggCd)
)?.text;
const cityText = code.cityCd.find(
(cd) => cd.val === Number(item.ctpvCd)
)?.text;
return { ...item, sggText: sggText, cityText: cityText };
});
setbdstTable(table);
}
}, [code, rswtRes]);
return (
<>
<div className="grid grid-cols-2 gap-4 ">
<div className='col-span-2'>
<h1 className="pl-3 text-2xl" >중수도시설 등록 </h1>
<div className="m-8">
<SearchDiv >
<div className='w-4/5 grid grid-cols-6 gap-1 mx-4'>
<SearchInput className='col-span-1 my-7 text-2xl' label="건물명:" />
<ContentsDiv>
<div className="grid grid-cols-4 gap-4 ">
<div className="col-span-4">
<Title title={"중수도시설 등록 "} />
<SearchDiv>
<SearchFormLeft>
<SearchInput
className="col-span-3 my-7"
label="건물명:"
textValue={""}
setText={function (val: string): void {
throw new Error("Function not implemented.");
}}
/>
</SearchFormLeft>
<SearchFormRight>
<Button className="mr-4 rounded-lg">조회</Button>
<Button className="mr-4 rounded-lg">저장</Button>
<UiModal
butNm="신규등록"
title="건축물 시설 등록(중수도시설)"
body={<BdstReg moType={"rswt"}></BdstReg>}
bodyClass="sm:max-w-7xl"
/>
</SearchFormRight>
</SearchDiv>
</div>
<div className='w-1/5 flex items-center justify-end'>
<Button className='mr-4 rounded-lg'>조회</Button>
<Button className='mr-4 rounded-lg'>저장</Button>
<Button className='mr-4 rounded-lg'>신규등록</Button>
</div>
</SearchDiv>
</div>
</div>
<div className="colsapn-1 pl-11">
<UiTable tableData={rswt.rswtOfObject} headlist={rswt.upHeadList} pageSize={100} total={10} headName={headName()}>
{nodeList}
</UiTable>
</div>
<div className="colsapn-1 pr-11 max-h-full ovreflow-y-scroll">
<ScrollArea>
<RswtrRegForm></RswtrRegForm>
</ScrollArea>
</div>
</div>
<div className="grid grid-cols-6 gap-4 ">
<div className="col-span-4">
<ListDiv>
<UiTable
tableData={bdstTable||[]}
headlist={rswt.upHeadList}
pageSize={100}
total={10}
headName={"○건축물 목록"}
cellClick={undefined}
>
{nodeList}
</UiTable>
</ListDiv>
</div>
<div className="col-span-2 max-h-full ovreflow-y-scroll">
<ListDiv>
<ScrollArea>
<RswtrRegForm></RswtrRegForm>
</ScrollArea>
</ListDiv>
</div>
</div>
</ContentsDiv>
</>
);
}
+47 -2
View File
@@ -11,7 +11,7 @@ export const yn :selectArray[]=[
{val:'N', text:'N'},
]
//공통 건축물 용도
export const bdstUsgCd: selectArray[] = [
{ val: 1, text: "운동장" },
{ val: 2, text: "체육관" },
@@ -30,7 +30,7 @@ export const bdstUsgCd: selectArray[] = [
{ val: 15, text: "대규모점포" },
{ val: 16, text: "기타" },
];
//빗물 집수면 종류 용도
export const rainFcltCd = [
{ val: "1", text: "지붕" },
{ val: "2", text: "건물옥상" },
@@ -44,6 +44,48 @@ export const rainFcltCd = [
{ val: "10", text: "확인불가" },
];
//중수도 필수 원수종류
export const rswtBdstType :selectArray[]= [
{ text: "숙박업", val: "17" },
{ text: "목욕장업", val: "18" },
{ text: "공장", val: "19" },
{ text: "발전시설", val: "20" },
{ text: "관광단지개발사업", val: "21" },
{ text: "도시개발사업", val: "22" },
{ text: "산업단지개발사업", val: "23" },
{ text: "택지개발사업", val: "24" },
{ text: "대규모점포(대형마트)", val: "25" },
{ text: "대규모점포(전문점)", val: "26" },
{ text: "대규모점포(백화점)", val: "27" },
{ text: "대규모점포(쇼핑센터)", val: "28" },
{ text: "대규모점포(복합쇼핑몰)", val: "29" },
{ text: "물류시설", val: "30" },
{ text: "운수시설(여객자동차터미널)", val: "31" },
{ text: "운수시설(철도시설)", val: "32" },
{ text: "운수시설(공항시설)", val: "33" },
{ text: "운수시설(항만시설)", val: "34" },
{ text: "업무시설(공공업무시설)", val: "35" },
{ text: "업무시설(금융업소)", val: "36" },
{ text: "업무시설(사무소)", val: "37" },
{ text: "업무시설(결혼상담소 등 소개업소)", val: "38" },
{ text: "업무시설(출판사)", val: "39" },
{ text: "업무시설(신문사)", val: "40" },
{ text: "업무시설(오피스텔)", val: "41" },
{ text: "교정시설", val: "42" },
{ text: "방송국", val: "43" },
{ text: "전신전화국", val: "44" },
{ text: "기타", val: "45" },
];
const orgwtKndCd = [
{ text: "오수(변기 오수 제외)", val: "1" },
{ text: "오수", val: "2" },
{ text: "폐수", val: "3" },
{ text: "오수 및 폐수", val: "4" },
{ text: "기타", val: "5" },
];
export const chBuCd = [
{ val: "1", text: "증축" },
{ val: "2", text: "개축" },
@@ -60,6 +102,7 @@ export type comCodeState = {
bdstUsgCd: selectArray[];
cityCd: selectArray[];
sggCd: selectArray[];
orgwtKndCd:selectArray[];
yn:selectArray[];
};
};
@@ -85,6 +128,7 @@ export const getCityCd = async (set: any) => {
val: item.mctpvCd,
text: item.mctpvKornNm,
}));
cityCd.unshift({val:0,text:'전체'})
set((state: comCodeState) => ({
code: {
...state.code,
@@ -99,6 +143,7 @@ export const comCodeStateExport: comCodeState = {
rainFcltCd: rainFcltCd,
bdstUsgCd: bdstUsgCd,
chBuCd:chBuCd,
orgwtKndCd:orgwtKndCd,
cityCd: [],
sggCd: [],
yn:yn
@@ -34,12 +34,12 @@ export type bdstState = {
};
type bdstActions = {
findBdst: (sggCd:string, searchTxt:string) => void ;
findBdst: (sggCd:string, searchTxt:string, flag:string) => void ;
};
const findBdstInfo = async(sggCd:string, searchTxt:string)=>{
return await getFectch('wr', `/reuseFc/building/${sggCd}`+(searchTxt?`/${searchTxt}`:''))
const findBdstInfo = async(sggCd:string, searchTxt:string ,flg:string)=>{
return await getFectch('wr', `/reuseFc/building/${flg}/${sggCd}`+(searchTxt?`/${searchTxt}`:'' ))
}
@@ -55,10 +55,10 @@ export const bdstActionsExport: (set: any) => bdstActions = (
) => {
return {
findBdst: async(sggCd:string, searchTxt:string) =>{
findBdst: async(sggCd:string, searchTxt:string ,flg:string ) =>{
try{
const bdst = await findBdstInfo(sggCd, searchTxt);
const bdst = await findBdstInfo(sggCd, searchTxt, flg);
return set((state:bdstState) =>({
...state,
bdst:{
@@ -25,10 +25,10 @@ export const rainZod =
instlCst: z.number(),
instlCstSprtYn: z.string(),
instlCstSprtAmt: z.number(),
grntchBdstCertYn: z.string(),
grntchBdstCertNo: z.string(),
grntchBdstCertGrd: z.string(),
grntchBdstCertYr: z.string(),
grntchBdstCertYn: z.string().nullish(),
grntchBdstCertNo: z.string().nullish(),
grntchBdstCertGrd: z.string().nullish(),
grntchBdstCertYr: z.string().nullish(),
bdstReuseFcltFk:z.number().nullish(),
pntfColKnd: z.string(),
pntfColArea: z.number(),
@@ -92,6 +92,7 @@ export type chgBuilding={
export type RainyBuilding = {
bdstInfoPk: number|null;
ctpvCd: number;
sggCd: number;
bdstNm: string;
@@ -99,7 +100,6 @@ export type RainyBuilding = {
frstArchPrmsnDt: Date;
archArea: string;
archChgArea: number;
bdstInfoPk: number;
reuseBuilding: reuseBuilding[];
chgBuilding:chgBuilding[]
};
@@ -146,7 +146,8 @@ export const upHeadList: TableUpperProps[] = [
{ id: "sggText", title: "시군구" },
{ id: "bdstNm", title: "시설명" },
{ id: "daddr", title: "위치" },
{ id: "bdstUsgCd", title: "건축물용도" },
{ id: "bdstUsgText", title: "건축물용도" },
// { id: "bdstUsgCd", title: "건축물용도" },
{ id: "frstArchPrmsnDt", title: "최초건축허가일" },
{ id: "archArea", title: "건축면적" },
{ id: "lawTrgtYn", title: "법적의무대상여부" },
@@ -223,8 +224,8 @@ export type rainFacState = {
};
};
type rainFacSActions = {
init: () => void;
dataInit: () => void;
init: (txt:string|undefined) => void;
rainSearTxt: (txt:string) => void;
rainReg: (data: RainyBuilding) => void;
rainUpdate: (data: RainyBuilding) => void;
};
@@ -241,23 +242,20 @@ export const rainFacStateExport: rainFacState = {
},
};
const findBdstInfo = async(sggCd:string, searchTxt:string)=>{
return await getFectch('wr', `/reuseFc/building/${sggCd}/${searchTxt}`)
}
const initFetch = async () => {
return await getFectch("wr", "/reuseFc/rainyInfoList/1/20/41");
const initFetch = async (txt:string|undefined) => {
return await getFectch("wr", `/reuseFc/rainyInfoList/1/20/41` +(txt? `/${txt}`:''));
};
export const rainFacActionsExport: (set: any) => rainFacSActions = (
set: any
) => {
return {
init: async () => {
init: async (txt:string|undefined) => {
try {
// 파라이터 수정 통합관리자 =0, 시관리자=시코드, 시군구 관리자= 시군구 코드 를 세번째 파라미터로 지정 / 건축물 서치가 있을경우 4번째 파라미터로 던지기 즉 1/20/42(서울시)/영현빌딩 이런식으로)
const rainRes = await initFetch();
const rainRes = await initFetch(txt);
// 여기서 상태 업데이트
return set((state: rainFacState) => ({
...state,
@@ -273,20 +271,30 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = (
console.log("finally");
}
},
dataInit: () =>
set((state: rainFacState) => {
console.log(" state ", state.rain);
return {
rain: {
...state.rain,
isInit: false,
},
};
}),
rainSearTxt: async(txt:string) =>{
try{
const rainRes = await getFectch('wr' , `/reuseFc/rainyInfoList/1/20/41` +(txt? `/${txt}`:''))
set((state: rainFacState) => {
return {
rain: {
...state.rain,
rainRes: rainRes,
isInit: false,
},
};
})}
catch(erTxt){
console.log("error", erTxt)
}
},
rainReg: async (data: RainyBuilding) => {
try {
const res = await postFectch("/reuseFc/rainyInfo", data);
const rainRes = await initFetch();
if(res.ok){
alert(" 등록이 완료되었습니다.")
}
const rainRes = await initFetch(undefined);
set((state: rainFacState) => ({
...state,
rain: {
@@ -299,7 +307,6 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = (
console.log("e", e);
alert("등록 오류입니다.");
} finally {
alert("등록이 완료되었습니다.");
}
},
rainUpdate: async (data: RainyBuilding) => {
@@ -311,7 +318,7 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = (
alert(" 수정이 완료되었습니다.")
}
const rainRes = await initFetch();
const rainRes = await initFetch(undefined);
set((state: rainFacState) => ({
...state,
rain: {
@@ -1,94 +1,97 @@
import { upHeadList, type bdstType, type selectArray, type TableUpperProps } from "../rainReg";
import { getFectch } from "@/components/lib/api";
import { upHeadList, type chgBuilding, type TableUpperProps } from "../rainReg";
export type RswtBuilding = {
bdstInfoPk: number;
ctpvCd: number;
sggCd: number;
bdstNm: string;
daddr: string;
frstArchPrmsnDt: Date;
archArea: string;
archChgArea: number;
reuseBuilding: rswtReuseBuilding[];
chgBuilding: chgBuilding[];
};
const rswtOfObject:bdstType[] = [
{
sido: "서울",
sigungo: "종로구",
facilityName: "그랑서울",
location: "종로 33",
locationgubun: "업무시설",
firstConstructionPermission : '2024-10-10',
buildingArea: "50",
facilityCapacity: "800,000",
reuse: "Y",
permissionDay:'2024-10-10',
register: "Y",
legalTargetYn:"Y"
},
{
sido: "서울",
sigungo: "종로구",
facilityName: "그랑서울",
location: "종로 33",
locationgubun: "업무시설",
firstConstructionPermission : '2024-10-10',
buildingArea: "50",
facilityCapacity: "800,000",
reuse: "Y",
permissionDay:'2024-10-10',
register: "Y",
legalTargetYn:"Y"
},
{
sido: "서울",
sigungo: "종로구",
facilityName: "그랑서울",
location: "종로 33",
locationgubun: "업무시설",
firstConstructionPermission : '2024-10-10',
buildingArea: "50",
facilityCapacity: "800,000",
reuse: "Y",
permissionDay:'2024-10-10',
register: "Y",
legalTargetYn:"Y"
},
]
export type rswtReuseBuilding = {
bdstRuseFcltPk: number;
bdstInfoFk: number;
instlCmptnDt: Date | undefined;
instlCst: number | undefined;
operMngCd: number;
lawTrgtYn: string | undefined;
anlOperCst: number;
instlCstSprtYn: string | undefined;
instlCstSprtAmt: number | undefined;
bdstUsgCd: number | undefined;
grntchBdstCertYn: string | undefined;
grntchBdstCertNo: string | undefined;
grntchBdstCertGrd: string | undefined;
grntchBdstCertYr: string | undefined;
rswtrObj: rswtrObj | null;
};
export type rswtrObj = {
bdstRuseFcltFk: number | undefined;
wtrUsqty: number | undefined;
oblgTrgtWtrUsqty: number | undefined;
orgwtKndCd: string | undefined;
filtrTrtmfctProcs: string | undefined;
filtrTrtmfctUsgCd: string | undefined;
rswtrUsqty: number;
altUswtrUtztnYn: string;
altUswtrKndCd: string;
altUswtrUtztnQnt: number;
altUswtrIdntyMthdCd: string;
};
const rswtRes: RswtBuilding[] = [];
const selectHomeWater = [
{ text: '집수면', val: "1" },
{ text: "종류", val: "2" },
];
const selectYN= [
{ text: 'Y', val: "1" },
{ text: 'N', val: "2" },
];
export type rswtFacState ={ rswt:{
export type rswtFacState = {
rswt: {
isInit: boolean;
upHeadList: TableUpperProps[];
rswtOfObject: bdstType[];
selectHomeWater:selectArray[];
selectYN:selectArray[];
}}
rswtRes: RswtBuilding[];
};
};
type rswtFacSActions = {
decrementList: () => void
}
initRswt: (txt: string | undefined) => void;
};
export type rswtFacType = rswtFacState & rswtFacSActions;
export const rswtFacStateExport:rswtFacState= {rswt:{
isInit:false,
export const rswtFacStateExport: rswtFacState = {
rswt: {
isInit: false,
upHeadList: upHeadList,
rswtOfObject: rswtOfObject,
selectHomeWater:selectHomeWater,
selectYN:selectYN
}}
export const rswtFacActionsExport:(set:any)=>rswtFacSActions=(set: any) => {
return {
decrementList:()=>set(
(state:rswtFacState) => {
return (
{rain:{
upHeadList: state.rswt.upHeadList,
rainOfObject:
state.rswt.rswtOfObject.slice(0, state.rswt.rswtOfObject.length - 1)
}})}
)
}
}
rswtRes: rswtRes,
},
};
const initFetch = async (txt: string | undefined) => {
return await getFectch(
"wr",
`/reuseFc/waterreuseFc/1/20/01` + (txt ? `/${txt}` : "")
);
};
export const rswtFacActionsExport: (set: any) => rswtFacSActions = (
set: any
) => {
return {
initRswt: async (txt: string | undefined) => {
try {
const rswtRes = await initFetch(txt);
return set((state: rswtFacState) => ({
...state,
rswt: {
...state.rswt,
rswtRes: rswtRes,
isInit: false,
},
}));
} catch (error) {
console.log(error);
}
},
};
};
@@ -70,12 +70,14 @@ export function RainRegForm({
...rb?.rainyObj,
...data.reuseBuilding?.at(0),
pntfColKnd: selectedOption ? String(selectedOption.val) : undefined,
frstArchPrmsnDt: new Date(data.frstArchPrmsnDt)
frstArchPrmsnDt: new Date(data.frstArchPrmsnDt ||null),
instlCmptnDt: new Date(data?.instlCmptnDt ||null)
};
form.reset(formData);
} else {
formData = {
...data
...data,
frstArchPrmsnDt: new Date(data.frstArchPrmsnDt||null)
};
form.reset(formData);
@@ -142,15 +144,14 @@ export function RainRegForm({
};
if (isModal) {
// regRainForm.bdstInfoPk = null;
rainReg(regRainForm);
} else {
console.log(" regRainForm ", regRainForm)
rainUpdate(regRainForm);
}
};
function onSubmit(values: z.infer<typeof formSchema>) {
console.log(values);
objToForm(values);
}
@@ -33,7 +33,7 @@ const formSchema = z.object({
});
export function RswtrRegForm() {
const { rswt } = useWrStore((state) => state);
const { rswt,code } = useWrStore((state) => state);
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
@@ -165,7 +165,7 @@ export function RswtrRegForm() {
<FormUi label="필수 종류">
<SelectBox
selectClass={selectClass}
selectArray={rswt.selectYN}
selectArray={code.orgwtKndCd}
onSelectValue={onSelectValue}
{...field}
/>
@@ -189,23 +189,7 @@ export function RswtrRegForm() {
)}
/>
</div>
<div className="col-span-5 pl-6">
<FormField
control={form.control}
name="utztmUsgCd"
render={({ field }) => (
<FormUi label="이용용도">
<SelectBox
selectClass={selectClass}
label={""}
selectArray={rswt.selectYN}
onSelectValue={onSelectValue}
{...field}
/>
</FormUi>
)}
/>
</div>
</div>
<div className=" my-2">
@@ -226,7 +210,7 @@ export function RswtrRegForm() {
<SelectBox
selectClass={selectClass}
label={""}
selectArray={rswt.selectYN}
selectArray={code.yn}
onSelectValue={onSelectValue}
{...field}
/>
@@ -265,7 +249,7 @@ export function RswtrRegForm() {
<SelectBox
selectClass={selectClass}
label={""}
selectArray={rswt.selectYN}
selectArray={code.yn}
onSelectValue={onSelectValue}
{...field}
/>
@@ -11,6 +11,8 @@ import { useEffect, useState } from "react";
import { RainRegForm } from "../../form/fcltReg/rainReg/component";
import { getCityCd, type selectArray } from "@/app/store/common/code";
import { getCity } from "@/components/lib/func/commom";
import { RswtrRegForm } from "../../form/fcltReg/rswtrReg/component";
import { HtdflRegForm } from "../../form/fcltReg/htdflReg/component";
export type objSearchType = {
sgg: string|number;
@@ -18,7 +20,7 @@ export type objSearchType = {
};
export function BdstReg() {
export function BdstReg({moType}:{moType:string} ) {
const { rain, code, bdst,findBdst } = useWrStore((state) => {
return state;
});
@@ -42,17 +44,17 @@ export function BdstReg() {
setObjSearch({...objSearch,sgg: String(val)})
};
const searchBdst=()=>{
if(objSearch.city===""){
alert('시도조건은 필수 입니다.')
return
const searchBdst=(searchTxt: string | undefined)=>{
let data =objSearch.city;
if(objSearch.city==="" ){
data = String(code.cityCd[0]?.val)
}
let data =objSearch.city;
if(objSearch.sgg !=="" ){
data = objSearch.sgg
}
findBdst(String(data), searchTxt || "")
findBdst(String(data), searchTxt || "","RNB" )
}
@@ -92,7 +94,7 @@ export function BdstReg() {
selectArray={code.cityCd}
onSelectValue={getSelCity}
>
{" "}
{""}
</SelectBox>
<SelectBox
className="col-span-3"
@@ -112,10 +114,11 @@ export function BdstReg() {
setText={ setSearchTxt}
/> */}
<Button className="rounded-lg" onClick={()=>{searchBdst()}}>조회</Button>
<Button className="rounded-lg" onClick={()=>{searchBdst(searchTxt)}}>조회</Button>
</div>
<div className="border-t border-gray-300 my-4"></div>
<div className="h-auto">
<ScrollArea className="h-[20vh]">
<div>
<UiTable
tableData={bdstTable || []}
@@ -128,10 +131,16 @@ export function BdstReg() {
{nodeList}
</UiTable>
</div>
</ScrollArea>
<div className="border-t border-gray-300 my-4"></div>
<ScrollArea className="h-[60vh]">
<div>
<RainRegForm rainForm={rainBdstForm } isModal={true}/>
{moType === 'rain'?
<RainRegForm rainForm={rainBdstForm} isModal={true} />
:moType==='rswt'?<RswtrRegForm></RswtrRegForm>
:<HtdflRegForm></HtdflRegForm>
}
</div>
</ScrollArea>
</div>
@@ -9,6 +9,7 @@ import type { DayPickerSingleProps } from "react-day-picker";
import { Button, Calendar, Popover, PopoverContent, PopoverTrigger } from "@common/components/ui";
import { cn } from "../../lib/utils";
import { FormControl } from "../form";
import { ko } from "date-fns/locale";
type DatePickerProps = DayPickerSingleProps & { field: { value: Date; onChange: (date: Date | undefined) => void } ,selectClass:string|undefined };
@@ -41,6 +42,7 @@ export function DatePicker({ field, selectClass }: DatePickerProps) {
selected={field?.value}
onSelect={field?.onChange}
initialFocus
locale={ko}
/>
</PopoverContent>
</Popover>
@@ -2,7 +2,7 @@
function ListDiv(props: {children: React.ReactNode}) {
return (
<div className="card card-border">
<div className="card card-border h-full">
{props.children}
</div>
)
@@ -1,4 +1,5 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
import { useState } from "react";
import UiPageNations from "./uiPageNations";
type UiTableProps = {
@@ -9,6 +10,7 @@ type UiTableProps = {
total: number;
children: React.ReactNode | undefined;
cellClick : ((index:number|undefined)=>void) | undefined;
onPageChange: (page: number) => void;
}
type UiHeadProps = {
@@ -16,15 +18,18 @@ type UiHeadProps = {
title: string;
}
export function UiTable({ tableData, headlist, pageSize, total, children, headName, cellClick }: UiTableProps) {
const cur = 1;
export function UiTable({ tableData, headlist, pageSize, total, children, headName, cellClick, onPageChange }: UiTableProps) {
const [cur, setCur] = useState<number>(1);
const handlePageChange = (page: number) => {
setCur(page);
onPageChange(page);
}
return (
<>
{headName ? <div className="card-header">
<h3 className="text-2xl font-medium text-label">{headName}</h3>
</div> : <></>}
<div className="card !m-[1.2rem] max-h-[40rem] overflow-auto !p-0r">
<div className="card !m-[1.2rem] overflow-auto !p-0r">
<Table>
<TableHeader>
{children ? <>{children}</> : <TableRow>
@@ -43,7 +48,7 @@ export function UiTable({ tableData, headlist, pageSize, total, children, headNa
))}
</TableBody>
</Table>
{total <= 0 ? <></> : <UiPageNations total={total} cur={cur} pageSize={pageSize} />}
{total <= 0 ? <></> : <UiPageNations total={total} cur={cur} pageSize={pageSize} onPageChange={handlePageChange} />}
</div>
</>
);
@@ -1,19 +1,18 @@
'use client';
import { useEffect, useState } from "react";
import {
Pagination,
PaginationContent,
PaginationItem,
PaginationPrevious,
PaginationLink,
PaginationNext
} from "./lib/pagination";
import { PaginationNext } from "./lib/pagination";
import { PaginationLink } from "./lib/pagination";
import { PaginationPrevious } from "./lib/pagination";
import { PaginationItem } from "./lib/pagination";
import { PaginationContent } from "./lib/pagination";
import { Pagination } from "./lib/pagination";
interface CommonPageNationsProps {
total: number;
cur: number;
pageSize: number;
onPageChange: (page: number) => void;
}
export default function UiPageNations(commonPageNationsProps: CommonPageNationsProps) {
@@ -30,7 +29,7 @@ export default function UiPageNations(commonPageNationsProps: CommonPageNationsP
const endPage = Math.min(startPage + pagesPerGroup - 1, totalPages);
const handlePageChange = (page: number) => {
setPageProps({ ...pageProps, cur: page });
pageProps.onPageChange(page);
};
return (