diff --git a/resources/views/esign/create.blade.php b/resources/views/esign/create.blade.php index 17c31586..de0a5858 100644 --- a/resources/views/esign/create.blade.php +++ b/resources/views/esign/create.blade.php @@ -632,6 +632,9 @@ className={`w-full text-left px-3 py-2.5 rounded-lg mb-1 transition-colors ${i = // 개발용: 주소/사업자등록번호/상호 랜덤 입력 const fillRandomVariables = () => { + const pick = arr => arr[Math.floor(Math.random() * arr.length)]; + const randInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; + const addresses = [ '서울특별시 강남구 테헤란로 123, 4층', '서울특별시 서초구 서초대로 456, 7층', @@ -647,17 +650,65 @@ className={`w-full text-left px-3 py-2.5 rounded-lg mb-1 transition-colors ${i = '(주)테스트컴퍼니', '(주)블루오션', '(주)스마트솔루션', '(주)넥스트웨이브', '(주)그린테크', ]; - const pick = arr => arr[Math.floor(Math.random() * arr.length)]; - const labelMap = { + const names = ['김민수', '이서연', '박지훈', '최예린', '정우성', '한소희', '강동원', '윤세아']; + const jobTypes = ['생산직', '사무직', '영업직', '기술직', '관리직', '연구직']; + const jobContents = [ + '블라인드 제조 및 품질관리', '영업 관리 및 고객 응대', + '생산라인 운영 및 관리', '소프트웨어 개발 및 유지보수', + '경영지원 및 총무업무', '물류 관리 및 배송 업무', + ]; + const depts = ['생산부', '영업부', '관리부', '개발부', '총무부', '물류부']; + const positions = ['사원', '주임', '대리', '과장', '차장', '부장']; + + // 근로계약서용 label 매핑 (부분 매칭) + const laborMap = { + '직원.*주소': pick(addresses), + '직종.*구분': pick(jobTypes), + '업무.*내용': pick(jobContents), + '업무.*기간': `2026.03.11 ~ 2027.03.10`, + '출생.*년도': `${randInt(1970, 2000)}`, + '근무.*시간': `09:00 ~ 18:00`, + '휴게.*시간': `12:00 ~ 13:00`, + '급여': `${pick(['2,200,000', '2,500,000', '2,800,000', '3,000,000', '3,500,000'])}원`, + '급여.*지급일': `매월 ${pick(['10', '15', '25'])}일`, + '부서': pick(depts), + '직책': pick(positions), + '직위': pick(positions), + '계약자.*이름': pick(names), + '연락처': `010-${randInt(1000,9999)}-${randInt(1000,9999)}`, + '전화.*번호': `010-${randInt(1000,9999)}-${randInt(1000,9999)}`, + }; + + // 기본 label 매핑 (기존 — 정확 매칭) + const baseMap = { '주소': pick(addresses), '사업자등록번호': pick(bizNos), '상호': pick(companies), + '파트너명': pick(names), }; + + const isLabor = form.title === '근로계약서'; + setMetadata(prev => { const updated = { ...prev }; templateVars.forEach(v => { - if (labelMap[v.label] !== undefined) { - updated[v.key] = labelMap[v.label]; + // 1. 정확 매칭 + if (baseMap[v.label] !== undefined) { + updated[v.key] = baseMap[v.label]; + return; + } + // 2. 근로계약서: 부분 매칭 (정규식) + if (isLabor) { + for (const [pattern, value] of Object.entries(laborMap)) { + if (new RegExp(pattern, 'i').test(v.label)) { + updated[v.key] = value; + return; + } + } + // 3. 매칭 안 되면 라벨 기반 기본값 + if (!updated[v.key]) { + updated[v.key] = `테스트_${v.label}`; + } } }); return updated;