diff --git a/apps/as/src/entities/instl-sncn/api/instl-sncn-service.ts b/apps/as/src/entities/instl-sncn/api/instl-sncn-service.ts index b47de0782..38ce8e69a 100644 --- a/apps/as/src/entities/instl-sncn/api/instl-sncn-service.ts +++ b/apps/as/src/entities/instl-sncn/api/instl-sncn-service.ts @@ -4,11 +4,14 @@ import type { PageResponse } from "@/shared/model"; import type { AdstZoneResponseDto, + DocPrgrsUpdateRequestDto, InstlSncnApplySaveRequestDto, InstlSncnMngDetResponse, InstlSncnMngResponseDto, + InstlSncnMngSaveRequestDto, InstlSncnMngSearchParams, InstlSncnMngService, + InstlSncnMngUpdateRequestDto, } from "../model/instl-sncn-interface"; async function getSidoCombo(): Promise { @@ -30,32 +33,58 @@ async function getSigunguCombo(sidoCd: string): Promise { const BASE = ENDPOINT.AS_SERVICE.INSTL_SNCN; -export class InstlSncnApiService implements InstlSncnMngService { - public async getPage( - params: InstlSncnMngSearchParams, - ): Promise> { - const response = await client.get>(BASE, { - params, - }); - return response.data; - } - - public async getById(id: string): Promise { - const response = await client.get(`${BASE}/${id}`); - return response.data; - } - - public async saveApply(payload: InstlSncnApplySaveRequestDto): Promise { - const response = await client.post(`${BASE}/save-apply`, payload); - return response.data; - } - public async techReview(id: string, payload: InstlSncnApplySaveRequestDto): Promise { - await client.post(`${BASE}/${id}/tech-review`, payload); - } +async function getPage( + params: InstlSncnMngSearchParams, +): Promise> { + const response = await client.get>(BASE, { + params, + }); + return response.data; } -export const InstlSncnApi = new InstlSncnApiService(); +async function getById(id: string): Promise { + const response = await client.get(`${BASE}/${id}`); + return response.data; +} +async function save(payload: InstlSncnMngSaveRequestDto): Promise { + const response = await client.post(BASE, payload); + return response.data; +} + +async function saveApply(payload: InstlSncnApplySaveRequestDto): Promise { + const response = await client.post(`${BASE}/save-apply`, payload); + return response.data; +} + +async function update(id: string, payload: InstlSncnMngUpdateRequestDto): Promise { + await client.put(`${BASE}/${id}`, payload); +} + +async function techReview(id: string, payload: InstlSncnApplySaveRequestDto): Promise { + await client.post(`${BASE}/${id}/tech-review`, payload); +} + +async function remove(id: string): Promise { + await client.delete(`${BASE}/${id}`); +} + +async function changePrgrsSttsComCd(payload: DocPrgrsUpdateRequestDto): Promise { + await client.post(`${BASE}/doc/updatePrgrsStts`, payload); +} + +export const instlSncnService = { + getPage, + getById, + save, + saveApply, + update, + techReview, + remove, + changePrgrsSttsComCd, +} satisfies InstlSncnMngService; + +// TODO: st-anls-mst service 로 분리 export const instlSncnRegionService = { getSidoCombo, getSigunguCombo, diff --git a/apps/as/src/entities/instl-sncn/api/queries.ts b/apps/as/src/entities/instl-sncn/api/queries.ts index 46f56d231..4b5f4dd10 100644 --- a/apps/as/src/entities/instl-sncn/api/queries.ts +++ b/apps/as/src/entities/instl-sncn/api/queries.ts @@ -1,14 +1,20 @@ -import { useQuery } from "@tanstack/react-query"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { ENDPOINT } from "@/shared/config"; -import type { InstlSncnMngSearchParams } from "../model/instl-sncn-interface"; +import type { + DocPrgrsUpdateRequestDto, + InstlSncnApplySaveRequestDto, + InstlSncnMngSaveRequestDto, + InstlSncnMngSearchParams, + InstlSncnMngUpdateRequestDto, +} from "../model/instl-sncn-interface"; -import { InstlSncnApi, instlSncnRegionService } from "./instl-sncn-service"; +import { instlSncnRegionService, instlSncnService } from "./instl-sncn-service"; export const instlSncnKeys = { all: ["instl-sncn"] as const, - list: (params: InstlSncnMngSearchParams) => [...instlSncnKeys.all, "list", params] as const, + list: () => [...instlSncnKeys.all, "list"] as const, detail: (id: string) => [...instlSncnKeys.all, "detail", id] as const, sidoCombo: () => [ENDPOINT.STATVERIFY_SERVICE.ST_ANLS_MST, "sido"] as const, sigunguCombo: (sidoCd: string) => @@ -17,15 +23,15 @@ export const instlSncnKeys = { export function useInstlSncnList(params: InstlSncnMngSearchParams) { return useQuery({ - queryKey: instlSncnKeys.list(params), - queryFn: () => InstlSncnApi.getPage(params), + queryKey: instlSncnKeys.list(), + queryFn: () => instlSncnService.getPage(params), }); } export function useInstlSncnDetail(id: string) { return useQuery({ queryKey: instlSncnKeys.detail(id), - queryFn: () => InstlSncnApi.getById(id), + queryFn: () => instlSncnService.getById(id), enabled: Boolean(id), }); } @@ -44,3 +50,77 @@ export function useInstlSncnSigunguCombo(sidoCd: string) { enabled: Boolean(sidoCd), }); } + +export function useInstlSncnSave() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (payload: InstlSncnMngSaveRequestDto) => instlSncnService.save(payload), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: instlSncnKeys.all }); + }, + }); +} + +export function useInstlSncnSaveApply() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (payload: InstlSncnApplySaveRequestDto) => instlSncnService.saveApply(payload), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: instlSncnKeys.all }); + }, + }); +} + +export function useInstlSncnUpdate() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ id, payload }: { id: string; payload: InstlSncnMngUpdateRequestDto }) => + instlSncnService.update(id, payload), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ queryKey: instlSncnKeys.all }); + queryClient.invalidateQueries({ queryKey: instlSncnKeys.detail(variables.id) }); + }, + }); +} + +export function useInstlSncnTechReview() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ id, payload }: { id: string; payload: InstlSncnApplySaveRequestDto }) => + instlSncnService.techReview(id, payload), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ queryKey: instlSncnKeys.all }); + queryClient.invalidateQueries({ queryKey: instlSncnKeys.detail(variables.id) }); + }, + }); +} + +export function useInstlSncnRemove() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (id: string) => instlSncnService.remove(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: instlSncnKeys.all }); + }, + }); +} + +export function useInstlSncnChangePrgrsStts() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (payload: DocPrgrsUpdateRequestDto) => + instlSncnService.changePrgrsSttsComCd(payload), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ queryKey: instlSncnKeys.all }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.detail(variables.docNo), + }); + }, + }); +} diff --git a/apps/as/src/entities/instl-sncn/index.ts b/apps/as/src/entities/instl-sncn/index.ts index 146c16215..9547dd6db 100644 --- a/apps/as/src/entities/instl-sncn/index.ts +++ b/apps/as/src/entities/instl-sncn/index.ts @@ -1,10 +1,11 @@ -export { InstlSncnApi, instlSncnRegionService } from "./api/instl-sncn-service"; +export { instlSncnRegionService, instlSncnService } from "./api/instl-sncn-service"; export { instlSncnKeys, useInstlSncnDetail, useInstlSncnList, useInstlSncnSidoCombo, useInstlSncnSigunguCombo, + useInstlSncnTechReview, } from "./api/queries"; export { type AdstZoneResponseDto, @@ -12,6 +13,7 @@ export { type BizCstTreeDto, type BizSclTreeDto, type CklstRvwRsltTreeDto, + type DocPrgrsUpdateRequestDto, type ElaprDocPrgrsClientResponseDto, type EsntlAtchFileMngTreeResponseDto, INSTL_SNCN_REGISTER_SELECTION_KEY, @@ -19,10 +21,13 @@ export { type InstlSncnBizCstSaveRequestDto, type InstlSncnBzScaleSaveDto, type InstlSncnCklstResultSaveDto, + type InstlSncnEsntlAtchFileSaveDto, type InstlSncnMngDetResponse, type InstlSncnMngResponseDto, type InstlSncnMngSaveRequestDto, type InstlSncnMngSearchParams, type InstlSncnRvwOpnnResponseDto, + type InstlSncnRvwOpnnSaveRequestDto, + type InstlSncnSplmntDmndSaveDto, type ReviewStepCode, } from "./model/instl-sncn-interface"; diff --git a/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts b/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts index 433345b86..378d1e427 100644 --- a/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts +++ b/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts @@ -67,6 +67,19 @@ export interface InstlSncnMngSaveRequestDto { rtlztnUsgSeComCd?: string; } +/** 설치인가관리 수정 요청 DTO */ +export type InstlSncnMngUpdateRequestDto = InstlSncnMngSaveRequestDto; + +/** 문서 진행상태 수정 요청 DTO */ +export interface DocPrgrsUpdateRequestDto { + /** 행정지원문서번호 */ + docNo: string; + /** 문서구분코드 */ + docSeComCd: string; + /** 진행상태공통코드 */ + prgrsSttsComCd: string; +} + /** 설치인가관리 응답 DTO */ export interface InstlSncnMngResponseDto extends InstlSncnMngSaveRequestDto { /** 설치인가문서번호 (필수로 재정의) */ @@ -101,14 +114,14 @@ export interface InstlSncnMngResponseDto extends InstlSncnMngSaveRequestDto { export interface InstlSncnBzScaleSaveDto { /** 공종구분코드 */ cnstpSeCd: string; - /** 기본계획(A) */ + /** 기본계획수량 */ bscPl: number; - /** 예산반영(B) */ + /** 예산반영수량 */ budgetReflct: number; - /** 금회설계시(C) */ + /** 금회설계수량 */ thtiDsgn: number; - /** 증감(C-B) */ - diff: number; + /** 증감(C-B) — 클라이언트 계산용, API 미전송 */ + diff?: number; } /** 설치인가 신청 - 총사업비 저장 DTO(배열 원소) */ @@ -125,27 +138,92 @@ export interface InstlSncnBizCstSaveRequestDto { /** 설치인가 신청 - 체크리스트 결과 저장 DTO(배열 원소) */ export interface InstlSncnCklstResultSaveDto { + /** 점검표일련번호 */ cklstSn: number; + /** 점검표항목일련번호 */ cklstArtclSn: number; + /** 점검표검토일련번호 */ cklstRvwSn: number; + /** 검토단계공통코드 */ rvwStpComCd: string; + /** 선택값(Y/N/null) */ selected: "Y" | "N" | null; + /** 담당자검토내용(기술검토의견) */ picRvwCn?: string | null; } /** 설치인가 신청 - 필수첨부파일 저장 DTO(배열 원소) */ export interface InstlSncnEsntlAtchFileSaveDto { + /** 필수첨부파일아이디 */ esntlAtchFileId: string; + /** 첨부파일그룹아이디 */ atchFileGroupId: string; } +/** 설치인가검토의견 저장 요청 DTO */ +export interface InstlSncnRvwOpnnSaveRequestDto { + /** 설치인가문서번호 */ + instlSncnDocNo: string; + /** 검토의견일련번호 */ + rvwOpnnSn?: number; + /** 의견자구분공통코드 */ + opnrSeComCd?: string; + /** 의견자명 */ + opnrNm?: string; + /** 검토결과내용 */ + rvwRsltCn?: string; + /** 검토결과이상여부 */ + rvwRsltAnmlyYn?: string; + /** 첨부파일그룹아이디 */ + atchFileGroupId?: string; +} + +/** 설치인가 보완요구 저장 DTO(배열 원소) */ +export interface InstlSncnSplmntDmndSaveDto { + /** 보완요구 일련번호 */ + splmntDmndSn?: number; + /** 보완항목 공통코드 */ + splmntArtclComCd?: string; + /** 보완요구 내용 */ + splmntDmndCn?: string; + /** 보완요구 일시 */ + splmntDmndDt?: string; + /** 보완요구 첨부파일 그룹 ID */ + splmntDmndAtchFileGroupId?: string; + /** 보완 내용 */ + splmntCn?: string; + /** 보완 담당자 명 */ + splmntPicNm?: string; + /** 보완완료 일시 */ + splmntCmptnDt?: string; + /** 보완 첨부파일 그룹 ID */ + splmntAtchFileGroupId?: string; + /** 완료 여부 */ + cmptnYn?: string; +} + /** 설치인가 신청 - 통합 저장 요청 DTO */ export interface InstlSncnApplySaveRequestDto { + /** 기술검토저장구분(SV.저장, CP.검토완료) */ + techReViewSaveCd?: string; + /** 검토단계공통코드(ENV.환경청.EP, KECO.환경공단.TE) */ + rvwStpCd?: string; + /** 설치인가관리 정보 */ instlSncnMng: InstlSncnMngSaveRequestDto; + /** 사업규모 목록 */ bzScaleList: InstlSncnBzScaleSaveDto[]; + /** 총사업비 목록 */ bizCstList: InstlSncnBizCstSaveRequestDto[]; + /** 체크리스트 검토결과 목록 */ cklstResultList: InstlSncnCklstResultSaveDto[]; + /** 체크리스트 검토결과 맵 (rvwStpComCd -> 목록) */ + cklstResultMap?: Record; + /** 필수첨부파일 목록 */ esntlAtchFileList: InstlSncnEsntlAtchFileSaveDto[]; + /** 검토의견 목록 */ + rvwOpnnList?: InstlSncnRvwOpnnSaveRequestDto[]; + /** 보완요구 목록 */ + splmntDmndList?: InstlSncnSplmntDmndSaveDto[]; } export type ReviewStepCode = "LOCAL" | "ENV" | "KECO"; @@ -334,6 +412,10 @@ export interface InstlSncnMngDetResponse { export interface InstlSncnMngService { getPage: (params: InstlSncnMngSearchParams) => Promise>; getById: (id: string) => Promise; + save: (payload: InstlSncnMngSaveRequestDto) => Promise; saveApply: (payload: InstlSncnApplySaveRequestDto) => Promise; + update: (id: string, payload: InstlSncnMngUpdateRequestDto) => Promise; techReview: (id: string, payload: InstlSncnApplySaveRequestDto) => Promise; + remove: (id: string) => Promise; + changePrgrsSttsComCd: (payload: DocPrgrsUpdateRequestDto) => Promise; } diff --git a/apps/as/src/pages/approval-line-management/ui/elapr-tmplt-form-dialog.tsx b/apps/as/src/pages/approval-line-management/ui/elapr-tmplt-form-dialog.tsx index 3e7f36de1..8aea03c7e 100644 --- a/apps/as/src/pages/approval-line-management/ui/elapr-tmplt-form-dialog.tsx +++ b/apps/as/src/pages/approval-line-management/ui/elapr-tmplt-form-dialog.tsx @@ -92,7 +92,7 @@ function ElaprTmpltFormDialog({
setValue("docSeComCd", v)} placeholder="문서구분 선택" diff --git a/apps/as/src/pages/checklist-management/ui/cklst-preview-dialog.tsx b/apps/as/src/pages/checklist-management/ui/cklst-preview-dialog.tsx index 42f2edcf8..c6c1f3746 100644 --- a/apps/as/src/pages/checklist-management/ui/cklst-preview-dialog.tsx +++ b/apps/as/src/pages/checklist-management/ui/cklst-preview-dialog.tsx @@ -67,6 +67,7 @@ function CklstPreviewDialog({ {displayRows.map(({ row, depth }) => { const branchPrefix = formatTreeBranchPrefix(depth); + const showRadios = row.bchckUseYn !== "N"; if (row.useYn === "N") return null; @@ -82,16 +83,20 @@ function CklstPreviewDialog({ {row.rvwCn ?? "—"} - -
- - -
-
- - -
-
+ {showRadios ? ( + +
+ + +
+
+ + +
+
+ ) : ( + "—" + )}
); diff --git a/apps/as/src/pages/checklist-management/ui/cklst-rvw-grid.tsx b/apps/as/src/pages/checklist-management/ui/cklst-rvw-grid.tsx index 8eca3ce21..7b44ba2b5 100644 --- a/apps/as/src/pages/checklist-management/ui/cklst-rvw-grid.tsx +++ b/apps/as/src/pages/checklist-management/ui/cklst-rvw-grid.tsx @@ -113,6 +113,7 @@ function CklstRvwGrid({ selectedCklst }: CklstRvwGridProps) { rvwCnLvNo: 1, rvwCn: "", useYn: "Y", + bchckUseYn: "Y", sortSeq: maxSort + 1, isNew: true, isDirty: true, @@ -145,6 +146,7 @@ function CklstRvwGrid({ selectedCklst }: CklstRvwGridProps) { rvwCnLvNo: parentLv + 1, rvwCn: "", useYn: "Y", + bchckUseYn: "Y", sortSeq: maxSort + 1, isNew: true, isDirty: true, @@ -189,6 +191,8 @@ function CklstRvwGrid({ selectedCklst }: CklstRvwGridProps) { const handleSave = async () => { if (!cklstSn) return; + if (!(await confirm("체크리스트 항목을 저장하시겠습니까?"))) return; + const dirty = getDirtyRows().sort((a, b) => (a.rvwCnLvNo ?? 1) - (b.rvwCnLvNo ?? 1)); for (const row of dirty) { @@ -198,8 +202,6 @@ function CklstRvwGrid({ selectedCklst }: CklstRvwGridProps) { return; } - if (!(await confirm("체크리스트 항목을 저장하시겠습니까?"))) return; - if (row.isNew) { await createMutation.mutateAsync({ cklstSn: row.cklstSn, @@ -209,7 +211,7 @@ function CklstRvwGrid({ selectedCklst }: CklstRvwGridProps) { rvwCn: row.rvwCn, useYn: row.useYn, sortSeq: row.sortSeq, - bchckUseYn: "Y", + bchckUseYn: row.bchckUseYn ?? "Y", }); } else if (row.cklstRvwSn != null) { await updateMutation.mutateAsync({ @@ -277,17 +279,19 @@ function CklstRvwGrid({ selectedCklst }: CklstRvwGridProps) { ) : ( - - - + + + + - + 점검항목 주요 검토내용 사용 여부 + 체크 사용 구분 관리 diff --git a/apps/as/src/pages/checklist-management/ui/cklst-rvw-row.tsx b/apps/as/src/pages/checklist-management/ui/cklst-rvw-row.tsx index 9ea9094ce..c8bc7cb76 100644 --- a/apps/as/src/pages/checklist-management/ui/cklst-rvw-row.tsx +++ b/apps/as/src/pages/checklist-management/ui/cklst-rvw-row.tsx @@ -91,6 +91,22 @@ function CklstRvwRowComponent({ + + onChange({ bchckUseYn: v as "Y" | "N", isDirty: true })} + className="flex justify-center gap-4" + > +
+ + +
+
+ + +
+
+
{levelLabel}
diff --git a/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-form-dialog.tsx b/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-form-dialog.tsx index 0f1faf8a1..16d6fed1c 100644 --- a/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-form-dialog.tsx +++ b/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-form-dialog.tsx @@ -94,7 +94,7 @@ function EsntlAtchFileFormDialog({
setValue("docSeComCd", v, { shouldValidate: true })} placeholder="문서구분 선택" diff --git a/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-list.tsx b/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-list.tsx index 661b3a822..62a728073 100644 --- a/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-list.tsx +++ b/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-list.tsx @@ -36,7 +36,7 @@ function EsntlAtchFileList({ onPaginationChange, }: EsntlAtchFileListProps) { const { confirm } = useConfirm(); - const { data: docSeCodes } = useCodeList("ASDOCSECD"); + const { data: docSeCodes } = useCodeList("ASDOCSE"); const [dialogMode, setDialogMode] = useState<"create" | "edit" | null>(null); const [editingRow, setEditingRow] = useState(null); diff --git a/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-mng-page.tsx b/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-mng-page.tsx index 425169983..3e5dbe9bb 100644 --- a/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-mng-page.tsx +++ b/apps/as/src/pages/esntl-atch-file-mng/ui/esntl-atch-file-mng-page.tsx @@ -32,7 +32,7 @@ const DEFAULT_SEARCH_PARAMS = { }; function EsntlAtchFileMngPage() { - const { data: docSeCodes, isPending: isDocSeLoading } = useCodeList("ASDOCSECD"); + const { data: docSeCodes, isPending: isDocSeLoading } = useCodeList("ASDOCSE"); const [docSeComCd, setDocSeComCd] = useState(ESNTL_ATCH_FILE_ALL_DOC_SE); const [pagination, setPagination] = useState({ diff --git a/apps/as/src/pages/instl-sncn-old/ui/cnfm-list-page.tsx b/apps/as/src/pages/instl-sncn-old/ui/cnfm-list-page.tsx index 8597baf69..2b8c56174 100644 --- a/apps/as/src/pages/instl-sncn-old/ui/cnfm-list-page.tsx +++ b/apps/as/src/pages/instl-sncn-old/ui/cnfm-list-page.tsx @@ -9,8 +9,8 @@ import { dayjs } from "@/shared/lib"; import { useCodeList } from "@/entities/code"; import { INSTL_SNCN_REGISTER_SELECTION_KEY, - InstlSncnApi, type InstlSncnMngSearchParams, + instlSncnService, } from "@/entities/instl-sncn"; import "./cnfm-page.css"; @@ -78,14 +78,14 @@ function CnfmListPage() { useEffect(() => { if (!taskDialogOpen) return; if (selectedTaskSeComCd.length) return; - if (fnrsCodeList.length === 0) return; - // setSelectedTaskSeComCd([fnrsCodeList[0].lwpoCd]); + if (fnrsCodeList.length === 0) return; + // setSelectedTaskSeComCd([fnrsCodeList[0].lwpoCd]); }, [taskDialogOpen, selectedTaskSeComCd, fnrsCodeList]); const query = useQuery({ queryKey: ["instl-sncn-list", search, pageIndex, pageSize], queryFn: () => - InstlSncnApi.getPage({ + instlSncnService.getPage({ ...search, page: pageIndex, size: pageSize, @@ -120,13 +120,15 @@ function CnfmListPage() { // prepare arrays of selected codes and names const selectedCodes = selectedTaskSeComCd; - const selectedNames = selectedTaskSeComCd.map((code) => fnrsCodeList.find((item) => item.lwpoCd === code)?.lwpoCdNm || ""); + const selectedNames = selectedTaskSeComCd.map( + (code) => fnrsCodeList.find((item) => item.lwpoCd === code)?.lwpoCdNm || "", + ); sessionStorage.setItem( INSTL_SNCN_REGISTER_SELECTION_KEY, JSON.stringify({ taskSeComCdList: selectedCodes, - taskSeComCdNmList: selectedNames - }) + taskSeComCdNmList: selectedNames, + }), ); setTaskDialogOpen(false); router.push("/instl-sncn/register"); @@ -138,7 +140,9 @@ function CnfmListPage() {
- +
- +
- +
- +
@@ -198,11 +214,7 @@ function CnfmListPage() {

설치인가 목록

-
@@ -237,12 +251,16 @@ function CnfmListPage() {
{query.isLoading && ( - + )} {!query.isLoading && (query.data?.content?.length ?? 0) === 0 && ( - + )} {(query.data?.content ?? []).map((row) => { @@ -254,7 +272,7 @@ function CnfmListPage() { onClick={() => router.push(`/instl-sncn/${row.instlSncnDocNo}`)} > - + @@ -267,10 +285,13 @@ function CnfmListPage() { index < currentStepIndex ? "completed" : index === currentStepIndex - ? "current" - : "pending"; + ? "current" + : "pending"; return ( - + {step.label} @@ -284,10 +305,13 @@ function CnfmListPage() { index < currentStepIndex ? "completed" : index === currentStepIndex - ? "current" - : "pending"; + ? "current" + : "pending"; return ( - + {step.label} @@ -378,7 +402,9 @@ function CnfmListPage() { checked={selectedTaskSeComCd.includes(item.lwpoCd)} onChange={() => { setSelectedTaskSeComCd((prev) => - prev.includes(item.lwpoCd) ? prev.filter((v) => v !== item.lwpoCd) : [...prev, item.lwpoCd], + prev.includes(item.lwpoCd) + ? prev.filter((v) => v !== item.lwpoCd) + : [...prev, item.lwpoCd], ); }} /> @@ -396,7 +422,7 @@ function CnfmListPage() { > 취소 -
조회 중입니다... + 조회 중입니다... +
조회 결과가 없습니다. + 조회 결과가 없습니다. +
{row.sido || "-"}{row.gugun|| "-"}{row.gugun || "-"} {row.bizNm || "-"} {row.taskSeCdNm || row.taskSeComCd || "-"} {row.aplcntNm || "-"}