하수재이용 등록 객체초기화 및 파일 다운로드
This commit is contained in:
@@ -15,74 +15,75 @@ import { Tabs, TabsList, TabsTrigger, TabsContent } from "@common/components";
|
||||
import { useEffect, useState } from "react";
|
||||
import ListDiv from "@common/business_components/ui/list_div";
|
||||
import { tableData } from "@/components/lib/func/commom";
|
||||
import type { customPbnst, fcBizSchema, fcBizType, pubHasuType, ruseFcltType } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
||||
import type {
|
||||
customPbnst,
|
||||
fcBizSchema,
|
||||
fcBizType,
|
||||
pubHasuType,
|
||||
ruseFcltType,
|
||||
} from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
||||
import { PbnstMngForm } from "@/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm";
|
||||
import { PbnstBuseForm } from "@/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm";
|
||||
import { z } from "zod";
|
||||
import { PbnstRegModal } from "@/components/ui/modal/fcltReg/pbnstRegModal/pbnstRegModal";
|
||||
import { Toaster } from "react-hot-toast";
|
||||
import { ToastFormUi } from "@/components/ui/toast/toastFromUi";
|
||||
|
||||
export default function PublicReuseFaciltyInsert() {
|
||||
const { code, pbnst, pubHasuInit,pbnstRegInit,pbnstMngData } = useWrStore((state) => state);
|
||||
const { pubFacHeadList,pbnstHasuRes, pbnstRes } = pbnst;
|
||||
const {
|
||||
code,
|
||||
pbnst,
|
||||
searchFclts,
|
||||
pubHasuInit,
|
||||
pbnstRegInit,
|
||||
getSwtrmtFcltNm,
|
||||
pbnstMngData,
|
||||
} = useWrStore((state) => state);
|
||||
const { pubFacHeadList, pbnstHasuRes, pbnstRes } = pbnst;
|
||||
const [currentTab, setCurrentTab] = useState<string>("mng");
|
||||
const [fcltMng, setFcltMng] = useState<ruseFcltType[]>();
|
||||
const [pbnstBiz, setPbnstBiz] = useState<fcBizType[]>();
|
||||
const [issNewReg, setIsNewReg] = useState<boolean>(false);
|
||||
const [isRuseReg, setIsRuseReg] = useState<{
|
||||
isModal: boolean;
|
||||
data: pubHasuType;
|
||||
}>({ isModal: false, data: {} as pubHasuType });
|
||||
|
||||
const [searchTxt, setSearchTxt] = useState<string>();
|
||||
const [bdstTable, setbdstTable] = useState<pubHasuType[]>();
|
||||
const [selectBdst, setSelectBdst] = useState<customPbnst | null>(null);
|
||||
const [selectedRow, setSelectedRow] = useState<pubHasuType | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (!pbnst.isInit ) {
|
||||
pubHasuInit('1','11');
|
||||
|
||||
///pbnstRegInit( '41');
|
||||
useEffect(() => {
|
||||
if (!pbnst.isInit) {
|
||||
pubHasuInit("1", "11");
|
||||
}
|
||||
}, [pbnst.isInit, pubHasuInit]);
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
|
||||
if (code.sggCd.length > 0 && pbnstHasuRes.length > 0) {
|
||||
setbdstTable(tableData(pbnstHasuRes, { code }));
|
||||
useEffect(() => {
|
||||
if(code.sggCd.length){
|
||||
if(searchFclts){
|
||||
setbdstTable(tableData(searchFclts, { code }));
|
||||
}else if (code.sggCd.length > 0 && pbnstHasuRes.length > 0) {
|
||||
setbdstTable(tableData(pbnstHasuRes, { code }));
|
||||
}
|
||||
}
|
||||
}, [code, pbnstHasuRes]);
|
||||
}, [code, pbnstHasuRes,searchFclts]);
|
||||
|
||||
const onSelectValue = (val: string) => {
|
||||
console.log(val);
|
||||
};
|
||||
const cellClick = (val: number | undefined) => {
|
||||
if (val === undefined) return;
|
||||
const selectRow = pbnstHasuRes?.[val];
|
||||
if (selectRow) {
|
||||
setSelectedRow(selectRow);
|
||||
setIsRuseReg({ ...isRuseReg, data: selectRow });
|
||||
pbnstRegInit(selectRow);
|
||||
}
|
||||
|
||||
pbnstRegInit(selectRow)
|
||||
|
||||
// setSelectBdst(pbnstRes);
|
||||
// setPbnstBiz(pbnstRes?.fcBizs)
|
||||
};
|
||||
const resetContents = () => {
|
||||
setFcltMng([]); // 빈 배열로 설정하여 신규 모드로 전환
|
||||
};
|
||||
|
||||
const handleTabChange = (value: string) => {
|
||||
setCurrentTab(value);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
console.log("pbnstBiz", pbnstBiz);
|
||||
},[pbnstBiz])
|
||||
|
||||
return (
|
||||
<>
|
||||
<ContentsDiv>
|
||||
<div className="grid grid-cols-4 gap-4">
|
||||
<div className="grid grid-cols-4 gap-4">
|
||||
<div className="col-span-4">
|
||||
<Title title={"하수재이용 시설 등록"} />
|
||||
<SearchDiv>
|
||||
@@ -100,6 +101,9 @@ useEffect(() => {
|
||||
className=""
|
||||
size={"sm"}
|
||||
onClick={(e) => {
|
||||
searchTxt && searchTxt?.length > 0
|
||||
? getSwtrmtFcltNm(searchTxt)
|
||||
: pubHasuInit("1", "11")
|
||||
}}
|
||||
>
|
||||
조회
|
||||
@@ -108,10 +112,14 @@ useEffect(() => {
|
||||
size={"sm"}
|
||||
className=""
|
||||
onClick={() => {
|
||||
pbnstMngData([] as customPbnst[] )
|
||||
setIsNewReg(!issNewReg)
|
||||
|
||||
} }
|
||||
pbnstMngData([] as customPbnst[]);
|
||||
isRuseReg.data.bscFctCd
|
||||
? setIsRuseReg({ ...isRuseReg, isModal: true })
|
||||
: ToastFormUi({
|
||||
body: "하수리시시설을 테이블을 선택하고 등록버튼을 눌러주세요",
|
||||
title: "재이용시설 등록",
|
||||
});
|
||||
}}
|
||||
>
|
||||
신규등록
|
||||
</Button>
|
||||
@@ -125,52 +133,57 @@ useEffect(() => {
|
||||
<div className="col-span-4 h-full min-h-0">
|
||||
<ListDiv className="min-h-0">
|
||||
<ScrollArea className="h-[60vh]">
|
||||
<UiTable
|
||||
<UiTable
|
||||
tableData={bdstTable || []}
|
||||
headlist={pubFacHeadList}
|
||||
pageSize={100}
|
||||
total={10}
|
||||
headName={"공공 하수처리시설 등록"}
|
||||
cellClick={cellClick}
|
||||
onPageChange={(page: number) => { } } children={undefined} />
|
||||
</ScrollArea>
|
||||
onPageChange={(page: number) => {}}
|
||||
children={undefined}
|
||||
/>
|
||||
</ScrollArea>
|
||||
</ListDiv>
|
||||
</div>
|
||||
<ListDiv className="col-span-2 pr-6 ">
|
||||
|
||||
<ScrollArea className="h-[60vh]">
|
||||
|
||||
|
||||
<Tabs defaultValue="mng" onValueChange={handleTabChange}>
|
||||
<TabsList className="">
|
||||
<TabsTrigger className="!text-xl" value="mng">시설정보</TabsTrigger>
|
||||
<TabsTrigger className="!text-xl" value="buse">차수별정보</TabsTrigger>
|
||||
<Button size={"sm"} className="!justify-end">
|
||||
저장
|
||||
<ScrollArea className="h-[60vh]">
|
||||
<Tabs defaultValue="mng" onValueChange={handleTabChange}>
|
||||
<TabsList className="">
|
||||
<TabsTrigger className="!text-xl" value="mng">
|
||||
시설정보
|
||||
</TabsTrigger>
|
||||
<TabsTrigger className="!text-xl" value="buse">
|
||||
차수별정보
|
||||
</TabsTrigger>
|
||||
<Button size={"sm"} className="!justify-end">
|
||||
저장
|
||||
</Button>
|
||||
</TabsList>
|
||||
<TabsContent className="max-h-full" value="mng">
|
||||
<TabsContent className="max-h-full" value="mng">
|
||||
<PbnstMngForm formType="update" />
|
||||
</TabsContent>
|
||||
<TabsContent className="max-h-full" value="buse">
|
||||
<PbnstBuseForm data={pbnstBiz || []} />
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
</ScrollArea>
|
||||
</TabsContent>
|
||||
<TabsContent className="max-h-full" value="buse">
|
||||
<PbnstBuseForm formType="update" />
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
</ScrollArea>
|
||||
</ListDiv>
|
||||
<UiModal
|
||||
body={<PbnstRegModal data={selectedRow || []}></PbnstRegModal>}
|
||||
body={
|
||||
<PbnstRegModal
|
||||
data={isRuseReg.data || ({} as customPbnst)}
|
||||
></PbnstRegModal>
|
||||
}
|
||||
bodyClass="w-[68vw] max-w-none h-[90vh]"
|
||||
open={issNewReg}
|
||||
open={isRuseReg.isModal}
|
||||
onOpenChange={(open) => {
|
||||
setIsNewReg(open);
|
||||
setIsRuseReg({ data: {} as pubHasuType, isModal: open });
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<Toaster position="top-center" />
|
||||
<Toaster position="top-center" />
|
||||
</ContentsDiv>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
fcBizSchema,
|
||||
type customPbnst,
|
||||
type fcBizType,
|
||||
type PbnstUpdateIndex,
|
||||
type pubHasuType,
|
||||
} from "./type";
|
||||
import type { SelectDataType } from "@common/business_components/ui";
|
||||
@@ -37,7 +38,6 @@ const fcOrgwtsHeadList = fcOrgwtsHeadListExport;
|
||||
export type pubFacState = {
|
||||
pbnst: {
|
||||
isInit: boolean;
|
||||
isReginit:boolean;
|
||||
pubFacHeadList: TableUpperProps[];
|
||||
pbnstMngUpHeadList: TableUpperProps[];
|
||||
pbnstMngNm: chHeadType[];
|
||||
@@ -51,6 +51,8 @@ export type pubFacState = {
|
||||
pbnstDemandHeadList: TableUpperProps[];
|
||||
fcOrgwtsHeadList: TableUpperProps[];
|
||||
pbnstMngRegData: customPbnst[];
|
||||
pbnsUpdateIndex: PbnstUpdateIndex;
|
||||
dmdComList:any[]
|
||||
};
|
||||
};
|
||||
type pubFacActions = {
|
||||
@@ -63,7 +65,8 @@ type pubFacActions = {
|
||||
pbnstMngData: (data: customPbnst[]) => void;
|
||||
pbnstBizData(data: fcBizType): void;
|
||||
getBizCycle: (pbnstObj: customPbnst) => void;
|
||||
pbnstRegFormInit:()=>void
|
||||
getDmdCompany:(txt :string)=>void;
|
||||
getPbnstUpdateIndex: (data: PbnstUpdateIndex) => void;
|
||||
};
|
||||
|
||||
export type pubFacType = pubFacState & pubFacActions;
|
||||
@@ -71,7 +74,6 @@ export type pubFacType = pubFacState & pubFacActions;
|
||||
export const pubFacStateExport: pubFacState = {
|
||||
pbnst: {
|
||||
isInit: false,
|
||||
isReginit:false,
|
||||
pubFacHeadList: pubFacHeadList,
|
||||
pbnstMngUpHeadList: pbnstMngUpHeadList,
|
||||
pbnstMngNm: pbnstMngNm,
|
||||
@@ -85,6 +87,8 @@ export const pubFacStateExport: pubFacState = {
|
||||
pbnstDemandHeadList: pbnstDemandHeadList,
|
||||
fcOrgwtsHeadList: fcOrgwtsHeadList,
|
||||
pbnstMngRegData: [],
|
||||
pbnsUpdateIndex : {} as PbnstUpdateIndex,
|
||||
dmdComList:[]
|
||||
},
|
||||
};
|
||||
|
||||
@@ -229,7 +233,7 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
|
||||
try {
|
||||
const response = await getFetch(
|
||||
fetchType.CS,
|
||||
`/api/v1/atflcd/download/${atflCd}`
|
||||
`/attach-service/api/v1/atflcd/download/${atflCd}`
|
||||
);
|
||||
|
||||
if (!response.ok) {
|
||||
@@ -239,21 +243,24 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
|
||||
console.error("Error downloading file:", error);
|
||||
}
|
||||
},
|
||||
|
||||
pbnstMngData: (data: customPbnst[]) => {
|
||||
if(data.length > 0){
|
||||
|
||||
|
||||
}
|
||||
|
||||
return set((state: pubFacState) => {
|
||||
state.pbnst.pbnstMngRegData = data;
|
||||
state.pbnst.pbnstBizCycle=data.length <=0 ? [{ text: "없음", val: "1" }] : state.pbnst.pbnstBizCycle
|
||||
return state;
|
||||
});
|
||||
},
|
||||
pbnstRegFormInit:()=>{
|
||||
return set((state: pubFacState) => {
|
||||
|
||||
return state.pbnst.pbnstMngRegData;
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
pbnstBizData: (data: fcBizType) => {
|
||||
return set((state: pubFacState) => {
|
||||
|
||||
|
||||
if (state.pbnst.pbnstMngRegData) {
|
||||
const regData = state.pbnst.pbnstMngRegData.find(
|
||||
(item) => data.pbnstRuseFcltFk === item.pbnstRuseFcltPk
|
||||
@@ -262,6 +269,7 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
|
||||
const bizIdx = regData.fcBizs.findIndex(
|
||||
(item) => item.pbnstRuseFcltBizPk == data.pbnstRuseFcltBizPk
|
||||
);
|
||||
|
||||
if (bizIdx >= 0) {
|
||||
regData.fcBizs[bizIdx] = data;
|
||||
}
|
||||
@@ -269,6 +277,25 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
|
||||
}
|
||||
return state;
|
||||
});
|
||||
},
|
||||
};
|
||||
},getDmdCompany: async (txt:string)=>{
|
||||
|
||||
const company = await getFetch(
|
||||
fetchType.WR,
|
||||
`/reuseFc/request/${txt}/3`)
|
||||
|
||||
return set((state: pubFacState) => ({
|
||||
...state,
|
||||
pbnst: {
|
||||
...state.pbnst,
|
||||
isInit: false,
|
||||
},
|
||||
|
||||
}))
|
||||
},getPbnstUpdateIndex:async(data : PbnstUpdateIndex)=>{
|
||||
return set((state: pubFacState) => {
|
||||
state.pbnst.pbnsUpdateIndex = data
|
||||
return state;
|
||||
}
|
||||
)}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -14,6 +14,11 @@ export type selectLabel = {
|
||||
val: string;
|
||||
};
|
||||
|
||||
export type PbnstUpdateIndex ={
|
||||
mng:number,
|
||||
biz:number
|
||||
}
|
||||
|
||||
export type publicReuseFacilityType = {
|
||||
sido: string;
|
||||
sigungo: string;
|
||||
@@ -80,7 +85,7 @@ const fcOperSchema = z.object({
|
||||
});
|
||||
|
||||
const fcOrgwtSchema = z.object({
|
||||
pbnstRuseFcltBizFk: z.number().nullish(),
|
||||
pbnstRuseFcltBizFk: z.string().nullish(),
|
||||
swtrmtFcltFk: z.number().default(0),
|
||||
orgwtWtritQnt: z.number(),
|
||||
tmsYn: z.enum(["Y", "N"] ).default("N"),
|
||||
@@ -98,9 +103,9 @@ export const fcBizSchema = z.object({
|
||||
pbnstRuseFcltBizPk: z.number().default(1),
|
||||
pbnstRuseFcltFk: z.string().nullish(),
|
||||
superkey: z.string().default("").nullish(),
|
||||
cycl: z.number(),
|
||||
seCd: z.string(),
|
||||
bizMthdCd: z.string(),
|
||||
cycl: z.number().default(1),
|
||||
seCd: z.string().default(""),
|
||||
bizMthdCd: z.string().default(""),
|
||||
instlAprvSncnDt: z.date().nullish(),
|
||||
bizCmcnDay: z.date().nullish(),
|
||||
gvsbs: z.number().default(0),
|
||||
@@ -108,31 +113,31 @@ export const fcBizSchema = z.object({
|
||||
cusrAlotm: z.number().default(0),
|
||||
etc: z.string().default(''),
|
||||
totalMoney: z.number().default(0).nullish(),
|
||||
rprcsFcltCpct: z.number(),
|
||||
majorPrcsMsrcCd: z.string(),
|
||||
addr: z.string(),
|
||||
rprcsMthdCd: z.string(),
|
||||
inoutYn: z.enum(["Y", "N"]),
|
||||
rprcsFcltCpct: z.number().default(0),
|
||||
majorPrcsMsrcCd: z.string().default(""),
|
||||
addr: z.string().default(''),
|
||||
rprcsMthdCd: z.string().default(""),
|
||||
inoutYn: z.enum(["Y", "N"]).default("Y"),
|
||||
mainSplyPumpCpct: z.number().nullish(),
|
||||
erctWtrOcrnCpct: z.number().nullish(),
|
||||
erctUswtrLinkSpt: z.string().nullish(),
|
||||
erctUswtrFcltCpct: z.number().nullish(),
|
||||
erctUswtrPrcsMeth: z.string().nullish(),
|
||||
erctUswtrPrcsMsrcCd: z.string().nullish(),
|
||||
wwtEmsnFcltPrmsnYn: z.enum(["Y", "N"]),
|
||||
tmsInstlYn: z.enum(["Y", "N"]),
|
||||
pbnstDrngInflwExclYn: z.enum(["Y", "N"]),
|
||||
bod: z.number(),
|
||||
grssClfg: z.number(),
|
||||
combResdch: z.number(),
|
||||
trbt: z.number(),
|
||||
clIonQnt: z.number(),
|
||||
smll: z.number(),
|
||||
crmty: z.number(),
|
||||
tph: z.number(),
|
||||
tn: z.number(),
|
||||
ph: z.number(),
|
||||
cdtnv: z.number(),
|
||||
wwtEmsnFcltPrmsnYn: z.enum(["Y", "N"]).default("Y"),
|
||||
tmsInstlYn: z.enum(["Y", "N"]).default("Y"),
|
||||
pbnstDrngInflwExclYn: z.enum(["Y", "N"]).default("Y"),
|
||||
bod: z.number().default(0),
|
||||
grssClfg: z.number().default(0),
|
||||
combResdch: z.number().default(0),
|
||||
trbt: z.number().default(0),
|
||||
clIonQnt: z.number().default(0),
|
||||
smll: z.number().default(0),
|
||||
crmty: z.number().default(0),
|
||||
tph: z.number().default(0),
|
||||
tn: z.number().default(0),
|
||||
ph: z.number().default(0),
|
||||
cdtnv: z.number().default(0),
|
||||
designCst: z.number().nullish(),
|
||||
cstrnSpvsCst: z.number().nullish(),
|
||||
fcltSbsdCst: z.number().nullish(),
|
||||
@@ -150,26 +155,52 @@ export const fcBizSchema = z.object({
|
||||
fcltSbsdCstClcln: z.number().nullish(),
|
||||
wstCstClcln: z.number().nullish(),
|
||||
cnstCmcnCstClcln: z.number().nullish(),
|
||||
mntrgEqpmntInstlCstClcln: z.number(),
|
||||
mntrgEqpmntInstlCstClcln: z.number().default(0),
|
||||
gisDbCstClcln: z.number().nullish(),
|
||||
elpwrMtrngCstClcln: z.number().nullish(),
|
||||
mchnCstClcln: z.number().nullish(),
|
||||
archCstClcln: z.number().nullish(),
|
||||
pplCstClcln: z.number().nullish(),
|
||||
ruseFcltCstClcln: z.number().nullish(),
|
||||
fcOrgwts: z.array(fcOrgwtSchema),
|
||||
pplInstls: z.array(pplInstlSchema),
|
||||
fcOrgwts: z.array(fcOrgwtSchema).nullish(),
|
||||
pplInstls: z.array(pplInstlSchema).nullish(),
|
||||
flg: z.string().nullish(),
|
||||
regDt: z.string().nullish(),
|
||||
rgtr: z.string(),
|
||||
rgtr: z.string().nullish(),
|
||||
mdfcnDt: z.string().nullish(),
|
||||
mdfr: z.string(),
|
||||
mdfr: z.string().nullish(),
|
||||
});
|
||||
|
||||
|
||||
const pubHasuZod = z.object({
|
||||
choose: z.boolean().default(false),
|
||||
bscFctCd: z.string(),
|
||||
sido: z.string().default(""),
|
||||
gugun: z.string().default(""),
|
||||
bscFctNm: z.string().default(""),
|
||||
efflWqltStndrdNm: z.string().default(""),
|
||||
fctCpc: z.number().default(0),
|
||||
addr:z.string().nullish()
|
||||
});
|
||||
|
||||
export type pubHasuType = z.infer<typeof pubHasuZod>;
|
||||
|
||||
|
||||
|
||||
const dmdColist = z.object({
|
||||
dmdCoNm: z.boolean().default(false),
|
||||
daddr: z.string(),
|
||||
useUsgCd: z.string().default(""),
|
||||
splyBgngDay: z.string().default(""),
|
||||
splyEndDay: z.string().default(""),
|
||||
splyCpct: z.string().default(""),
|
||||
splyFmYn: z.number().default(0),
|
||||
});
|
||||
|
||||
|
||||
export const pbnstRegZod = z.object({
|
||||
pbnstRuseFcltPk: z.string().default(''),
|
||||
swtrmtFcltFk: z.string().default(""),
|
||||
superkey:z.string().default(""),
|
||||
ruseUtztnFcltNm: z.string().default(""),
|
||||
fcltCpct: z.number().default(0),
|
||||
ruseCpct: z.number().default(0),
|
||||
@@ -181,21 +212,10 @@ export const pbnstRegZod = z.object({
|
||||
fcFiles: z.array(fcFileSchema).default([]),
|
||||
fcBizs: z.array(fcBizSchema).default([]),
|
||||
fcOpers: z.array(fcOperSchema).default([]),
|
||||
fcDemands: z.array(dmdColist).default([]).nullish(),
|
||||
hasuhasu: z.number().default(0),
|
||||
});
|
||||
|
||||
const pubHasuZod = z.object({
|
||||
choose: z.boolean().default(false),
|
||||
bscFctCd: z.string(),
|
||||
sido: z.string().default(""),
|
||||
gugun: z.string().default(""),
|
||||
bscFctNm: z.string().default(""),
|
||||
efflWqltStndrdNm: z.string().default(""),
|
||||
fctCpc: z.number().default(0),
|
||||
});
|
||||
|
||||
export type pubHasuType = z.infer<typeof pubHasuZod>;
|
||||
|
||||
//관경 제외
|
||||
export const exampleData = [
|
||||
{
|
||||
|
||||
@@ -24,8 +24,30 @@ export const getFetch = async (type: string, url: string) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(`오류 발생: ${response.status}`);
|
||||
}
|
||||
const res = await response.json();
|
||||
return res.data;
|
||||
const contentType = response.headers.get("content-type") ?? "";
|
||||
|
||||
if (contentType.includes("application/json")) {
|
||||
// JSON 응답 처리
|
||||
const res = await response.json();
|
||||
return res.data;
|
||||
} else {
|
||||
// 파일 응답 처리 (ex. PDF, Excel 등)
|
||||
const blob = await response.blob();
|
||||
const blobUrl = window.URL.createObjectURL(blob);
|
||||
const a = document.createElement("a");
|
||||
|
||||
// 파일명 추출 (서버에서 header에 Content-Disposition을 보낼 경우 활용)
|
||||
const disposition = response.headers.get("Content-Disposition");
|
||||
const match = disposition?.match(/filename="?(.+)"?/);
|
||||
const filename = match?.[1] || "downloaded_file";
|
||||
|
||||
a.href = blobUrl;
|
||||
a.download = filename;
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(blobUrl);
|
||||
|
||||
return null; // 다운로드이므로 반환값 없음
|
||||
}
|
||||
};
|
||||
|
||||
export const postFectch = async (url: string, params: any, type?: string) => {
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
import {
|
||||
fcBizSchema,
|
||||
type fcBizType,
|
||||
type fcOrgwtType,
|
||||
type ppInstlType,
|
||||
} from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
||||
import { selectClass } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
|
||||
@@ -33,21 +32,36 @@ import { useEffect, useRef, useState } from "react";
|
||||
import { useFieldArray, useForm } from "react-hook-form";
|
||||
import MngRegFormDetail from "../mngReg/mngRegFormDetail/mngRegFormDetail";
|
||||
|
||||
export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
// const ref = useRef<ppInstlType[] | null>(data[0]?.pplInstls ?? null);
|
||||
export function PbnstBuseForm({
|
||||
formType,
|
||||
firstBizData,
|
||||
}: {
|
||||
formType: string;
|
||||
firstBizData?: fcBizType[];
|
||||
}) {
|
||||
const ref = useRef<ppInstlType[] | null>(null);
|
||||
const { code, pbnst, pbnstBizData } = useWrStore((state) => state);
|
||||
const { code, pbnst, pbnstBizData ,getPbnstUpdateIndex} = useWrStore((state) => state);
|
||||
const { pbnstBizCycle, pbnstRes } = pbnst;
|
||||
const [getBizCycle, setBizCycle] = useState("1");
|
||||
const [ppiSelectList, setPpiSelectList] =
|
||||
useState<[{ name: string; val: SelectDataType[] }]>();
|
||||
const [ppiYn, setPpiYn] = useState("Y");
|
||||
const [isFcOrgwts, setIsFcOrgwts] = useState<boolean>(false);
|
||||
const [modalData, setModalData] = useState<fcOrgwtType | null>(null);
|
||||
const [sumCpct, setSumCpct] = useState<number>(0);
|
||||
|
||||
const form = useForm<fcBizType>({
|
||||
resolver: zodResolver(fcBizSchema),
|
||||
defaultValues:
|
||||
formType === "reg" &&
|
||||
pbnst.pbnstMngRegData &&
|
||||
pbnst.pbnstMngRegData[0]?.fcBizs
|
||||
? (pbnst.pbnstMngRegData[0].fcBizs[0] ?? {})
|
||||
: formType === "update" &&
|
||||
typeof pbnst.pbnsUpdateIndex.biz === "number" &&
|
||||
pbnst.pbnsUpdateIndex.biz >= 0 &&
|
||||
pbnst.pbnstRes
|
||||
? pbnst.pbnstRes[pbnst.pbnsUpdateIndex.mng]?.fcBizs[pbnst.pbnsUpdateIndex.biz]
|
||||
: fcBizSchema.parse({}),
|
||||
});
|
||||
|
||||
// 2. Define a submit handler.
|
||||
@@ -69,54 +83,56 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
name: "pplInstls",
|
||||
});
|
||||
|
||||
// 등록할때 신규 값을 계속 가지고 있으려고
|
||||
useEffect(() => {
|
||||
|
||||
const formData = form.watch()
|
||||
|
||||
formData.pplInstls = ref.current ? [...ref.current] : [] // ← form 내부 상태 기준으로 복사
|
||||
console.log("formData pplReg", formData)
|
||||
|
||||
pbnstBizData(formData as fcBizType);
|
||||
}, [form.formState]);
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
if (ppiYn === "N") {
|
||||
form.setValue('pplInstls', [])
|
||||
if (formType === "reg") {
|
||||
if (
|
||||
firstBizData &&
|
||||
firstBizData[0] &&
|
||||
(form.getValues("pbnstRuseFcltFk") === "" ||
|
||||
form.getValues("pbnstRuseFcltFk") === undefined)
|
||||
) {
|
||||
form.setValue(
|
||||
"pbnstRuseFcltFk",
|
||||
String(firstBizData[0].pbnstRuseFcltFk)
|
||||
);
|
||||
form.setValue("cycl", firstBizData[0].cycl);
|
||||
}
|
||||
const formData = form.watch();
|
||||
formData.pplInstls = ref.current ? [...ref.current] : []; // ← form 내부 상태 기준으로 복사
|
||||
pbnstBizData(formData as fcBizType);
|
||||
}
|
||||
}, [ppiYn, pbnst.pplInstlsHeadLisat])
|
||||
}, [firstBizData, form.formState, formType]);
|
||||
|
||||
useEffect(() => {
|
||||
console.log("pbnst.pbnstMngRegData ", pbnst.pbnstMngRegData);
|
||||
}, [pbnst.pbnstMngRegData]);
|
||||
if (ppiYn === "N") {
|
||||
form.setValue("pplInstls", []);
|
||||
}
|
||||
}, [ppiYn]);
|
||||
|
||||
const buttonClick = () => {
|
||||
setIsFcOrgwts(true);
|
||||
const moData = data[0]?.fcOrgwts?.[0] ?? null;
|
||||
setModalData(moData);
|
||||
};
|
||||
useEffect(() => {
|
||||
console.log("pbnst. bug pbnstMngRegData ", pbnst.pbnstMngRegData);
|
||||
}, [pbnst.pbnstMngRegData]);
|
||||
|
||||
const plusHist = () => {
|
||||
const regData = {
|
||||
ruseFcltBizFk: ref.current?.[0]?.ruseFcltBizFk ?? "",
|
||||
choose: false,
|
||||
ppMqlt: "",
|
||||
pdmt: '',
|
||||
pdmt: "",
|
||||
cpct: 0,
|
||||
}
|
||||
};
|
||||
const currentTableDataFromRef = ref.current ? [...ref.current] : [];
|
||||
const newDataForRHF = [...currentTableDataFromRef, regData];
|
||||
form.setValue("pplInstls", newDataForRHF, {
|
||||
shouldValidate: true, // 필요하다면 유효성 검사 실행
|
||||
shouldDirty: true, // 폼 상태를 dirty로 변경
|
||||
shouldDirty: true, // 폼 상태를 dirty로 변경
|
||||
});
|
||||
const latestOpers = form.getValues("pplInstls");
|
||||
ref.current = [...latestOpers];
|
||||
};
|
||||
|
||||
const plusArray = () => {
|
||||
|
||||
}
|
||||
const plusArray = () => {};
|
||||
|
||||
const removeSelected = () => {
|
||||
if (!ref.current) return;
|
||||
@@ -127,19 +143,15 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
|
||||
if (getBizCycle) {
|
||||
|
||||
if (getBizCycle&&formType !== "reg") {
|
||||
const index = Number(getBizCycle) - 1;
|
||||
form.reset(pbnst.pbnstResObj?.fcBizs[index]);
|
||||
ref.current = pbnst.pbnstResObj?.fcBizs[index]?.pplInstls ?? [];
|
||||
}
|
||||
|
||||
}, [getBizCycle, pbnst.pbnstResObj]);
|
||||
}, [getBizCycle, pbnst.pbnstResObj , formType]);
|
||||
|
||||
useEffect(() => {
|
||||
const ppl = [];
|
||||
const ppl = [] as { name: string; val: SelectDataType[] }[];
|
||||
if (code.pplLenght) {
|
||||
ppl.push({ name: "pplLenght", val: code.pplLenght });
|
||||
}
|
||||
@@ -148,12 +160,11 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
}
|
||||
if (ppl.length > 0) {
|
||||
setPpiSelectList(ppl);
|
||||
} else {
|
||||
setPpiSelectList(undefined);
|
||||
}
|
||||
}, [code]);
|
||||
|
||||
useEffect(() => {
|
||||
}, [ppiSelectList]);
|
||||
|
||||
useEffect(() => {
|
||||
console.log("form errors:", form.formState.errors);
|
||||
}, [form.formState.errors]);
|
||||
@@ -172,7 +183,6 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
<h1 className=" text-xl"></h1>
|
||||
<div className="flex items-center gap-2 mx-3">
|
||||
<h1 className={formTableName}>등록차수</h1>
|
||||
|
||||
<SelectBox
|
||||
label=""
|
||||
selectArray={pbnstBizCycle}
|
||||
@@ -181,6 +191,7 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
selectClass={selectClass}
|
||||
onSelectValue={(val) => {
|
||||
setBizCycle(String(val));
|
||||
getPbnstUpdateIndex({...pbnst.pbnsUpdateIndex, biz: Number(val)})
|
||||
}}
|
||||
></SelectBox>
|
||||
|
||||
@@ -196,7 +207,6 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
moClass="grid grid-cols-12 gap-4"
|
||||
sonClass="col-span-4"
|
||||
/>
|
||||
|
||||
<MngRegFormDetail
|
||||
formList={businessMoneyInfo}
|
||||
h1Title={"사업비"}
|
||||
@@ -231,22 +241,18 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
<div className="text-right mb-3">
|
||||
<Button
|
||||
type="button"
|
||||
onClick={
|
||||
// () => {
|
||||
// setIsFcOrgwts(true)
|
||||
// setModalData(modalData)
|
||||
// }
|
||||
buttonClick
|
||||
}
|
||||
onClick={() => setIsFcOrgwts(true)}
|
||||
size={commonButonSize}
|
||||
className="">
|
||||
className=""
|
||||
>
|
||||
추가등록
|
||||
</Button>
|
||||
</div>
|
||||
<RuseMngTable
|
||||
tableData={fcOrgwtFiled}
|
||||
headList={pbnst.pbnstOrgwtHeadList}
|
||||
upHeadList={[]} />
|
||||
upHeadList={[]}
|
||||
/>
|
||||
</div>
|
||||
<h1 className={formH1Class}>재이용 공급관로 설치 현황</h1>
|
||||
<div className="flex items-center gap-4 mx-3 mb-3">
|
||||
@@ -266,26 +272,28 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
readOnly={true}
|
||||
className="w-32 border-gray-300 rounded pr-8 "
|
||||
/>
|
||||
{ppiYn === 'Y' ? <>
|
||||
<Button
|
||||
type="button"
|
||||
size={commonButonSize}
|
||||
className="!text-xl"
|
||||
onClick={plusHist}
|
||||
>
|
||||
추가등록
|
||||
</Button>
|
||||
<Button
|
||||
type="button"
|
||||
size={commonButonSize}
|
||||
className="!text-xl !bg-red-500 !text-white ml-1"
|
||||
onClick={removeSelected}
|
||||
>
|
||||
삭제
|
||||
</Button>
|
||||
</> : <>
|
||||
{ppiYn === "Y" ? (
|
||||
<>
|
||||
<Button
|
||||
type="button"
|
||||
size={commonButonSize}
|
||||
className="!text-xl"
|
||||
onClick={plusHist}
|
||||
>
|
||||
추가등록
|
||||
</Button>
|
||||
<Button
|
||||
type="button"
|
||||
size={commonButonSize}
|
||||
className="!text-xl !bg-red-500 !text-white ml-1"
|
||||
onClick={removeSelected}
|
||||
>
|
||||
삭제
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
</div>
|
||||
<div>
|
||||
<RuseMngTable
|
||||
@@ -297,7 +305,7 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
onTableSet={(val) => {
|
||||
if (!ref.current) return;
|
||||
let sum = 0;
|
||||
ref.current.forEach(item => {
|
||||
ref.current.forEach((item) => {
|
||||
sum += Number(item.cpct) || 0;
|
||||
});
|
||||
setSumCpct(sum);
|
||||
@@ -313,29 +321,25 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
sonClass="col-span-4"
|
||||
/>
|
||||
|
||||
{/* <h1 className={formH1Class}>하수처리수 재이용수 수요처</h1> */}
|
||||
<div>
|
||||
<div className="text-right mb-3">
|
||||
<Button
|
||||
type="button"
|
||||
onClick={() => {}}
|
||||
size={commonButonSize}
|
||||
className="">
|
||||
className=""
|
||||
>
|
||||
수요처 추가
|
||||
</Button>
|
||||
</div>
|
||||
<MngRegFormDetail
|
||||
formList={dmdCoList}
|
||||
h1Title={"하수처리수 재이용수 수요처"}
|
||||
form={form}
|
||||
moClass="grid grid-cols-12 gap-4 mt-3"
|
||||
sonClass="col-span-4"
|
||||
/>
|
||||
{/* <RuseMngTable
|
||||
tableData={[]}
|
||||
headList={pbnst.pbnstDemandHeadList}
|
||||
/> */}
|
||||
</div>
|
||||
formList={dmdCoList}
|
||||
h1Title={"하수처리수 재이용수 수요처"}
|
||||
form={form}
|
||||
moClass="grid grid-cols-12 gap-4 mt-3"
|
||||
sonClass="col-span-4"
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
</Form>
|
||||
</div>
|
||||
@@ -344,7 +348,16 @@ export function PbnstBuseForm({ data }: { data: fcBizType[] }) {
|
||||
open={isFcOrgwts}
|
||||
onOpenChange={(open: boolean) => setIsFcOrgwts(open)}
|
||||
bodyClass={"w-[50vw] max-w-none h-[60vh]"}
|
||||
body={<FcOrgwtsRegModal data={modalData ? [modalData] : []} onRightSet={(val) => { console.log("val", val); return {}; }} ></FcOrgwtsRegModal>}
|
||||
body={
|
||||
<FcOrgwtsRegModal
|
||||
closeModal={() => {
|
||||
setIsFcOrgwts(false);
|
||||
}}
|
||||
onRightSet={(val) => {
|
||||
form.setValue("fcOrgwts", val);
|
||||
}}
|
||||
></FcOrgwtsRegModal>
|
||||
}
|
||||
></UiModal>
|
||||
</div>
|
||||
</>
|
||||
|
||||
@@ -5,11 +5,9 @@ import { FileUpload, FormUi, SelectBox } from "@common/business_components/ui";
|
||||
import { Form, FormField } from "@common/business_components/ui/form";
|
||||
import { Button, Input } from "@common/components";
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { use, useEffect, useRef, useState } from "react";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { useFieldArray, useForm } from "react-hook-form";
|
||||
import { z } from "zod";
|
||||
import moment from "moment";
|
||||
|
||||
import {
|
||||
commonButonSize,
|
||||
formH1Class,
|
||||
@@ -22,7 +20,6 @@ import {
|
||||
type customPbnst,
|
||||
type fcFileType,
|
||||
type operType,
|
||||
type ruseFcltType,
|
||||
type selectLabel,
|
||||
} from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
||||
import { TEST_UUID } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
|
||||
@@ -40,23 +37,37 @@ export function PbnstMngForm({
|
||||
formType: string;
|
||||
firstFcltData?: customPbnst;
|
||||
}) {
|
||||
const { pbnst, pbnstUpdate, pbnstMngData, fileDelete, getBizCycle,pbnstRegFormInit } =
|
||||
useWrStore((state) => state);
|
||||
const {
|
||||
pbnst,
|
||||
pbnstUpdate,
|
||||
pbnstMngData,
|
||||
fileDelete,
|
||||
fileDownLoad,
|
||||
getBizCycle,
|
||||
getPbnstUpdateIndex,
|
||||
} = useWrStore((state) => state);
|
||||
|
||||
const [regFileList, setRegFileList] = useState<fcFileType[] | null>(null);
|
||||
const [planFiles, setPlanFiles] = useState<FilesType[] | null>(null);
|
||||
const [relationfiles, setRelationFiles] = useState<FilesType[] | null>(null);
|
||||
const [fcltNm, setFcltNm] = useState<selectLabel[] | null>(null);
|
||||
const [fcOpresData, setFcOpresData] = useState<operType[] | null>(null);
|
||||
|
||||
const [progress, setProgress] = useState(0);
|
||||
//const new File([] as BlobPart[], "") 파일 다운로드 활용
|
||||
|
||||
const ref = useRef<operType[] | null>(null);
|
||||
|
||||
|
||||
const form = useForm<z.infer<typeof pbnstRegZod>>({
|
||||
resolver: zodResolver(pbnstRegZod),
|
||||
defaultValues: formType === 'reg' && pbnst.pbnstMngRegData ? pbnst.pbnstMngRegData[0] : pbnstRegZod.parse({}),
|
||||
defaultValues:
|
||||
formType === "reg" && pbnst.pbnstMngRegData
|
||||
? pbnst.pbnstMngRegData[0]
|
||||
: formType === "update" &&
|
||||
typeof pbnst.pbnsUpdateIndex.mng === "number" &&
|
||||
pbnst.pbnsUpdateIndex.mng >= 0 &&
|
||||
pbnst.pbnstRes
|
||||
? pbnst.pbnstRes[pbnst.pbnsUpdateIndex.mng]
|
||||
: pbnstRegZod.parse({}),
|
||||
});
|
||||
const {
|
||||
fields: fcOpersField,
|
||||
@@ -73,11 +84,9 @@ export function PbnstMngForm({
|
||||
|
||||
const selectFclt = (val: number) => {
|
||||
if (pbnst.pbnstRes && pbnst.pbnstRes[val]) {
|
||||
//시설 선택시 데이터 초기화
|
||||
|
||||
getBizCycle(pbnst.pbnstRes[val]);
|
||||
ref.current = pbnst.pbnstRes[val].fcOpers;
|
||||
form.reset(pbnst.pbnstRes[val]);
|
||||
getPbnstUpdateIndex({ ...pbnst.pbnsUpdateIndex, mng: val });
|
||||
}
|
||||
};
|
||||
const fileDownload = (index: number) => {};
|
||||
@@ -97,8 +106,6 @@ export function PbnstMngForm({
|
||||
shouldValidate: true, // 필요하다면 유효성 검사 실행
|
||||
shouldDirty: true, // 폼 상태를 dirty로 변경
|
||||
});
|
||||
const latestOpers = form.getValues("fcOpers");
|
||||
ref.current = [...latestOpers];
|
||||
};
|
||||
|
||||
const removeSelected = () => {
|
||||
@@ -186,25 +193,68 @@ export function PbnstMngForm({
|
||||
(form.getValues("swtrmtFcltFk") === "" ||
|
||||
form.getValues("swtrmtFcltFk") === undefined)
|
||||
) {
|
||||
|
||||
form.setValue("swtrmtFcltFk", firstFcltData.swtrmtFcltFk);
|
||||
form.setValue(
|
||||
"pbnstRuseFcltPk",
|
||||
String(firstFcltData.swtrmtFcltFk + "1")
|
||||
);
|
||||
form.setValue("fcBizs", firstFcltData.fcBizs);
|
||||
}
|
||||
}, [firstFcltData]);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
const formData = form.watch();
|
||||
const defaultFiles = form.getValues("fcFiles");
|
||||
|
||||
console.log('formData ', formData)
|
||||
formData.fcOpers = ref.current ? [...ref.current] : [];
|
||||
formData.fcFiles = regFileList ? [...regFileList] : [];
|
||||
pbnstMngData([formData] as customPbnst[]);
|
||||
}, [form.formState, regFileList]);
|
||||
console.log("defaultFiles : ", defaultFiles);
|
||||
if (defaultFiles && defaultFiles.length > 0) {
|
||||
const relationFileList = defaultFiles.filter(
|
||||
(item) => item.fileKnd === "계통도"
|
||||
);
|
||||
|
||||
const planFileList = defaultFiles.filter(
|
||||
(item) => item.fileKnd === "평면도"
|
||||
);
|
||||
if (relationFileList.length > 0)
|
||||
setRelationFiles(
|
||||
relationFileList.map((item) => ({
|
||||
atflCd: item.fileTkn,
|
||||
file: new File([] as BlobPart[], item.filePath),
|
||||
}))
|
||||
); // 또는 파일 형식 변환 로직이 있다면 여기에 추가
|
||||
|
||||
if (planFileList.length > 0)
|
||||
setPlanFiles(
|
||||
planFileList.map((item) => ({
|
||||
atflCd: item.fileTkn,
|
||||
file: new File([] as BlobPart[], item.filePath),
|
||||
}))
|
||||
);
|
||||
}
|
||||
}, [form.formState.defaultValues]); // 초기화 이후 1회 실행
|
||||
|
||||
// 등록할때 신규 값을 계속 가지고 있으려고
|
||||
useEffect(() => {
|
||||
if (
|
||||
formType === "update" &&
|
||||
pbnst.pbnsUpdateIndex.biz >= 0 &&
|
||||
pbnst.pbnstRes
|
||||
) {
|
||||
const bizData = pbnst.pbnstRes[pbnst.pbnsUpdateIndex.biz];
|
||||
|
||||
console.log(" bizData : ", bizData);
|
||||
if (bizData) {
|
||||
getBizCycle(bizData);
|
||||
}
|
||||
}
|
||||
}, [pbnst.pbnsUpdateIndex, pbnst.pbnstRes, formType, getBizCycle]);
|
||||
useEffect(() => {
|
||||
if (formType === "reg") {
|
||||
const formData = form.watch();
|
||||
formData.fcOpers = ref.current ? [...ref.current] : [];
|
||||
formData.fcFiles = regFileList ? [...regFileList] : [];
|
||||
pbnstMngData([formData] as customPbnst[]);
|
||||
}
|
||||
}, [form.formState, regFileList, formType]);
|
||||
|
||||
useEffect(() => {
|
||||
pbnstMngData(pbnst.pbnstMngRegData);
|
||||
@@ -222,16 +272,11 @@ export function PbnstMngForm({
|
||||
|
||||
// 2. Define a submit handler.
|
||||
function onSubmit(values: z.infer<typeof pbnstRegZod>) {
|
||||
values.fcOpers = ref.current || [];
|
||||
values.fcOpers = fcOpresData || [];
|
||||
values.fcFiles = regFileList || [];
|
||||
console.log("form values:", values);
|
||||
pbnstUpdate(values);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
console.log("form errors:", form.formState.errors);
|
||||
}, [form.formState.errors]);
|
||||
|
||||
useEffect(() => {
|
||||
if (relationfiles) {
|
||||
setRegFileList(regFileFilter(relationfiles, "계통도", regFileList || []));
|
||||
@@ -271,7 +316,7 @@ export function PbnstMngForm({
|
||||
onChange={(e) => {
|
||||
field.onChange(String(e.target.value));
|
||||
}}
|
||||
value={field.value}
|
||||
value={field.value ?? ""}
|
||||
/>
|
||||
</FormUi>
|
||||
)}
|
||||
@@ -322,6 +367,9 @@ export function PbnstMngForm({
|
||||
tableData={fcOpersField}
|
||||
headList={pbnst.pbnstMngUpHeadList}
|
||||
upHeadList={pbnst.pbnstMngNm}
|
||||
onTableSet={(val) => {
|
||||
setFcOpresData(val);
|
||||
}}
|
||||
ref={ref}
|
||||
></RuseMngTable>
|
||||
</div>
|
||||
@@ -341,7 +389,7 @@ export function PbnstMngForm({
|
||||
onChange={(e) => {
|
||||
field.onChange(Number(e.target.value));
|
||||
}}
|
||||
value={field.value}
|
||||
value={field.value ?? 0}
|
||||
/>
|
||||
</FormUi>
|
||||
)}
|
||||
@@ -359,7 +407,7 @@ export function PbnstMngForm({
|
||||
onChange={(e) => {
|
||||
field.onChange(Number(e.target.value));
|
||||
}}
|
||||
value={field.value}
|
||||
value={field.value ?? 0}
|
||||
/>
|
||||
</FormUi>
|
||||
)}
|
||||
@@ -377,7 +425,7 @@ export function PbnstMngForm({
|
||||
onChange={(e) => {
|
||||
field.onChange(Number(e.target.value));
|
||||
}}
|
||||
value={field.value}
|
||||
value={field.value ?? 0}
|
||||
/>
|
||||
</FormUi>
|
||||
)}
|
||||
@@ -395,7 +443,7 @@ export function PbnstMngForm({
|
||||
onChange={(e) => {
|
||||
field.onChange(Number(e.target.value));
|
||||
}}
|
||||
value={field.value}
|
||||
value={field.value ?? 0}
|
||||
/>
|
||||
</FormUi>
|
||||
)}
|
||||
@@ -414,7 +462,13 @@ export function PbnstMngForm({
|
||||
if (files) fileHandler(files, "relation");
|
||||
}}
|
||||
fileTypes="PDF"
|
||||
onFileClick={(index) => {}}
|
||||
onFileClick={(index) => {
|
||||
fileDownLoad(
|
||||
relationfiles?.find(
|
||||
(item, fileIndex) => fileIndex === index
|
||||
)?.atflCd as string
|
||||
);
|
||||
}}
|
||||
></FileUpload>
|
||||
</FormUi>
|
||||
</div>
|
||||
@@ -426,6 +480,13 @@ export function PbnstMngForm({
|
||||
if (files) fileHandler(files, "plan");
|
||||
}}
|
||||
fileTypes="PDF"
|
||||
onFileClick={(index) => {
|
||||
fileDownLoad(
|
||||
planFiles?.find(
|
||||
(item, fileIndex) => fileIndex === index
|
||||
)?.atflCd as string
|
||||
);
|
||||
}}
|
||||
></FileUpload>
|
||||
</FormUi>
|
||||
</div>
|
||||
|
||||
@@ -12,7 +12,7 @@ import { ArrowLeft, ArrowRight } from "lucide-react";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { useFieldArray } from "react-hook-form";
|
||||
|
||||
export default function FcOrgwtsRegModal({ data, onRightSet }: { data: fcOrgwtType[], onRightSet?: (rightData:fcOrgwtType[]) => {}}) {
|
||||
export default function FcOrgwtsRegModal({ onRightSet, closeModal }: { onRightSet?: (rightData:fcOrgwtType[]) => void,closeModal?:(val:boolean) =>void }) {
|
||||
const { code, pbnst, getSwtrmtFcltNm, searchFclts } = useWrStore((state) => state);
|
||||
const { fcOrgwtsHeadList, pbnstHasuRes } = pbnst;
|
||||
const [bdstTable, setbdstTable] = useState<pubHasuType[]>();
|
||||
@@ -36,28 +36,26 @@ export default function FcOrgwtsRegModal({ data, onRightSet }: { data: fcOrgwtTy
|
||||
|
||||
}, [searchFclts])
|
||||
useEffect(() => {
|
||||
// console.log("머지", pbnstHasuRes);
|
||||
if (code.sggCd.length > 0 && pbnstHasuRes.length > 0) {
|
||||
setbdstTable(tableData(pbnstHasuRes, { code }));
|
||||
|
||||
console.log('bdstTable ', bdstTable)
|
||||
}
|
||||
}, [code, pbnstHasuRes]);
|
||||
|
||||
useEffect(() => {
|
||||
if(onRightSet)
|
||||
console.log('rightData ', rightData)
|
||||
if(onRightSet)
|
||||
onRightSet(
|
||||
rightData?.map(item => ({
|
||||
pbnstRuseFcltBizFk: data[0]?.pbnstRuseFcltBizFk ?? 0,
|
||||
swtrmtFcltFk: item.bscFctCd,
|
||||
orgwtWtritQnt: "0",
|
||||
tmsYn: "N",
|
||||
dschgFmYn: "N",
|
||||
dtlPstnExpln: "",
|
||||
rgtr: "",
|
||||
mdfr: "",
|
||||
regDt: undefined,
|
||||
mdfcnDt: undefined,
|
||||
useYn: undefined,
|
||||
})) ?? []
|
||||
(rightData as pubHasuType[])?.map(item => ({
|
||||
swtrmtFcltFk: item.bscFctCd, // 임시값, 실제 데이터에 맞게 수정
|
||||
orgwtWtritQnt: Number(item.fctCpc), // 임시값, 실제 데이터에 맞게 수정
|
||||
tmsYn: "N", // 임시값, 실제 데이터에 맞게 수정
|
||||
dschgFmYn: "N", // 임시값, 실제 데이터에 맞게 수정
|
||||
dtlPstnExpln: item.addr, // 임시값, 실제 데이터에 맞게 수정
|
||||
choose: false, // 임시값, 실제 데이터에 맞게 수정
|
||||
// 필요한 경우 다른 속성들도 추가
|
||||
})) as unknown as fcOrgwtType[]
|
||||
);
|
||||
}, [rightData])
|
||||
|
||||
@@ -67,7 +65,7 @@ export default function FcOrgwtsRegModal({ data, onRightSet }: { data: fcOrgwtTy
|
||||
<div className="flex items-center justify-between">
|
||||
<Title title={"취수하수처리장 추가"} />
|
||||
<Button className="m-2" size={"sm"}
|
||||
onClick={() => { }}>저장</Button>
|
||||
onClick={() => {closeModal && closeModal(false) }}>저장</Button>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-row flex-grow gap-4 mt-4">
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
"use client";
|
||||
|
||||
import { useWrStore } from "@/app/store";
|
||||
import type {
|
||||
customPbnst,
|
||||
fcBizType,
|
||||
pubHasuType,
|
||||
} from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
||||
import { selectClass } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
|
||||
import { getCity } from "@/components/lib/func/commom";
|
||||
import { PbnstMngForm } from "@/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm";
|
||||
import {
|
||||
ScrollArea,
|
||||
} from "@common/business_components";
|
||||
import { ScrollArea } from "@common/business_components";
|
||||
import {
|
||||
Button,
|
||||
Tabs,
|
||||
@@ -23,7 +18,7 @@ import { useEffect, useState } from "react";
|
||||
import { PbnstBuseForm } from "@/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm";
|
||||
|
||||
export function PbnstRegModal({ data }: { data: pubHasuType }) {
|
||||
const { pbnst ,pbnstUpdate} = useWrStore((state) => {
|
||||
const { pbnst, pbnstUpdate } = useWrStore((state) => {
|
||||
return state;
|
||||
});
|
||||
const [pbnstBdstForm, setPbnstBdstForm] = useState<customPbnst>(
|
||||
@@ -31,39 +26,33 @@ export function PbnstRegModal({ data }: { data: pubHasuType }) {
|
||||
);
|
||||
const [currentTab, setCurrentTab] = useState<string>("mng");
|
||||
|
||||
const pbnstRegTotal = ()=>{
|
||||
console.log(" pbnst.pbnstMngRegData ", pbnst.pbnstMngRegData)
|
||||
|
||||
if(pbnst.pbnstMngRegData[0])
|
||||
pbnstUpdate(pbnst.pbnstMngRegData[0])
|
||||
}
|
||||
|
||||
const pbnstRegTotal = () => {
|
||||
if (pbnst.pbnstMngRegData[0]) pbnstUpdate(pbnst.pbnstMngRegData[0]);
|
||||
};
|
||||
|
||||
const handleTabChange = (value: string) => {
|
||||
setCurrentTab(value);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
|
||||
if(data ){
|
||||
|
||||
if (data) {
|
||||
let regData = {
|
||||
swtrmtFcltFk: String(data.bscFctCd ),
|
||||
pbnstRuseFcltPk: String(data.bscFctCd + "1"),
|
||||
fcBizs: [{ pbnstRuseFcltFk: String(data.bscFctCd + "1") ,cycl:1 } as unknown as fcBizType],
|
||||
swtrmtFcltFk: String(data.bscFctCd),
|
||||
pbnstRuseFcltPk: String(data.bscFctCd + "1"),
|
||||
fcBizs: [
|
||||
{
|
||||
pbnstRuseFcltFk: String(data.bscFctCd + "1"),
|
||||
cycl: 1,
|
||||
} as unknown as fcBizType,
|
||||
],
|
||||
};
|
||||
|
||||
|
||||
setPbnstBdstForm(regData as unknown as customPbnst);
|
||||
}
|
||||
|
||||
}, [data]);
|
||||
|
||||
|
||||
useEffect(() =>{
|
||||
|
||||
console.log('pbnst.pbnstMngRegData ', pbnst.pbnstMngRegData)
|
||||
},[pbnst.pbnstMngRegData])
|
||||
useEffect(() => {}, [pbnstBdstForm]);
|
||||
useEffect(() => {}, [pbnst.pbnstMngRegData]);
|
||||
return (
|
||||
<>
|
||||
<h1 className="text-2xl font-medium text-label pl-8">
|
||||
@@ -80,15 +69,19 @@ const pbnstRegTotal = ()=>{
|
||||
<TabsTrigger className="!text-xl" value="buse">
|
||||
차수별정보
|
||||
</TabsTrigger>
|
||||
<Button onClick={pbnstRegTotal} size={"sm"} className="!justify-end">
|
||||
<Button
|
||||
onClick={pbnstRegTotal}
|
||||
size={"sm"}
|
||||
className="!justify-end"
|
||||
>
|
||||
저장
|
||||
</Button>
|
||||
</TabsList>
|
||||
<TabsContent className="max-h-full" value="mng">
|
||||
<PbnstMngForm formType={'reg'} firstFcltData={pbnstBdstForm} />
|
||||
<PbnstMngForm formType={"reg"} firstFcltData={pbnstBdstForm} />
|
||||
</TabsContent>
|
||||
<TabsContent className="max-h-full" value="buse">
|
||||
<PbnstBuseForm data={pbnstBdstForm.fcBizs} />
|
||||
<PbnstBuseForm formType={"reg"} firstBizData={pbnstBdstForm.fcBizs} />
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
</ScrollArea>
|
||||
|
||||
+10
-11
@@ -2,10 +2,9 @@ import { NextRequest, NextResponse } from "next/server";
|
||||
import { CS_URL } from "./components/lib/config";
|
||||
//import { CLAIM_NAME, AUTH_USER_ID } from "./src/shared/config";
|
||||
|
||||
const CLAIM_NAME = "Authorization"
|
||||
const AUTH_USER_ID = "token-id"
|
||||
const serverApiUrl =
|
||||
CS_URL;
|
||||
const CLAIM_NAME = "Authorization";
|
||||
const AUTH_USER_ID = "token-id";
|
||||
const serverApiUrl = CS_URL;
|
||||
export function middleware(req: NextRequest) {
|
||||
const pathname = req.nextUrl.pathname;
|
||||
console.log(`[Middleware] Request URL: ${req.url}`);
|
||||
@@ -13,16 +12,18 @@ export function middleware(req: NextRequest) {
|
||||
|
||||
if (pathname.startsWith("/server")) {
|
||||
const queryParams = searchParams.toString();
|
||||
const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${queryParams ? `?${queryParams}` : ""
|
||||
}`;
|
||||
const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${
|
||||
queryParams ? `?${queryParams}` : ""
|
||||
}`;
|
||||
console.log(`[Middleware] Rewriting from '/server' path to: ${newUrl}`);
|
||||
return NextResponse.rewrite(new URL(newUrl));
|
||||
}
|
||||
|
||||
if (pathname.startsWith("/attach-service")) {
|
||||
const requestHeaders = new Headers(req.headers);
|
||||
const token = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhMGVjN2EwNy03NTJhLTRmN2YtODlhNi04NTRlNjNkMmUzYTAiLCJhdXRob3JpdGllcyI6IlJPTEVfQURNSU4sUk9MRV9BTk9OWU1PVVMiLCJleHAiOjE3NDg0Mzc0OTF9.JM2NHEwTpgDW9nonZY3186IK_frIh667SyxMQfPwqa_lc-5mcTFNtrWXH5b72_ng39qiPSi504iF1roFEJ0c6w"
|
||||
const userId = 'a0ec7a07-752a-4f7f-89a6-854e63d2e3a0'
|
||||
const token =
|
||||
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhMGVjN2EwNy03NTJhLTRmN2YtODlhNi04NTRlNjNkMmUzYTAiLCJhdXRob3JpdGllcyI6IlJPTEVfQURNSU4sUk9MRV9BTk9OWU1PVVMiLCJtbmdyWW4iOiJZIiwiZXhwIjoxNzQ4NzkzNzAwfQ.BK1F_t9ou3R26aLc02lsyOsr2tMvqQjOdKrLz5rViUEFq_AURtvnbAxfhVCdJVgFXgUyesPln1Ydl6to-KMKbw";
|
||||
const userId = "a0ec7a07-752a-4f7f-89a6-854e63d2e3a0";
|
||||
//const token = req.cookies.get(CLAIM_NAME)?.value;
|
||||
//const userId = req.cookies.get(AUTH_USER_ID)?.value;
|
||||
const newUrl = `${serverApiUrl}${pathname}`;
|
||||
@@ -31,13 +32,12 @@ export function middleware(req: NextRequest) {
|
||||
console.log("pathname ", pathname);
|
||||
//wr:dev: pathname /attach-service/api/v1/tus/upload/5e60b70a-956e-40c3-be5a-cdd3100bf8ad
|
||||
|
||||
|
||||
//http://dev.onasys.co.kr:8000/attach-service/api/v1/tus/upload/5e60b70a-956e-40c3-be5a-cdd3100bf8ad
|
||||
if (token) requestHeaders.set(CLAIM_NAME, token);
|
||||
if (userId) requestHeaders.set(AUTH_USER_ID, userId);
|
||||
|
||||
console.log(
|
||||
`[Middleware] Rewriting from '/attach-service' path to: ${newUrl}`,
|
||||
`[Middleware] Rewriting from '/attach-service' path to: ${newUrl}`
|
||||
);
|
||||
return NextResponse.rewrite(new URL(newUrl), {
|
||||
headers: requestHeaders,
|
||||
@@ -50,4 +50,3 @@ export function middleware(req: NextRequest) {
|
||||
export const config = {
|
||||
matcher: ["/server/:path*", "/attach-service/:path*"],
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user