diff options
56 files changed, 477 insertions, 227 deletions
diff --git a/app/[lng]/evcp/(evcp)/b-rfq/page.tsx b/app/[lng]/evcp/(evcp)/b-rfq/page.tsx index a66d7b58..4f80211b 100644 --- a/app/[lng]/evcp/(evcp)/b-rfq/page.tsx +++ b/app/[lng]/evcp/(evcp)/b-rfq/page.tsx @@ -7,6 +7,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { searchParamsRFQDashboardCache } from "@/lib/b-rfq/validations" import { getRFQDashboard } from "@/lib/b-rfq/service" import { RFQDashboardTable } from "@/lib/b-rfq/summary-table/summary-rfq-table" +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "견적 RFQ", @@ -53,9 +54,12 @@ export default async function PQReviewPage(props: PQReviewPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 견적 RFQ - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 견적 RFQ + </h2> + <InformationButton pageCode="evcp/b-rfq" /> + </div> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/basic-contract-template/page.tsx b/app/[lng]/evcp/(evcp)/basic-contract-template/page.tsx index adc57ed9..d98bd4c7 100644 --- a/app/[lng]/evcp/(evcp)/basic-contract-template/page.tsx +++ b/app/[lng]/evcp/(evcp)/basic-contract-template/page.tsx @@ -8,6 +8,7 @@ import { Shell } from "@/components/shell" import { getBasicContractTemplates } from "@/lib/basic-contract/service" import { searchParamsTemplatesCache } from "@/lib/basic-contract/validations" import { BasicContractTemplateTable } from "@/lib/basic-contract/template/basic-contract-template" +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { @@ -33,9 +34,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 기본계약서 템플릿 관리 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 기본계약서 템플릿 관리 + </h2> + <InformationButton pageCode="evcp/basic-contract-template" /> + </div> <p className="text-muted-foreground"> 기본계약서를 비롯하여 초기 서명이 필요한 문서를 등록하고 편집할 수 있습니다. 활성화된 템플릿이 서명 요청의 리스트에 나타나게 됩니다..{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/basic-contract/page.tsx b/app/[lng]/evcp/(evcp)/basic-contract/page.tsx index a043e530..b0b46197 100644 --- a/app/[lng]/evcp/(evcp)/basic-contract/page.tsx +++ b/app/[lng]/evcp/(evcp)/basic-contract/page.tsx @@ -8,6 +8,7 @@ import { Shell } from "@/components/shell" import { getBasicContracts } from "@/lib/basic-contract/service" import { searchParamsCache } from "@/lib/basic-contract/validations" import { BasicContractsTable } from "@/lib/basic-contract/status/basic-contract-table" +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { @@ -33,9 +34,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 기본계약서 서명 현황 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 기본계약서 서명 현황 + </h2> + <InformationButton pageCode="evcp/basic-contract" /> + </div> <p className="text-muted-foreground"> 기본계약서를 비롯하여 초기 서명이 필요한 문서의 서명 현황을 확인할 수 있고 서명된 문서들을 다운로드할 수 있습니다. {" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/bid-projects/page.tsx b/app/[lng]/evcp/(evcp)/bid-projects/page.tsx index 2039e5b2..e000cd6f 100644 --- a/app/[lng]/evcp/(evcp)/bid-projects/page.tsx +++ b/app/[lng]/evcp/(evcp)/bid-projects/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { getBidProjectLists } from "@/lib/bidding-projects/service" import { searchParamsBidProjectsCache } from "@/lib/bidding-projects/validation" import { BidProjectsTable } from "@/lib/bidding-projects/table/projects-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> 견적 프로젝트 리스트 </h2> + <InformationButton pageCode="evcp/bid-projects" /> + </div> <p className="text-muted-foreground"> SAP(S-ERP)로부터 수신한 견적 프로젝트 데이터입니다. 기술영업의 Budgetary RFQ에서 사용됩니다. {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/budgetary-rfq/page.tsx b/app/[lng]/evcp/(evcp)/budgetary-rfq/page.tsx index dc2a4a2b..42683006 100644 --- a/app/[lng]/evcp/(evcp)/budgetary-rfq/page.tsx +++ b/app/[lng]/evcp/(evcp)/budgetary-rfq/page.tsx @@ -5,7 +5,7 @@ import { getValidFilters } from "@/lib/data-table" 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 { searchParamsCache } from "@/lib/rfqs/validations" import { getRfqs, getRfqStatusCounts } from "@/lib/rfqs/service" import { RfqsTable } from "@/lib/rfqs/table/rfqs-table" @@ -45,9 +45,12 @@ export default async function RfqPage({ <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - {title} - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + {title} + </h2> + <InformationButton pageCode="evcp/budgetary-rfq" /> + </div> <p className="text-muted-foreground"> {description} 기본적인 정보와 RFQ를 위한 아이템 등록 및 첨부를 한 후, diff --git a/app/[lng]/evcp/(evcp)/budgetary-tech-sales-hull/page.tsx b/app/[lng]/evcp/(evcp)/budgetary-tech-sales-hull/page.tsx index b1be29db..c2d25016 100644 --- a/app/[lng]/evcp/(evcp)/budgetary-tech-sales-hull/page.tsx +++ b/app/[lng]/evcp/(evcp)/budgetary-tech-sales-hull/page.tsx @@ -6,7 +6,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { RFQListTable } from "@/lib/techsales-rfq/table/rfq-table" import { type SearchParams } from "@/types/table" import * as React from "react" - +import { InformationButton } from "@/components/information/information-button" interface HullRfqPageProps { searchParams: Promise<SearchParams> } @@ -33,9 +33,12 @@ export default async function HullRfqPage(props: HullRfqPageProps) { <div className="flex-shrink-0"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 기술영업-해양 Hull RFQ - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 기술영업-해양 Hull RFQ + </h2> + <InformationButton pageCode="evcp/budgetary-tech-sales-hull" /> + </div> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/budgetary-tech-sales-ship/page.tsx b/app/[lng]/evcp/(evcp)/budgetary-tech-sales-ship/page.tsx index b7bf9d15..ef43cf0d 100644 --- a/app/[lng]/evcp/(evcp)/budgetary-tech-sales-ship/page.tsx +++ b/app/[lng]/evcp/(evcp)/budgetary-tech-sales-ship/page.tsx @@ -6,7 +6,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { RFQListTable } from "@/lib/techsales-rfq/table/rfq-table" import { type SearchParams } from "@/types/table" import * as React from "react" - +import { InformationButton } from "@/components/information/information-button" interface RfqPageProps { searchParams: Promise<SearchParams> } @@ -33,9 +33,12 @@ export default async function RfqPage(props: RfqPageProps) { <div className="flex-shrink-0"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 기술영업-조선 RFQ - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 기술영업-조선 RFQ + </h2> + <InformationButton pageCode="evcp/budgetary-tech-sales-ship" /> + </div> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/budgetary-tech-sales-top/page.tsx b/app/[lng]/evcp/(evcp)/budgetary-tech-sales-top/page.tsx index f84a9794..0a135add 100644 --- a/app/[lng]/evcp/(evcp)/budgetary-tech-sales-top/page.tsx +++ b/app/[lng]/evcp/(evcp)/budgetary-tech-sales-top/page.tsx @@ -6,7 +6,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { RFQListTable } from "@/lib/techsales-rfq/table/rfq-table" import { type SearchParams } from "@/types/table" import * as React from "react" - +import { InformationButton } from "@/components/information/information-button" interface HullRfqPageProps { searchParams: Promise<SearchParams> } @@ -33,9 +33,12 @@ export default async function HullRfqPage(props: HullRfqPageProps) { <div className="flex-shrink-0"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 기술영업-해양 TOP RFQ - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 기술영업-해양 TOP RFQ + </h2> + <InformationButton pageCode="evcp/budgetary-tech-sales-top" /> + </div> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/email-template/page.tsx b/app/[lng]/evcp/(evcp)/email-template/page.tsx index 1ef3de6c..7219d523 100644 --- a/app/[lng]/evcp/(evcp)/email-template/page.tsx +++ b/app/[lng]/evcp/(evcp)/email-template/page.tsx @@ -1,6 +1,6 @@ import { getTemplatesAction } from '@/lib/mail/service';
import MailTemplatesClient from '@/components/mail/mail-templates-client';
-
+import { InformationButton } from '@/components/information/information-button';
export default async function MailTemplatesPage() {
// 서버에서 초기 데이터 가져오기
const result = await getTemplatesAction();
@@ -9,7 +9,10 @@ export default async function MailTemplatesPage() { return (
<div className="container mx-auto p-6">
<div className="mb-8">
- <h1 className="text-3xl font-bold text-gray-900 mb-2">메일 템플릿 관리</h1>
+ <div className="flex items-center gap-2">
+ <h1 className="text-3xl font-bold text-gray-900 mb-2">메일 템플릿 관리</h1>
+ <InformationButton pageCode="evcp/email-template" />
+ </div>
<p className="text-gray-600">이메일 템플릿을 관리할 수 있습니다.</p>
</div>
diff --git a/app/[lng]/evcp/(evcp)/equip-class/page.tsx b/app/[lng]/evcp/(evcp)/equip-class/page.tsx index cfa8f133..268b09b6 100644 --- a/app/[lng]/evcp/(evcp)/equip-class/page.tsx +++ b/app/[lng]/evcp/(evcp)/equip-class/page.tsx @@ -9,7 +9,7 @@ import { searchParamsCache } from "@/lib/equip-class/validation" import { FormListsTable } from "@/lib/form-list/table/formLists-table" import { getTagClassists } from "@/lib/equip-class/service" import { EquipClassTable } from "@/lib/equip-class/table/equipClass-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -34,9 +34,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 객체 클래스 목록 from S-EDP - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 객체 클래스 목록 from S-EDP + </h2> + <InformationButton pageCode="evcp/equip-class" /> + </div> <p className="text-muted-foreground"> 객체 클래스 목록을 확인할 수 있습니다.{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/esg-check-list/page.tsx b/app/[lng]/evcp/(evcp)/esg-check-list/page.tsx index 515751d5..08292e56 100644 --- a/app/[lng]/evcp/(evcp)/esg-check-list/page.tsx +++ b/app/[lng]/evcp/(evcp)/esg-check-list/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { getEsgEvaluations } from "@/lib/esg-check-list/service" import { getEsgEvaluationsSchema } from "@/lib/esg-check-list/validation" import { EsgEvaluationsTable } from "@/lib/esg-check-list/table/esg-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - ESG 자가진단표 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + ESG 자가진단표 + </h2> + <InformationButton pageCode="evcp/esg-check-list" /> + </div> <p className="text-muted-foreground"> 협력업체 평가에 사용되는 ESG 자가진단표를 관리{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/evaluation-check-list/page.tsx b/app/[lng]/evcp/(evcp)/evaluation-check-list/page.tsx index a660c492..e0375f44 100644 --- a/app/[lng]/evcp/(evcp)/evaluation-check-list/page.tsx +++ b/app/[lng]/evcp/(evcp)/evaluation-check-list/page.tsx @@ -8,7 +8,7 @@ import { Shell } from '@/components/shell'; import { Skeleton } from '@/components/ui/skeleton';
import { Suspense } from 'react';
import { type SearchParams } from '@/types/table';
-
+import { InformationButton } from '@/components/information/information-button';
// ----------------------------------------------------------------------------------------------------
/* TYPES */
@@ -35,9 +35,12 @@ async function EvaluationCriteriaPage(props: EvaluationCriteriaPageProps) { <div className="flex items-center justify-between space-y-2">
<div className="flex items-center justify-between space-y-2">
<div>
- <h2 className="text-2xl font-bold tracking-tight">
- 협력업체 평가기준표
- </h2>
+ <div className="flex items-center gap-2">
+ <h2 className="text-2xl font-bold tracking-tight">
+ 협력업체 평가기준표
+ </h2>
+ <InformationButton pageCode="evcp/evaluation-check-list" />
+ </div>
<p className="text-muted-foreground">
협력업체 평가에 사용되는 평가기준표를 관리{" "}
{/* <span className="inline-flex items-center whitespace-nowrap">
diff --git a/app/[lng]/evcp/(evcp)/evaluation-target-list/page.tsx b/app/[lng]/evcp/(evcp)/evaluation-target-list/page.tsx index 088ae75b..577a1932 100644 --- a/app/[lng]/evcp/(evcp)/evaluation-target-list/page.tsx +++ b/app/[lng]/evcp/(evcp)/evaluation-target-list/page.tsx @@ -16,7 +16,7 @@ import { Badge } from "@/components/ui/badge" import { getDefaultEvaluationYear, searchParamsEvaluationTargetsCache } from "@/lib/evaluation-target-list/validation" import { getEvaluationTargets } from "@/lib/evaluation-target-list/service" import { EvaluationTargetsTable } from "@/lib/evaluation-target-list/table/evaluation-target-table" - +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "협력업체 평가 대상 확정", description: "협력업체 평가 대상을 확정하고 담당자를 지정합니다.", @@ -66,9 +66,12 @@ export default async function EvaluationTargetsPage(props: EvaluationTargetsPage <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight"> - 협력업체 평가 대상 확정 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 협력업체 평가 대상 확정 + </h2> + <InformationButton pageCode="evcp/evaluation-target-list" /> + </div> <Badge variant="outline" className="text-sm"> {currentEvaluationYear}년도 </Badge> diff --git a/app/[lng]/evcp/(evcp)/evaluation/page.tsx b/app/[lng]/evcp/(evcp)/evaluation/page.tsx index ead61077..d2b8c67e 100644 --- a/app/[lng]/evcp/(evcp)/evaluation/page.tsx +++ b/app/[lng]/evcp/(evcp)/evaluation/page.tsx @@ -19,7 +19,7 @@ import { Badge } from "@/components/ui/badge" import { PeriodicEvaluationsTable } from "@/lib/evaluation/table/evaluation-table" import { getPeriodicEvaluations } from "@/lib/evaluation/service" import { searchParamsEvaluationsCache } from "@/lib/evaluation/validation" - +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "협력업체 정기평가", description: "협력업체 정기평가 진행 현황을 관리합니다.", @@ -132,9 +132,12 @@ export default async function PeriodicEvaluationsPage(props: PeriodicEvaluations <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight"> - 협력업체 정기평가 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 협력업체 정기평가 + </h2> + <InformationButton pageCode="evcp/evaluation" /> + </div> <Badge variant="outline" className="text-sm"> {currentEvaluationYear}년도 </Badge> diff --git a/app/[lng]/evcp/(evcp)/faq/page.tsx b/app/[lng]/evcp/(evcp)/faq/page.tsx index 9b62b7e4..80fdc5d1 100644 --- a/app/[lng]/evcp/(evcp)/faq/page.tsx +++ b/app/[lng]/evcp/(evcp)/faq/page.tsx @@ -6,6 +6,7 @@ import { Button } from "@/components/ui/button" import { Settings } from "lucide-react"
import Link from "next/link"
import { fallbackLng } from "@/i18n/settings"
+import { InformationButton } from "@/components/information/information-button"
interface Props {
params: {
@@ -24,7 +25,10 @@ export default async function FaqPage(props: Props) { <div className="space-y-6 p-10 pb-16">
<div className="flex justify-between items-center">
<div className="space-y-0.5">
+ <div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">Frequently Asked Questions</h2>
+ <InformationButton pageCode="evcp/faq" />
+ </div>
<p className="text-muted-foreground">
Find answers to common questions about using the EVCP system.
</p>
diff --git a/app/[lng]/evcp/(evcp)/form-list/page.tsx b/app/[lng]/evcp/(evcp)/form-list/page.tsx index a6cf7d9e..186976f4 100644 --- a/app/[lng]/evcp/(evcp)/form-list/page.tsx +++ b/app/[lng]/evcp/(evcp)/form-list/page.tsx @@ -9,6 +9,7 @@ import { searchParamsCache } from "@/lib/form-list/validation" import { ItemsTable } from "@/lib/items/table/items-table" import { getFormLists } from "@/lib/form-list/service" import { FormListsTable } from "@/lib/form-list/table/formLists-table" +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { @@ -34,9 +35,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> + <div className="flex items-center gap-2"> <h2 className="text-2xl font-bold tracking-tight"> 레지스터 목록 from S-EDP </h2> + <InformationButton pageCode="evcp/form-list" /> + </div> <p className="text-muted-foreground"> 협력업체 데이터 입력을 위한 레지스터 목록 리스트입니다.{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/incoterms/page.tsx b/app/[lng]/evcp/(evcp)/incoterms/page.tsx index 57a19009..4da1b4e2 100644 --- a/app/[lng]/evcp/(evcp)/incoterms/page.tsx +++ b/app/[lng]/evcp/(evcp)/incoterms/page.tsx @@ -7,7 +7,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { SearchParamsCache } from "@/lib/incoterms/validations"; import { getIncoterms } from "@/lib/incoterms/service"; import { IncotermsTable } from "@/lib/incoterms/table/incoterms-table"; - +import { InformationButton } from "@/components/information/information-button"; interface IndexPageProps { searchParams: Promise<SearchParams>; } @@ -28,7 +28,10 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight">인코텀즈 관리</h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight">인코텀즈 관리</h2> + <InformationButton pageCode="evcp/incoterms" /> + </div> <p className="text-muted-foreground"> 인코텀즈(Incoterms)를 등록, 수정, 삭제할 수 있습니다. </p> diff --git a/app/[lng]/evcp/(evcp)/items/page.tsx b/app/[lng]/evcp/(evcp)/items/page.tsx index 0c44bf0a..c4e00557 100644 --- a/app/[lng]/evcp/(evcp)/items/page.tsx +++ b/app/[lng]/evcp/(evcp)/items/page.tsx @@ -9,7 +9,7 @@ import { searchParamsCache } from "@/lib/items/validations" import { getItems } from "@/lib/items/service" import { ItemsTable } from "@/lib/items/table/items-table" import { ViewModeToggle } from "@/components/data-table/view-mode-toggle" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -34,9 +34,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 패키지 정보 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 패키지 정보 + </h2> + <InformationButton pageCode="evcp/items" /> + </div> <p className="text-muted-foreground"> S-EDP로부터 수신된 패키지 정보이며 PR 전 입찰, 견적에 사용되며 벤더 데이터, 문서와 연결됩니다. </p> diff --git a/app/[lng]/evcp/(evcp)/menu-access/page.tsx b/app/[lng]/evcp/(evcp)/menu-access/page.tsx index 5c87f754..f632bc9e 100644 --- a/app/[lng]/evcp/(evcp)/menu-access/page.tsx +++ b/app/[lng]/evcp/(evcp)/menu-access/page.tsx @@ -7,7 +7,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { searchParamsUsersCache } from "@/lib/admin-users/validations" import { getUsersNotPartners } from "@/lib/users/service"; import { UserAccessControlTable } from "@/lib/users/access-control/users-table"; - +import { InformationButton } from "@/components/information/information-button"; interface IndexPageProps { searchParams: Promise<SearchParams>; } @@ -28,7 +28,10 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight">메뉴 접근제어 관리</h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight">메뉴 접근제어 관리</h2> + <InformationButton pageCode="evcp/menu-access" /> + </div> <p className="text-muted-foreground"> 화면, 메뉴별로 접근 통제를 할 수 있습니다. 도메인을 설정하면 해당 도메인에 대한 접근만 가능합니다. </p> diff --git a/app/[lng]/evcp/(evcp)/menu-list/page.tsx b/app/[lng]/evcp/(evcp)/menu-list/page.tsx index 84138320..6f56a2de 100644 --- a/app/[lng]/evcp/(evcp)/menu-list/page.tsx +++ b/app/[lng]/evcp/(evcp)/menu-list/page.tsx @@ -9,7 +9,7 @@ import { InitializeButton } from "@/lib/menu-list/table/initialize-button"; import { MenuListTable } from "@/lib/menu-list/table/menu-list-table"; import { Shell } from "@/components/shell" import * as React from "react" - +import { InformationButton } from "@/components/information/information-button"; export default async function MenuListPage() { // 초기 데이터 로드 const [menusResult, usersResult] = await Promise.all([ @@ -22,9 +22,12 @@ export default async function MenuListPage() { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 메뉴 관리 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 메뉴 관리 + </h2> + <InformationButton pageCode="evcp/menu-list" /> + </div> <p className="text-muted-foreground"> 각 메뉴별로 담당자를 지정하고 관리할 수 있습니다. </p> diff --git a/app/[lng]/evcp/(evcp)/payment-conditions/page.tsx b/app/[lng]/evcp/(evcp)/payment-conditions/page.tsx index b9aedfbb..fc22745c 100644 --- a/app/[lng]/evcp/(evcp)/payment-conditions/page.tsx +++ b/app/[lng]/evcp/(evcp)/payment-conditions/page.tsx @@ -7,7 +7,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { SearchParamsCache } from "@/lib/payment-terms/validations"; import { getPaymentTerms } from "@/lib/payment-terms/service"; import { PaymentTermsTable } from "@/lib/payment-terms/table/payment-terms-table"; - +import { InformationButton } from "@/components/information/information-button"; interface IndexPageProps { searchParams: Promise<SearchParams>; } @@ -28,7 +28,10 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight">결제 조건 관리</h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight">결제 조건 관리</h2> + <InformationButton pageCode="evcp/payment-conditions" /> + </div> <p className="text-muted-foreground"> 결제 조건(Payment Terms)을 등록, 수정, 삭제할 수 있습니다. </p> diff --git a/app/[lng]/evcp/(evcp)/po-rfq/page.tsx b/app/[lng]/evcp/(evcp)/po-rfq/page.tsx index bdeae25e..99eab9f3 100644 --- a/app/[lng]/evcp/(evcp)/po-rfq/page.tsx +++ b/app/[lng]/evcp/(evcp)/po-rfq/page.tsx @@ -6,7 +6,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { RFQListTable } from "@/lib/procurement-rfqs/table/rfq-table" import { type SearchParams } from "@/types/table" import * as React from "react" - +import { InformationButton } from "@/components/information/information-button" interface RfqPageProps { searchParams: Promise<SearchParams> } @@ -33,9 +33,12 @@ export default async function RfqPage(props: RfqPageProps) { <div className="flex-shrink-0"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 발주용 견적 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 발주용 견적 + </h2> + <InformationButton pageCode="evcp/po-rfq" /> + </div> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/po/page.tsx b/app/[lng]/evcp/(evcp)/po/page.tsx index 7868e231..cd23ff0e 100644 --- a/app/[lng]/evcp/(evcp)/po/page.tsx +++ b/app/[lng]/evcp/(evcp)/po/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { getPOs } from "@/lib/po/service" import { searchParamsCache } from "@/lib/po/validations" import { PoListsTable } from "@/lib/po/table/po-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - PO 확인 및 전자서명 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + PO 확인 및 전자서명 + </h2> + <InformationButton pageCode="evcp/po" /> + </div> <p className="text-muted-foreground"> 기간계 시스템으로부터 PO를 확인하고 협력업체에게 전자서명을 요청할 수 있습니다. 요쳥된 전자서명의 이력 또한 확인할 수 있습니다. diff --git a/app/[lng]/evcp/(evcp)/poa/page.tsx b/app/[lng]/evcp/(evcp)/poa/page.tsx index dec5e05b..e0172af3 100644 --- a/app/[lng]/evcp/(evcp)/poa/page.tsx +++ b/app/[lng]/evcp/(evcp)/poa/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { getChangeOrders } from "@/lib/poa/service" import { searchParamsCache } from "@/lib/poa/validations" import { ChangeOrderListsTable } from "@/lib/poa/table/poa-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -31,9 +31,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 변경 PO 확인 및 전자서명 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 변경 PO 확인 및 전자서명 + </h2> + <InformationButton pageCode="evcp/poa" /> + </div> <p className="text-muted-foreground"> 발행된 PO의 변경 내역을 확인하고 관리할 수 있습니다. </p> diff --git a/app/[lng]/evcp/(evcp)/pq-criteria/page.tsx b/app/[lng]/evcp/(evcp)/pq-criteria/page.tsx index 7785b541..ce92e039 100644 --- a/app/[lng]/evcp/(evcp)/pq-criteria/page.tsx +++ b/app/[lng]/evcp/(evcp)/pq-criteria/page.tsx @@ -8,7 +8,7 @@ import { searchParamsCache } from "@/lib/pq/validations" import { getPQs } from "@/lib/pq/service" import { PqsTable } from "@/lib/pq/table/pq-table" import { ProjectSelectorWrapper } from "@/components/pq/project-select-wrapper" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-2"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Pre-Qualification Check Sheet - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Pre-Qualification Check Sheet + </h2> + <InformationButton pageCode="evcp/pq-criteria" /> + </div> <p className="text-muted-foreground"> 협력업체 등록을 위한, 협력업체가 제출할 PQ 항목을 관리할 수 있습니다. </p> diff --git a/app/[lng]/evcp/(evcp)/pq/page.tsx b/app/[lng]/evcp/(evcp)/pq/page.tsx index 46b22b12..02cb621e 100644 --- a/app/[lng]/evcp/(evcp)/pq/page.tsx +++ b/app/[lng]/evcp/(evcp)/pq/page.tsx @@ -9,7 +9,7 @@ import { Shell } from "@/components/shell" import { getVendorsInPQ } from "@/lib/pq/service" import { searchParamsCache } from "@/lib/vendors/validations" import { VendorsPQReviewTable } from "@/lib/pq/pq-review-table/vendors-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Pre-Qualification Review - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Pre-Qualification Review + </h2> + <InformationButton pageCode="evcp/pq" /> + </div> <p className="text-muted-foreground"> 벤더가 제출한 PQ를 확인하고 수정 요청 등을 할 수 있으며 PQ 종료 후에는 통과 여부를 결정할 수 있습니다. diff --git a/app/[lng]/evcp/(evcp)/pq_new/page.tsx b/app/[lng]/evcp/(evcp)/pq_new/page.tsx index 6598349b..abe134bd 100644 --- a/app/[lng]/evcp/(evcp)/pq_new/page.tsx +++ b/app/[lng]/evcp/(evcp)/pq_new/page.tsx @@ -7,7 +7,7 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { searchParamsPQReviewCache } from "@/lib/pq/validations" import { getPQSubmissions } from "@/lib/pq/service" import { PQSubmissionsTable } from "@/lib/pq/pq-review-table-new/vendors-table" - +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "PQ 검토/실사 의뢰", description: "", @@ -69,9 +69,12 @@ export default async function PQReviewPage(props: PQReviewPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - PQ 검토/실사 의뢰 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + PQ 검토/실사 의뢰 + </h2> + <InformationButton pageCode="evcp/pq_new" /> + </div> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/project-gtc/page.tsx b/app/[lng]/evcp/(evcp)/project-gtc/page.tsx index 8e12a489..cebfb1a9 100644 --- a/app/[lng]/evcp/(evcp)/project-gtc/page.tsx +++ b/app/[lng]/evcp/(evcp)/project-gtc/page.tsx @@ -7,7 +7,7 @@ import { Shell } from "@/components/shell" import { getProjectGtcList } from "@/lib/project-gtc/service" import { projectGtcSearchParamsSchema } from "@/lib/project-gtc/validations" import { ProjectGtcTable } from "@/lib/project-gtc/table/project-gtc-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -30,9 +30,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Project GTC - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Project GTC + </h2> + <InformationButton pageCode="evcp/project-gtc" /> + </div> <p className="text-muted-foreground"> 프로젝트별 GTC(General Terms and Conditions) 파일을 관리할 수 있습니다. 각 프로젝트마다 하나의 GTC 파일을 업로드할 수 있으며, 파일 업로드 시 기존 파일은 자동으로 교체됩니다. diff --git a/app/[lng]/evcp/(evcp)/project-vendors/page.tsx b/app/[lng]/evcp/(evcp)/project-vendors/page.tsx index dcc66071..5841b2c5 100644 --- a/app/[lng]/evcp/(evcp)/project-vendors/page.tsx +++ b/app/[lng]/evcp/(evcp)/project-vendors/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { ProjectAVLTable } from "@/lib/project-avl/table/proejctAVL-table" import { getProjecTAVL } from "@/lib/project-avl/service" import { searchProjectAVLParamsCache } from "@/lib/project-avl/validations" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 프로젝트 AVL 리스트 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 프로젝트 AVL 리스트 + </h2> + <InformationButton pageCode="evcp/project-vendors" /> + </div> <p className="text-muted-foreground"> 프로젝트 PQ를 통과한 벤더의 리스트를 보여줍니다.{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/projects/page.tsx b/app/[lng]/evcp/(evcp)/projects/page.tsx index 0320f259..09cf6541 100644 --- a/app/[lng]/evcp/(evcp)/projects/page.tsx +++ b/app/[lng]/evcp/(evcp)/projects/page.tsx @@ -9,7 +9,7 @@ import { ItemsTable } from "@/lib/items/table/items-table" import { getProjectLists } from "@/lib/projects/service" import { ProjectsTable } from "@/lib/projects/table/projects-table" import { searchParamsProjectsCache } from "@/lib/projects/validation" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -34,9 +34,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Project List from S-EDP - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Project List from S-EDP + </h2> + <InformationButton pageCode="evcp/projects" /> + </div> <p className="text-muted-foreground"> S-EDP로부터 수신하는 프로젝트 리스트입니다. 향후 MDG로 전환됩니다.{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/report/page.tsx b/app/[lng]/evcp/(evcp)/report/page.tsx index 3efaa7c3..eeb6a91d 100644 --- a/app/[lng]/evcp/(evcp)/report/page.tsx +++ b/app/[lng]/evcp/(evcp)/report/page.tsx @@ -1,47 +1,127 @@ -import * as React from "react" -import { Skeleton } from "@/components/ui/skeleton" -import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" -import { Shell } from "@/components/shell" +// app/procurement/dashboard/page.tsx +import * as React from "react"; +import { Skeleton } from "@/components/ui/skeleton"; +import { Shell } from "@/components/shell"; +import { ErrorBoundary } from "@/components/error-boundary"; +import { getDashboardData } from "@/lib/dashboard/service"; +import { DashboardClient } from "@/lib/dashboard/dashboard-client"; +// 대시보드 데이터 로딩 컴포넌트 +async function DashboardContent() { + try { + const data = await getDashboardData("procurement"); + + const handleRefresh = async () => { + "use server"; + return await getDashboardData("procurement"); + }; -export default async function IndexPage() { - + return ( + <DashboardClient + initialData={data} + onRefresh={handleRefresh} + /> + ); + } catch (error) { + console.error("Dashboard data loading error:", error); + throw error; + } +} +// 대시보드 로딩 스켈레톤 +function DashboardSkeleton() { return ( - <Shell className="gap-2"> + <div className="space-y-6"> + {/* 헤더 스켈레톤 */} <div className="flex items-center justify-between"> - <div> - <h2 className="text-2xl font-bold tracking-tight"> - Dashboard - </h2> - <p className="text-muted-foreground"> - 각종 지표 등을 대시보드로 표현하거나 리포트를 출력할 수 있습니다. - </p> + <div className="space-y-2"> + <Skeleton className="h-8 w-48" /> + <Skeleton className="h-4 w-72" /> + </div> + <Skeleton className="h-10 w-24" /> + </div> + + {/* 요약 카드 스켈레톤 */} + <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4"> + {[...Array(4)].map((_, i) => ( + <div key={i} className="space-y-3 p-6 border rounded-lg"> + <div className="flex items-center justify-between"> + <Skeleton className="h-4 w-16" /> + <Skeleton className="h-4 w-4" /> + </div> + <Skeleton className="h-8 w-12" /> + <Skeleton className="h-3 w-20" /> + </div> + ))} + </div> + + {/* 차트 스켈레톤 */} + <div className="grid grid-cols-1 lg:grid-cols-2 gap-6"> + {[...Array(2)].map((_, i) => ( + <div key={i} className="space-y-4 p-6 border rounded-lg"> + <div className="space-y-2"> + <Skeleton className="h-6 w-32" /> + <Skeleton className="h-4 w-48" /> + </div> + <Skeleton className="h-[300px] w-full" /> + </div> + ))} + </div> + + {/* 탭 스켈레톤 */} + <div className="space-y-4"> + <Skeleton className="h-10 w-64" /> + <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3"> + {[...Array(6)].map((_, i) => ( + <div key={i} className="space-y-4 p-6 border rounded-lg"> + <Skeleton className="h-6 w-32" /> + <div className="space-y-3"> + <div className="flex justify-between"> + <Skeleton className="h-4 w-16" /> + <Skeleton className="h-4 w-12" /> + </div> + <div className="flex gap-2"> + <Skeleton className="h-6 w-16" /> + <Skeleton className="h-6 w-16" /> + <Skeleton className="h-6 w-16" /> + </div> + <Skeleton className="h-2 w-full" /> + </div> + </div> + ))} </div> </div> + </div> + ); +} - <React.Suspense fallback={<Skeleton className="h-7 w-52" />}> - {/* <DateRangePicker - triggerSize="sm" - triggerClassName="ml-auto w-56 sm:w-60" - align="end" - shallow={false} - /> */} - </React.Suspense> - - <React.Suspense - fallback={ - <DataTableSkeleton - columnCount={6} - searchableColumnCount={1} - filterableColumnCount={2} - cellWidths={["10rem", "40rem", "12rem", "12rem", "8rem", "8rem"]} - shrinkZero - /> - } +// 에러 표시 컴포넌트 +function DashboardError({ error, reset }: { error: Error; reset: () => void }) { + return ( + <div className="flex flex-col items-center justify-center py-12 space-y-4"> + <div className="text-center space-y-2"> + <h3 className="text-lg font-semibold">대시보드를 불러올 수 없습니다</h3> + <p className="text-muted-foreground"> + {error.message || "알 수 없는 오류가 발생했습니다."} + </p> + </div> + <button + onClick={reset} + className="px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90" > - </React.Suspense> + 다시 시도 + </button> + </div> + ); +} + +export default async function DashboardPage() { + return ( + <Shell className="gap-6"> + <React.Suspense fallback={<DashboardSkeleton />}> + <DashboardContent /> + </React.Suspense> </Shell> - ) -}
\ No newline at end of file + ); +} diff --git a/app/[lng]/evcp/(evcp)/tag-numbering/page.tsx b/app/[lng]/evcp/(evcp)/tag-numbering/page.tsx index 44695259..b4a90703 100644 --- a/app/[lng]/evcp/(evcp)/tag-numbering/page.tsx +++ b/app/[lng]/evcp/(evcp)/tag-numbering/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { searchParamsCache } from "@/lib/tag-numbering/validation" import { getTagNumbering } from "@/lib/tag-numbering/service" import { TagNumberingTable } from "@/lib/tag-numbering/table/tagNumbering-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 태그 타입 목록 from S-EDP - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 태그 타입 목록 from S-EDP + </h2> + <InformationButton pageCode="evcp/tag-numbering" /> + </div> <p className="text-muted-foreground"> 태그 넘버링을 위한 룰셋을 S-EDP로부터 가져오고 확인할 수 있습니다{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/tech-project-avl/page.tsx b/app/[lng]/evcp/(evcp)/tech-project-avl/page.tsx index d942c5c5..f8662ce0 100644 --- a/app/[lng]/evcp/(evcp)/tech-project-avl/page.tsx +++ b/app/[lng]/evcp/(evcp)/tech-project-avl/page.tsx @@ -11,7 +11,7 @@ import { getAcceptedTechSalesVendorQuotations } from "@/lib/techsales-rfq/servic import { getValidFilters } from "@/lib/data-table"
import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
import { Ellipsis } from "lucide-react"
-
+import { InformationButton } from "@/components/information/information-button"
export interface PageProps {
params: Promise<{ lng: string }>
searchParams: Promise<SearchParams>
@@ -45,9 +45,12 @@ export default async function AcceptedQuotationsPage({ <div className="flex items-center justify-between space-y-2">
<div className="flex items-center justify-between space-y-2">
<div>
- <h2 className="text-2xl font-bold tracking-tight">
- 승인된 견적서(해양TOP,HULL)
- </h2>
+ <div className="flex items-center gap-2">
+ <h2 className="text-2xl font-bold tracking-tight">
+ 승인된 견적서(해양TOP,HULL)
+ </h2>
+ <InformationButton pageCode="evcp/tech-project-avl" />
+ </div>
<p className="text-muted-foreground">
기술영업 승인 견적서에 대한 요약 정보를 확인하고{" "}
<span className="inline-flex items-center whitespace-nowrap">
diff --git a/app/[lng]/evcp/(evcp)/tech-vendor-candidates/page.tsx b/app/[lng]/evcp/(evcp)/tech-vendor-candidates/page.tsx index 3923863a..a3bee46a 100644 --- a/app/[lng]/evcp/(evcp)/tech-vendor-candidates/page.tsx +++ b/app/[lng]/evcp/(evcp)/tech-vendor-candidates/page.tsx @@ -10,7 +10,7 @@ import { getVendorCandidateCounts, getVendorCandidates } from "@/lib/tech-vendor import { searchParamsTechCandidateCache } from "@/lib/tech-vendor-candidates/validations" import { VendorCandidateTable as TechVendorCandidateTable } from "@/lib/tech-vendor-candidates/table/candidates-table" import { DateRangePicker } from "@/components/date-range-picker" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -35,9 +35,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Vendor Candidates Management - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Vendor Candidates Management + </h2> + <InformationButton pageCode="evcp/tech-vendor-candidates" /> + </div> <p className="text-muted-foreground"> 수집한 협력업체 후보를 등록하고 초대 메일을 송부할 수 있습니다. </p> diff --git a/app/[lng]/evcp/(evcp)/vendor-candidates/page.tsx b/app/[lng]/evcp/(evcp)/vendor-candidates/page.tsx index a6e00b1b..53b0ece5 100644 --- a/app/[lng]/evcp/(evcp)/vendor-candidates/page.tsx +++ b/app/[lng]/evcp/(evcp)/vendor-candidates/page.tsx @@ -10,7 +10,7 @@ import { getVendorCandidateCounts, getVendorCandidates } from "@/lib/vendor-cand import { searchParamsCandidateCache } from "@/lib/vendor-candidates/validations" import { VendorCandidateTable } from "@/lib/vendor-candidates/table/candidates-table" import { DateRangePicker } from "@/components/date-range-picker" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -35,9 +35,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Vendor Candidates Management - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Vendor Candidates Management + </h2> + <InformationButton pageCode="evcp/vendor-candidates" /> + </div> <p className="text-muted-foreground"> 수집한 협력업체 후보를 등록하고 초대 메일을 송부할 수 있습니다. </p> diff --git a/app/[lng]/evcp/(evcp)/vendor-check-list/page.tsx b/app/[lng]/evcp/(evcp)/vendor-check-list/page.tsx index 3fd7e425..42f74578 100644 --- a/app/[lng]/evcp/(evcp)/vendor-check-list/page.tsx +++ b/app/[lng]/evcp/(evcp)/vendor-check-list/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { getGenralEvaluationsSchema } from "@/lib/general-check-list/validation" import { GeneralEvaluationsTable } from "@/lib/general-check-list/table/general-check-list-table" import { getGeneralEvaluations } from "@/lib/general-check-list/service" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 협력업체 정기평가 체크리스트 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 협력업체 정기평가 체크리스트 + </h2> + <InformationButton pageCode="evcp/vendor-check-list" /> + </div> <p className="text-muted-foreground"> 협력업체 평가에 사용되는 정기평가 체크리스트를 관리{" "} {/* <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/evcp/(evcp)/vendor-investigation/page.tsx b/app/[lng]/evcp/(evcp)/vendor-investigation/page.tsx index c59de869..df3567b4 100644 --- a/app/[lng]/evcp/(evcp)/vendor-investigation/page.tsx +++ b/app/[lng]/evcp/(evcp)/vendor-investigation/page.tsx @@ -9,7 +9,7 @@ import { Shell } from "@/components/shell" import { VendorsInvestigationTable } from "@/lib/vendor-investigation/table/investigation-table" import { getVendorsInvestigation } from "@/lib/vendor-investigation/service" import { searchParamsInvestigationCache } from "@/lib/vendor-investigation/validations" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Vendor Investigation Management - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Vendor Investigation Management + </h2> + <InformationButton pageCode="evcp/vendor-investigation" /> + </div> <p className="text-muted-foreground"> 요청된 Vendor 실사에 대한 스케줄 정보를 관리하고 결과를 입력할 수 있습니다. diff --git a/app/[lng]/evcp/(evcp)/vendor-type/page.tsx b/app/[lng]/evcp/(evcp)/vendor-type/page.tsx index 997c0f82..d81e351d 100644 --- a/app/[lng]/evcp/(evcp)/vendor-type/page.tsx +++ b/app/[lng]/evcp/(evcp)/vendor-type/page.tsx @@ -8,7 +8,7 @@ import { Shell } from "@/components/shell" import { searchParamsCache } from "@/lib/vendor-type/validations" import { VendorTypesTable } from "@/lib/vendor-type/table/vendorTypes-table" import { getVendorTypes } from "@/lib/vendor-type/service" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -33,9 +33,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 업체 유형 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 업체 유형 + </h2> + <InformationButton pageCode="evcp/vendor-type" /> + </div> <p className="text-muted-foreground"> 업체 유형을 등록하고 관리할 수 있습니다.{" "} diff --git a/app/[lng]/evcp/(evcp)/vendors/page.tsx b/app/[lng]/evcp/(evcp)/vendors/page.tsx index 52af0709..d5434188 100644 --- a/app/[lng]/evcp/(evcp)/vendors/page.tsx +++ b/app/[lng]/evcp/(evcp)/vendors/page.tsx @@ -11,7 +11,7 @@ import { searchParamsCache } from "@/lib/vendors/validations" import { getVendors, getVendorStatusCounts } from "@/lib/vendors/service" import { VendorsTable } from "@/lib/vendors/table/vendors-table" import { Ellipsis } from "lucide-react" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -36,9 +36,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 협력업체 리스트 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 협력업체 리스트 + </h2> + <InformationButton pageCode="evcp/vendors" /> + </div> <p className="text-muted-foreground"> 협력업체에 대한 요약 정보를 확인하고{" "} <span className="inline-flex items-center whitespace-nowrap"> diff --git a/app/[lng]/partners/(partners)/basic-contract/page.tsx b/app/[lng]/partners/(partners)/basic-contract/page.tsx index e63e6a17..5316c357 100644 --- a/app/[lng]/partners/(partners)/basic-contract/page.tsx +++ b/app/[lng]/partners/(partners)/basic-contract/page.tsx @@ -10,7 +10,7 @@ import { redirect } from "next/navigation" import { BasicContractsVendorTable } from "@/lib/basic-contract/vendor-table/basic-contract-table"
import { getServerSession } from "next-auth"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
-
+import { InformationButton } from "@/components/information/information-button"
interface IndexPageProps {
searchParams: Promise<SearchParams>
}
@@ -41,9 +41,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2">
<div className="flex items-center justify-between space-y-2">
<div>
- <h2 className="text-2xl font-bold tracking-tight">
- 기본계약서 서명 요청현황
- </h2>
+ <div className="flex items-center gap-2">
+ <h2 className="text-2xl font-bold tracking-tight">
+ 기본계약서 서명 요청현황
+ </h2>
+ <InformationButton pageCode="partners/basic-contract" />
+ </div>
<p className="text-muted-foreground">
기본계약서를 비롯하여 초기 서명이 필요한 문서의 서명 현황을 확인할 수 있고 서명을 진행할 수 있습니다. {" "}
</p>
diff --git a/app/[lng]/partners/(partners)/cbe-tech/page.tsx b/app/[lng]/partners/(partners)/cbe-tech/page.tsx index 94e3825d..9aeb4e66 100644 --- a/app/[lng]/partners/(partners)/cbe-tech/page.tsx +++ b/app/[lng]/partners/(partners)/cbe-tech/page.tsx @@ -10,7 +10,7 @@ import { Skeleton } from "@/components/ui/skeleton" import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { Shell } from "@/components/shell" import { CbeVendorTable } from "@/lib/tech-vendor-rfq-response/vendor-cbe-table/cbe-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { // Next.js 13 App Router에서 기본으로 주어지는 객체들 params: { @@ -50,9 +50,12 @@ export default async function CBEPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Commercial Bid Evaluation - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Commercial Bid Evaluation + </h2> + <InformationButton pageCode="partners/cbe-tech" /> + </div> <p className="text-sm text-muted-foreground"> CBE에 응답하고 커뮤니케이션을 할 수 있습니다.{" "} </p> diff --git a/app/[lng]/partners/(partners)/cbe/page.tsx b/app/[lng]/partners/(partners)/cbe/page.tsx index 8d03e5f6..235426a4 100644 --- a/app/[lng]/partners/(partners)/cbe/page.tsx +++ b/app/[lng]/partners/(partners)/cbe/page.tsx @@ -10,7 +10,7 @@ import { Skeleton } from "@/components/ui/skeleton" import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" import { Shell } from "@/components/shell" import { CbeVendorTable } from "@/lib/vendor-rfq-response/vendor-cbe-table/cbe-table" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { // Next.js 13 App Router에서 기본으로 주어지는 객체들 params: { @@ -50,9 +50,12 @@ export default async function CBEPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Commercial Bid Evaluation - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Commercial Bid Evaluation + </h2> + <InformationButton pageCode="partners/cbe" /> + </div> <p className="text-sm text-muted-foreground"> CBE에 응답하고 커뮤니케이션을 할 수 있습니다.{" "} </p> diff --git a/app/[lng]/partners/(partners)/dashboard/page.tsx b/app/[lng]/partners/(partners)/dashboard/page.tsx index 3efaa7c3..01d3c2be 100644 --- a/app/[lng]/partners/(partners)/dashboard/page.tsx +++ b/app/[lng]/partners/(partners)/dashboard/page.tsx @@ -2,7 +2,7 @@ import * as React from "react" 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" export default async function IndexPage() { @@ -12,9 +12,12 @@ export default async function IndexPage() { <Shell className="gap-2"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Dashboard - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Dashboard + </h2> + <InformationButton pageCode="partners/dashboard" /> + </div> <p className="text-muted-foreground"> 각종 지표 등을 대시보드로 표현하거나 리포트를 출력할 수 있습니다. </p> diff --git a/app/[lng]/partners/(partners)/document-list-ship/page.tsx b/app/[lng]/partners/(partners)/document-list-ship/page.tsx index 6cbea6fa..da4d9e90 100644 --- a/app/[lng]/partners/(partners)/document-list-ship/page.tsx +++ b/app/[lng]/partners/(partners)/document-list-ship/page.tsx @@ -13,7 +13,7 @@ import { Button } from "@/components/ui/button" import { LogIn } from "lucide-react" import { getUserVendorDocumentStats, getUserVendorDocuments } from "@/lib/vendor-document-list/enhanced-document-service" import { UserVendorDocumentDisplay } from "@/components/ship-vendor-document/user-vendor-document-table-container" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -32,9 +32,12 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-6"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Document Management - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Document Management + </h2> + <InformationButton pageCode="partners/document-list-ship" /> + </div> <p className="text-muted-foreground"> 소속 회사의 모든 도서/도면을 확인하고 관리합니다. </p> diff --git a/app/[lng]/partners/(partners)/evaluation/page.tsx b/app/[lng]/partners/(partners)/evaluation/page.tsx index dc1d4137..2ddaf365 100644 --- a/app/[lng]/partners/(partners)/evaluation/page.tsx +++ b/app/[lng]/partners/(partners)/evaluation/page.tsx @@ -12,7 +12,7 @@ import { LogIn } from "lucide-react" 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" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -32,9 +32,12 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-6"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 정기평가 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 정기평가 + </h2> + <InformationButton pageCode="partners/evaluation" /> + </div> <p className="text-muted-foreground"> 요청된 정기평가를 입력하고 제출할 수 있습니다. </p> diff --git a/app/[lng]/partners/(partners)/rfq-answer/page.tsx b/app/[lng]/partners/(partners)/rfq-answer/page.tsx index 1869c74e..7a5dabd9 100644 --- a/app/[lng]/partners/(partners)/rfq-answer/page.tsx +++ b/app/[lng]/partners/(partners)/rfq-answer/page.tsx @@ -14,7 +14,7 @@ import { type SearchParams } from "@/types/table"; import { searchParamsVendorResponseCache } from "@/lib/b-rfq/validations"; import { getVendorResponseProgress, getVendorResponseStatusCounts, getVendorRfqResponses } from "@/lib/b-rfq/service"; import { VendorResponsesTable } from "@/lib/b-rfq/vendor-response/vendor-responses-table"; - +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "응답 관리", description: "RFQ 첨부파일 응답 현황을 관리합니다", @@ -38,9 +38,12 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-6"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 응답 관리 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 응답 관리 + </h2> + <InformationButton pageCode="partners/rfq-answer" /> + </div> <p className="text-muted-foreground"> RFQ 첨부파일 응답 현황을 확인하고 관리합니다. </p> diff --git a/app/[lng]/partners/(partners)/rfq-ship/page.tsx b/app/[lng]/partners/(partners)/rfq-ship/page.tsx index e7dccb02..1ad7cfe8 100644 --- a/app/[lng]/partners/(partners)/rfq-ship/page.tsx +++ b/app/[lng]/partners/(partners)/rfq-ship/page.tsx @@ -14,7 +14,7 @@ import { type SearchParams } from "@/types/table"; import { searchParamsVendorRfqCache } from "@/lib/procurement-rfqs/validations"; import { getQuotationStatusCounts, getVendorQuotations } from "@/lib/procurement-rfqs/services"; import { VendorQuotationsTable } from "@/lib/procurement-rfqs/vendor-response/table/vendor-quotations-table"; - +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "견적 목록", description: "진행 중인 견적서 목록", @@ -38,9 +38,12 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-6"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - 견적 목록 - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 견적 목록 + </h2> + <InformationButton pageCode="partners/rfq-ship" /> + </div> <p className="text-muted-foreground"> 진행 중인 견적서 목록을 확인하고 관리합니다. </p> diff --git a/app/[lng]/partners/(partners)/rfq-tech/page.tsx b/app/[lng]/partners/(partners)/rfq-tech/page.tsx index e3e5895a..a196cf9e 100644 --- a/app/[lng]/partners/(partners)/rfq-tech/page.tsx +++ b/app/[lng]/partners/(partners)/rfq-tech/page.tsx @@ -12,7 +12,7 @@ import Link from "next/link" import { Button } from "@/components/ui/button" import { LogIn } from "lucide-react" import { getRfqResponsesForVendor } from "@/lib/tech-vendor-rfq-response/service" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -32,9 +32,12 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-6"> <div className="flex items-center justify-between"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - RFQ - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + RFQ + </h2> + <InformationButton pageCode="partners/rfq-tech" /> + </div> <p className="text-muted-foreground"> RFQ를 응답하고 커뮤니케이션을 할 수 있습니다. </p> diff --git a/app/[lng]/partners/(partners)/rfq/page.tsx b/app/[lng]/partners/(partners)/rfq/page.tsx index 34b66115..612d48f5 100644 --- a/app/[lng]/partners/(partners)/rfq/page.tsx +++ b/app/[lng]/partners/(partners)/rfq/page.tsx @@ -12,7 +12,7 @@ import Link from "next/link" import { Button } from "@/components/ui/button" import { LogIn } from "lucide-react" import { getRfqResponsesForVendor } from "@/lib/vendor-rfq-response/service" - +import { InformationButton } from "@/components/information/information-button" interface IndexPageProps { searchParams: Promise<SearchParams> } @@ -101,9 +101,12 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - RFQ - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + RFQ + </h2> + <InformationButton pageCode="partners/rfq" /> + </div> <p className="text-muted-foreground"> RFQ를 응답하고 커뮤니케이션을 할 수 있습니다. </p> diff --git a/app/[lng]/partners/(partners)/tbe-tech/page.tsx b/app/[lng]/partners/(partners)/tbe-tech/page.tsx index 69cf3902..463a8dc9 100644 --- a/app/[lng]/partners/(partners)/tbe-tech/page.tsx +++ b/app/[lng]/partners/(partners)/tbe-tech/page.tsx @@ -9,7 +9,7 @@ import * as React from "react" 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" interface IndexPageProps { // Next.js 13 App Router에서 기본으로 주어지는 객체들 params: { @@ -49,9 +49,12 @@ export default async function RfqTBEPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Technical Bid Evaluation - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Technical Bid Evaluation + </h2> + <InformationButton pageCode="partners/tbe-tech" /> + </div> <p className="text-sm text-muted-foreground"> TBE에 응답하고 커뮤니케이션을 할 수 있습니다.{" "} </p> diff --git a/app/[lng]/partners/(partners)/tbe/page.tsx b/app/[lng]/partners/(partners)/tbe/page.tsx index ab51659c..b85ebf71 100644 --- a/app/[lng]/partners/(partners)/tbe/page.tsx +++ b/app/[lng]/partners/(partners)/tbe/page.tsx @@ -9,7 +9,7 @@ import * as React from "react" 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" interface IndexPageProps { // Next.js 13 App Router에서 기본으로 주어지는 객체들 params: { @@ -49,9 +49,12 @@ export default async function RfqTBEPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Technical Bid Evaluation - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Technical Bid Evaluation + </h2> + <InformationButton pageCode="partners/tbe" /> + </div> <p className="text-sm text-muted-foreground"> TBE에 응답하고 커뮤니케이션을 할 수 있습니다.{" "} </p> diff --git a/app/[lng]/partners/(partners)/techsales/rfq-offshore-hull/page.tsx b/app/[lng]/partners/(partners)/techsales/rfq-offshore-hull/page.tsx index 5506825d..0504b51b 100644 --- a/app/[lng]/partners/(partners)/techsales/rfq-offshore-hull/page.tsx +++ b/app/[lng]/partners/(partners)/techsales/rfq-offshore-hull/page.tsx @@ -7,7 +7,7 @@ import { Button } from "@/components/ui/button"; import { LogIn } from "lucide-react"; import { Shell } from "@/components/shell"; import { VendorQuotationsTable } from "@/lib/techsales-rfq/vendor-response/table/vendor-quotations-table"; - +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "기술영업 해양HULL 견적서 관리", description: "기술영업 해양HULL RFQ 견적서를 관리합니다.", @@ -61,7 +61,10 @@ export default async function VendorQuotationsHullPage() { <div className="flex-shrink-0"> <div className="flex-shrink-0 flex flex-col gap-4 md:flex-row md:items-center md:justify-between"> <div> - <h1 className="text-3xl font-bold tracking-tight">기술영업 해양HULL 견적서</h1> + <div className="flex items-center gap-2"> + <h1 className="text-3xl font-bold tracking-tight">기술영업 해양HULL 견적서</h1> + <InformationButton pageCode="partners/techsales/rfq-offshore-hull" /> + </div> <p className="text-muted-foreground"> 할당받은 해양HULL RFQ에 대한 견적서를 작성하고 관리합니다. </p> diff --git a/app/[lng]/partners/(partners)/techsales/rfq-offshore-top/page.tsx b/app/[lng]/partners/(partners)/techsales/rfq-offshore-top/page.tsx index 408b5318..b872058f 100644 --- a/app/[lng]/partners/(partners)/techsales/rfq-offshore-top/page.tsx +++ b/app/[lng]/partners/(partners)/techsales/rfq-offshore-top/page.tsx @@ -6,7 +6,7 @@ import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { Button } from "@/components/ui/button"; import { LogIn } from "lucide-react"; import { Shell } from "@/components/shell"; - +import { InformationButton } from "@/components/information/information-button" import { VendorQuotationsTable } from "@/lib/techsales-rfq/vendor-response/table/vendor-quotations-table"; export const metadata: Metadata = { @@ -63,7 +63,10 @@ export default async function VendorQuotationsTopPage() { <div className="flex-shrink-0"> <div className="flex-shrink-0 flex flex-col gap-4 md:flex-row md:items-center md:justify-between"> <div> - <h1 className="text-3xl font-bold tracking-tight">기술영업 해양TOP 견적서</h1> + <div className="flex items-center gap-2"> + <h1 className="text-3xl font-bold tracking-tight">기술영업 해양TOP 견적서</h1> + <InformationButton pageCode="partners/techsales/rfq-offshore-top" /> + </div> <p className="text-muted-foreground"> 할당받은 해양TOP RFQ에 대한 견적서를 작성하고 관리합니다. </p> diff --git a/app/[lng]/partners/(partners)/techsales/rfq-ship/page.tsx b/app/[lng]/partners/(partners)/techsales/rfq-ship/page.tsx index 40c6bb1f..ad2ab07b 100644 --- a/app/[lng]/partners/(partners)/techsales/rfq-ship/page.tsx +++ b/app/[lng]/partners/(partners)/techsales/rfq-ship/page.tsx @@ -8,7 +8,7 @@ import { Button } from "@/components/ui/button"; import { LogIn } from "lucide-react"; import { Shell } from "@/components/shell"; import { VendorQuotationsTable } from "@/lib/techsales-rfq/vendor-response/table/vendor-quotations-table"; - +import { InformationButton } from "@/components/information/information-button" export const metadata: Metadata = { title: "기술영업 견적서 관리", description: "기술영업 RFQ 견적서를 관리합니다.", @@ -66,7 +66,10 @@ export default async function VendorQuotationsPage() { <div className="flex-shrink-0"> <div className="flex-shrink-0 flex flex-col gap-4 md:flex-row md:items-center md:justify-between"> <div> - <h1 className="text-3xl font-bold tracking-tight">기술영업 조선 견적서</h1> + <div className="flex items-center gap-2"> + <h1 className="text-3xl font-bold tracking-tight">기술영업 조선 견적서</h1> + <InformationButton pageCode="partners/techsales/rfq-ship" /> + </div> <p className="text-muted-foreground"> 할당받은 조선 RFQ에 대한 견적서를 작성하고 관리합니다. </p> diff --git a/app/[lng]/partners/(partners)/vendor-data/layout.tsx b/app/[lng]/partners/(partners)/vendor-data/layout.tsx index 29a720de..bdf352c7 100644 --- a/app/[lng]/partners/(partners)/vendor-data/layout.tsx +++ b/app/[lng]/partners/(partners)/vendor-data/layout.tsx @@ -6,7 +6,7 @@ import { getVendorProjectsAndContracts } from "@/lib/vendor-data/services" import { VendorDataContainer } from "@/components/vendor-data/vendor-data-container" import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { getServerSession } from "next-auth"; - +import { InformationButton } from "@/components/information/information-button" // Layout 컴포넌트는 서버 컴포넌트입니다 export default async function VendorDataLayout({ children, @@ -37,9 +37,12 @@ export default async function VendorDataLayout({ <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight"> - Vendor Data - </h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + Vendor Data + </h2> + <InformationButton pageCode="partners/vendor-data" /> + </div> <p className="text-muted-foreground"> 각종 Data 입력할 수 있습니다 </p> diff --git a/app/[lng]/partners/pq_new/page.tsx b/app/[lng]/partners/pq_new/page.tsx index 69498484..24051f34 100644 --- a/app/[lng]/partners/pq_new/page.tsx +++ b/app/[lng]/partners/pq_new/page.tsx @@ -18,7 +18,7 @@ import { } from "@/components/ui/table"; import { unstable_noStore as noStore } from 'next/cache'; import { getAllPQsByVendorId, getPQStatusCounts } from "@/lib/pq/service"; - +import { InformationButton } from "@/components/information/information-button"; export const metadata: Metadata = { title: "사전 평가 (PQ) 목록", description: "요청된 사전 평가 목록을 확인하고 작성합니다.", @@ -131,7 +131,10 @@ export default async function PQListPage() { <Shell className="gap-6"> <div className="flex justify-between items-center"> <div> - <h2 className="text-2xl font-bold tracking-tight">사전 평가 (PQ) 목록</h2> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight">사전 평가 (PQ) 목록</h2> + <InformationButton pageCode="partners/pq_new" /> + </div> <p className="text-muted-foreground"> 요청된 사전 평가 목록을 확인하고 작성합니다. </p> |
