summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx4
-rw-r--r--app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx4
-rw-r--r--app/[lng]/evcp/(evcp)/(procurement)/bid-selection/[id]/detail/page.tsx69
3 files changed, 73 insertions, 4 deletions
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx
index f460f570..b6c181dc 100644
--- a/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx
@@ -4,7 +4,7 @@ import { GetBiddingsSchema, searchParamsCache } from '@/lib/bidding/validation'
import { BiddingsFailureTable } from '@/lib/bidding/failure/biddings-failure-table'
export const metadata: Metadata = {
- title: '유찰입찰',
+ title: '폐찰 및 재입찰',
description: '유찰된 입찰 내역을 확인하고 재입찰을 진행할 수 있습니다.',
}
@@ -26,7 +26,7 @@ export default async function BiddingFailurePage({
<div className="flex flex-col gap-4 p-4">
<div className="flex items-center justify-between">
<div>
- <h1 className="text-2xl font-bold tracking-tight">유찰입찰</h1>
+ <h1 className="text-2xl font-bold tracking-tight">폐찰 및 재입찰</h1>
<p className="text-muted-foreground">
유찰된 입찰 내역을 확인하고 재입찰을 진행할 수 있습니다.
</p>
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx
index 0d725bbf..4f6e9715 100644
--- a/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx
@@ -4,7 +4,7 @@ import { GetBiddingsSchema, searchParamsCache } from '@/lib/bidding/validation'
import { BiddingsReceiveTable } from '@/lib/bidding/receive/biddings-receive-table'
export const metadata: Metadata = {
- title: '입찰서접수및마감',
+ title: '입찰서 접수 및 마감',
description: '입찰서 접수 및 마감 현황을 확인하고 개찰을 진행할 수 있습니다.',
}
@@ -26,7 +26,7 @@ export default async function BiddingReceivePage({
<div className="flex flex-col gap-4 p-4">
<div className="flex items-center justify-between">
<div>
- <h1 className="text-2xl font-bold tracking-tight">입찰서접수및마감</h1>
+ <h1 className="text-2xl font-bold tracking-tight">입찰서 접수 및 마감</h1>
<p className="text-muted-foreground">
입찰서 접수 현황을 확인하고 개찰을 진행할 수 있습니다.
</p>
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/bid-selection/[id]/detail/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/bid-selection/[id]/detail/page.tsx
new file mode 100644
index 00000000..1456564f
--- /dev/null
+++ b/app/[lng]/evcp/(evcp)/(procurement)/bid-selection/[id]/detail/page.tsx
@@ -0,0 +1,69 @@
+import { notFound } from 'next/navigation'
+import { getBiddingById } from "@/lib/bidding/service"
+import { Bidding } from "@/db/schema/bidding"
+import { Button } from "@/components/ui/button"
+import { ArrowLeft } from "lucide-react"
+import Link from "next/link"
+import { BiddingSelectionDetailContent } from "@/lib/bidding/selection/bidding-selection-detail-content"
+
+// 메타데이터 생성
+export async function generateMetadata({ params }: { params: Promise<{ lng: string; id: string }> }) {
+ const { lng, id } = await params
+ const parsedId = parseInt(id)
+ if (isNaN(parsedId)) return { title: '입찰선정 상세보기' }
+
+ try {
+ const bidding = await getBiddingById(parsedId)
+ return {
+ title: bidding ? `${bidding.title} - 입찰선정 상세보기` : '입찰선정 상세보기',
+ }
+ } catch {
+ return { title: '입찰선정 상세보기' }
+ }
+}
+
+interface PageProps {
+ params: Promise<{ lng: string; id: string }>
+}
+
+export default async function BiddingSelectionDetailPage({ params }: PageProps) {
+ const { lng, id } = await params
+ const parsedId = parseInt(id)
+
+ if (isNaN(parsedId)) {
+ notFound()
+ }
+
+ const bidding: Bidding | null = await getBiddingById(parsedId)
+
+ if (!bidding) {
+ notFound()
+ }
+
+ return (
+ <div className="container py-6 space-y-6">
+ {/* 헤더 */}
+ <div className="flex justify-between items-center">
+ <div className="flex items-center gap-4">
+ <div>
+ <h1 className="text-3xl font-bold tracking-tight">
+ 입찰선정 상세보기
+ </h1>
+ <p className="text-muted-foreground mt-2">
+ 입찰 No. {bidding.biddingNumber ?? ""} - {bidding.title}
+ </p>
+ </div>
+ </div>
+ <Link href={`/${lng}/evcp/bid-selection`} passHref>
+ <Button variant="outline" className="flex items-center">
+ <ArrowLeft className="mr-2 h-4 w-4" />
+ 입찰선정 목록으로 돌아가기
+ </Button>
+ </Link>
+ </div>
+
+ {/* 입찰선정 상세 콘텐츠 */}
+ <BiddingSelectionDetailContent biddingId={parsedId} bidding={bidding} />
+ </div>
+ )
+}