- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
190 lines
7.0 KiB
PHP
190 lines
7.0 KiB
PHP
<script>
|
|
|
|
var ajaxRequest = null;
|
|
|
|
$(document).ready(function(){
|
|
var loader = document.getElementById('loadingOverlay');
|
|
if(loader)
|
|
loader.style.display = 'none';
|
|
|
|
});
|
|
|
|
// 부트스트랩 툴팁
|
|
$(document).ready(function() {
|
|
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
|
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
return new bootstrap.Tooltip(tooltipTriggerEl);
|
|
});
|
|
});
|
|
|
|
function captureReturnKey(e) {
|
|
if(e.keyCode==13 && e.srcElement.type != 'textarea')
|
|
return false;
|
|
}
|
|
|
|
function recaptureReturnKey(e) {
|
|
if(e.keyCode==13 && e.srcElement.type != 'textarea')
|
|
return false;
|
|
}
|
|
|
|
function generatePDF() {
|
|
var workplace = '<?php echo $title_message; ?>';
|
|
var today = new Date();
|
|
var formattedDate = "(" + String(today.getFullYear()).slice(-2) + "." + ("0" + (today.getMonth() + 1)).slice(-2) + "." + ("0" + today.getDate()).slice(-2) + ")";
|
|
var result = 'KD(' + workplace +')' + formattedDate + '.pdf';
|
|
|
|
var element = document.getElementById('content-to-print');
|
|
var opt = {
|
|
margin: [10, 3, 12, 3], // Top, right, bottom, left margins
|
|
filename: result,
|
|
image: { type: 'jpeg', quality: 1 },
|
|
html2canvas: {
|
|
scale: 3, // ★★★ 해상도(기본은 1) → 2~4 정도로 높이면 선명해짐 4는 용량이 매우 큽니다. 보통 3M 이상
|
|
useCORS: true,
|
|
scrollY: 0,
|
|
scrollX: 0,
|
|
windowWidth: document.body.scrollWidth,
|
|
windowHeight: document.body.scrollHeight
|
|
},
|
|
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' },
|
|
pagebreak: {
|
|
mode: ['css', 'legacy'],
|
|
avoid: ['tr', '.avoid-break'] // 핵심
|
|
}
|
|
};
|
|
html2pdf().from(element).set(opt).save();
|
|
}
|
|
|
|
|
|
|
|
function generatePDF_server(callback) {
|
|
var workplace = '<?php echo $title_message; ?>';
|
|
var item = '<?php echo $emailTitle; ?>';
|
|
var today = new Date();
|
|
var formattedDate = "(" + String(today.getFullYear()).slice(-2) + "." + ("0" + (today.getMonth() + 1)).slice(-2) + "." + ("0" + today.getDate()).slice(-2) + ")";
|
|
var result = 'KD' + item +'(' + workplace + ')' + formattedDate + '.pdf';
|
|
|
|
var element = document.getElementById('content-to-print');
|
|
var opt = {
|
|
margin: [10, 3, 12, 3], // Top, right, bottom, left margins
|
|
filename: result,
|
|
image: { type: 'jpeg', quality: 1 },
|
|
html2canvas: { scale: 3 },
|
|
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' },
|
|
pagebreak: { mode: [''] }
|
|
};
|
|
|
|
html2pdf().from(element).set(opt).output('datauristring').then(function (pdfDataUri) {
|
|
var pdfBase64 = pdfDataUri.split(',')[1]; // Base64 인코딩된 PDF 데이터 추출
|
|
var formData = new FormData();
|
|
formData.append('pdf', pdfBase64);
|
|
formData.append('filename', result);
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: '/email/save_pdf.php', // PDF 파일을 저장하는 PHP 파일
|
|
data: formData,
|
|
processData: false,
|
|
contentType: false,
|
|
success: function (response) {
|
|
var res = JSON.parse(response);
|
|
if (callback) {
|
|
callback(res.filename); // 서버에 저장된 파일 경로를 콜백으로 전달
|
|
}
|
|
},
|
|
error: function (xhr, status, error) {
|
|
Swal.fire('Error', 'PDF 저장에 실패했습니다.', 'error');
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function sendmail() {
|
|
var secondordnum = '<?php echo $secondordnum; ?>'; // 서버에서 가져온 값
|
|
var item = '<?php echo $emailTitle; ?>';
|
|
|
|
if (!secondordnum) {
|
|
Swal.fire({
|
|
icon: 'warning',
|
|
title: '오류 알림',
|
|
text: '발주처 코드가 없습니다.'
|
|
});
|
|
return; // 함수 종료
|
|
}
|
|
|
|
if (typeof ajaxRequest !== 'undefined' && ajaxRequest !== null) {
|
|
ajaxRequest.abort();
|
|
}
|
|
|
|
ajaxRequest = $.ajax({
|
|
type: 'POST',
|
|
url: '/email/get_companyCode.php',
|
|
data: { secondordnum: secondordnum },
|
|
dataType: 'json',
|
|
success: function(response) {
|
|
console.log('response : ', response);
|
|
if (response.error) {
|
|
Swal.fire('Error', response.error, 'error');
|
|
} else {
|
|
var email = response.email;
|
|
var vendorName = response.vendor_name;
|
|
|
|
Swal.fire({
|
|
title: 'E메일 보내기',
|
|
text: vendorName + ' Email 주소확인',
|
|
icon: 'warning',
|
|
input: 'text', // input 창을 텍스트 필드로 설정
|
|
inputLabel: 'Email 주소 수정 가능',
|
|
inputValue: email, // 기존 이메일 주소를 기본값으로 설정
|
|
showCancelButton: true,
|
|
confirmButtonText: '보내기',
|
|
cancelButtonText: '취소',
|
|
reverseButtons: true,
|
|
inputValidator: (value) => {
|
|
if (!value) {
|
|
return '이메일 주소를 입력해주세요!';
|
|
}
|
|
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
if (!emailPattern.test(value)) {
|
|
return '올바른 이메일 형식을 입력해주세요!';
|
|
}
|
|
}
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
const updatedEmail = result.value; // 입력된 이메일 주소 가져오기
|
|
generatePDF_server(function(filename) {
|
|
sendEmail(updatedEmail, vendorName, item, filename);
|
|
});
|
|
}
|
|
});
|
|
|
|
}
|
|
},
|
|
error: function(xhr, status, error) {
|
|
Swal.fire('Error', '전송중 오류가 발생했습니다.', 'error');
|
|
}
|
|
});
|
|
}
|
|
|
|
function sendEmail(recipientEmail, vendorName, item, filename) {
|
|
if (typeof ajaxRequest !== 'undefined' && ajaxRequest !== null) {
|
|
ajaxRequest.abort();
|
|
}
|
|
var today = new Date();
|
|
var formattedDate = "(" + String(today.getFullYear()).slice(-2) + "." + ("0" + (today.getMonth() + 1)).slice(-2) + "." + ("0" + today.getDate()).slice(-2) + ")";
|
|
|
|
ajaxRequest = $.ajax({
|
|
type: 'POST',
|
|
url: '/email/send_email.php', // 이메일 전송을 처리하는 PHP 파일
|
|
data: { email: recipientEmail, vendorName: vendorName, filename: filename, item: item, formattedDate: formattedDate },
|
|
success: function(response) {
|
|
console.log(response);
|
|
Swal.fire('Success', '정상적으로 전송되었습니다.', 'success');
|
|
},
|
|
error: function(xhr, status, error) {
|
|
Swal.fire('Error', '전송에 실패했습니다. 확인바랍니다.', 'error');
|
|
}
|
|
});
|
|
}
|
|
|
|
</script> |