diff --git a/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx b/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx index 8b0bb9f38..0b126f54c 100644 --- a/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx +++ b/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx @@ -1,11 +1,12 @@ "use client"; -import { useMemo, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { useRouter } from "next/navigation"; import { useQuery } from "@tanstack/react-query"; import { dayjs } from "@/shared/lib"; +import { useCodeList } from "@/entities/code"; import { InstlSncnApi, type InstlSncnMngSearchParams } from "@/entities/instl-sncn"; import "./cnfm-page.css"; @@ -65,6 +66,17 @@ function CnfmListPage() { }); const [pageIndex, setPageIndex] = useState(0); const [pageSize, setPageSize] = useState(10); + const [taskDialogOpen, setTaskDialogOpen] = useState(false); + const [selectedTaskSeComCd, setSelectedTaskSeComCd] = useState(""); + + const { data: fnrsCodeList = [] } = useCodeList("FNRS"); + + useEffect(() => { + if (!taskDialogOpen) return; + if (selectedTaskSeComCd) return; + if (fnrsCodeList.length === 0) return; + setSelectedTaskSeComCd(fnrsCodeList[0].lwpoCd); + }, [taskDialogOpen, selectedTaskSeComCd, fnrsCodeList]); const query = useQuery({ queryKey: ["instl-sncn-list", search, pageIndex, pageSize], @@ -91,6 +103,23 @@ function CnfmListPage() { setSearch({ bizNm, taskSeComCd, sidoComCd, sggComCd }); }; + const handleOpenTaskDialog = () => { + setSelectedTaskSeComCd((prev) => prev || fnrsCodeList[0]?.lwpoCd || ""); + setTaskDialogOpen(true); + }; + + const handleConfirmTaskDialog = () => { + const selected = fnrsCodeList.find((item) => item.lwpoCd === selectedTaskSeComCd); + if (!selected) return; + + const query = new URLSearchParams({ + taskSeComCd: selected.lwpoCd, + taskSeComCdNm: selected.lwpoCdNm, + }); + setTaskDialogOpen(false); + router.push(`/instl-sncn/register?${query.toString()}`); + }; + return (
{/* 검색 영역 */} @@ -160,7 +189,7 @@ function CnfmListPage() { @@ -311,6 +340,58 @@ function CnfmListPage() {
+ + {taskDialogOpen && ( +
+
+
+

업무구분 선택

+ +
+ +
+
+ {fnrsCodeList.map((item) => ( + + ))} +
+
+ +
+ + +
+
+
+ )} ); } diff --git a/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx b/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx index 18e419d6f..9fbd1f552 100644 --- a/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx +++ b/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx @@ -1,7 +1,7 @@ "use client"; -import { useMemo, useState } from "react"; -import { useRouter } from "next/navigation"; +import { useEffect, useMemo, useState } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; import { useQuery } from "@tanstack/react-query"; @@ -55,6 +55,14 @@ const ReadCell = ({ value }: { value: string | number }) => ( /* ------------------------------------------------------------------ */ function CnfmRegistPage() { const router = useRouter(); + const searchParams = useSearchParams(); + + const taskSeComCdNm = searchParams?.get("taskSeComCdNm") || "하수관로"; + const [taskSeComCd, setTaskSeComCd] = useState(""); + + useEffect(() => { + setTaskSeComCd(searchParams?.get("taskSeComCd") || ""); + }, [searchParams]); /* ── 기본 정보 ── */ const [bzNm, setBzNm] = useState(""); @@ -181,11 +189,19 @@ function CnfmRegistPage() { function handleSave() { if (!fnValidation("SAVE")) return; + const payload = { + taskSeComCd, + }; + void payload; alert("저장(임시) API 연동 후 progrsSttus=SV 전송"); } function handleSubmit() { if (!fnValidation("PRESENTN")) return; + const payload = { + taskSeComCd, + }; + void payload; alert("제출 API 연동 후 progrsSttus=ST 전송"); } @@ -292,7 +308,8 @@ function CnfmRegistPage() { 구분 -
하수관로
+
{taskSeComCdNm}
+ 신청 지자체