summaryrefslogtreecommitdiff
path: root/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/basic-contract/viewer/basic-contract-sign-viewer.tsx')
-rw-r--r--lib/basic-contract/viewer/basic-contract-sign-viewer.tsx35
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx b/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
index 8185e33e..98204763 100644
--- a/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
+++ b/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
@@ -54,6 +54,8 @@ interface BasicContractSignViewerProps {
mode?: 'vendor' | 'buyer'; // 추가된 mode prop
t?: (key: string) => string;
negotiationCompletedAt?: Date | null; // 협의 완료 시간 추가
+ vendorTaxId?: string;
+ vendorCountry?: string;
}
// 자동 서명 필드 생성을 위한 타입 정의
@@ -694,6 +696,8 @@ export function BasicContractSignViewer({
mode = 'vendor', // 기본값 vendor
t = (key: string) => key,
negotiationCompletedAt,
+ vendorTaxId,
+ vendorCountry,
}: BasicContractSignViewerProps) {
const { toast } = useToast();
@@ -1255,6 +1259,12 @@ export function BasicContractSignViewer({
const currentInstance = webViewerInstance.current || instance;
if (!currentInstance) return;
+ // 내자(KR)인 경우 TrustNet 공동인증 서명 팝업 호출 (구매자 모드가 아닐 때만)
+ if (mode === 'vendor' && vendorCountry === 'KR') {
+ handleCertificateSign();
+ return;
+ }
+
try {
const { documentViewer, annotationManager } = currentInstance.Core;
const doc = documentViewer.getDocument();
@@ -1325,6 +1335,31 @@ export function BasicContractSignViewer({
}
};
+ const handleCertificateSign = () => {
+ if (!contractId) {
+ toast({ title: "계약서 ID가 없습니다.", variant: "destructive" });
+ return;
+ }
+
+ // 사업자번호가 없으면 입력하도록 안내 (혹은 그냥 빈값으로 열어서 직접 입력하게 할 수도 있음)
+ // 여기서는 경고만 하고 열어줌
+ if (!vendorTaxId) {
+ // toast({ title: "사업자번호 정보를 불러올 수 없습니다.", description: "팝업에서 직접 입력해주세요.", variant: "default" });
+ }
+
+ const width = 600;
+ const height = 700;
+ const left = window.screenX + (window.outerWidth - width) / 2;
+ const top = window.screenY + (window.outerHeight - height) / 2;
+
+ const ssnParam = vendorTaxId ? `&ssn=${encodeURIComponent(vendorTaxId)}` : '';
+ const baseUrl = `${window.location.protocol}//${window.location.hostname}`;
+ const apiOrigin = encodeURIComponent(window.location.origin);
+ const url = `${baseUrl}/trustnet?contractId=${contractId}${ssnParam}&autoStart=true&apiOrigin=${apiOrigin}`;
+
+ window.open(url, 'TrustNetSign', `width=${width},height=${height},top=${top},left=${left}`);
+ };
+
// 서명 상태 표시 컴포넌트 - 처리 중이거나 오류일 때만 표시
const SignatureFieldsStatus = () => {
// 처리 중이거나 오류가 있을 때만 표시 (완료 후에는 자동으로 사라짐)