diff options
Diffstat (limited to 'lib/avl/table/project-avl-table.tsx')
| -rw-r--r-- | lib/avl/table/project-avl-table.tsx | 65 |
1 files changed, 51 insertions, 14 deletions
diff --git a/lib/avl/table/project-avl-table.tsx b/lib/avl/table/project-avl-table.tsx index fc8f0f5e..7a0fda2e 100644 --- a/lib/avl/table/project-avl-table.tsx +++ b/lib/avl/table/project-avl-table.tsx @@ -4,6 +4,14 @@ import * as React from "react" import { forwardRef, useImperativeHandle, useLayoutEffect, useMemo } from "react" import { DataTable } from "@/components/data-table/data-table" import { Button } from "@/components/ui/button" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog" import { AvlVendorAddAndModifyDialog } from "./avl-vendor-add-and-modify-dialog" import { getProjectAvlVendorInfo, createAvlVendorInfo, updateAvlVendorInfo, deleteAvlVendorInfo, finalizeProjectAvl } from "../service" import { useReactTable, getCoreRowModel, getPaginationRowModel, getSortedRowModel, getFilteredRowModel } from "@tanstack/react-table" @@ -384,6 +392,9 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro } }, [table, loadData]) + // 최종 확정 다이얼로그 상태 + const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false) + // 최종 확정 핸들러 const handleFinalizeAvl = React.useCallback(async () => { // 1. 필수 조건 검증 @@ -402,27 +413,20 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro return } - // 2. 사용자 확인 - const confirmed = window.confirm( - `현재 프로젝트(${localProjectCode})의 AVL을 최종 확정하시겠습니까?\n\n` + - `- 프로젝트명: ${projectInfo.projectName}\n` + - `- 벤더 정보: ${data.length}개\n` + - `- 공사부문: ${projectInfo.constructionSector}\n` + - `- 선종: ${projectInfo.shipType}\n` + - `- H/T 구분: ${projectInfo.htDivision}\n\n` + - `확정 후에는 수정이 어려울 수 있습니다.` - ) - - if (!confirmed) return + // 2. 확인 다이얼로그 열기 + setIsConfirmDialogOpen(true) + }, [localProjectCode, projectInfo, data.length]) + // 실제 최종 확정 실행 함수 + const executeFinalizeAvl = React.useCallback(async () => { try { - // 3. 현재 데이터의 모든 ID 수집 + // 3. 현재 데이터의 모든 ID 수집 (전체 레코드 기준) const avlVendorInfoIds = data.map(item => item.id) // 4. 최종 확정 실행 const result = await finalizeProjectAvl( localProjectCode, - projectInfo, + projectInfo!, avlVendorInfoIds, sessionData?.user?.name || "" ) @@ -441,6 +445,8 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro } catch (error) { console.error("AVL 최종 확정 실패:", error) toast.error("AVL 최종 확정 중 오류가 발생했습니다.") + } finally { + setIsConfirmDialogOpen(false) } }, [localProjectCode, projectInfo, data, table, loadData, sessionData?.user?.name]) @@ -595,6 +601,37 @@ export const ProjectAvlTable = forwardRef<ProjectAvlTableRef, ProjectAvlTablePro isTemplate={false} // 프로젝트 AVL 모드 initialProjectCode={localProjectCode} /> + + {/* 최종 확정 확인 다이얼로그 */} + <Dialog open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}> + <DialogContent> + <DialogHeader> + <DialogTitle>프로젝트 AVL 최종 확정</DialogTitle> + <DialogDescription> + 현재 프로젝트의 AVL을 최종 확정하시겠습니까? + </DialogDescription> + </DialogHeader> + <div className="space-y-2 text-sm"> + <div>• 프로젝트 코드: {localProjectCode}</div> + <div>• 프로젝트명: {projectInfo?.projectName || ""}</div> + <div>• 공사부문: {projectInfo?.constructionSector || ""}</div> + <div>• 선종: {projectInfo?.shipType || ""}</div> + <div>• H/T 구분: {projectInfo?.htDivision || ""}</div> + <div>• 벤더 정보: {data.length}개 (전체 레코드)</div> + {/* <div className="text-amber-600 font-medium mt-4"> + ⚠️ 확정 후 내용 수정을 필요로 하는 경우 동일 건을 다시 최종확정해 revision 처리로 수정해야 합니다. + </div> */} + </div> + <DialogFooter> + <Button variant="outline" onClick={() => setIsConfirmDialogOpen(false)}> + 취소 + </Button> + <Button onClick={executeFinalizeAvl}> + 최종 확정 + </Button> + </DialogFooter> + </DialogContent> + </Dialog> </div> ) }) |
