diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-30 10:44:47 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-30 10:44:47 +0000 |
| commit | 871a6d46a769cbe9e87146434f4bcb2d6792ab81 (patch) | |
| tree | acc25b3645e2253625e68f3721a203131ff4f3c4 /lib/vendor-investigation/table/investigation-table-columns.tsx | |
| parent | 17b9d2016be7c0ab6571de6aba36b3f4ea37bdb1 (diff) | |
(최겸) 구매 PQ/실사 재개발(테스트 필요), 정규업체등록 결재 개발, 실사 의뢰 결재 후처리 등
Diffstat (limited to 'lib/vendor-investigation/table/investigation-table-columns.tsx')
| -rw-r--r-- | lib/vendor-investigation/table/investigation-table-columns.tsx | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/lib/vendor-investigation/table/investigation-table-columns.tsx b/lib/vendor-investigation/table/investigation-table-columns.tsx index 28ecc2ec..9f4944c3 100644 --- a/lib/vendor-investigation/table/investigation-table-columns.tsx +++ b/lib/vendor-investigation/table/investigation-table-columns.tsx @@ -5,7 +5,7 @@ import { ColumnDef } from "@tanstack/react-table" import { Checkbox } from "@/components/ui/checkbox" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" -import { Edit, Ellipsis, AlertTriangle } from "lucide-react" +import { Edit, Ellipsis, AlertTriangle, FileEdit, Eye } from "lucide-react" import { DropdownMenu, DropdownMenuContent, @@ -22,7 +22,7 @@ import { vendorInvestigationsColumnsConfig, VendorInvestigationsViewWithContacts } from "@/config/vendorInvestigationsColumnsConfig" - +import { useRouter } from "next/navigation" // Props for the column generator function interface GetVendorInvestigationsColumnsProps { setRowAction?: React.Dispatch< @@ -93,8 +93,11 @@ export function getColumns({ id: "actions", enableHiding: false, cell: ({ row }) => { + const router = useRouter() const isCanceled = row.original.investigationStatus === "CANCELED" const isCompleted = row.original.investigationStatus === "COMPLETED" + const canReviewPQ = !isCanceled && row.original.investigationStatus === "PLANNED" && !!row.original.pqSubmissionId + const reviewUrl = `/evcp/pq_new/${row.original.vendorId}/${row.original.pqSubmissionId}` const canRequestSupplement = (row.original.investigationMethod === "PRODUCT_INSPECTION" || row.original.investigationMethod === "SITE_VISIT_EVAL") && row.original.investigationStatus === "COMPLETED" && @@ -116,23 +119,60 @@ export function getColumns({ <DropdownMenuContent align="end" className="w-48"> <DropdownMenuItem onSelect={() => { - if (!isCanceled && row.original.investigationStatus === "PLANNED") { - setRowAction?.({ type: "update-progress", row }) + if (!canReviewPQ) return + if (router) { + router.push(reviewUrl) + } else if (typeof window !== "undefined") { + window.location.href = reviewUrl } }} - disabled={isCanceled || row.original.investigationStatus !== "PLANNED"} + disabled={!canReviewPQ} + > + <FileEdit className="mr-2 h-4 w-4" /> + 검토 + </DropdownMenuItem> + <DropdownMenuItem + onSelect={() => { + if (!isCanceled && row.original.investigationStatus === "QM_REVIEW_CONFIRMED") { + (setRowAction as any)?.({ type: "update-progress", row }) + } + }} + disabled={isCanceled || row.original.investigationStatus !== "QM_REVIEW_CONFIRMED"} > <Edit className="mr-2 h-4 w-4" /> 실사 진행 관리 </DropdownMenuItem> <DropdownMenuItem - onSelect={() => { - if (!isCanceled && row.original.investigationStatus === "IN_PROGRESS") { - setRowAction?.({ type: "update-result", row }) + onSelect={async () => { + if (isCanceled || row.original.investigationStatus !== "IN_PROGRESS") return + // 구매자체평가일 경우 결과입력 비활성화 + if (row.original.investigationMethod === "PURCHASE_SELF_EVAL") { + return + } + // 방문/제품 평가 시: 벤더 회신 여부 확인 후 열기 (없으면 토스트) + if ( + row.original.investigationMethod === "PRODUCT_INSPECTION" || + row.original.investigationMethod === "SITE_VISIT_EVAL" + ) { + try { + const { getSiteVisitRequestAction } = await import("@/lib/site-visit/service") + const req = await getSiteVisitRequestAction(row.original.investigationId) + const canProceed = req.success && req.data && req.data.status === "VENDOR_SUBMITTED" + if (!canProceed) { + const { toast } = await import("sonner") + toast.error("협력업체 방문실사 정보 회신 전에는 결과 입력이 불가합니다.") + return + } + } catch {} } + ;(setRowAction as any)?.({ type: "update-result", row }) }} - disabled={isCanceled || row.original.investigationStatus !== "IN_PROGRESS"} + disabled={ + isCanceled || + row.original.investigationStatus !== "IN_PROGRESS" || + row.original.investigationMethod === "PURCHASE_SELF_EVAL" + } > <Edit className="mr-2 h-4 w-4" /> 실사 결과 입력 @@ -377,6 +417,8 @@ function formatStatus(status: string): string { switch (status) { case "PLANNED": return "계획됨" + case "QM_REVIEW_CONFIRMED": + return "QM 검토 확정" case "IN_PROGRESS": return "진행 중" case "COMPLETED": |
