summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-07-01 04:31:01 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-07-01 04:31:01 +0000
commit933589898bb26c1585b0585407e935f10e3be2ab (patch)
tree809d6d9a10052e3be091bf4a9c521f05df5c3559
parenta9980dd9f0f53c9c90937947d4514c921ba05f7f (diff)
(최겸) 인포메이선 컴포넌트 테이블 별 추가 완료
-rw-r--r--app/[lng]/evcp/(evcp)/b-rfq/page.tsx10
-rw-r--r--app/[lng]/evcp/(evcp)/basic-contract-template/page.tsx10
-rw-r--r--app/[lng]/evcp/(evcp)/basic-contract/page.tsx10
-rw-r--r--app/[lng]/evcp/(evcp)/bid-projects/page.tsx7
-rw-r--r--app/[lng]/evcp/(evcp)/budgetary-rfq/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/budgetary-tech-sales-hull/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/budgetary-tech-sales-ship/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/budgetary-tech-sales-top/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/email-template/page.tsx7
-rw-r--r--app/[lng]/evcp/(evcp)/equip-class/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/esg-check-list/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/evaluation-check-list/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/evaluation-target-list/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/evaluation/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/faq/page.tsx4
-rw-r--r--app/[lng]/evcp/(evcp)/form-list/page.tsx4
-rw-r--r--app/[lng]/evcp/(evcp)/incoterms/page.tsx7
-rw-r--r--app/[lng]/evcp/(evcp)/items/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/menu-access/page.tsx7
-rw-r--r--app/[lng]/evcp/(evcp)/menu-list/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/payment-conditions/page.tsx7
-rw-r--r--app/[lng]/evcp/(evcp)/po-rfq/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/po/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/poa/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/pq-criteria/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/pq/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/pq_new/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/project-gtc/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/project-vendors/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/projects/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/report/page.tsx152
-rw-r--r--app/[lng]/evcp/(evcp)/tag-numbering/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/tech-project-avl/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/tech-vendor-candidates/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/vendor-candidates/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/vendor-check-list/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/vendor-investigation/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/vendor-type/page.tsx11
-rw-r--r--app/[lng]/evcp/(evcp)/vendors/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/basic-contract/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/cbe-tech/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/cbe/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/dashboard/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/document-list-ship/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/evaluation/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/rfq-answer/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/rfq-ship/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/rfq-tech/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/rfq/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/tbe-tech/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/tbe/page.tsx11
-rw-r--r--app/[lng]/partners/(partners)/techsales/rfq-offshore-hull/page.tsx7
-rw-r--r--app/[lng]/partners/(partners)/techsales/rfq-offshore-top/page.tsx7
-rw-r--r--app/[lng]/partners/(partners)/techsales/rfq-ship/page.tsx7
-rw-r--r--app/[lng]/partners/(partners)/vendor-data/layout.tsx11
-rw-r--r--app/[lng]/partners/pq_new/page.tsx7
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>