summaryrefslogtreecommitdiff
path: root/lib/bidding/list
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-11-12 10:42:36 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-11-12 10:42:36 +0000
commit8642ee064ddf96f1db2b948b4cc8bbbd6cfee820 (patch)
tree36bd57d147ba929f1d72918d1fb91ad2c4778624 /lib/bidding/list
parent57ea2f740abf1c7933671561cfe0e421fb5ef3fc (diff)
(최겸) 구매 일반계약, 입찰 수정
Diffstat (limited to 'lib/bidding/list')
-rw-r--r--lib/bidding/list/bidding-detail-dialogs.tsx122
-rw-r--r--lib/bidding/list/biddings-table-columns.tsx13
-rw-r--r--lib/bidding/list/biddings-table.tsx21
-rw-r--r--lib/bidding/list/create-bidding-dialog.tsx2
4 files changed, 8 insertions, 150 deletions
diff --git a/lib/bidding/list/bidding-detail-dialogs.tsx b/lib/bidding/list/bidding-detail-dialogs.tsx
index 065000ce..c7045c51 100644
--- a/lib/bidding/list/bidding-detail-dialogs.tsx
+++ b/lib/bidding/list/bidding-detail-dialogs.tsx
@@ -359,128 +359,6 @@ export function SpecificationMeetingDialog({
// PR 문서 다이얼로그는 bidding-pr-documents-dialog.tsx로 이동됨
// import { PrDocumentsDialog } from './bidding-pr-documents-dialog'로 사용하세요
-// 폐찰하기 다이얼로그
-interface BidClosureDialogProps {
- open: boolean;
- onOpenChange: (open: boolean) => void;
- bidding: BiddingListItem | null;
- userId: string;
-}
-
-export function BidClosureDialog({
- open,
- onOpenChange,
- bidding,
- userId
-}: BidClosureDialogProps) {
- const [description, setDescription] = useState('')
- const [files, setFiles] = useState<File[]>([])
- const [isSubmitting, setIsSubmitting] = useState(false)
-
- const handleSubmit = async (e: React.FormEvent) => {
- e.preventDefault()
-
- if (!bidding || !description.trim()) {
- toast.error('폐찰 사유를 입력해주세요.')
- return
- }
-
- setIsSubmitting(true)
-
- try {
- const result = await bidClosureAction(bidding.id, {
- description: description.trim(),
- files
- }, userId)
-
- if (result.success) {
- toast.success(result.message)
- onOpenChange(false)
- // 페이지 새로고침 또는 상태 업데이트
- window.location.reload()
- } else {
- toast.error(result.error || '폐찰 처리 중 오류가 발생했습니다.')
- }
- } catch (error) {
- toast.error('폐찰 처리 중 오류가 발생했습니다.')
- } finally {
- setIsSubmitting(false)
- }
- }
-
- const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
- if (e.target.files) {
- setFiles(Array.from(e.target.files))
- }
- }
-
- if (!bidding) return null
-
- return (
- <Dialog open={open} onOpenChange={onOpenChange}>
- <DialogContent className="max-w-2xl">
- <DialogHeader>
- <DialogTitle className="flex items-center gap-2">
- <FileXIcon className="h-5 w-5 text-destructive" />
- 폐찰하기
- </DialogTitle>
- <DialogDescription>
- {bidding.title} ({bidding.biddingNumber})를 폐찰합니다.
- </DialogDescription>
- </DialogHeader>
-
- <form onSubmit={handleSubmit} className="space-y-4">
- <div className="space-y-2">
- <Label htmlFor="description">폐찰 사유 <span className="text-destructive">*</span></Label>
- <Textarea
- id="description"
- placeholder="폐찰 사유를 입력해주세요..."
- value={description}
- onChange={(e) => setDescription(e.target.value)}
- className="min-h-[100px]"
- required
- />
- </div>
-
- <div className="space-y-2">
- <Label htmlFor="files">첨부파일</Label>
- <Input
- id="files"
- type="file"
- multiple
- onChange={handleFileChange}
- className="cursor-pointer"
- accept=".pdf,.doc,.docx,.xls,.xlsx,.txt,.jpg,.jpeg,.png"
- />
- {files.length > 0 && (
- <div className="text-sm text-muted-foreground">
- 선택된 파일: {files.map(f => f.name).join(', ')}
- </div>
- )}
- </div>
-
- <div className="flex justify-end gap-2 pt-4">
- <Button
- type="button"
- variant="outline"
- onClick={() => onOpenChange(false)}
- disabled={isSubmitting}
- >
- 취소
- </Button>
- <Button
- type="submit"
- variant="destructive"
- disabled={isSubmitting || !description.trim()}
- >
- {isSubmitting ? '처리 중...' : '폐찰하기'}
- </Button>
- </div>
- </form>
- </DialogContent>
- </Dialog>
- )
-}
// Re-export for backward compatibility
export { PrDocumentsDialog } from './bidding-pr-documents-dialog' \ No newline at end of file
diff --git a/lib/bidding/list/biddings-table-columns.tsx b/lib/bidding/list/biddings-table-columns.tsx
index 10966e0e..f5e77d03 100644
--- a/lib/bidding/list/biddings-table-columns.tsx
+++ b/lib/bidding/list/biddings-table-columns.tsx
@@ -136,7 +136,7 @@ export function getBiddingsColumns({ setRowAction }: GetColumnsProps): ColumnDef
header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="입찰명" />,
cell: ({ row }) => (
<div className="truncate max-w-[200px]" title={row.original.title}>
- <Button
+ {/* <Button
variant="link"
className="p-0 h-auto text-left justify-start font-bold underline"
onClick={() => setRowAction({ row, type: "view" })}
@@ -144,7 +144,8 @@ export function getBiddingsColumns({ setRowAction }: GetColumnsProps): ColumnDef
<div className="whitespace-pre-line">
{row.original.title}
</div>
- </Button>
+ </Button> */}
+ {row.original.title}
</div>
),
size: 200,
@@ -389,7 +390,7 @@ export function getBiddingsColumns({ setRowAction }: GetColumnsProps): ColumnDef
<Eye className="mr-2 h-4 w-4" />
상세보기
</DropdownMenuItem>
- <DropdownMenuItem
+ {/* <DropdownMenuItem
onClick={() => setRowAction({ row, type: "update" })}
disabled={['bidding_opened', 'bidding_closed', 'vendor_selected'].includes(row.original.status)}
>
@@ -398,8 +399,8 @@ export function getBiddingsColumns({ setRowAction }: GetColumnsProps): ColumnDef
{['bidding_opened', 'bidding_closed', 'vendor_selected'].includes(row.original.status) && (
<span className="text-xs text-muted-foreground ml-2">(수정 불가)</span>
)}
- </DropdownMenuItem>
- <DropdownMenuSeparator />
+ </DropdownMenuItem> */}
+ {/* <DropdownMenuSeparator />
<DropdownMenuItem
onClick={() => setRowAction({ row, type: "bid_closure" })}
disabled={row.original.status !== 'bidding_disposal'}
@@ -409,7 +410,7 @@ export function getBiddingsColumns({ setRowAction }: GetColumnsProps): ColumnDef
{row.original.status !== 'bidding_disposal' && (
<span className="text-xs text-muted-foreground ml-2">(유찰 시에만 가능)</span>
)}
- </DropdownMenuItem>
+ </DropdownMenuItem> */}
{/* <DropdownMenuSeparator />
<DropdownMenuItem onClick={() => setRowAction({ row, type: "copy" })}>
<Package className="mr-2 h-4 w-4" />
diff --git a/lib/bidding/list/biddings-table.tsx b/lib/bidding/list/biddings-table.tsx
index 39952d5a..89b6260c 100644
--- a/lib/bidding/list/biddings-table.tsx
+++ b/lib/bidding/list/biddings-table.tsx
@@ -23,8 +23,7 @@ import {
biddingTypeLabels
} from "@/db/schema"
import { EditBiddingSheet } from "./edit-bidding-sheet"
-import { SpecificationMeetingDialog, PrDocumentsDialog, BidClosureDialog } from "./bidding-detail-dialogs"
-
+import { SpecificationMeetingDialog, PrDocumentsDialog } from "./bidding-detail-dialogs"
interface BiddingsTableProps {
promises: Promise<
@@ -44,7 +43,6 @@ export function BiddingsTable({ promises }: BiddingsTableProps) {
const [isCompact, setIsCompact] = React.useState<boolean>(false)
const [specMeetingDialogOpen, setSpecMeetingDialogOpen] = React.useState(false)
const [prDocumentsDialogOpen, setPrDocumentsDialogOpen] = React.useState(false)
- const [bidClosureDialogOpen, setBidClosureDialogOpen] = React.useState(false)
const [selectedBidding, setSelectedBidding] = React.useState<BiddingListItemWithManagerCode | null>(null)
console.log(data,"data")
@@ -78,10 +76,6 @@ export function BiddingsTable({ promises }: BiddingsTableProps) {
case "pr_documents":
setPrDocumentsDialogOpen(true)
break
- case "bid_closure":
- setBidClosureDialogOpen(true)
- break
- // 기존 다른 액션들은 그대로 유지
default:
break
}
@@ -160,12 +154,6 @@ export function BiddingsTable({ promises }: BiddingsTableProps) {
setSelectedBidding(null)
}, [])
- const handleBidClosureDialogClose = React.useCallback(() => {
- setBidClosureDialogOpen(false)
- setRowAction(null)
- setSelectedBidding(null)
- }, [])
-
return (
<>
@@ -208,13 +196,6 @@ export function BiddingsTable({ promises }: BiddingsTableProps) {
bidding={selectedBidding}
/>
- {/* 폐찰하기 다이얼로그 */}
- <BidClosureDialog
- open={bidClosureDialogOpen}
- onOpenChange={handleBidClosureDialogClose}
- bidding={selectedBidding}
- userId={session?.user?.id ? String(session.user.id) : ''}
- />
</>
)
diff --git a/lib/bidding/list/create-bidding-dialog.tsx b/lib/bidding/list/create-bidding-dialog.tsx
index 20ea740f..ff68e739 100644
--- a/lib/bidding/list/create-bidding-dialog.tsx
+++ b/lib/bidding/list/create-bidding-dialog.tsx
@@ -62,8 +62,6 @@ import { createBiddingSchema, type CreateBiddingSchema } from '@/lib/bidding/val
import { contractTypeLabels, biddingTypeLabels, awardCountLabels } from '@/db/schema'
import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '@/components/ui/alert-dialog'
import { cn } from '@/lib/utils'
-import { MaterialGroupSingleSelector } from '@/components/common/material/material-group-single-selector'
-import { MaterialSingleSelector } from '@/components/common/selectors/material/material-single-selector'
import { PurchaseGroupCodeSelector } from '@/components/common/selectors/purchase-group-code/purchase-group-code-selector'
import { ProcurementManagerSelector } from '@/components/common/selectors/procurement-manager/procurement-manager-selector'
import { WbsCodeSingleSelector } from '@/components/common/selectors/wbs-code/wbs-code-single-selector'