summaryrefslogtreecommitdiff
path: root/lib/basic-contract/template/template-editor-wrapper.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-08-21 06:57:36 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-08-21 06:57:36 +0000
commit02b1cf005cf3e1df64183d20ba42930eb2767a9f (patch)
treee932c54d5260b0e6fda2b46be2a6ba1c3ee30434 /lib/basic-contract/template/template-editor-wrapper.tsx
parentd78378ecd7ceede1429359f8058c7a99ac34b1b7 (diff)
(대표님, 최겸) 설계메뉴추가, 작업사항 업데이트
설계메뉴 - 문서관리 설계메뉴 - 벤더 데이터 gtc 메뉴 업데이트 정보시스템 - 메뉴리스트 및 정보 업데이트 파일 라우트 업데이트 엑셀임포트 개선 기본계약 개선 벤더 가입과정 변경 및 개선 벤더 기본정보 - pq 돌체 오류 수정 및 개선 벤더 로그인 과정 이메일 오류 수정
Diffstat (limited to 'lib/basic-contract/template/template-editor-wrapper.tsx')
-rw-r--r--lib/basic-contract/template/template-editor-wrapper.tsx106
1 files changed, 75 insertions, 31 deletions
diff --git a/lib/basic-contract/template/template-editor-wrapper.tsx b/lib/basic-contract/template/template-editor-wrapper.tsx
index 96e2330f..af5d42a8 100644
--- a/lib/basic-contract/template/template-editor-wrapper.tsx
+++ b/lib/basic-contract/template/template-editor-wrapper.tsx
@@ -6,6 +6,7 @@ import { toast } from "sonner";
import { Save, RefreshCw, Type, FileText, AlertCircle } from "lucide-react";
import type { WebViewerInstance } from "@pdftron/webviewer";
import { Badge } from "@/components/ui/badge";
+import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
import { BasicContractTemplateViewer } from "./basic-contract-template-viewer";
import { getExistingTemplateNamesById, saveTemplateFile } from "../service";
@@ -16,20 +17,57 @@ interface TemplateEditorWrapperProps {
refreshAction?: () => Promise<void>;
}
-// 템플릿 이름별 변수 매핑 (영문 변수명 사용)
+const getVariablesForTemplate = (templateName: string): string[] => {
+ // 정확한 매치 먼저 확인
+ if (TEMPLATE_VARIABLES_MAP[templateName as keyof typeof TEMPLATE_VARIABLES_MAP]) {
+ return [...TEMPLATE_VARIABLES_MAP[templateName as keyof typeof TEMPLATE_VARIABLES_MAP]];
+ }
+
+ // GTC가 포함된 경우 확인
+ if (templateName.includes("GTC")) {
+ return [...TEMPLATE_VARIABLES_MAP["GTC"]];
+ }
+
+ // 다른 키워드들도 포함 관계로 확인
+ for (const [key, variables] of Object.entries(TEMPLATE_VARIABLES_MAP)) {
+ if (templateName.includes(key)) {
+ return [...variables];
+ }
+ }
+
+ // 기본값 반환
+ return ["company_name", "company_address", "representative_name", "signature_date"];
+};
+
+// 템플릿 이름별 변수 매핑
const TEMPLATE_VARIABLES_MAP = {
- "준법서약 (한글)": ["vendor_name", "address", "representative_name", "today_date"],
- "준법서약 (영문)": ["vendor_name", "address", "representative_name", "today_date"],
- "기술자료 요구서": ["vendor_name", "address", "representative_name", "today_date"],
- "비밀유지 계약서": ["vendor_name", "address", "representative_name", "today_date"],
- "표준하도급기본 계약서": ["vendor_name", "address", "representative_name", "today_date"],
- "GTC": ["vendor_name", "address", "representative_name", "today_date"],
- "안전보건관리 약정서": ["vendor_name", "address", "representative_name", "today_date"],
- "동반성장": ["vendor_name", "address", "representative_name", "today_date"],
- "윤리규범 준수 서약서": ["vendor_name", "address", "representative_name", "today_date"],
- "기술자료 동의서": ["vendor_name", "address", "representative_name", "today_date"],
- "내국신용장 미개설 합의서": ["vendor_name", "address", "representative_name", "today_date"],
- "직납자재 하도급대급등 연동제 의향서": ["vendor_name", "address", "representative_name", "today_date"]
+ "준법서약 (한글)": ["company_name", "company_address", "representative_name", "signature_date"],
+ "준법서약 (영문)": ["company_name", "company_address", "representative_name", "signature_date"],
+ "기술자료 요구서": ["company_name", "company_address", "representative_name", "signature_date", 'tax_id', 'phone_number'],
+ "비밀유지 계약서": ["company_name", "company_address", "representative_name", "signature_date"],
+ "표준하도급기본 계약서": ["company_name", "company_address", "representative_name", "signature_date"],
+ "GTC": ["company_name", "company_address", "representative_name", "signature_date"],
+ "안전보건관리 약정서": ["company_name", "company_address", "representative_name", "signature_date"],
+ "동반성장": ["company_name", "company_address", "representative_name", "signature_date"],
+ "윤리규범 준수 서약서": ["company_name", "company_address", "representative_name", "signature_date"],
+ "기술자료 동의서": ["company_name", "company_address", "representative_name", "signature_date", 'tax_id', 'phone_number'],
+ "내국신용장 미개설 합의서": ["company_name", "company_address", "representative_name", "signature_date"],
+ "직납자재 하도급대급등 연동제 의향서": ["company_name", "company_address", "representative_name", "signature_date"]
+} as const;
+
+// 변수별 한글 설명 매핑
+const VARIABLE_DESCRIPTION_MAP = {
+ "company_name": "협력회사명",
+ "vendor_name": "협력회사명",
+ "company_address": "회사주소",
+ "address": "회사주소",
+ "representative_name": "대표자명",
+ "signature_date": "서명날짜",
+ "today_date": "오늘날짜",
+ "tax_id": "사업자등록번호",
+ "phone_number": "전화번호",
+ "phone": "전화번호",
+ "email": "이메일"
} as const;
// 변수 패턴 감지를 위한 정규식
@@ -49,8 +87,6 @@ export function TemplateEditorWrapper({
const [templateName, setTemplateName] = React.useState<string>("");
const [predefinedVariables, setPredefinedVariables] = React.useState<string[]>([]);
- console.log(templateId, "templateId");
-
// 템플릿 이름 로드 및 변수 설정
React.useEffect(() => {
const loadTemplateInfo = async () => {
@@ -59,15 +95,15 @@ export function TemplateEditorWrapper({
setTemplateName(name);
// 템플릿 이름에 따른 변수 설정
- const variables = TEMPLATE_VARIABLES_MAP[name as keyof typeof TEMPLATE_VARIABLES_MAP] || [];
- setPredefinedVariables(variables);
+ const variables = getVariablesForTemplate(name);
+ setPredefinedVariables([...variables]);
console.log("🏷️ 템플릿 이름:", name);
console.log("📝 할당된 변수들:", variables);
} catch (error) {
console.error("템플릿 정보 로드 오류:", error);
// 기본 변수 설정
- setPredefinedVariables(["회사명", "주소", "대표자명", "오늘날짜"]);
+ setPredefinedVariables(["company_name", "company_address", "representative_name", "signature_date"]);
}
};
@@ -358,19 +394,27 @@ export function TemplateEditorWrapper({
<p className="text-xs text-muted-foreground mb-2">
{templateName ? `${templateName}에 권장되는 변수` : "자주 사용하는 변수"} (클릭하여 복사):
</p>
- <div className="flex flex-wrap gap-1">
- {predefinedVariables.map((variable, index) => (
- <Button
- key={index}
- variant="ghost"
- size="sm"
- className="h-6 px-2 text-xs hover:bg-blue-50"
- onClick={() => insertVariable(variable)}
- >
- {`{{${variable}}}`}
- </Button>
- ))}
- </div>
+ <TooltipProvider>
+ <div className="flex flex-wrap gap-1">
+ {predefinedVariables.map((variable, index) => (
+ <Tooltip key={index}>
+ <TooltipTrigger asChild>
+ <Button
+ variant="ghost"
+ size="sm"
+ className="h-6 px-2 text-xs hover:bg-blue-50"
+ onClick={() => insertVariable(variable)}
+ >
+ {`{{${variable}}}`}
+ </Button>
+ </TooltipTrigger>
+ <TooltipContent>
+ <p>{VARIABLE_DESCRIPTION_MAP[variable as keyof typeof VARIABLE_DESCRIPTION_MAP] || variable}</p>
+ </TooltipContent>
+ </Tooltip>
+ ))}
+ </div>
+ </TooltipProvider>
</div>
)}
</div>