summaryrefslogtreecommitdiff
path: root/lib/general-contracts/detail/general-contract-detail.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-15 10:14:09 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-15 10:14:09 +0000
commitd7585b3f2ea941ee807c1e87bbc833265a193c78 (patch)
tree70d659154ed5feeebc312a5bf850ceecc1c4c441 /lib/general-contracts/detail/general-contract-detail.tsx
parentdd831478a3ab5ac7182903d41aa4b3e47f28224f (diff)
(최겸) 구매 일반계약 및 상세, PO 전달 구현
Diffstat (limited to 'lib/general-contracts/detail/general-contract-detail.tsx')
-rw-r--r--lib/general-contracts/detail/general-contract-detail.tsx57
1 files changed, 46 insertions, 11 deletions
diff --git a/lib/general-contracts/detail/general-contract-detail.tsx b/lib/general-contracts/detail/general-contract-detail.tsx
index 7c01fb16..9d9f35bd 100644
--- a/lib/general-contracts/detail/general-contract-detail.tsx
+++ b/lib/general-contracts/detail/general-contract-detail.tsx
@@ -3,19 +3,20 @@
import { useState, useEffect } from 'react'
import { useParams } from 'next/navigation'
import Link from 'next/link'
-import { getContractById } from '../service'
+import { getContractById, getSubcontractChecklist } from '../service'
import { GeneralContractInfoHeader } from './general-contract-info-header'
import { Alert, AlertDescription } from '@/components/ui/alert'
import { Button } from '@/components/ui/button'
import { AlertCircle, ArrowLeft } from 'lucide-react'
import { Skeleton } from '@/components/ui/skeleton'
import { ContractItemsTable } from './general-contract-items-table'
-import { SubcontractChecklist } from './subcontract-checklist'
+import { SubcontractChecklist } from './general-contract-subcontract-checklist'
import { ContractBasicInfo } from './general-contract-basic-info'
import { CommunicationChannel } from './general-contract-communication-channel'
import { Location } from './general-contract-location'
import { FieldServiceRate } from './general-contract-field-service-rate'
import { OffsetDetails } from './general-contract-offset-details'
+import { ContractApprovalRequestDialog } from './general-contract-approval-request-dialog'
export default function ContractDetailPage() {
const params = useParams()
@@ -24,14 +25,30 @@ export default function ContractDetailPage() {
const [contract, setContract] = useState<Record<string, unknown> | null>(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState<string | null>(null)
+ const [showApprovalDialog, setShowApprovalDialog] = useState(false)
+ const [subcontractChecklistData, setSubcontractChecklistData] = useState<any>(null)
useEffect(() => {
const fetchContract = async () => {
try {
setLoading(true)
setError(null)
+
+ // 계약 기본 정보 로드
const contractData = await getContractById(contractId!)
setContract(contractData)
+
+ // 하도급법 체크리스트 데이터 로드
+ try {
+ const checklistData = await getSubcontractChecklist(contractId!)
+ if (checklistData.success && checklistData.data) {
+ setSubcontractChecklistData(checklistData.data)
+ }
+ } catch (checklistError) {
+ console.log('하도급법 체크리스트 데이터 로드 실패:', checklistError)
+ // 체크리스트 로드 실패는 전체 로드를 실패시키지 않음
+ }
+
} catch (err) {
console.error('Error fetching contract:', err)
setError('계약 정보를 불러오는 중 오류가 발생했습니다.')
@@ -92,13 +109,22 @@ export default function ContractDetailPage() {
계약번호: {contract?.contractNumber as string} (Rev.{contract?.revision as number})
</p>
</div>
- {/* 계약목록으로 돌아가기 버튼 */}
- <Button asChild variant="outline" size="sm">
- <Link href="/evcp/general-contracts">
- <ArrowLeft className="h-4 w-4 mr-2" />
- 계약목록으로 돌아가기
- </Link>
- </Button>
+ <div className="flex gap-2">
+ {/* 계약승인요청 버튼 */}
+ <Button
+ onClick={() => setShowApprovalDialog(true)}
+ className="bg-blue-600 hover:bg-blue-700"
+ >
+ 계약승인요청
+ </Button>
+ {/* 계약목록으로 돌아가기 버튼 */}
+ <Button asChild variant="outline" size="sm">
+ <Link href="/evcp/general-contracts">
+ <ArrowLeft className="h-4 w-4 mr-2" />
+ 계약목록으로 돌아가기
+ </Link>
+ </Button>
+ </div>
</div>
{/* 계약 정보 헤더 */}
{contract && <GeneralContractInfoHeader contract={contract} />}
@@ -130,9 +156,9 @@ export default function ContractDetailPage() {
{/* 하도급법 자율점검 체크리스트 */}
<SubcontractChecklist
contractId={contract.id as number}
- onDataChange={() => {}}
+ onDataChange={(data) => setSubcontractChecklistData(data)}
readOnly={false}
- initialData={undefined}
+ initialData={subcontractChecklistData}
/>
{/* Communication Channel */}
<CommunicationChannel contractId={Number(contract.id)} />
@@ -147,6 +173,15 @@ export default function ContractDetailPage() {
<OffsetDetails contractId={Number(contract.id)} />
</div>
)}
+
+ {/* 계약승인요청 다이얼로그 */}
+ {contract && (
+ <ContractApprovalRequestDialog
+ contract={contract}
+ open={showApprovalDialog}
+ onOpenChange={setShowApprovalDialog}
+ />
+ )}
</div>
)
}