신규 등록 , 건축물 조회 수정

This commit is contained in:
leedj312
2025-04-02 17:48:32 +09:00
parent ea4a4504ee
commit b2891234ab
9 changed files with 273 additions and 179 deletions
@@ -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;
@@ -59,7 +65,7 @@ export default function Home() {
const nodeList = headMakeColSpan(rain.upHeadList);
useEffect(() => {
if (!rain.isInit) {
init();
init(undefined);
}
}, [rain.isInit, init]);
@@ -72,7 +78,12 @@ export default function Home() {
const cityText = code.cityCd.find(
(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);
@@ -106,16 +117,17 @@ export default function Home() {
<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>
<ScrollArea>
<UiTable
tableData={bdstTable || []}
headlist={rain.upHeadList}
@@ -126,6 +138,7 @@ export default function Home() {
>
{nodeList}
</UiTable>
</ScrollArea>
</ListDiv>
</div>
<div className="col-span-2 max-h-full ovreflow-y-scroll">
@@ -145,3 +158,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>
</>
);
}
+46 -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[];
};
};
@@ -99,6 +142,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:{
@@ -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: "법적의무대상여부" },
@@ -241,10 +242,7 @@ export const rainFacStateExport: rainFacState = {
},
};
const findBdstInfo = async(sggCd:string, searchTxt:string)=>{
return await getFectch('wr', `/reuseFc/building/${sggCd}/${searchTxt}`)
}
const initFetch = async (txt:string|undefined) => {
@@ -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);
}
},
};
};
@@ -142,15 +142,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;
});
@@ -52,7 +54,7 @@ export function BdstReg() {
data = objSearch.sgg
}
findBdst(String(data), searchTxt || "")
findBdst(String(data), searchTxt || "","RNB" )
}
@@ -133,7 +135,12 @@ export function BdstReg() {
<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>