관로시설 조회

This commit is contained in:
yschoi
2025-03-11 12:04:36 +09:00
parent 7bb973c912
commit 97d74250a5
10 changed files with 771 additions and 5 deletions
+60
View File
@@ -0,0 +1,60 @@
'use client'
import { SearchDiv, SelectBox, UiTable } from '@common/business_components';
import { Button, TableRow, Input, Label } from '@common/components';
import { TableHead } from '@common/components';
import { useSnStore } from '../../store';
import type { TableUpperProps } from '../../store/oper';
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>
</> )
}
export default function PublicReuseFaciltyInsert() {
const { upHeadList, publicReuseFacilityUper} = useSnStore((state) => state);
const nodeList= headMakeColSpan(upHeadList);
const total = 100;
const headName= ()=>{
return(
<p className="pl-3 text-xl">현황정보</p>
)
}
return ( <>
<div>
<p className="pl-3 text-2xl"> 현황정보 조회</p>
<SearchDiv>
<div className='flex'>
<SelectBox label='시설물' selectArray={[{text:'관로', val:'1'}]} />
<SelectBox label='사용여부' selectArray={[{text:'사용', val:'1'}]} />
<SelectBox label='경과년도' selectArray={[{text:'10년', val:'1'}]} />
<SelectBox label='경사' selectArray={[{text:'', val:'1'}]} />
<SelectBox label='흐름방식' selectArray={[{text:'자연유하', val:'1'}]} />
<SelectBox label='용도' selectArray={[{text:'오수관', val:'1'}]} />
<SelectBox label='관종' selectArray={[{text:'PE관관', val:'1'}]} />
<SelectBox label='관경' selectArray={[{text:'50', val:'1'}]} />
<Button className='mr-4' size='sm'>조회</Button>
</div>
</SearchDiv>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="colsapn-1">
<UiTable publicReuseFacility={publicReuseFacilityUper} headlist={upHeadList} pageSize={20} total={total} headName={headName()}>
{nodeList}
</UiTable>
</div>
</div>
</> )
}
+7 -1
View File
@@ -1,4 +1,6 @@
import './styles/base.css'
import {StoreProvider} from './store'
import { BaseLayout } from "@common/components";
export default function RootLayout({
children,
}: {
@@ -6,7 +8,11 @@ export default function RootLayout({
}) {
return (
<html lang="en">
<body>{children}</body>
<body>
<StoreProvider>
<BaseLayout>{children}</BaseLayout>
</StoreProvider>
</body>
</html>
)
}
+59
View File
@@ -0,0 +1,59 @@
'use client'
import { SearchDiv, SelectBox, UiTable } from '@common/business_components';
import { Button, TableRow, Input, Label } from '@common/components';
import { TableHead } from '@common/components';
import { useSnStore } from '../../store';
import type { TableUpperProps } from '../../store/oper/pplines';
const headMakeColSpan = (upHeadList: TableUpperProps[]) => {
return ( <>
<TableRow>{
upHeadList.map((head: TableUpperProps) =>
(<TableHead key={head.id}>{head.title}</TableHead>))}
</TableRow>
<TableRow>
{upHeadList.map((head: TableUpperProps) =>
(head.upName === 'upChangeRe'?<TableHead key={head.id}>{head.title}</TableHead>:null))}
</TableRow>
</> )
}
export default function PublicReuseFaciltyInsert() {
const { upHeadList, publicReuseFacilityUper} = useSnStore((state) => state);
const nodeList= headMakeColSpan(upHeadList);
const total = 100;
const headName= ()=>{
return(
<p className="pl-3 text-xl">점검 및 진단 현황</p>
)
}
return ( <>
<div>
<p className="pl-3 text-2xl"> 점검 및 진단 조회</p>
<SearchDiv>
<div className='flex'>
<SelectBox label='시설물' selectArray={[{text:'관로', val:'1'}]} />
<SelectBox label='사용여부' selectArray={[{text:'사용', val:'1'}]} />
<SelectBox label='경과년도' selectArray={[{text:'10년', val:'1'}]} />
<SelectBox label='경사' selectArray={[{text:'', val:'1'}]} />
<SelectBox label='흐름방식' selectArray={[{text:'자연유하', val:'1'}]} />
<SelectBox label='용도' selectArray={[{text:'오수관', val:'1'}]} />
<SelectBox label='관종' selectArray={[{text:'PE관관', val:'1'}]} />
<SelectBox label='관경' selectArray={[{text:'50', val:'1'}]} />
<Button className='mr-4' size='sm'>조회</Button>
</div>
</SearchDiv>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="colsapn-1">
<UiTable publicReuseFacility={publicReuseFacilityUper} headlist={upHeadList} pageSize={20} total={total} headName={headName()}>
</UiTable>
</div>
</div>
</> )
}
+55
View File
@@ -0,0 +1,55 @@
'use client'
import { SearchDiv, SelectBox, UiTable } from '@common/business_components';
import { Button, TableRow, Input, Label } from '@common/components';
import { TableHead } from '@common/components';
import { useSnStore } from '../../store';
import type { TableUpperProps } from '../../store/oper/pplines';
const headMakeColSpan = (upHeadList: TableUpperProps[]) => {
return ( <>
<TableRow>{
upHeadList.map((head: TableUpperProps) =>
(<TableHead key={head.id} >{head.title}</TableHead>))}
</TableRow>
</> )
}
export default function PublicReuseFaciltyInsert() {
const { upHeadList, publicReuseFacilityUper} = useSnStore((state) => state);
const nodeList= headMakeColSpan(upHeadList);
const total = 100;
const headName= ()=>{
return(
<p className="pl-3 text-xl">현황정보</p>
)
}
return ( <>
<div>
<p className="pl-3 text-2xl"> 현황정보 조회</p>
<SearchDiv>
<div className='flex'>
<SelectBox label='시설물' selectArray={[{text:'관로', val:'1'}]} />
<SelectBox label='사용여부' selectArray={[{text:'사용', val:'1'}]} />
<SelectBox label='경과년도' selectArray={[{text:'10년', val:'1'}]} />
<SelectBox label='경사' selectArray={[{text:'', val:'1'}]} />
<SelectBox label='흐름방식' selectArray={[{text:'자연유하', val:'1'}]} />
<SelectBox label='용도' selectArray={[{text:'오수관', val:'1'}]} />
<SelectBox label='관종' selectArray={[{text:'PE관관', val:'1'}]} />
<SelectBox label='관경' selectArray={[{text:'50', val:'1'}]} />
<Button className='mr-4' size='sm'>조회</Button>
</div>
</SearchDiv>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="colsapn-1">
<UiTable publicReuseFacility={publicReuseFacilityUper} headlist={upHeadList} pageSize={20} total={total} headName={headName()}>
</UiTable>
</div>
</div>
</> )
}
+60
View File
@@ -0,0 +1,60 @@
'use client'
import { SearchDiv, SelectBox, UiTable } from '@common/business_components';
import { Button, TableRow, Input, Label } from '@common/components';
import { TableHead } from '@common/components';
import { useSnStore } from '../../store';
import type { TableUpperProps } from '../../store/oper';
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>
</> )
}
export default function PublicReuseFaciltyInsert() {
const { upHeadList, publicReuseFacilityUper} = useSnStore((state) => state);
const nodeList= headMakeColSpan(upHeadList);
const total = 100;
const headName= ()=>{
return(
<p className="pl-3 text-xl">현황정보</p>
)
}
return ( <>
<div>
<p className="pl-3 text-2xl"> 현황정보 조회</p>
<SearchDiv>
<div className='flex'>
<SelectBox label='시설물' selectArray={[{text:'관로', val:'1'}]} />
<SelectBox label='사용여부' selectArray={[{text:'사용', val:'1'}]} />
<SelectBox label='경과년도' selectArray={[{text:'10년', val:'1'}]} />
<SelectBox label='경사' selectArray={[{text:'', val:'1'}]} />
<SelectBox label='흐름방식' selectArray={[{text:'자연유하', val:'1'}]} />
<SelectBox label='용도' selectArray={[{text:'오수관', val:'1'}]} />
<SelectBox label='관종' selectArray={[{text:'PE관관', val:'1'}]} />
<SelectBox label='관경' selectArray={[{text:'50', val:'1'}]} />
<Button className='mr-4' size='sm'>조회</Button>
</div>
</SearchDiv>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="colsapn-1">
<UiTable publicReuseFacility={publicReuseFacilityUper} headlist={upHeadList} pageSize={20} total={total} headName={headName()}>
{nodeList}
</UiTable>
</div>
</div>
</> )
}
+45
View File
@@ -0,0 +1,45 @@
'use client'
import { type ReactNode, createContext, useContext, useRef } from 'react'
import { useStore } from 'zustand'
import { type SnStore, StoreZus } from './store'
export type StoreApi = ReturnType<typeof StoreZus>
export const StoreContext = createContext<StoreApi | undefined>(
undefined,
)
export interface StoreProviderProps {
children: ReactNode
}
export const StoreProvider = ({
children,
}: StoreProviderProps) => {
const storeRef = useRef<StoreApi>(null)
console.log("StoreProvider");
if (!storeRef.current) {
storeRef.current = StoreZus()
}
return (
<StoreContext.Provider value={storeRef.current}>
{children}
</StoreContext.Provider>
)
}
export const useSnStore = <T,>(
selector: (store: SnStore) => T,
): T => {
const storeContext = useContext(StoreContext)
if (!storeContext) {
throw new Error(`useStore must be used within StoreProvider`)
}
return useStore(storeContext, selector)
}
+233
View File
@@ -0,0 +1,233 @@
export type TableUpperProps = {
id: string;
title: string;
upName?: string;
upSequnce?: number;
}
type PublicReuseFacility = {
sido: string,
sigungo: string,
facilityName: string,
location: string,
locationgubun: string,
facilityCapacity: string,
yn?: string,
authoDay?: string,
area?: string,
reuse?: string
}
const upHeadList:TableUpperProps[] = [
{ id: "sido", title: "자산ID"},
{ id: "sigungo", title: "설비시설"},
{ id: "facilityName", title: "주소"},
{ id: "location", title: "자산코드"},
{ id: "locationgubun", title: "자산명"},
{ id: "facilityCapacity", title: "용도"},
{ id: "yn", title: '신설/교체'},
{ id: "authoDay", title: '처리구역'},
{ id: "area", title: '내용연수' },
{ id: "reuse", title: '취득금액' },
];
const publicReuseFacilityUper:PublicReuseFacility[] = [
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
]
export type tableState = {
isInit: boolean;
upHeadList: TableUpperProps[];
publicReuseFacilityUper: PublicReuseFacility[];
}
type tableActions = {
decrementList: () => void
}
export type tableType = tableState & tableActions;
export const tableStateExport:tableState= {
isInit:false,
upHeadList: upHeadList,
publicReuseFacilityUper: publicReuseFacilityUper,
}
export const tableActionsExport:(set:any)=>tableActions=(set: any) => {
return {
decrementList:()=>set(
(state:tableState) => {
return (
{
upHeadList: state.upHeadList,
publicReuseFacilityUper:
state.publicReuseFacilityUper.slice(0, state.publicReuseFacilityUper.length - 1)
})}
)
}
}
+233
View File
@@ -0,0 +1,233 @@
export type TableUpperProps = {
id: string;
title: string;
upName?: string;
upSequnce?: number;
}
type PublicReuseFacility = {
sido: string,
sigungo: string,
facilityName: string,
location: string,
locationgubun: string,
facilityCapacity: string,
yn?: string,
authoDay?: string,
area?: string,
reuse?: string
}
const upHeadList:TableUpperProps[] = [
{ id: "sido", title: "자산ID121212"},
{ id: "sigungo", title: "설비시설"},
{ id: "facilityName", title: "주소"},
{ id: "location", title: "자산코드"},
{ id: "locationgubun", title: "자산명"},
{ id: "facilityCapacity", title: "용도"},
{ id: "yn", title: '신설/교체'},
{ id: "authoDay", title: '처리구역'},
{ id: "area", title: '내용연수' },
{ id: "reuse", title: '취득금액' },
];
const publicReuseFacilityUper:PublicReuseFacility[] = [
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
{
sido: "1048967",
sigungo: "관로",
facilityName: "양평군 양평읍 백안리 25-5전",
location: "S-T-S-2018000675",
locationgubun: "2018000675",
facilityCapacity: "오수관",
yn: "신설",
authoDay: "양평하수처리구역",
area: "30",
reuse: "28,313,220"
},
]
export type tableState = {
isInit: boolean;
upHeadList: TableUpperProps[];
publicReuseFacilityUper: PublicReuseFacility[];
}
type tableActions = {
decrementList: () => void
}
export type tableType = tableState & tableActions;
export const tableStateExport:tableState= {
isInit:false,
upHeadList: upHeadList,
publicReuseFacilityUper: publicReuseFacilityUper,
}
export const tableActionsExport:(set:any)=>tableActions=(set: any) => {
return {
decrementList:()=>set(
(state:tableState) => {
return (
{
upHeadList: state.upHeadList,
publicReuseFacilityUper:
state.publicReuseFacilityUper.slice(0, state.publicReuseFacilityUper.length - 1)
})}
)
}
}
+13
View File
@@ -0,0 +1,13 @@
import { createStore } from 'zustand/vanilla';
import { tableActionsExport, tableStateExport, type tableState, type tableType } from './oper/index';
//import { upHeadList as pplinesUpHeadList, publicReuseFacilityUper as pplinesData } from './oper/pplines';
export type SnStore = tableType;
export const StoreZus = (initState: tableState = tableStateExport) => {
return createStore<SnStore>()((set) => {
return {
...initState,
...tableActionsExport(set)
}
})
}
//store 등록하는 부분
+6 -4
View File
@@ -3,18 +3,20 @@
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "NODE_OPTIONS='--inspect' next dev",
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@common/assets": "workspace:*",
"@common/business_components": "workspace:*",
"@common/components": "workspace:*",
"next": "15.1.7",
"zod": "^3.24.2",
"@hookform/resolvers": "^4.1.3",
"react-hook-form": "^7.54.2"
"next": "15.1.7",
"react-hook-form": "^7.54.2",
"zod": "^3.24.2",
"zustand": "^5.0.3"
},
"devDependencies": {
"@eslint/eslintrc": "^3",