From 18ca4ad784aeeab9ab7a13bbc8b3c13b42ca5e49 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Fri, 7 Nov 2025 12:01:16 +0900 Subject: (김준회) 결재 미리보기 공통컴포넌트 중복 제거, 기존 코드의 미리보기 호출부 수정, 템플릿 작성 가이드 간략히 추가, 결재 미리보기시 첨부파일 편집 처리 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/approval/template-utils.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'lib/approval/template-utils.ts') diff --git a/lib/approval/template-utils.ts b/lib/approval/template-utils.ts index 0607f289..5a5bb307 100644 --- a/lib/approval/template-utils.ts +++ b/lib/approval/template-utils.ts @@ -39,14 +39,18 @@ export async function getApprovalTemplateByName(name: string) { * * {{변수명}} 형태의 변수를 실제 값으로 치환 * + * **중요**: 변수명의 앞뒤 공백은 자동으로 제거됩니다. + * - 템플릿: `{{ 변수명 }}` → `{{변수명}}`으로 정규화 + * - 변수 키: ` 변수명 ` → `변수명`으로 정규화 + * * @param content - 템플릿 HTML 내용 * @param variables - 변수 매핑 객체 * @returns 치환된 HTML * * @example * ```typescript - * const content = "

{{이름}}님, 안녕하세요

"; - * const variables = { "이름": "홍길동" }; + * const content = "

{{ 이름 }}님, 안녕하세요

"; + * const variables = { " 이름 ": "홍길동" }; // 공백 있어도 OK * const result = await replaceTemplateVariables(content, variables); * // "

홍길동님, 안녕하세요

" * ``` @@ -57,9 +61,20 @@ export async function replaceTemplateVariables( ): Promise { let result = content; + // 변수 키를 trim하여 정규화된 맵 생성 + const normalizedVariables: Record = {}; Object.entries(variables).forEach(([key, value]) => { - // {{변수명}} 패턴을 전역으로 치환 - const pattern = new RegExp(`\\{\\{${escapeRegex(key)}\\}\\}`, 'g'); + normalizedVariables[key.trim()] = value; + }); + + // 템플릿에서 {{ 변수명 }} 패턴을 찾아 치환 + // 공백을 허용하는 정규식: {{\s*변수명\s*}} + Object.entries(normalizedVariables).forEach(([key, value]) => { + // 변수명 앞뒤에 공백이 있을 수 있으므로 \s*를 추가 + const pattern = new RegExp( + `\\{\\{\\s*${escapeRegex(key)}\\s*\\}\\}`, + 'g' + ); result = result.replace(pattern, value); }); -- cgit v1.2.3