- 마스터 + 인원/장비/자재/공사량/작업사진 6테이블 마이그레이션 - 6개 탭: 작업내용, 인원, 장비, 자재, 공사량, 작업사진 - 작업내용: 금일/명일 텍스트 + 날씨/기온/강수/미세먼지 메타 - 전일누계 + 금일 + 총계 누적 패턴 (인원/장비/자재/공사량) - 작업사진: 파일 업로드 + 사진목록/사진정보 2단 레이아웃 - 상태별 버튼 제어 (작성중→저장/삭제, 검토중→읽기전용) - 양식보기: 3페이지 전체화면 뷰어 (작업일보/인원장비/자재) - 검토자 지정 모달, 캘린더 스트립, 번개 랜덤데이터
443 lines
38 KiB
JavaScript
443 lines
38 KiB
JavaScript
const path = require('path');
|
|
module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules'));
|
|
|
|
const PptxGenJS = require('pptxgenjs');
|
|
|
|
async function main() {
|
|
const pres = new PptxGenJS();
|
|
pres.defineLayout({ name: 'CUSTOM_16x9', width: 10, height: 5.625 });
|
|
pres.layout = 'CUSTOM_16x9';
|
|
|
|
// 대외비 스탬프 함수 (모든 슬라이드에 적용)
|
|
function addConfidentialBadge(slide, isDark = false) {
|
|
slide.addShape(pres.ShapeType.roundRect, { x: 8.3, y: 0.15, w: 1.4, h: 0.35, rectRadius: 0.04, fill: { color: 'D32F2F' } });
|
|
slide.addText('CONFIDENTIAL', { x: 8.3, y: 0.12, w: 1.4, h: 0.22, fontSize: 7, bold: true, color: 'FFFFFF', align: 'center', fontFace: 'Arial' });
|
|
slide.addText('대 외 비', { x: 8.3, y: 0.28, w: 1.4, h: 0.22, fontSize: 8, bold: true, color: 'FFCDD2', align: 'center', fontFace: 'Arial' });
|
|
}
|
|
|
|
// ===== SLIDE 1: 표지 =====
|
|
const slide1 = pres.addSlide();
|
|
slide1.background = { fill: '1a1a2e' };
|
|
// 상단 그라데이션 라인
|
|
slide1.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 3.3, h: 0.06, fill: { color: '4CAF50' } });
|
|
slide1.addShape(pres.ShapeType.rect, { x: 3.3, y: 0, w: 3.4, h: 0.06, fill: { color: '2196F3' } });
|
|
slide1.addShape(pres.ShapeType.rect, { x: 6.7, y: 0, w: 3.3, h: 0.06, fill: { color: '9C27B0' } });
|
|
// 배지
|
|
slide1.addShape(pres.ShapeType.roundRect, { x: 2.8, y: 1.2, w: 4.4, h: 0.4, rectRadius: 0.2, line: { color: 'FFFFFF', width: 0.5, dashType: 'solid' } });
|
|
slide1.addText('SAM SALES PARTNER', { x: 2.8, y: 1.2, w: 4.4, h: 0.4, fontSize: 9, color: 'AAAAAA', align: 'center', fontFace: 'Arial' });
|
|
// 메인 타이틀
|
|
slide1.addText('영업파트너', { x: 1, y: 1.8, w: 8, h: 0.7, fontSize: 32, bold: true, color: 'FFFFFF', align: 'center', fontFace: 'Arial' });
|
|
slide1.addText('수당 안내서', { x: 1, y: 2.4, w: 8, h: 0.7, fontSize: 32, bold: true, color: '4CAF50', align: 'center', fontFace: 'Arial' });
|
|
// 서브 타이틀
|
|
slide1.addText('개인 파트너 / 단체 파트너 수당 체계 안내', { x: 1, y: 3.1, w: 8, h: 0.4, fontSize: 12, color: '999999', align: 'center', fontFace: 'Arial' });
|
|
// 키워드 배지들
|
|
slide1.addShape(pres.ShapeType.roundRect, { x: 2.0, y: 3.8, w: 1.6, h: 0.4, rectRadius: 0.06, fill: { color: '1B3D1B' }, line: { color: '4CAF50', width: 0.5 } });
|
|
slide1.addText('판매자 수당', { x: 2.0, y: 3.8, w: 1.6, h: 0.4, fontSize: 9, color: '4CAF50', align: 'center', bold: true, fontFace: 'Arial' });
|
|
slide1.addShape(pres.ShapeType.roundRect, { x: 4.0, y: 3.8, w: 1.6, h: 0.4, rectRadius: 0.06, fill: { color: '0D2B4D' }, line: { color: '2196F3', width: 0.5 } });
|
|
slide1.addText('관리자 수당', { x: 4.0, y: 3.8, w: 1.6, h: 0.4, fontSize: 9, color: '2196F3', align: 'center', bold: true, fontFace: 'Arial' });
|
|
slide1.addShape(pres.ShapeType.roundRect, { x: 6.0, y: 3.8, w: 1.6, h: 0.4, rectRadius: 0.06, fill: { color: '2D1433' }, line: { color: '9C27B0', width: 0.5 } });
|
|
slide1.addText('협업지원금', { x: 6.0, y: 3.8, w: 1.6, h: 0.4, fontSize: 9, color: 'CE93D8', align: 'center', bold: true, fontFace: 'Arial' });
|
|
// 대외비 스탬프
|
|
addConfidentialBadge(slide1, true);
|
|
// 보안 경고
|
|
slide1.addShape(pres.ShapeType.roundRect, { x: 1.5, y: 4.5, w: 7, h: 0.45, rectRadius: 0.06, fill: { color: '3D0000' }, line: { color: 'D32F2F', width: 0.8 } });
|
|
slide1.addText('본 자료는 사내 대외비 문서입니다. 외부 유출을 엄격히 금합니다.', { x: 1.5, y: 4.5, w: 7, h: 0.45, fontSize: 10, bold: true, color: 'FF5252', align: 'center', fontFace: 'Arial' });
|
|
// 하단
|
|
slide1.addText('2026년 2월 기준 | SAM', { x: 0, y: 5.2, w: 10, h: 0.3, fontSize: 7, color: '666666', align: 'center', fontFace: 'Arial' });
|
|
|
|
// ===== SLIDE 2: 수당 체계 한눈에 보기 =====
|
|
const slide2 = pres.addSlide();
|
|
slide2.background = { fill: 'FFFFFF' };
|
|
slide2.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.35, w: 0.06, h: 0.35, fill: { color: '1a1a2e' } });
|
|
slide2.addText('수당 체계 한눈에 보기', { x: 0.7, y: 0.3, w: 5, h: 0.45, fontSize: 18, bold: true, color: '1a1a2e', fontFace: 'Arial' });
|
|
// 기준금액 안내
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 0.9, w: 9, h: 0.4, rectRadius: 0.06, fill: { color: 'F8F9FA' }, line: { color: 'E0E0E0', width: 0.5 } });
|
|
slide2.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.9, w: 0.05, h: 0.4, fill: { color: 'FF9800' } });
|
|
slide2.addText([
|
|
{ text: '수당 기준금액 = ', options: { fontSize: 10, color: '555555' } },
|
|
{ text: '개발비의 50%', options: { fontSize: 10, color: '1a1a2e', bold: true } }
|
|
], { x: 0.7, y: 0.9, w: 8, h: 0.4, fontFace: 'Arial' });
|
|
|
|
// 개인 파트너 카드
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 1.5, w: 4.2, h: 3.6, rectRadius: 0.15, fill: { color: 'F0FAF0' }, line: { color: '4CAF50', width: 1.5 } });
|
|
slide2.addShape(pres.ShapeType.ellipse, { x: 0.7, y: 1.65, w: 0.45, h: 0.45, fill: { color: '4CAF50' } });
|
|
slide2.addText('1', { x: 0.7, y: 1.65, w: 0.45, h: 0.45, fontSize: 14, color: 'FFFFFF', align: 'center', valign: 'middle', bold: true, fontFace: 'Arial' });
|
|
slide2.addText('개인 파트너', { x: 1.3, y: 1.65, w: 2, h: 0.3, fontSize: 14, bold: true, color: '2E7D32', fontFace: 'Arial' });
|
|
slide2.addText('Individual Partner', { x: 1.3, y: 1.92, w: 2, h: 0.2, fontSize: 8, color: '999999', fontFace: 'Arial' });
|
|
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 0.7, y: 2.3, w: 3.8, h: 0.4, rectRadius: 0.06, fill: { color: 'FFFFFF' } });
|
|
slide2.addText('판매자 수당', { x: 0.8, y: 2.3, w: 2, h: 0.4, fontSize: 10, color: '333333', fontFace: 'Arial' });
|
|
slide2.addText('20%', { x: 3.0, y: 2.3, w: 1.4, h: 0.4, fontSize: 14, bold: true, color: '4CAF50', align: 'right', fontFace: 'Arial' });
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 0.7, y: 2.8, w: 3.8, h: 0.4, rectRadius: 0.06, fill: { color: 'FFFFFF' } });
|
|
slide2.addText('관리자 수당', { x: 0.8, y: 2.8, w: 2, h: 0.4, fontSize: 10, color: '333333', fontFace: 'Arial' });
|
|
slide2.addText('5%', { x: 3.0, y: 2.8, w: 1.4, h: 0.4, fontSize: 14, bold: true, color: '2196F3', align: 'right', fontFace: 'Arial' });
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 0.7, y: 3.3, w: 3.8, h: 0.4, rectRadius: 0.06, fill: { color: 'FFFFFF' } });
|
|
slide2.addText('협업지원금', { x: 0.8, y: 3.3, w: 2, h: 0.4, fontSize: 10, color: '333333', fontFace: 'Arial' });
|
|
slide2.addText('3%', { x: 3.0, y: 3.3, w: 1.4, h: 0.4, fontSize: 14, bold: true, color: '9C27B0', align: 'right', fontFace: 'Arial' });
|
|
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 0.7, y: 3.9, w: 3.8, h: 0.5, rectRadius: 0.1, fill: { color: '2E7D32' } });
|
|
slide2.addText('본사 총 지급률', { x: 0.8, y: 3.9, w: 2, h: 0.25, fontSize: 9, color: 'CCCCCC', fontFace: 'Arial' });
|
|
slide2.addText('28%', { x: 1.5, y: 4.05, w: 2.5, h: 0.4, fontSize: 22, bold: true, color: 'FFFFFF', align: 'center', fontFace: 'Arial' });
|
|
|
|
// 단체 파트너 카드
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 5.3, y: 1.5, w: 4.2, h: 3.6, rectRadius: 0.15, fill: { color: 'F0F4FF' }, line: { color: '2196F3', width: 1.5 } });
|
|
slide2.addShape(pres.ShapeType.ellipse, { x: 5.5, y: 1.65, w: 0.45, h: 0.45, fill: { color: '2196F3' } });
|
|
slide2.addText('2', { x: 5.5, y: 1.65, w: 0.45, h: 0.45, fontSize: 14, color: 'FFFFFF', align: 'center', valign: 'middle', bold: true, fontFace: 'Arial' });
|
|
slide2.addText('단체 파트너', { x: 6.1, y: 1.65, w: 2, h: 0.3, fontSize: 14, bold: true, color: '1565C0', fontFace: 'Arial' });
|
|
slide2.addText('Corporate Partner', { x: 6.1, y: 1.92, w: 2, h: 0.2, fontSize: 8, color: '999999', fontFace: 'Arial' });
|
|
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 5.5, y: 2.3, w: 3.8, h: 0.4, rectRadius: 0.06, fill: { color: 'FFFFFF' } });
|
|
slide2.addText('단체 수당', { x: 5.6, y: 2.3, w: 2, h: 0.4, fontSize: 10, color: '333333', fontFace: 'Arial' });
|
|
slide2.addText('30%', { x: 7.8, y: 2.3, w: 1.4, h: 0.4, fontSize: 14, bold: true, color: '4CAF50', align: 'right', fontFace: 'Arial' });
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 5.5, y: 2.8, w: 3.8, h: 0.4, rectRadius: 0.06, fill: { color: 'FFFFFF' } });
|
|
slide2.addText('관리자 수당', { x: 5.6, y: 2.8, w: 2, h: 0.4, fontSize: 10, color: '999999', fontFace: 'Arial' });
|
|
slide2.addText('0%', { x: 7.8, y: 2.8, w: 1.4, h: 0.4, fontSize: 14, bold: true, color: '999999', align: 'right', fontFace: 'Arial' });
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 5.5, y: 3.3, w: 3.8, h: 0.4, rectRadius: 0.06, fill: { color: 'FFFFFF' } });
|
|
slide2.addText('협업지원금', { x: 5.6, y: 3.3, w: 2, h: 0.4, fontSize: 10, color: '333333', fontFace: 'Arial' });
|
|
slide2.addText('3%', { x: 7.8, y: 3.3, w: 1.4, h: 0.4, fontSize: 14, bold: true, color: '9C27B0', align: 'right', fontFace: 'Arial' });
|
|
|
|
slide2.addShape(pres.ShapeType.roundRect, { x: 5.5, y: 3.9, w: 3.8, h: 0.5, rectRadius: 0.1, fill: { color: '1565C0' } });
|
|
slide2.addText('본사 총 지급률', { x: 5.6, y: 3.9, w: 2, h: 0.25, fontSize: 9, color: 'CCCCCC', fontFace: 'Arial' });
|
|
slide2.addText('33%', { x: 6.3, y: 4.05, w: 2.5, h: 0.4, fontSize: 22, bold: true, color: 'FFFFFF', align: 'center', fontFace: 'Arial' });
|
|
|
|
addConfidentialBadge(slide2);
|
|
slide2.addText('2 / 8', { x: 9, y: 5.3, w: 0.8, h: 0.2, fontSize: 7, color: 'BBBBBB', align: 'right', fontFace: 'Arial' });
|
|
|
|
// ===== SLIDE 3: 개인 파트너 수당 상세 =====
|
|
const slide3 = pres.addSlide();
|
|
slide3.background = { fill: 'FFFFFF' };
|
|
slide3.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.35, w: 0.06, h: 0.35, fill: { color: '4CAF50' } });
|
|
slide3.addText('개인 파트너 수당 상세', { x: 0.7, y: 0.3, w: 4, h: 0.45, fontSize: 18, bold: true, color: '1a1a2e', fontFace: 'Arial' });
|
|
slide3.addShape(pres.ShapeType.roundRect, { x: 5.0, y: 0.35, w: 0.8, h: 0.3, rectRadius: 0.04, fill: { color: 'E8F5E9' } });
|
|
slide3.addText('총 28%', { x: 5.0, y: 0.35, w: 0.8, h: 0.3, fontSize: 8, bold: true, color: '2E7D32', align: 'center', fontFace: 'Arial' });
|
|
|
|
// 비율 바
|
|
slide3.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 0.95, w: 6.4, h: 0.7, rectRadius: 0.1, fill: { color: '4CAF50' } });
|
|
slide3.addText([
|
|
{ text: '20%', options: { fontSize: 20, bold: true, color: 'FFFFFF' } },
|
|
{ text: '\n판매자 수당', options: { fontSize: 9, color: 'DDFFDD' } }
|
|
], { x: 0.5, y: 0.95, w: 6.4, h: 0.7, align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide3.addShape(pres.ShapeType.roundRect, { x: 7.0, y: 0.95, w: 1.6, h: 0.7, rectRadius: 0.1, fill: { color: '2196F3' } });
|
|
slide3.addText([
|
|
{ text: '5%', options: { fontSize: 16, bold: true, color: 'FFFFFF' } },
|
|
{ text: '\n관리자', options: { fontSize: 8, color: 'BBDEFB' } }
|
|
], { x: 7.0, y: 0.95, w: 1.6, h: 0.7, align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide3.addShape(pres.ShapeType.roundRect, { x: 8.7, y: 0.95, w: 0.8, h: 0.7, rectRadius: 0.1, fill: { color: '9C27B0' } });
|
|
slide3.addText([
|
|
{ text: '3%', options: { fontSize: 14, bold: true, color: 'FFFFFF' } },
|
|
{ text: '\n협업', options: { fontSize: 7, color: 'E1BEE7' } }
|
|
], { x: 8.7, y: 0.95, w: 0.8, h: 0.7, align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
// 3개 상세 카드
|
|
const cardW = 2.85;
|
|
const cardY = 1.9;
|
|
const cardH = 3.2;
|
|
const cards3 = [
|
|
{ title: '판매자 수당 20%', color: '4CAF50', bgColor: 'F0FAF0', borderColor: 'C8E6C9', items: [['수령 대상', '영업파트너 본인'], ['산정 기준', '기준금액 x 20%'], ['지급 방식', '2단계 분할 지급']] },
|
|
{ title: '관리자 수당 5%', color: '2196F3', bgColor: 'E3F2FD', borderColor: 'BBDEFB', items: [['수령 대상', '담당 매니저'], ['산정 기준', '기준금액 x 5%'], ['조건', '매니저 배정 시']] },
|
|
{ title: '협업지원금 3%', color: '9C27B0', bgColor: 'F3E5F5', borderColor: 'E1BEE7', items: [['수령 대상', '유치한 상위 파트너'], ['산정 기준', '기준금액 x 3%'], ['조건', '유치자가 있을 때']] },
|
|
];
|
|
cards3.forEach((card, i) => {
|
|
const x = 0.5 + i * (cardW + 0.2);
|
|
slide3.addShape(pres.ShapeType.roundRect, { x, y: cardY, w: cardW, h: cardH, rectRadius: 0.1, fill: { color: card.bgColor }, line: { color: card.borderColor, width: 0.5 } });
|
|
slide3.addShape(pres.ShapeType.ellipse, { x: x + 0.15, y: cardY + 0.15, w: 0.12, h: 0.12, fill: { color: card.color } });
|
|
slide3.addText(card.title, { x: x + 0.35, y: cardY + 0.08, w: cardW - 0.5, h: 0.3, fontSize: 11, bold: true, color: card.color, fontFace: 'Arial' });
|
|
card.items.forEach((item, j) => {
|
|
const iy = cardY + 0.5 + j * 0.8;
|
|
slide3.addShape(pres.ShapeType.roundRect, { x: x + 0.1, y: iy, w: cardW - 0.2, h: 0.65, rectRadius: 0.05, fill: { color: 'FFFFFF' } });
|
|
slide3.addText(item[0], { x: x + 0.2, y: iy + 0.05, w: cardW - 0.4, h: 0.2, fontSize: 8, color: '999999', fontFace: 'Arial' });
|
|
slide3.addText(item[1], { x: x + 0.2, y: iy + 0.28, w: cardW - 0.4, h: 0.25, fontSize: 10, bold: true, color: '333333', fontFace: 'Arial' });
|
|
});
|
|
});
|
|
addConfidentialBadge(slide3);
|
|
slide3.addText('3 / 8', { x: 9, y: 5.3, w: 0.8, h: 0.2, fontSize: 7, color: 'BBBBBB', align: 'right', fontFace: 'Arial' });
|
|
|
|
// ===== SLIDE 4: 단체 파트너 수당 상세 =====
|
|
const slide4 = pres.addSlide();
|
|
slide4.background = { fill: 'FFFFFF' };
|
|
slide4.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.35, w: 0.06, h: 0.35, fill: { color: '2196F3' } });
|
|
slide4.addText('단체 파트너 수당 상세', { x: 0.7, y: 0.3, w: 4, h: 0.45, fontSize: 18, bold: true, color: '1a1a2e', fontFace: 'Arial' });
|
|
slide4.addShape(pres.ShapeType.roundRect, { x: 5.0, y: 0.35, w: 0.8, h: 0.3, rectRadius: 0.04, fill: { color: 'E3F2FD' } });
|
|
slide4.addText('총 33%', { x: 5.0, y: 0.35, w: 0.8, h: 0.3, fontSize: 8, bold: true, color: '1565C0', align: 'center', fontFace: 'Arial' });
|
|
|
|
// 비율 바
|
|
slide4.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 0.95, w: 7.5, h: 0.7, rectRadius: 0.1, fill: { color: '4CAF50' } });
|
|
slide4.addText([
|
|
{ text: '30%', options: { fontSize: 22, bold: true, color: 'FFFFFF' } },
|
|
{ text: '\n단체 수당', options: { fontSize: 9, color: 'DDFFDD' } }
|
|
], { x: 0.5, y: 0.95, w: 7.5, h: 0.7, align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide4.addShape(pres.ShapeType.roundRect, { x: 8.1, y: 0.95, w: 0.6, h: 0.7, rectRadius: 0.1, fill: { color: 'E0E0E0' } });
|
|
slide4.addText('0%', { x: 8.1, y: 0.95, w: 0.6, h: 0.7, fontSize: 14, bold: true, color: '999999', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide4.addShape(pres.ShapeType.roundRect, { x: 8.8, y: 0.95, w: 0.7, h: 0.7, rectRadius: 0.1, fill: { color: '9C27B0' } });
|
|
slide4.addText([
|
|
{ text: '3%', options: { fontSize: 14, bold: true, color: 'FFFFFF' } },
|
|
{ text: '\n협업', options: { fontSize: 7, color: 'E1BEE7' } }
|
|
], { x: 8.8, y: 0.95, w: 0.7, h: 0.7, align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
const cards4 = [
|
|
{ title: '단체 수당 30%', color: '4CAF50', bgColor: 'F0FAF0', borderColor: 'C8E6C9', items: [['수령 대상', '단체(기관/업체)'], ['산정 기준', '기준금액 x 30%'], ['특징', '개인보다 10%p 높음']] },
|
|
{ title: '관리자 수당 0%', color: '999999', bgColor: 'FAFAFA', borderColor: 'E0E0E0', items: [['비고', '매니저 수당 없음'], ['이유', '단체 수당에 포함'], ['대신', '단체에 +10%p 배분']] },
|
|
{ title: '협업지원금 3%', color: '9C27B0', bgColor: 'F3E5F5', borderColor: 'E1BEE7', items: [['수령 대상', '유치한 파트너'], ['산정 기준', '기준금액 x 3%'], ['지급 시점', '단체 매출 발생 시']] },
|
|
];
|
|
cards4.forEach((card, i) => {
|
|
const x = 0.5 + i * (cardW + 0.2);
|
|
slide4.addShape(pres.ShapeType.roundRect, { x, y: cardY, w: cardW, h: cardH, rectRadius: 0.1, fill: { color: card.bgColor }, line: { color: card.borderColor, width: 0.5 } });
|
|
slide4.addShape(pres.ShapeType.ellipse, { x: x + 0.15, y: cardY + 0.15, w: 0.12, h: 0.12, fill: { color: card.color } });
|
|
slide4.addText(card.title, { x: x + 0.35, y: cardY + 0.08, w: cardW - 0.5, h: 0.3, fontSize: 11, bold: true, color: card.color, fontFace: 'Arial' });
|
|
card.items.forEach((item, j) => {
|
|
const iy = cardY + 0.5 + j * 0.8;
|
|
slide4.addShape(pres.ShapeType.roundRect, { x: x + 0.1, y: iy, w: cardW - 0.2, h: 0.65, rectRadius: 0.05, fill: { color: 'FFFFFF' } });
|
|
slide4.addText(item[0], { x: x + 0.2, y: iy + 0.05, w: cardW - 0.4, h: 0.2, fontSize: 8, color: '999999', fontFace: 'Arial' });
|
|
slide4.addText(item[1], { x: x + 0.2, y: iy + 0.28, w: cardW - 0.4, h: 0.25, fontSize: 10, bold: true, color: '333333', fontFace: 'Arial' });
|
|
});
|
|
});
|
|
addConfidentialBadge(slide4);
|
|
slide4.addText('4 / 8', { x: 9, y: 5.3, w: 0.8, h: 0.2, fontSize: 7, color: 'BBBBBB', align: 'right', fontFace: 'Arial' });
|
|
|
|
// ===== SLIDE 5: 협업지원금이란? =====
|
|
const slide5 = pres.addSlide();
|
|
slide5.background = { fill: 'FFFFFF' };
|
|
slide5.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.35, w: 0.06, h: 0.35, fill: { color: '9C27B0' } });
|
|
slide5.addText('협업지원금이란?', { x: 0.7, y: 0.3, w: 5, h: 0.45, fontSize: 18, bold: true, color: '1a1a2e', fontFace: 'Arial' });
|
|
|
|
// 정의
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 0.95, w: 4.5, h: 1.0, rectRadius: 0.1, fill: { color: 'F3E5F5' }, line: { color: 'E1BEE7', width: 0.5 } });
|
|
slide5.addText('내부 복리후생 지원제도', { x: 0.7, y: 1.0, w: 3, h: 0.2, fontSize: 8, bold: true, color: '9C27B0', fontFace: 'Arial' });
|
|
slide5.addText('하위 파트너를 유치한 상위 파트너에게', { x: 0.7, y: 1.25, w: 4, h: 0.25, fontSize: 11, bold: true, color: '333333', fontFace: 'Arial' });
|
|
slide5.addText([
|
|
{ text: '매출의 3%', options: { fontSize: 14, bold: true, color: '9C27B0' } },
|
|
{ text: '를 지원하는 사내 제도', options: { fontSize: 11, bold: true, color: '333333' } }
|
|
], { x: 0.7, y: 1.5, w: 4, h: 0.3, fontFace: 'Arial' });
|
|
|
|
// 목적
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 2.1, w: 4.5, h: 0.9, rectRadius: 0.1, fill: { color: 'FFF3E0' }, line: { color: 'FFE0B2', width: 0.5 } });
|
|
slide5.addText('목적', { x: 0.7, y: 2.15, w: 1, h: 0.2, fontSize: 8, bold: true, color: 'E65100', fontFace: 'Arial' });
|
|
slide5.addText('파트너 간 협업을 장려하고', { x: 0.7, y: 2.4, w: 4, h: 0.2, fontSize: 10, color: '333333', fontFace: 'Arial' });
|
|
slide5.addText([
|
|
{ text: '안정적인 파트너십 유지', options: { fontSize: 10, bold: true, color: 'E65100' } },
|
|
{ text: '를 위한 내부 지원', options: { fontSize: 10, color: '333333' } }
|
|
], { x: 0.7, y: 2.6, w: 4, h: 0.25, fontFace: 'Arial' });
|
|
|
|
// 유의사항
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 3.15, w: 4.5, h: 1.0, rectRadius: 0.1, fill: { color: 'FFEBEE' }, line: { color: 'D32F2F', width: 0.8 } });
|
|
slide5.addText('유의사항 (필독)', { x: 0.7, y: 3.2, w: 3, h: 0.2, fontSize: 8, bold: true, color: 'D32F2F', fontFace: 'Arial' });
|
|
slide5.addText('본 제도는 사내 내부 운영 규정입니다.', { x: 0.7, y: 3.45, w: 4, h: 0.2, fontSize: 9, bold: true, color: 'D32F2F', fontFace: 'Arial' });
|
|
slide5.addText('외부에 구조나 내용을 공개, 공유,', { x: 0.7, y: 3.65, w: 4, h: 0.2, fontSize: 9, color: '333333', fontFace: 'Arial' });
|
|
slide5.addText('유출하는 것을 엄격히 금지합니다.', { x: 0.7, y: 3.82, w: 4, h: 0.2, fontSize: 9, bold: true, color: 'D32F2F', fontFace: 'Arial' });
|
|
|
|
// 핵심 규칙
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 5.3, y: 0.95, w: 4.2, h: 1.2, rectRadius: 0.1, fill: { color: 'FAFAFA' }, line: { color: 'E0E0E0', width: 0.5 } });
|
|
slide5.addText('핵심 규칙', { x: 5.5, y: 1.0, w: 2, h: 0.2, fontSize: 8, bold: true, color: '666666', fontFace: 'Arial' });
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 5.5, y: 1.3, w: 0.3, h: 0.3, rectRadius: 0.05, fill: { color: '9C27B0' } });
|
|
slide5.addText('1', { x: 5.5, y: 1.3, w: 0.3, h: 0.3, fontSize: 10, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide5.addText('1단계까지만 적용', { x: 5.9, y: 1.3, w: 3, h: 0.3, fontSize: 10, bold: true, color: '333333', fontFace: 'Arial', valign: 'middle' });
|
|
slide5.addText('유치자 → 하위 파트너까지만\n그 이상의 상위로는 올라가지 않음', { x: 5.9, y: 1.65, w: 3.3, h: 0.4, fontSize: 9, color: '666666', fontFace: 'Arial', lineSpacingMultiple: 1.3 });
|
|
|
|
// 구조도
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 5.3, y: 2.3, w: 4.2, h: 2.9, rectRadius: 0.1, fill: { color: 'F5F0FF' }, line: { color: 'E1BEE7', width: 0.5 } });
|
|
slide5.addText('구조 예시', { x: 5.5, y: 2.35, w: 2, h: 0.2, fontSize: 8, bold: true, color: '7B1FA2', fontFace: 'Arial' });
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 5.7, y: 2.65, w: 3.5, h: 0.5, rectRadius: 0.1, fill: { color: '9C27B0' } });
|
|
slide5.addText('파트너 A (유치자)', { x: 5.7, y: 2.65, w: 3.5, h: 0.3, fontSize: 10, bold: true, color: 'FFFFFF', align: 'center', fontFace: 'Arial' });
|
|
slide5.addText('협업지원금 3% 수령', { x: 5.7, y: 2.9, w: 3.5, h: 0.2, fontSize: 8, color: 'E1BEE7', align: 'center', fontFace: 'Arial' });
|
|
slide5.addText('↑ 3%', { x: 6.5, y: 3.2, w: 2, h: 0.25, fontSize: 12, color: '9C27B0', align: 'center', fontFace: 'Arial' });
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 5.7, y: 3.5, w: 3.5, h: 0.5, rectRadius: 0.1, fill: { color: '4CAF50' } });
|
|
slide5.addText('파트너 B (A가 유치)', { x: 5.7, y: 3.5, w: 3.5, h: 0.3, fontSize: 10, bold: true, color: 'FFFFFF', align: 'center', fontFace: 'Arial' });
|
|
slide5.addText('매출 발생 시 → A에게 3%', { x: 5.7, y: 3.75, w: 3.5, h: 0.2, fontSize: 8, color: 'C8E6C9', align: 'center', fontFace: 'Arial' });
|
|
slide5.addText('↑ X (적용 안 됨)', { x: 6.5, y: 4.05, w: 2, h: 0.25, fontSize: 10, color: 'CCCCCC', align: 'center', fontFace: 'Arial' });
|
|
slide5.addShape(pres.ShapeType.roundRect, { x: 5.7, y: 4.35, w: 3.5, h: 0.45, rectRadius: 0.1, fill: { color: 'E0E0E0' } });
|
|
slide5.addText('파트너 C (B가 유치)', { x: 5.7, y: 4.35, w: 3.5, h: 0.25, fontSize: 9, bold: true, color: '999999', align: 'center', fontFace: 'Arial' });
|
|
slide5.addText('C 매출 → A에게 지급 안 됨', { x: 5.7, y: 4.55, w: 3.5, h: 0.2, fontSize: 7, color: 'BBBBBB', align: 'center', fontFace: 'Arial' });
|
|
|
|
addConfidentialBadge(slide5);
|
|
slide5.addText('5 / 8', { x: 9, y: 5.3, w: 0.8, h: 0.2, fontSize: 7, color: 'BBBBBB', align: 'right', fontFace: 'Arial' });
|
|
|
|
// ===== SLIDE 6: 수당 계산 예시 =====
|
|
const slide6 = pres.addSlide();
|
|
slide6.background = { fill: 'FFFFFF' };
|
|
slide6.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.3, w: 0.06, h: 0.35, fill: { color: 'FF9800' } });
|
|
slide6.addText('수당 계산 예시', { x: 0.7, y: 0.25, w: 3.5, h: 0.45, fontSize: 18, bold: true, color: '1a1a2e', fontFace: 'Arial' });
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: 4.3, y: 0.3, w: 1.5, h: 0.3, rectRadius: 0.04, fill: { color: 'FFF3E0' } });
|
|
slide6.addText('기준금액 100만원', { x: 4.3, y: 0.3, w: 1.5, h: 0.3, fontSize: 8, bold: true, color: 'E65100', align: 'center', fontFace: 'Arial' });
|
|
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 0.8, w: 9, h: 0.35, rectRadius: 0.05, fill: { color: 'F8F9FA' } });
|
|
slide6.addText([
|
|
{ text: '계약 개발비 200만원 → 기준금액 (50%) = ', options: { fontSize: 9, color: '666666' } },
|
|
{ text: '1,000,000원', options: { fontSize: 10, bold: true, color: '1a1a2e' } }
|
|
], { x: 0.7, y: 0.8, w: 8.6, h: 0.35, fontFace: 'Arial' });
|
|
|
|
const exX1 = 0.5, exX2 = 5.15, exW = 4.35;
|
|
// 개인 카드
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX1, y: 1.35, w: exW, h: 3.5, rectRadius: 0.12, fill: { color: 'FFFFFF' }, line: { color: '4CAF50', width: 1.5 } });
|
|
slide6.addShape(pres.ShapeType.rect, { x: exX1, y: 1.35, w: exW, h: 0.5, fill: { color: '4CAF50' } });
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX1, y: 1.35, w: exW, h: 0.5, rectRadius: 0.12, fill: { color: '4CAF50' } });
|
|
slide6.addText('개인 파트너 (유치자 있음)', { x: exX1 + 0.2, y: 1.38, w: exW - 0.4, h: 0.45, fontSize: 12, bold: true, color: 'FFFFFF', fontFace: 'Arial' });
|
|
|
|
const items6a = [
|
|
{ label: '판매자 수당 (20%)', amount: '200,000원', dotColor: '4CAF50', amtColor: '2E7D32', bgColor: 'F0FAF0' },
|
|
{ label: '관리자 수당 (5%)', amount: '50,000원', dotColor: '2196F3', amtColor: '1565C0', bgColor: 'E3F2FD' },
|
|
{ label: '협업지원금 (3%)', amount: '30,000원', dotColor: '9C27B0', amtColor: '7B1FA2', bgColor: 'F3E5F5' },
|
|
];
|
|
items6a.forEach((item, i) => {
|
|
const iy = 2.0 + i * 0.55;
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX1 + 0.15, y: iy, w: exW - 0.3, h: 0.45, rectRadius: 0.06, fill: { color: item.bgColor } });
|
|
slide6.addShape(pres.ShapeType.ellipse, { x: exX1 + 0.3, y: iy + 0.15, w: 0.1, h: 0.1, fill: { color: item.dotColor } });
|
|
slide6.addText(item.label, { x: exX1 + 0.5, y: iy, w: 2, h: 0.45, fontSize: 10, color: '333333', valign: 'middle', fontFace: 'Arial' });
|
|
slide6.addText(item.amount, { x: exX1 + 2.3, y: iy, w: 1.8, h: 0.45, fontSize: 12, bold: true, color: item.amtColor, align: 'right', valign: 'middle', fontFace: 'Arial' });
|
|
});
|
|
|
|
slide6.addShape(pres.ShapeType.rect, { x: exX1, y: 3.55, w: exW, h: 0.5, fill: { color: '2E7D32' } });
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX1, y: 3.55, w: exW, h: 0.5, rectRadius: 0.12, fill: { color: '2E7D32' } });
|
|
slide6.addText('본사 총 지급액', { x: exX1 + 0.2, y: 3.55, w: 2, h: 0.5, fontSize: 10, color: 'CCCCCC', valign: 'middle', fontFace: 'Arial' });
|
|
slide6.addText('280,000원 (28%)', { x: exX1 + 1.8, y: 3.55, w: 2.3, h: 0.5, fontSize: 14, bold: true, color: 'FFFFFF', align: 'right', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
// 단체 카드
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX2, y: 1.35, w: exW, h: 3.5, rectRadius: 0.12, fill: { color: 'FFFFFF' }, line: { color: '2196F3', width: 1.5 } });
|
|
slide6.addShape(pres.ShapeType.rect, { x: exX2, y: 1.35, w: exW, h: 0.5, fill: { color: '2196F3' } });
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX2, y: 1.35, w: exW, h: 0.5, rectRadius: 0.12, fill: { color: '2196F3' } });
|
|
slide6.addText('단체 파트너', { x: exX2 + 0.2, y: 1.38, w: exW - 0.4, h: 0.45, fontSize: 12, bold: true, color: 'FFFFFF', fontFace: 'Arial' });
|
|
|
|
const items6b = [
|
|
{ label: '단체 수당 (30%)', amount: '300,000원', dotColor: '4CAF50', amtColor: '2E7D32', bgColor: 'F0FAF0' },
|
|
{ label: '관리자 수당 (0%)', amount: '0원', dotColor: 'E0E0E0', amtColor: '999999', bgColor: 'FAFAFA' },
|
|
{ label: '협업지원금 (3%)', amount: '30,000원', dotColor: '9C27B0', amtColor: '7B1FA2', bgColor: 'F3E5F5' },
|
|
];
|
|
items6b.forEach((item, i) => {
|
|
const iy = 2.0 + i * 0.55;
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX2 + 0.15, y: iy, w: exW - 0.3, h: 0.45, rectRadius: 0.06, fill: { color: item.bgColor } });
|
|
slide6.addShape(pres.ShapeType.ellipse, { x: exX2 + 0.3, y: iy + 0.15, w: 0.1, h: 0.1, fill: { color: item.dotColor } });
|
|
slide6.addText(item.label, { x: exX2 + 0.5, y: iy, w: 2, h: 0.45, fontSize: 10, color: '333333', valign: 'middle', fontFace: 'Arial' });
|
|
slide6.addText(item.amount, { x: exX2 + 2.3, y: iy, w: 1.8, h: 0.45, fontSize: 12, bold: true, color: item.amtColor, align: 'right', valign: 'middle', fontFace: 'Arial' });
|
|
});
|
|
|
|
slide6.addShape(pres.ShapeType.rect, { x: exX2, y: 3.55, w: exW, h: 0.5, fill: { color: '1565C0' } });
|
|
slide6.addShape(pres.ShapeType.roundRect, { x: exX2, y: 3.55, w: exW, h: 0.5, rectRadius: 0.12, fill: { color: '1565C0' } });
|
|
slide6.addText('본사 총 지급액', { x: exX2 + 0.2, y: 3.55, w: 2, h: 0.5, fontSize: 10, color: 'CCCCCC', valign: 'middle', fontFace: 'Arial' });
|
|
slide6.addText('330,000원 (33%)', { x: exX2 + 1.8, y: 3.55, w: 2.3, h: 0.5, fontSize: 14, bold: true, color: 'FFFFFF', align: 'right', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
addConfidentialBadge(slide6);
|
|
slide6.addText('6 / 8', { x: 9, y: 5.3, w: 0.8, h: 0.2, fontSize: 7, color: 'BBBBBB', align: 'right', fontFace: 'Arial' });
|
|
|
|
// ===== SLIDE 7: 지급 절차 요약 =====
|
|
const slide7 = pres.addSlide();
|
|
slide7.background = { fill: 'FFFFFF' };
|
|
slide7.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.35, w: 0.06, h: 0.35, fill: { color: '1a1a2e' } });
|
|
slide7.addText('지급 절차 요약', { x: 0.7, y: 0.3, w: 5, h: 0.45, fontSize: 18, bold: true, color: '1a1a2e', fontFace: 'Arial' });
|
|
|
|
const steps = [
|
|
{ num: '1', title: '계약 체결', desc1: '고객과 계약 완료', desc2: '개발비 확정', color: '2196F3', bg: 'E3F2FD' },
|
|
{ num: '2', title: '입금 확인', desc1: '고객 입금 확인', desc2: '기준금액 산정', color: 'FF9800', bg: 'FFF3E0' },
|
|
{ num: '3', title: '1차 지급', desc1: '수당 50% 지급', desc2: '(입금 확인 후)', color: '4CAF50', bg: 'E8F5E9' },
|
|
{ num: '4', title: '2차 지급', desc1: '나머지 50% 지급', desc2: '(완료 후)', color: '9C27B0', bg: 'F3E5F5' },
|
|
];
|
|
const stepW = 2.0;
|
|
steps.forEach((step, i) => {
|
|
const sx = 0.5 + i * (stepW + 0.35);
|
|
slide7.addShape(pres.ShapeType.roundRect, { x: sx, y: 0.95, w: stepW, h: 1.4, rectRadius: 0.12, fill: { color: step.bg } });
|
|
slide7.addShape(pres.ShapeType.ellipse, { x: sx + 0.75, y: 1.05, w: 0.45, h: 0.45, fill: { color: step.color } });
|
|
slide7.addText(step.num, { x: sx + 0.75, y: 1.05, w: 0.45, h: 0.45, fontSize: 12, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide7.addText(step.title, { x: sx, y: 1.55, w: stepW, h: 0.3, fontSize: 10, bold: true, color: step.color, align: 'center', fontFace: 'Arial' });
|
|
slide7.addText(step.desc1, { x: sx, y: 1.85, w: stepW, h: 0.2, fontSize: 8, color: '666666', align: 'center', fontFace: 'Arial' });
|
|
slide7.addText(step.desc2, { x: sx, y: 2.0, w: stepW, h: 0.2, fontSize: 8, color: '666666', align: 'center', fontFace: 'Arial' });
|
|
if (i < 3) {
|
|
slide7.addText('→', { x: sx + stepW + 0.05, y: 1.4, w: 0.25, h: 0.4, fontSize: 14, color: 'CCCCCC', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
}
|
|
});
|
|
|
|
// 핵심 정리
|
|
slide7.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 2.7, w: 4.3, h: 2.5, rectRadius: 0.1, fill: { color: 'FAFAFA' }, line: { color: 'E0E0E0', width: 0.5 } });
|
|
slide7.addText('핵심 정리', { x: 0.7, y: 2.8, w: 2, h: 0.3, fontSize: 10, bold: true, color: '1a1a2e', fontFace: 'Arial' });
|
|
|
|
const keyPoints = [
|
|
{ num: '1', text: '기준금액 = 개발비의 50%', color: '4CAF50' },
|
|
{ num: '2', text: '모든 수당은 2단계 분할 지급', color: '2196F3' },
|
|
{ num: '3', text: '협업지원금은 유치자에게 자동 지급', color: '9C27B0' },
|
|
{ num: '4', text: 'SAM 대시보드에서 실시간 확인', color: 'FF9800' },
|
|
];
|
|
keyPoints.forEach((kp, i) => {
|
|
const ky = 3.2 + i * 0.45;
|
|
slide7.addShape(pres.ShapeType.roundRect, { x: 0.7, y: ky, w: 0.25, h: 0.25, rectRadius: 0.04, fill: { color: kp.color } });
|
|
slide7.addText(kp.num, { x: 0.7, y: ky, w: 0.25, h: 0.25, fontSize: 8, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide7.addText(kp.text, { x: 1.05, y: ky, w: 3.5, h: 0.25, fontSize: 9, color: '333333', valign: 'middle', fontFace: 'Arial' });
|
|
});
|
|
|
|
// 비교 요약표
|
|
slide7.addShape(pres.ShapeType.roundRect, { x: 5.1, y: 2.7, w: 4.4, h: 2.5, rectRadius: 0.1, fill: { color: '1a1a2e' } });
|
|
slide7.addText('수당 비교 요약', { x: 5.3, y: 2.8, w: 3, h: 0.3, fontSize: 10, bold: true, color: 'FFFFFF', fontFace: 'Arial' });
|
|
|
|
slide7.addText('구분', { x: 5.3, y: 3.2, w: 1.5, h: 0.25, fontSize: 8, color: '888888', fontFace: 'Arial' });
|
|
slide7.addText('개인', { x: 6.8, y: 3.2, w: 1.2, h: 0.25, fontSize: 8, bold: true, color: '4CAF50', align: 'center', fontFace: 'Arial' });
|
|
slide7.addText('단체', { x: 8.0, y: 3.2, w: 1.2, h: 0.25, fontSize: 8, bold: true, color: '42A5F5', align: 'center', fontFace: 'Arial' });
|
|
slide7.addShape(pres.ShapeType.rect, { x: 5.3, y: 3.45, w: 3.9, h: 0.01, fill: { color: '333344' } });
|
|
|
|
const rows = [
|
|
{ label: '파트너/단체', v1: '20%', v2: '30%', c1: '4CAF50', c2: '4CAF50' },
|
|
{ label: '관리자', v1: '5%', v2: '0%', c1: '42A5F5', c2: '555555' },
|
|
{ label: '협업지원금', v1: '3%', v2: '3%', c1: 'CE93D8', c2: 'CE93D8' },
|
|
];
|
|
rows.forEach((row, i) => {
|
|
const ry = 3.55 + i * 0.35;
|
|
slide7.addText(row.label, { x: 5.3, y: ry, w: 1.5, h: 0.3, fontSize: 9, color: 'CCCCCC', fontFace: 'Arial' });
|
|
slide7.addText(row.v1, { x: 6.8, y: ry, w: 1.2, h: 0.3, fontSize: 10, bold: true, color: row.c1, align: 'center', fontFace: 'Arial' });
|
|
slide7.addText(row.v2, { x: 8.0, y: ry, w: 1.2, h: 0.3, fontSize: 10, bold: true, color: row.c2, align: 'center', fontFace: 'Arial' });
|
|
if (i < 2) {
|
|
slide7.addShape(pres.ShapeType.rect, { x: 5.3, y: ry + 0.3, w: 3.9, h: 0.01, fill: { color: '222233' } });
|
|
}
|
|
});
|
|
slide7.addShape(pres.ShapeType.rect, { x: 5.3, y: 4.55, w: 3.9, h: 0.01, fill: { color: '333344' } });
|
|
slide7.addText('합계', { x: 5.3, y: 4.6, w: 1.5, h: 0.35, fontSize: 10, bold: true, color: 'FFFFFF', fontFace: 'Arial' });
|
|
slide7.addText('28%', { x: 6.8, y: 4.6, w: 1.2, h: 0.35, fontSize: 12, bold: true, color: '4CAF50', align: 'center', fontFace: 'Arial' });
|
|
slide7.addText('33%', { x: 8.0, y: 4.6, w: 1.2, h: 0.35, fontSize: 12, bold: true, color: '42A5F5', align: 'center', fontFace: 'Arial' });
|
|
|
|
addConfidentialBadge(slide7);
|
|
slide7.addText('SAM | 2026년 2월', { x: 0.5, y: 5.3, w: 3, h: 0.2, fontSize: 7, color: 'BBBBBB', fontFace: 'Arial' });
|
|
slide7.addText('7 / 8', { x: 9, y: 5.3, w: 0.8, h: 0.2, fontSize: 7, color: 'BBBBBB', align: 'right', fontFace: 'Arial' });
|
|
|
|
// ===== SLIDE 8: 보안 유의사항 =====
|
|
const slide8 = pres.addSlide();
|
|
slide8.background = { fill: '1a1a2e' };
|
|
// 상단 빨간 라인
|
|
slide8.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: 'D32F2F' } });
|
|
addConfidentialBadge(slide8, true);
|
|
|
|
// 경고 아이콘 영역
|
|
slide8.addShape(pres.ShapeType.ellipse, { x: 4.25, y: 0.6, w: 1.5, h: 1.5, fill: { color: 'D32F2F' } });
|
|
slide8.addText('!', { x: 4.25, y: 0.6, w: 1.5, h: 1.5, fontSize: 48, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
// 타이틀
|
|
slide8.addText('보안 유의사항', { x: 1, y: 2.3, w: 8, h: 0.5, fontSize: 24, bold: true, color: 'FFFFFF', align: 'center', fontFace: 'Arial' });
|
|
|
|
// 경고문 박스
|
|
slide8.addShape(pres.ShapeType.roundRect, { x: 1.5, y: 3.0, w: 7, h: 1.8, rectRadius: 0.1, fill: { color: '2a2a3e' }, line: { color: 'D32F2F', width: 1 } });
|
|
|
|
// 경고 항목들
|
|
slide8.addShape(pres.ShapeType.roundRect, { x: 1.8, y: 3.15, w: 0.25, h: 0.25, rectRadius: 0.04, fill: { color: 'D32F2F' } });
|
|
slide8.addText('1', { x: 1.8, y: 3.15, w: 0.25, h: 0.25, fontSize: 8, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide8.addText('본 자료는 사내 대외비 문서입니다.', { x: 2.15, y: 3.15, w: 6, h: 0.25, fontSize: 11, bold: true, color: 'FF5252', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
slide8.addShape(pres.ShapeType.roundRect, { x: 1.8, y: 3.55, w: 0.25, h: 0.25, rectRadius: 0.04, fill: { color: 'D32F2F' } });
|
|
slide8.addText('2', { x: 1.8, y: 3.55, w: 0.25, h: 0.25, fontSize: 8, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide8.addText('수당 구조 및 비율을 외부에 공개하지 마십시오.', { x: 2.15, y: 3.55, w: 6, h: 0.25, fontSize: 11, bold: true, color: 'FFFFFF', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
slide8.addShape(pres.ShapeType.roundRect, { x: 1.8, y: 3.95, w: 0.25, h: 0.25, rectRadius: 0.04, fill: { color: 'D32F2F' } });
|
|
slide8.addText('3', { x: 1.8, y: 3.95, w: 0.25, h: 0.25, fontSize: 8, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide8.addText('협업지원금은 내부 운영 규정이며, 외부 노출 시 제도가 폐지될 수 있습니다.', { x: 2.15, y: 3.95, w: 6, h: 0.25, fontSize: 10, bold: true, color: 'FFFFFF', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
slide8.addShape(pres.ShapeType.roundRect, { x: 1.8, y: 4.35, w: 0.25, h: 0.25, rectRadius: 0.04, fill: { color: 'D32F2F' } });
|
|
slide8.addText('4', { x: 1.8, y: 4.35, w: 0.25, h: 0.25, fontSize: 8, bold: true, color: 'FFFFFF', align: 'center', valign: 'middle', fontFace: 'Arial' });
|
|
slide8.addText('본 자료의 복사, 촬영, 전달, SNS 공유를 엄격히 금합니다.', { x: 2.15, y: 4.35, w: 6, h: 0.25, fontSize: 10, bold: true, color: 'FFCDD2', valign: 'middle', fontFace: 'Arial' });
|
|
|
|
// 하단
|
|
slide8.addText('SAM | 2026년 2월 | 대외비', { x: 0, y: 5.2, w: 10, h: 0.3, fontSize: 7, color: '666666', align: 'center', fontFace: 'Arial' });
|
|
slide8.addText('8 / 8', { x: 9, y: 5.3, w: 0.8, h: 0.2, fontSize: 7, color: '666666', align: 'right', fontFace: 'Arial' });
|
|
|
|
// 저장
|
|
const outputPath = path.join(__dirname, 'sales-partner-commission-guide.pptx');
|
|
await pres.writeFile({ fileName: outputPath });
|
|
console.log(`PPTX created: ${outputPath}`);
|
|
}
|
|
|
|
main().catch(err => {
|
|
console.error('Error:', err);
|
|
process.exit(1);
|
|
});
|