summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-10-24 10:48:51 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-10-24 10:48:51 +0000
commitd4af641e8b7a144b2c61e7b9d68e7918bd46cc1e (patch)
tree3755978e471d641c57ae2370e7f1e00bfe3ecc2f
parent9f7af2e945c2d9f7ce73c9a0287d1d346f6cc5de (diff)
(임수민) 데이터룸 관련 요청사항 반영
-rw-r--r--components/file-manager/FileManager.tsx1
-rw-r--r--components/file-manager/SecurePDFViewer.tsx101
-rw-r--r--components/file-manager/creaetWaterMarks.tsx4
-rw-r--r--components/layout/Footer.tsx6
-rw-r--r--components/layout/Header.tsx10
-rw-r--r--components/layout/HeaderDataroom.tsx7
6 files changed, 73 insertions, 56 deletions
diff --git a/components/file-manager/FileManager.tsx b/components/file-manager/FileManager.tsx
index 7c5a3771..a95d8c06 100644
--- a/components/file-manager/FileManager.tsx
+++ b/components/file-manager/FileManager.tsx
@@ -1962,6 +1962,7 @@ export function FileManager({ projectId }: FileManagerProps) {
<SecurePDFViewer
documentUrl={viewerFileUrl}
fileName={selectedFile.name}
+ category={selectedFile.category}
onClose={() => {
setViewerDialogOpen(false);
setViewerFileUrl(null);
diff --git a/components/file-manager/SecurePDFViewer.tsx b/components/file-manager/SecurePDFViewer.tsx
index bd28214b..a24e2e37 100644
--- a/components/file-manager/SecurePDFViewer.tsx
+++ b/components/file-manager/SecurePDFViewer.tsx
@@ -10,10 +10,11 @@ import { createCustomWatermark } from './creaetWaterMarks';
interface SecurePDFViewerProps {
documentUrl: string;
fileName: string;
+ category?: string;
onClose?: () => void;
}
-export function SecurePDFViewer({ documentUrl, fileName, onClose }: SecurePDFViewerProps) {
+export function SecurePDFViewer({ documentUrl, fileName, category, onClose }: SecurePDFViewerProps) {
const viewerRef = useRef<HTMLDivElement>(null);
const instanceRef = useRef<WebViewerInstance | null>(null);
const initialized = useRef(false);
@@ -91,6 +92,10 @@ export function SecurePDFViewer({ documentUrl, fileName, onClose }: SecurePDFVie
'toggleNotesButton'
]);
+ const { Core } = instance;
+ Core.Tools.Tool.disableAutoSwitch();
+ Core.Tools.Tool.disableTextSelection();
+
// CSS 적용으로 추가 보안
const iframeWindow = instance.UI.iframeWindow;
if (iframeWindow && iframeWindow.document) {
@@ -187,55 +192,57 @@ export function SecurePDFViewer({ documentUrl, fileName, onClose }: SecurePDFVie
const { documentViewer, annotationManager } = instance.Core;
- // 문서 로드 완료 이벤트
- documentViewer.addEventListener('documentLoaded', async () => {
- setIsLoading(false);
-
- // 워터마크 추가
- const watermarkText = `SHI DATAROOM\n${session?.user?.email || 'CONFIDENTIAL'}\n${new Date().toLocaleString()}`;
-
- // 대각선 워터마크
- documentViewer.setWatermark({
- custom: createCustomWatermark({
- text: watermarkText,
- fontSize: 14,
- fontFamily: 'Arial',
- color: 'rgba(128, 128, 128, 0.3)', // 연한 회색
- opacity: 30, // 15% 투명도
- rotation: -45,
- })
- });
+ if (category !== 'public') {
+ // 문서 로드 완료 이벤트
+ documentViewer.addEventListener('documentLoaded', async () => {
+ setIsLoading(false);
+
+ // 워터마크 추가
+ const watermarkText = `SHI DATAROOM\n${session?.user?.email || 'CONFIDENTIAL'}\n${new Date().toLocaleString()}`;
+
+ // 대각선 워터마크
+ documentViewer.setWatermark({
+ custom: createCustomWatermark({
+ text: watermarkText,
+ fontSize: 14,
+ fontFamily: 'Arial',
+ color: 'rgba(128, 128, 128, 0.5)', // 연한 회색
+ opacity: 30, // 15% 투명도
+ rotation: -45,
+ })
+ });
- // 각 페이지에 커스텀 워터마크 추가
- const pageCount = documentViewer.getPageCount();
- for (let i = 1; i <= pageCount; i++) {
- const pageInfo = documentViewer.getDocument().getPageInfo(i);
- const { width, height } = pageInfo;
-
- // FreeTextAnnotation 생성
- const watermarkAnnot = new instance.Core.Annotations.FreeTextAnnotation();
- watermarkAnnot.PageNumber = i;
- watermarkAnnot.X = width / 4;
- watermarkAnnot.Y = height / 2;
- watermarkAnnot.Width = width / 2;
- watermarkAnnot.Height = 100;
- watermarkAnnot.setContents(
- `${session?.user?.email}\n${docFileName}\n${new Date().toLocaleDateString()}`
- );
- watermarkAnnot.FillColor = new instance.Core.Annotations.Color(255, 0, 0, 0.3);
- watermarkAnnot.TextColor = new instance.Core.Annotations.Color(255, 0, 0, 0.4);
- watermarkAnnot.FontSize = '24pt';
- watermarkAnnot.TextAlign = 'center';
- watermarkAnnot.Rotation = -45;
- watermarkAnnot.ReadOnly = true;
- watermarkAnnot.Locked = true;
- watermarkAnnot.Printable = true;
-
- annotationManager.addAnnotation(watermarkAnnot);
+ // 각 페이지에 커스텀 워터마크 추가
+ const pageCount = documentViewer.getPageCount();
+ for (let i = 1; i <= pageCount; i++) {
+ const pageInfo = documentViewer.getDocument().getPageInfo(i);
+ const { width, height } = pageInfo;
+
+ // FreeTextAnnotation 생성
+ const watermarkAnnot = new instance.Core.Annotations.FreeTextAnnotation();
+ watermarkAnnot.PageNumber = i;
+ watermarkAnnot.X = width / 4;
+ watermarkAnnot.Y = height / 2;
+ watermarkAnnot.Width = width / 2;
+ watermarkAnnot.Height = 100;
+ watermarkAnnot.setContents(
+ `${session?.user?.email}\n${docFileName}\n${new Date().toLocaleDateString()}`
+ );
+ watermarkAnnot.FillColor = new instance.Core.Annotations.Color(255, 0, 0, 0.3);
+ watermarkAnnot.TextColor = new instance.Core.Annotations.Color(255, 0, 0, 0.4);
+ watermarkAnnot.FontSize = '24pt';
+ watermarkAnnot.TextAlign = 'center';
+ watermarkAnnot.Rotation = -45;
+ watermarkAnnot.ReadOnly = true;
+ watermarkAnnot.Locked = true;
+ watermarkAnnot.Printable = true;
+
+ annotationManager.addAnnotation(watermarkAnnot);
+ }
+
+ annotationManager.drawAnnotations(documentViewer.getCurrentPage());
}
- annotationManager.drawAnnotations(documentViewer.getCurrentPage());
-
// Pan 모드로 설정 (텍스트 선택 불가)
documentViewer.setToolMode(documentViewer.getTool('Pan'));
diff --git a/components/file-manager/creaetWaterMarks.tsx b/components/file-manager/creaetWaterMarks.tsx
index ebf4322e..642e5e2a 100644
--- a/components/file-manager/creaetWaterMarks.tsx
+++ b/components/file-manager/creaetWaterMarks.tsx
@@ -1,7 +1,7 @@
export const createCustomWatermark: CreateCustomWatermark = ({
text,
fontSize = 14,
- color = "rgba(128, 128, 128, 0.3)", // 더 연한 회색, 더 투명하게
+ color = "rgba(128, 128, 128, 0.5)", // 더 연한 회색, 더 투명하게
opacity = 30, // 더 낮은 opacity
rotation = -45,
fontFamily = "Arial",
@@ -30,7 +30,7 @@ export const createCustomWatermark: CreateCustomWatermark = ({
const textBlockHeight = lines.length * lineHeight;
// 격자 간격 계산 (텍스트 블록 크기 기반)
- const horizontalSpacing = maxLineWidth * 0.8; // 가로 간격
+ const horizontalSpacing = maxLineWidth * 1.2; // 가로 간격
const verticalSpacing = textBlockHeight * 1.5; // 세로 간격
// 회전을 고려한 대각선 길이 계산
diff --git a/components/layout/Footer.tsx b/components/layout/Footer.tsx
index bf533ae8..33278d7e 100644
--- a/components/layout/Footer.tsx
+++ b/components/layout/Footer.tsx
@@ -11,11 +11,15 @@ export function SiteFooter() {
<footer className="border-grid border-t py-6 md:px-8 md:py-0">
<div className="container-wrapper">
<div className="container py-4">
- <div className="text-balance text-center text-sm leading-loose text-muted-foreground md:text-left">
+ {/* <div className="text-balance text-center text-sm leading-loose text-muted-foreground md:text-left">
{isDataRoom
? "Data Room - 삼성중공업 데이터룸"
: "enterprise Vendor Co-work Platform - 삼성중공업 전사벤더협업플랫폼"
}
+ </div> */}
+
+ <div className="text-balance text-center text-sm leading-loose text-muted-foreground md:text-left">
+ CONPORT
</div>
</div>
</div>
diff --git a/components/layout/Header.tsx b/components/layout/Header.tsx
index a080d394..db9c6b49 100644
--- a/components/layout/Header.tsx
+++ b/components/layout/Header.tsx
@@ -161,14 +161,14 @@ export function Header() {
<Link href={logoHref} className="flex items-center gap-2">
<Image
className="dark:invert"
- src="/images/vercel.svg"
- alt="EVCP Logo"
- width={20}
+ src="/images/Logotype.svg"
+ alt="Logo"
+ width={120}
height={20}
/>
- <span className="hidden font-bold lg:inline-block">
+ {/* <span className="hidden font-bold lg:inline-block">
{t(brandNameKey)}
- </span>
+ </span> */}
</Link>
</div>
diff --git a/components/layout/HeaderDataroom.tsx b/components/layout/HeaderDataroom.tsx
index fa9b89cf..0981b24b 100644
--- a/components/layout/HeaderDataroom.tsx
+++ b/components/layout/HeaderDataroom.tsx
@@ -138,7 +138,12 @@ export function HeaderDataRoom() {
<Link href={`/${lng}/evcp/settings`}>설정</Link>
</DropdownMenuItem>
<DropdownMenuSeparator />
- <DropdownMenuItem onSelect={() => signOut({ callbackUrl: `/${lng}/${domain}` })}>
+ <DropdownMenuItem onSelect={() => {
+ const logoutUrl = domain === 'partners'
+ ? 'https://shidataroom.com/en/partners'
+ : `/${lng}/${domain}`;
+ signOut({ callbackUrl: logoutUrl });
+ }}>
로그아웃
</DropdownMenuItem>
</DropdownMenuContent>