summaryrefslogtreecommitdiff
path: root/lib/bidding/vendor/partners-bidding-list-columns.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-02 10:30:58 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-02 10:30:58 +0000
commit581b415e6707d9f1d0d0b667b84c4314461bfe37 (patch)
tree5476543a290ada5c3f29a0cba24ee86fc9c215b2 /lib/bidding/vendor/partners-bidding-list-columns.tsx
parentd5ddafa4276b0031538261400e431009b0734be9 (diff)
(최겸) 입찰 등록, 협력업체 응찰 기능 개발
Diffstat (limited to 'lib/bidding/vendor/partners-bidding-list-columns.tsx')
-rw-r--r--lib/bidding/vendor/partners-bidding-list-columns.tsx83
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>
- ),
- }),
+
]
}