summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/[lng]/partners/(partners)/basic-contract/page.tsx10
-rw-r--r--app/[lng]/partners/(partners)/bid/page.tsx13
-rw-r--r--app/[lng]/partners/(partners)/document-list-ship/page.tsx6
-rw-r--r--app/[lng]/partners/(partners)/evaluation/page.tsx10
-rw-r--r--app/[lng]/partners/(partners)/general-contract-review/page.tsx14
-rw-r--r--app/[lng]/partners/(partners)/pcr/page.tsx14
-rw-r--r--app/[lng]/partners/(partners)/po/page.tsx8
-rw-r--r--app/[lng]/partners/(partners)/pq_new/page.tsx22
-rw-r--r--app/[lng]/partners/(partners)/rfq-last/page.tsx12
-rw-r--r--app/[lng]/partners/(partners)/swp-document-upload/page.tsx13
-rw-r--r--app/[lng]/partners/(partners)/tbe-last/page.tsx8
11 files changed, 89 insertions, 41 deletions
diff --git a/app/[lng]/partners/(partners)/basic-contract/page.tsx b/app/[lng]/partners/(partners)/basic-contract/page.tsx
index e2213c57..c651ee54 100644
--- a/app/[lng]/partners/(partners)/basic-contract/page.tsx
+++ b/app/[lng]/partners/(partners)/basic-contract/page.tsx
@@ -11,13 +11,15 @@ import { BasicContractsVendorTable } from "@/lib/basic-contract/vendor-table/bas
import { getServerSession } from "next-auth"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
import { InformationButton } from "@/components/information/information-button"
+import { useTranslation } from "@/i18n"
interface IndexPageProps {
+ params: Promise<{ lng: string }>
searchParams: Promise<SearchParams>
}
export default async function IndexPage(props: IndexPageProps) {
-
-
+ const { lng } = await props.params;
+ const { t } = await useTranslation(lng, 'menu')
const session = await getServerSession(authOptions)
const vendorId = session?.user.companyId
@@ -43,7 +45,7 @@ export default async function IndexPage(props: IndexPageProps) {
<div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- 기본계약서 서명 요청
+ {t('menu.vendor.procurement.basic_contract_sign')}
</h2>
<InformationButton pagePath="partners/basic-contract" />
</div>
@@ -77,4 +79,4 @@ export default async function IndexPage(props: IndexPageProps) {
</React.Suspense>
</Shell>
)
-} \ No newline at end of file
+}
diff --git a/app/[lng]/partners/(partners)/bid/page.tsx b/app/[lng]/partners/(partners)/bid/page.tsx
index a09dec72..87b52021 100644
--- a/app/[lng]/partners/(partners)/bid/page.tsx
+++ b/app/[lng]/partners/(partners)/bid/page.tsx
@@ -5,8 +5,15 @@ import { authOptions } from "@/app/api/auth/[...nextauth]/route"
import { getBiddingListForPartners } from '@/lib/bidding/detail/service'
import { Shell } from '@/components/shell'
import { DataTableSkeleton } from '@/components/data-table/data-table-skeleton'
+import { useTranslation } from "@/i18n"
-export default async function PartnersBidPage() {
+interface IndexPageProps {
+ params: Promise<{ lng: string }>
+}
+
+export default async function PartnersBidPage({ params }: IndexPageProps) {
+ const { lng } = await params;
+ const { t } = await useTranslation(lng, 'menu')
// 세션에서 companyId 가져오기
const session = await getServerSession(authOptions)
const companyId = session?.user?.companyId
@@ -31,9 +38,9 @@ export default async function PartnersBidPage() {
<div className="container mx-auto py-6 space-y-6">
<div className="flex items-center justify-between">
<div>
- <h1 className="text-3xl font-bold">입찰 참여</h1>
+ <h1 className="text-3xl font-bold">{t('menu.vendor.bidding.list')}</h1>
<p className="text-muted-foreground mt-2">
- 참여 가능한 입찰 목록을 확인하고 응찰하실 수 있습니다.
+ {t('menu.vendor.bidding.list_desc')}
</p>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/document-list-ship/page.tsx b/app/[lng]/partners/(partners)/document-list-ship/page.tsx
index 46800a77..d67e96df 100644
--- a/app/[lng]/partners/(partners)/document-list-ship/page.tsx
+++ b/app/[lng]/partners/(partners)/document-list-ship/page.tsx
@@ -3,6 +3,7 @@ import { Skeleton } from "@/components/ui/skeleton";
import { Card, CardContent, CardHeader } from "@/components/ui/card";
import DolceUploadPageV2 from "./dolce-upload-page-v2";
import { Shell } from "@/components/shell";
+import { useTranslation } from "@/i18n"
// ============================================================================
// 로딩 스켈레톤
@@ -39,6 +40,7 @@ export default async function DolceUploadPageWrapper({
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
}) {
const { lng } = await params;
+ const { t } = await useTranslation(lng, 'menu')
const resolvedParams = await searchParams;
return (
@@ -47,9 +49,7 @@ export default async function DolceUploadPageWrapper({
<div className="flex items-center justify-between flex-shrink-0">
<div>
<h2 className="text-2xl font-bold tracking-tight">
- {lng === "ko"
- ? "조선 도면 업로드"
- : "Shipbuilding Drawing Upload"}
+ {t('menu.vendor.engineering.document_list_ship')}
</h2>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/evaluation/page.tsx b/app/[lng]/partners/(partners)/evaluation/page.tsx
index be88ef3e..3680a826 100644
--- a/app/[lng]/partners/(partners)/evaluation/page.tsx
+++ b/app/[lng]/partners/(partners)/evaluation/page.tsx
@@ -13,11 +13,15 @@ import { getEvaluationSubmissions } from "@/lib/vendor-evaluation-submit/service
import { getEvaluationsSubmitSchema } from "@/lib/vendor-evaluation-submit/validation"
import { EvaluationSubmissionsTable } from "@/lib/vendor-evaluation-submit/table/submit-table"
import { InformationButton } from "@/components/information/information-button"
+import { useTranslation } from "@/i18n"
interface IndexPageProps {
+ params: Promise<{ lng: string }>
searchParams: Promise<SearchParams>
}
export default async function IndexPage(props: IndexPageProps) {
+ const { lng } = await props.params;
+ const { t } = await useTranslation(lng, 'menu')
const searchParams = await props.searchParams
const search = getEvaluationsSubmitSchema.parse(searchParams)
const validFilters = getValidFilters(search.filters)
@@ -34,7 +38,7 @@ export default async function IndexPage(props: IndexPageProps) {
<div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- 평가자료 입력
+ {t('menu.vendor.procurement.evaluation_input')}
</h2>
<InformationButton pagePath="partners/evaluation" />
</div>
@@ -105,7 +109,7 @@ export default async function IndexPage(props: IndexPageProps) {
<div className="flex items-center justify-between space-y-2">
<div>
<h2 className="text-2xl font-bold tracking-tight">
- 평가자료 입력
+ {t('menu.vendor.procurement.evaluation_input')}
</h2>
{/* <p className="text-muted-foreground">
요청된 정기평가를 입력하고 제출할 수 있습니다.
@@ -133,4 +137,4 @@ export default async function IndexPage(props: IndexPageProps) {
</React.Suspense>
</Shell>
)
-} \ No newline at end of file
+}
diff --git a/app/[lng]/partners/(partners)/general-contract-review/page.tsx b/app/[lng]/partners/(partners)/general-contract-review/page.tsx
index 27afd859..5af40906 100644
--- a/app/[lng]/partners/(partners)/general-contract-review/page.tsx
+++ b/app/[lng]/partners/(partners)/general-contract-review/page.tsx
@@ -6,10 +6,16 @@ import { getVendorContractReviews } from "@/lib/general-contracts/service"
import { VendorGeneralContractReviewTable } from "./vendor-general-contract-review-table"
import { InformationButton } from "@/components/information/information-button"
import { unstable_noStore as noStore } from 'next/cache'
+import { useTranslation } from "@/i18n"
-export default async function VendorGeneralContractReviewPage() {
+interface pageProps {
+ params: { lng: string }
+}
+
+export default async function VendorGeneralContractReviewPage({ params }: pageProps) {
noStore()
-
+ const { lng } = await params;
+ const { t } = await useTranslation(lng, 'menu')
const session = await getServerSession(authOptions)
if (!session?.user?.companyId) {
@@ -31,12 +37,12 @@ export default async function VendorGeneralContractReviewPage() {
<div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- 일반계약 조건검토
+ {t('menu.vendor.procurement.general_contract_review')}
</h2>
<InformationButton pagePath="partners/general-contract-review" />
</div>
<p className="text-muted-foreground">
- 조건검토 요청된 계약 목록을 확인하고 검토합니다.
+ {t('menu.vendor.procurement.general_contract_review_desc')}
</p>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/pcr/page.tsx b/app/[lng]/partners/(partners)/pcr/page.tsx
index dc639aa8..7148aedd 100644
--- a/app/[lng]/partners/(partners)/pcr/page.tsx
+++ b/app/[lng]/partners/(partners)/pcr/page.tsx
@@ -5,7 +5,7 @@ import { redirect } from "next/navigation";
import { Shell } from "@/components/shell"
import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
import { InformationButton } from "@/components/information/information-button"
-
+import { useTranslation } from "@/i18n"
import { PcrTable } from "@/lib/pcr/table/pcr-table";
import { getPcrPoListForPartners } from "@/lib/pcr/service";
@@ -14,6 +14,10 @@ export const metadata = {
description: "Purchase Change Request를 조회하고 관리할 수 있습니다.",
};
+interface pageProps {
+ params: { lng: string }
+}
+
async function PartnersPcrTableWrapper() {
// 세션에서 사용자 정보 확인
const session = await getServerSession(authOptions);
@@ -33,7 +37,9 @@ async function PartnersPcrTableWrapper() {
return <PcrTable tableData={tableData} isEvcpPage={false} isPartnersPage={true} currentVendorId={vendorId} />;
}
-export default function PartnersPcrPage() {
+export default async function PartnersPcrPage({ params }: pageProps) {
+ const { lng } = await params;
+ const { t } = await useTranslation(lng, 'menu')
return (
<Shell className="gap-4">
{/* ═══════════════════════════════════════════════════════════════ */}
@@ -44,12 +50,12 @@ export default function PartnersPcrPage() {
<div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- PCR 관리
+ {t('menu.vendor.procurement.pcr')}
</h2>
<InformationButton pagePath="partners/pcr" />
</div>
<p className="text-muted-foreground">
- Purchase Change Request를 조회하고 관리할 수 있습니다. PCR 승인 상태, 변경 구분, PO/계약 정보 등을 확인할 수 있습니다.
+ {t('menu.vendor.procurement.pcr_desc')}
</p>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/po/page.tsx b/app/[lng]/partners/(partners)/po/page.tsx
index 709b975c..a2ab2916 100644
--- a/app/[lng]/partners/(partners)/po/page.tsx
+++ b/app/[lng]/partners/(partners)/po/page.tsx
@@ -11,12 +11,16 @@ import { getVendorPOs } from "@/lib/po/vendor-table/service"
import { vendorPoSearchParamsCache } from "@/lib/po/vendor-table/validations"
import { VendorPoTable } from "@/lib/po/vendor-table/vendor-po-table"
import { InformationButton } from "@/components/information/information-button"
+import { useTranslation } from "@/i18n"
interface VendorPOPageProps {
+ params: Promise<{ lng: string }>
searchParams: Promise<SearchParams>
}
export default async function VendorPO(props: VendorPOPageProps) {
+ const { lng } = await props.params;
+ const { t } = await useTranslation(lng, 'menu')
const searchParams = await props.searchParams
const search = vendorPoSearchParamsCache.parse(searchParams)
@@ -47,7 +51,7 @@ export default async function VendorPO(props: VendorPOPageProps) {
<div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- PO/계약 목록
+ {t('menu.vendor.procurement.po')}
</h2>
<InformationButton pagePath="partners/po" />
</div>
@@ -72,4 +76,4 @@ export default async function VendorPO(props: VendorPOPageProps) {
</React.Suspense>
</Shell>
)
-} \ No newline at end of file
+}
diff --git a/app/[lng]/partners/(partners)/pq_new/page.tsx b/app/[lng]/partners/(partners)/pq_new/page.tsx
index eea5b21d..fb77ce0e 100644
--- a/app/[lng]/partners/(partners)/pq_new/page.tsx
+++ b/app/[lng]/partners/(partners)/pq_new/page.tsx
@@ -25,6 +25,11 @@ import {
DropdownMenuContent,
DropdownMenuItem,
} from "@/components/ui/dropdown-menu";
+import { useTranslation } from "@/i18n"
+
+interface IndexPageProps {
+ params: Promise<{ lng: string }>
+}
export const metadata: Metadata = {
title: "사전 평가 (PQ) 목록",
@@ -60,10 +65,11 @@ function getFormattedDate(date: Date | null) {
}).format(new Date(date));
}
-export default async function PQListPage() {
+export default async function PQListPage({ params }: IndexPageProps) {
// 캐시 비활성화
noStore();
-
+ const { lng } = await params;
+ const { t } = await useTranslation(lng, 'menu')
// 인증 확인
const session = await getServerSession(authOptions);
@@ -74,10 +80,10 @@ export default async function PQListPage() {
<div className="flex items-center justify-between">
<div>
<h2 className="text-2xl font-bold tracking-tight">
- 사전 평가 (PQ) 목록
+ {t('menu.vendor.procurement.pq_new')}
</h2>
<p className="text-muted-foreground">
- 요청된 사전 평가 목록을 확인하고 작성합니다.
+ {t('menu.vendor.procurement.pq_new_desc')}
</p>
</div>
</div>
@@ -139,11 +145,13 @@ export default async function PQListPage() {
<div className="flex justify-between items-center">
<div>
<div className="flex items-center gap-2">
- <h2 className="text-2xl font-bold tracking-tight">사전 평가 (PQ) 목록</h2>
+ <h2 className="text-2xl font-bold tracking-tight">
+ {t('menu.vendor.procurement.pq_new')}
+ </h2>
<InformationButton pagePath="partners/pq_new" />
</div>
<p className="text-muted-foreground">
- 요청된 사전 평가 목록을 확인하고 작성합니다.
+ {t('menu.vendor.procurement.pq_new_desc')}
</p>
</div>
</div>
@@ -295,4 +303,4 @@ export default async function PQListPage() {
</Card>
</Shell>
);
-} \ No newline at end of file
+}
diff --git a/app/[lng]/partners/(partners)/rfq-last/page.tsx b/app/[lng]/partners/(partners)/rfq-last/page.tsx
index a49ed648..5a64d4b2 100644
--- a/app/[lng]/partners/(partners)/rfq-last/page.tsx
+++ b/app/[lng]/partners/(partners)/rfq-last/page.tsx
@@ -15,6 +15,7 @@ import { searchParamsVendorRfqCache } from "@/lib/rfq-last/vendor-response/valid
import { InformationButton } from "@/components/information/information-button"
import { getVendorQuotationsLast,getQuotationStatusCountsLast } from "@/lib/rfq-last/vendor-response/service";
import { VendorQuotationsTableLast } from "@/lib/rfq-last/vendor-response/vendor-quotations-table";
+import { useTranslation } from "@/i18n"
export const metadata: Metadata = {
title: "견적 목록",
@@ -22,11 +23,14 @@ export const metadata: Metadata = {
};
interface IndexPageProps {
+ params: Promise<{ lng: string }>
searchParams: Promise<SearchParams>
}
export default async function IndexPage(props: IndexPageProps) {
+ const { lng } = await props.params;
+ const { t } = await useTranslation(lng, 'menu')
const searchParams = await props.searchParams
const search = searchParamsVendorRfqCache.parse(searchParams)
const validFilters = getValidFilters(search.filters)
@@ -41,7 +45,7 @@ export default async function IndexPage(props: IndexPageProps) {
<div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- 견적 목록
+ {t('menu.vendor.procurement.rfq_response')}
</h2>
<InformationButton pagePath="partners/rfq-last" />
</div>
@@ -112,9 +116,9 @@ export default async function IndexPage(props: IndexPageProps) {
<Shell className="gap-6">
<div className="flex justify-between items-center">
<div>
- <h2 className="text-2xl font-bold tracking-tight">견적 목록</h2>
+ <h2 className="text-2xl font-bold tracking-tight">{t('menu.vendor.procurement.rfq_response')}</h2>
<p className="text-muted-foreground">
- 진행 중인 견적서 목록을 확인하고 관리합니다.
+ {t('menu.vendor.procurement.rfq_response_desc')}
</p>
</div>
</div>
@@ -190,4 +194,4 @@ export default async function IndexPage(props: IndexPageProps) {
</React.Suspense>
</Shell>
);
-} \ No newline at end of file
+}
diff --git a/app/[lng]/partners/(partners)/swp-document-upload/page.tsx b/app/[lng]/partners/(partners)/swp-document-upload/page.tsx
index b97bc7fc..55073062 100644
--- a/app/[lng]/partners/(partners)/swp-document-upload/page.tsx
+++ b/app/[lng]/partners/(partners)/swp-document-upload/page.tsx
@@ -3,6 +3,7 @@ import { Skeleton } from "@/components/ui/skeleton";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import VendorDocumentPage from "./vendor-document-page";
import { Shell } from "@/components/shell";
+import { useTranslation } from "@/i18n"
export const metadata = {
title: "Document Search and Upload",
@@ -31,11 +32,15 @@ function VendorDocumentSkeleton() {
}
export default async function DocumentUploadPage({
+ params,
searchParams,
}: {
+ params: Promise<{ lng: string }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
}) {
- const params = await searchParams;
+ const { lng } = await params;
+ const { t } = await useTranslation(lng, 'menu')
+ const resolvedParams = await searchParams;
return (
<Shell>
@@ -43,15 +48,15 @@ export default async function DocumentUploadPage({
<div className="flex items-center justify-between">
<div>
<h2 className="text-2xl font-bold tracking-tight">
- SWP Document Submission
+ {t('menu.vendor.engineering.document_submission')}
</h2>
</div>
</div>
{/* 메인 컨텐츠 */}
<Suspense fallback={<VendorDocumentSkeleton />}>
- <VendorDocumentPage searchParams={params} />
+ <VendorDocumentPage searchParams={resolvedParams} />
</Suspense>
</Shell>
);
-} \ No newline at end of file
+}
diff --git a/app/[lng]/partners/(partners)/tbe-last/page.tsx b/app/[lng]/partners/(partners)/tbe-last/page.tsx
index 62a982c7..c8da944a 100644
--- a/app/[lng]/partners/(partners)/tbe-last/page.tsx
+++ b/app/[lng]/partners/(partners)/tbe-last/page.tsx
@@ -10,6 +10,8 @@ import { Skeleton } from "@/components/ui/skeleton"
import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
import { Shell } from "@/components/shell"
import { InformationButton } from "@/components/information/information-button"
+import { useTranslation } from "@/i18n"
+
interface IndexPageProps {
// Next.js 13 App Router에서 기본으로 주어지는 객체들
params: {
@@ -20,8 +22,8 @@ interface IndexPageProps {
}
export default async function RfqTBEPage(props: IndexPageProps) {
- const resolvedParams = await props.params
- const lng = resolvedParams.lng
+ const { lng } = await props.params
+ const { t } = await useTranslation(lng, 'menu')
// 2) SearchParams 파싱 (Zod)
// - "filters", "page", "perPage", "sort" 등 contact 전용 컬럼
@@ -51,7 +53,7 @@ export default async function RfqTBEPage(props: IndexPageProps) {
<div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- TBE 관리
+ {t('menu.vendor.engineering.tbe')}
</h2>
<InformationButton pagePath="partners/tbe" />
</div>