diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-02 10:30:58 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-02 10:30:58 +0000 |
| commit | 581b415e6707d9f1d0d0b667b84c4314461bfe37 (patch) | |
| tree | 5476543a290ada5c3f29a0cba24ee86fc9c215b2 /lib/bidding/vendor/partners-bidding-list-columns.tsx | |
| parent | d5ddafa4276b0031538261400e431009b0734be9 (diff) | |
(최겸) 입찰 등록, 협력업체 응찰 기능 개발
Diffstat (limited to 'lib/bidding/vendor/partners-bidding-list-columns.tsx')
| -rw-r--r-- | lib/bidding/vendor/partners-bidding-list-columns.tsx | 83 |
1 files changed, 63 insertions, 20 deletions
diff --git a/lib/bidding/vendor/partners-bidding-list-columns.tsx b/lib/bidding/vendor/partners-bidding-list-columns.tsx index b54ca967..41cc329f 100644 --- a/lib/bidding/vendor/partners-bidding-list-columns.tsx +++ b/lib/bidding/vendor/partners-bidding-list-columns.tsx @@ -14,7 +14,7 @@ import { CheckCircle, XCircle, Users, - Eye, + FileText, MoreHorizontal, Calendar, User @@ -22,6 +22,7 @@ import { import { formatDate } from '@/lib/utils' import { biddingStatusLabels, contractTypeLabels } from '@/db/schema' import { PartnersBiddingListItem } from '../detail/service' +import { Checkbox } from '@/components/ui/checkbox' const columnHelper = createColumnHelper<PartnersBiddingListItem>() @@ -31,6 +32,29 @@ interface PartnersBiddingListColumnsProps { export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingListColumnsProps = {}) { return [ + // select 버튼 + { + id: "select", + header: ({ table }) => ( + <Checkbox + checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && "indeterminate")} + onCheckedChange={(v) => table.toggleAllPageRowsSelected(!!v)} + aria-label="select all" + className="translate-y-0.5" + /> + ), + cell: ({ row }) => ( + <Checkbox + checked={row.getIsSelected()} + onCheckedChange={(v) => row.toggleSelected(!!v)} + aria-label="select row" + className="translate-y-0.5" + /> + ), + size: 40, + enableSorting: false, + enableHiding: false, + }, // 입찰 No. columnHelper.accessor('biddingNumber', { header: '입찰 No.', @@ -66,10 +90,10 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL }, }), - // 상세 (액션 버튼) + // 액션 (드롭다운 메뉴) columnHelper.display({ id: 'actions', - header: '상세', + header: 'Actions', cell: ({ row }) => { const handleView = () => { if (setRowAction) { @@ -80,15 +104,42 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL } } + const handleAttendance = () => { + if (setRowAction) { + setRowAction({ + type: 'attendance', + row: { original: row.original } + }) + } + } + + const canManageAttendance = row.original.invitationStatus === 'sent' || + row.original.invitationStatus === 'accepted' + return ( - <Button - variant="outline" - size="sm" - onClick={handleView} - className="h-8 w-8 p-0" - > - <Eye className="h-4 w-4" /> - </Button> + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button + variant="ghost" + className="flex h-8 w-8 p-0 data-[state=open]:bg-muted" + > + <MoreHorizontal className="h-4 w-4" /> + <span className="sr-only">메뉴 열기</span> + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent align="end" className="w-[160px]"> + <DropdownMenuItem onClick={handleView}> + <FileText className="mr-2 h-4 w-4" /> + 상세보기 + </DropdownMenuItem> + {canManageAttendance && ( + <DropdownMenuItem onClick={handleAttendance}> + <Users className="mr-2 h-4 w-4" /> + 참석여부 + </DropdownMenuItem> + )} + </DropdownMenuContent> + </DropdownMenu> ) }, }), @@ -247,14 +298,6 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL ), }), - // 최종수정자 - columnHelper.accessor('updatedBy', { - header: '최종수정자', - cell: ({ row }) => ( - <div className="max-w-20 truncate" title={row.original.updatedBy || ''}> - {row.original.updatedBy || '-'} - </div> - ), - }), + ] } |
