summaryrefslogtreecommitdiff
path: root/lib/bidding/vendor/partners-bidding-list-columns.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-09 10:34:05 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-09 10:34:05 +0000
commit86b1fd1cc801f45642f84d24c0b5c84368454ff0 (patch)
tree63176d1feb6d3fbbb71d942343056ba6d793b586 /lib/bidding/vendor/partners-bidding-list-columns.tsx
parentc62ec046327fd388ebce04571b55910747e69a3b (diff)
(최겸) 구매 입찰 사전견적, 입찰, 낙찰, 유찰, 재입찰 기능 개발
Diffstat (limited to 'lib/bidding/vendor/partners-bidding-list-columns.tsx')
-rw-r--r--lib/bidding/vendor/partners-bidding-list-columns.tsx61
1 files changed, 45 insertions, 16 deletions
diff --git a/lib/bidding/vendor/partners-bidding-list-columns.tsx b/lib/bidding/vendor/partners-bidding-list-columns.tsx
index 0d1e3123..7058f026 100644
--- a/lib/bidding/vendor/partners-bidding-list-columns.tsx
+++ b/lib/bidding/vendor/partners-bidding-list-columns.tsx
@@ -94,7 +94,7 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL
// 액션 (드롭다운 메뉴)
columnHelper.display({
id: 'actions',
- header: 'Actions',
+ header: '액션',
cell: ({ row }) => {
const handleView = () => {
if (setRowAction) {
@@ -122,13 +122,7 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL
})
}
}
-
- const canManageAttendance = row.original.invitationStatus === 'sent' ||
- row.original.invitationStatus === 'accepted'
- // 사전견적이 가능한 조건: 초대 발송(sent) 상태인 경우
- const canDoPreQuote = row.original.invitationStatus === 'sent' || row.original.invitationStatus === 'pending' || row.original.invitationStatus === 'submitted';
-
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
@@ -143,20 +137,12 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL
<DropdownMenuContent align="end" className="w-[160px]">
<DropdownMenuItem onClick={handleView}>
<FileText className="mr-2 h-4 w-4" />
- 상세보기
+ 입찰 상세보기
</DropdownMenuItem>
- {canDoPreQuote && (
<DropdownMenuItem onClick={handlePreQuote}>
<Calculator className="mr-2 h-4 w-4" />
사전견적하기
</DropdownMenuItem>
- )}
- {canManageAttendance && (
- <DropdownMenuItem onClick={handleAttendance}>
- <Users className="mr-2 h-4 w-4" />
- 참석여부
- </DropdownMenuItem>
- )}
</DropdownMenuContent>
</DropdownMenu>
)
@@ -199,6 +185,22 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL
},
}),
+ // 사전견적 참여의사
+ columnHelper.accessor('isPreQuoteParticipated', {
+ header: '사전견적 참여의사',
+ cell: ({ row }) => {
+ const participated = row.original.isPreQuoteParticipated
+ if (participated === null) {
+ return <Badge variant="outline">미결정</Badge>
+ }
+ return (
+ <Badge variant={participated ? 'default' : 'destructive'}>
+ {participated ? '참여' : '미참여'}
+ </Badge>
+ )
+ },
+ }),
+
// 입찰 참여의사
columnHelper.accessor('invitationStatus', {
header: '입찰 참여의사',
@@ -250,6 +252,33 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL
},
}),
+ // 사전견적 마감일
+ columnHelper.accessor('preQuoteDeadline', {
+ header: '사전견적 마감일',
+ cell: ({ row }) => {
+ const deadline = row.original.preQuoteDeadline
+ if (!deadline) {
+ return <div className="text-muted-foreground">-</div>
+ }
+
+ const now = new Date()
+ const deadlineDate = new Date(deadline)
+ const isExpired = deadlineDate < now
+
+ return (
+ <div className={`text-sm flex items-center gap-1 ${isExpired ? 'text-red-600' : ''}`}>
+ <Calendar className="w-4 h-4" />
+ <span>{formatDate(deadline, 'KR')}</span>
+ {isExpired && (
+ <Badge variant="destructive" className="text-xs">
+ 마감
+ </Badge>
+ )}
+ </div>
+ )
+ },
+ }),
+
// 계약기간
columnHelper.accessor('contractPeriod', {
header: '계약기간',