This commit is contained in:
leedj312
2025-05-30 17:01:34 +09:00
co-authored by truthplumage
parent 913c710001
commit 65ab4ea563
5 changed files with 109 additions and 56 deletions
@@ -23,7 +23,7 @@ import { PbnstRegModal } from "@/components/ui/modal/fcltReg/pbnstRegModal/pbnst
import { Toaster } from "react-hot-toast";
export default function PublicReuseFaciltyInsert() {
const { code, pbnst, pubHasuInit,pbnstRegInit } = useWrStore((state) => state);
const { code, pbnst, pubHasuInit,pbnstRegInit,pbnstMngData } = useWrStore((state) => state);
const { pubFacHeadList,pbnstHasuRes, pbnstRes } = pbnst;
const [currentTab, setCurrentTab] = useState<string>("mng");
const [fcltMng, setFcltMng] = useState<ruseFcltType[]>();
@@ -60,9 +60,7 @@ useEffect(() => {
if (selectRow) {
setSelectedRow(selectRow);
}
console.log('selectRow ', selectRow)
pbnstRegInit(selectRow)
// setSelectBdst(pbnstRes);
@@ -109,7 +107,11 @@ useEffect(() => {
<Button
size={"sm"}
className=""
onClick={() => setIsNewReg(!issNewReg) }
onClick={() => {
pbnstMngData([] as customPbnst[] )
setIsNewReg(!issNewReg)
} }
>
신규등록
</Button>
@@ -148,7 +150,7 @@ useEffect(() => {
</Button>
</TabsList>
<TabsContent className="max-h-full" value="mng">
<PbnstMngForm data={selectBdst || null} />
<PbnstMngForm formType="update" />
</TabsContent>
<TabsContent className="max-h-full" value="buse">
<PbnstBuseForm data={pbnstBiz || []} />
@@ -37,6 +37,7 @@ const fcOrgwtsHeadList = fcOrgwtsHeadListExport;
export type pubFacState = {
pbnst: {
isInit: boolean;
isReginit:boolean;
pubFacHeadList: TableUpperProps[];
pbnstMngUpHeadList: TableUpperProps[];
pbnstMngNm: chHeadType[];
@@ -61,7 +62,8 @@ type pubFacActions = {
fileDownLoad: (atflCd: string) => void;
pbnstMngData: (data: customPbnst[]) => void;
pbnstBizData(data: fcBizType): void;
getBizCycle: (pbnstObj: customPbnst) => void;
getBizCycle: (pbnstObj: customPbnst) => void;
pbnstRegFormInit:()=>void
};
export type pubFacType = pubFacState & pubFacActions;
@@ -69,6 +71,7 @@ export type pubFacType = pubFacState & pubFacActions;
export const pubFacStateExport: pubFacState = {
pbnst: {
isInit: false,
isReginit:false,
pubFacHeadList: pubFacHeadList,
pbnstMngUpHeadList: pbnstMngUpHeadList,
pbnstMngNm: pbnstMngNm,
@@ -242,6 +245,13 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
return state;
});
},
pbnstRegFormInit:()=>{
return set((state: pubFacState) => {
return state.pbnst.pbnstMngRegData;
});
},
pbnstBizData: (data: fcBizType) => {
return set((state: pubFacState) => {
if (state.pbnst.pbnstMngRegData) {
@@ -96,7 +96,7 @@ const fcOrgwtSchema = z.object({
export const fcBizSchema = z.object({
pbnstRuseFcltBizPk: z.number().default(1),
pbnstRuseFcltFk: z.number().nullish(),
pbnstRuseFcltFk: z.string().nullish(),
superkey: z.string().default("").nullish(),
cycl: z.number(),
seCd: z.string(),
@@ -167,7 +167,7 @@ export const fcBizSchema = z.object({
});
export const pbnstRegZod = z.object({
pbnstRuseFcltPk: z.number().default(1),
pbnstRuseFcltPk: z.string().default(''),
swtrmtFcltFk: z.string().default(""),
superkey:z.string().default(""),
ruseUtztnFcltNm: z.string().default(""),
@@ -33,22 +33,30 @@ export type FilesType = {
file: File;
};
export function PbnstMngForm({ data }: { data: customPbnst[] }) {
const { pbnst, pbnstUpdate ,pbnstMngData, fileDelete,getBizCycle} = useWrStore((state) => state);
export function PbnstMngForm({
formType,
firstFcltData,
}: {
formType: string;
firstFcltData?: customPbnst;
}) {
const { pbnst, pbnstUpdate, pbnstMngData, fileDelete, getBizCycle,pbnstRegFormInit } =
useWrStore((state) => state);
const [regFileList, setRegFileList] = useState<fcFileType[] | null>(null);
const [planFiles, setPlanFiles] = useState<FilesType[] | null>(null);
const [planFiles, setPlanFiles] = useState<FilesType[] | null>(null);
const [relationfiles, setRelationFiles] = useState<FilesType[] | null>(null);
const [fcltNm, setFcltNm] = useState<selectLabel[] | null>(null);
const [fcltNm, setFcltNm] = useState<selectLabel[] | null>(null);
const [progress, setProgress] = useState(0);
//const new File([] as BlobPart[], "") 파일 다운로드 활용
const ref = useRef<operType[] | null>( null);
const ref = useRef<operType[] | null>(null);
const form = useForm<z.infer<typeof pbnstRegZod>>({
resolver: zodResolver(pbnstRegZod),
defaultValues: pbnstRegZod.parse({}),
defaultValues: formType === 'reg' && pbnst.pbnstMngRegData ? pbnst.pbnstMngRegData[0] : pbnstRegZod.parse({}),
});
const {
fields: fcOpersField,
@@ -59,20 +67,19 @@ export type FilesType = {
name: "fcOpers",
});
const handleProgress = (percentage: string) => {
setProgress(Number(percentage));
};
const selectFclt = (val: number) => {
if (pbnst.pbnstRes && pbnst.pbnstRes[val]) {
getBizCycle(pbnst.pbnstRes[val])
form.reset(pbnst.pbnstRes[val])
//시설 선택시 데이터 초기화
getBizCycle(pbnst.pbnstRes[val]);
ref.current = pbnst.pbnstRes[val].fcOpers;
form.reset(pbnst.pbnstRes[val]);
}
};
}
const fileDownload = (index: number) => {};
const plusHist = () => {
const regData = {
@@ -160,50 +167,58 @@ export type FilesType = {
fileKnd: string,
regFile: fcFileType[]
) => {
const planDatas = regFile?.filter((item) => item.fileKnd !== fileKnd) || [];
const data = files.map((item) => ({
const exFileDatas =
regFile?.filter((item) => item.fileKnd !== fileKnd) || [];
const currentdata = files.map((item) => ({
fileTkn: item.atflCd,
filePath: item.file.name,
fileKnd: fileKnd,
rgtr: TEST_UUID,
mdfr: TEST_UUID,
}));
return [...planDatas, ...data];
}
return [...exFileDatas, ...currentdata];
};
// 등록할때 신규 값을 계속 가지고 있으려고
useEffect(() => {
if (
firstFcltData &&
(form.getValues("swtrmtFcltFk") === "" ||
form.getValues("swtrmtFcltFk") === undefined)
) {
form.setValue("swtrmtFcltFk", firstFcltData.swtrmtFcltFk);
form.setValue(
"pbnstRuseFcltPk",
String(firstFcltData.swtrmtFcltFk + "1")
);
}
}, [firstFcltData]);
useEffect(() => {
const formData = form.watch();
console.log('formData ', formData)
formData.fcOpers = ref.current ? [...ref.current] : [];
formData.fcFiles = regFileList ? [...regFileList] : [];
pbnstMngData([formData] as customPbnst[]);
}, [form.formState, regFileList]);
useEffect(() => {
pbnstMngData(pbnst.pbnstMngRegData);
}, [pbnst.pbnstMngRegData]);
useEffect(() => {
if (!data) return;
//form.reset(data);
ref.current = data[0]?.fcOpers ?? null;
}, [data])
useEffect(() => {
if (!pbnst.pbnstRes) return;
const fcltNmList = pbnst.pbnstRes.map((item, index) => ({
const fcltNmList = pbnst.pbnstRes.map((item, index) => ({
text: item.ruseUtztnFcltNm,
val: String(index)
}))
val: String(index),
}));
console.log('fcltNmList ', fcltNmList)
setFcltNm(fcltNmList)
}, [pbnst.pbnstRes])
setFcltNm(fcltNmList);
}, [pbnst.pbnstRes]);
// 2. Define a submit handler.
function onSubmit(values: z.infer<typeof pbnstRegZod>) {
@@ -213,8 +228,10 @@ export type FilesType = {
pbnstUpdate(values);
}
useEffect(() => {
console.log("form errors:", form.formState.errors);
}, [form.formState.errors]);
useEffect(() => {
if (relationfiles) {
setRegFileList(regFileFilter(relationfiles, "계통도", regFileList || []));
@@ -237,15 +254,40 @@ export type FilesType = {
<form onSubmit={form.handleSubmit(onSubmit)}>
<div className="flex justify-between items-center mx-3 mb-3">
<div className="col-span-2 flex items-top">
<Label className={formTableName + "pr-3 col-span-2 "}>재이용 시설명</Label>
<SelectBox
label=""
className="mt-4 ml-2"
selectClass={undefined}
selectArray={fcltNm ?? []}
onSelectValue={(val) => {selectFclt( Number(val))}}
value={""}
/>
<Label className={formTableName + "pr-3 col-span-2 "}>
재이용 시설명
</Label>
{formType === "reg" ? (
<FormField
control={form.control}
name="ruseUtztnFcltNm"
render={({ field }) => (
<FormUi label="">
<Input
className="!text-2xl"
placeholder=""
type="text"
onChange={(e) => {
field.onChange(String(e.target.value));
}}
value={field.value}
/>
</FormUi>
)}
/>
) : (
<SelectBox
label=""
className="mt-4 ml-2"
selectClass={undefined}
selectArray={fcltNm ?? []}
onSelectValue={(val) => {
selectFclt(Number(val));
}}
value={""}
/>
)}
</div>
<Button type="submit" size={commonButonSize}>
@@ -51,7 +51,6 @@ const pbnstRegTotal = ()=>{
let regData = {
swtrmtFcltFk: String(data.bscFctCd ),
pbnstRuseFcltPk: String(data.bscFctCd + "1"),
ruseUtztnFcltNm: data.bscFctNm,
fcBizs: [{ pbnstRuseFcltFk: String(data.bscFctCd + "1") ,cycl:1 } as unknown as fcBizType],
};
@@ -86,7 +85,7 @@ const pbnstRegTotal = ()=>{
</Button>
</TabsList>
<TabsContent className="max-h-full" value="mng">
<PbnstMngForm data={pbnstBdstForm} />
<PbnstMngForm formType={'reg'} firstFcltData={pbnstBdstForm} />
</TabsContent>
<TabsContent className="max-h-full" value="buse">
<PbnstBuseForm data={pbnstBdstForm.fcBizs} />