- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
1088 lines
37 KiB
PHP
1088 lines
37 KiB
PHP
<!-- 페이지로딩 -->
|
|
<script>
|
|
var ajaxRequest_write = null;
|
|
var ajaxRequest = null;
|
|
var ajaxRequest5 = null;
|
|
var ajaxRequest6 = null;
|
|
var ajaxRequest7 = null;
|
|
var isDisplaying = false;
|
|
|
|
$(document).ready(function(){
|
|
var loader = document.getElementById('loadingOverlay');
|
|
if(loader)
|
|
loader.style.display = 'none';
|
|
});
|
|
|
|
function generatePDF() {
|
|
var workplace = '<?php echo $title_message; ?>';
|
|
var deadline = '<?php echo $today; ?>';
|
|
var deadlineDate = new Date(deadline);
|
|
var formattedDate = "(" + String(deadlineDate.getFullYear()).slice(-2) + "." + ("0" + (deadlineDate.getMonth() + 1)).slice(-2) + "." + ("0" + deadlineDate.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: 0.98 },
|
|
html2canvas: { scale: 1 },
|
|
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' },
|
|
pagebreak: { mode: [''] }
|
|
};
|
|
html2pdf().from(element).set(opt).save();
|
|
}
|
|
|
|
// 모달을 호출할 때 tr 요소를 저장하는 변수
|
|
var selectedRow;
|
|
|
|
// 결재 정보 업데이트 함수
|
|
function updateApprovalData(userName, date) {
|
|
// 저장 로직을 위해 결재 정보 업데이트
|
|
let approvalData = {
|
|
writer: {
|
|
name: $('#writer').text().trim(),
|
|
date: '<?=$todayStr?>'
|
|
},
|
|
approver: {
|
|
name: userName,
|
|
date: date
|
|
}
|
|
};
|
|
|
|
// 저장할 JSON 데이터 업데이트
|
|
let formData = JSON.parse($('#iList').val() || '[]');
|
|
const approvalIndex = formData.findIndex(item => item.approval);
|
|
|
|
if (approvalIndex !== -1) {
|
|
formData[approvalIndex].approval = approvalData;
|
|
} else {
|
|
formData.push({ approval: approvalData });
|
|
}
|
|
|
|
// JSON 문자열로 다시 저장
|
|
$('#iList').val(JSON.stringify(formData));
|
|
}
|
|
|
|
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 formatDateToFull(dateStr) {
|
|
if (!dateStr) return ''; // 빈 값 처리
|
|
|
|
// 입력 형식이 'yy/mm/dd'라고 가정
|
|
const [yy, mm, dd] = dateStr.split('/');
|
|
|
|
// 두 자리 연도를 네 자리 연도로 변환
|
|
const fullYear = `20${yy}`;
|
|
|
|
// 결과를 'yyyy.mm.dd' 형식으로 반환
|
|
return `${fullYear}.${mm.padStart(2, '0')}.${dd.padStart(2, '0')}`;
|
|
}
|
|
|
|
// 초기 정보 로딩
|
|
$(document).ready(function () {
|
|
const currentPage = parseInt($('#page').val()); // 현재 페이지, 숫자형
|
|
|
|
if (iListData) {
|
|
// 1. 공통 데이터 로드 (approval)
|
|
const approval = iListData.approval || { writer: {}, approver: {} };
|
|
|
|
// 공통 데이터 출력
|
|
$('#writer').text(approval.writer?.name || '');
|
|
$('#writerDate').text(approval.writer?.date || '');
|
|
$('#approval').text(approval.approver?.name || '');
|
|
$('#approvalDate').text(approval.approver?.date || '');
|
|
$('#userNameInput').val(approval.writer?.name || '');
|
|
const formattedDate = formatDateToFull(approval.writer?.date || '');
|
|
$('#inspectionDate').val(formattedDate);
|
|
|
|
// 2. 현재 페이지 데이터 확인
|
|
const pageData = iListData.pages && iListData.pages[currentPage - 1]
|
|
? iListData.pages[currentPage - 1]
|
|
: null;
|
|
|
|
if (pageData) {
|
|
const inputItems = pageData.inputItems || {};
|
|
|
|
// 입력 항목 로드
|
|
for (const [name, value] of Object.entries(inputItems)) {
|
|
$(`.inputItem[name="${name}"]`).val(value || '');
|
|
}
|
|
|
|
if ($('#userNameInput').val() !== '') {
|
|
$('#inspectionDivBtn').hide(); // 검사자가 있으면 숨기기
|
|
}
|
|
|
|
// 체크박스 데이터 로드
|
|
const checkboxData = pageData.checkboxData || [];
|
|
$('#mainTable tbody tr').each(function (index) {
|
|
const rowData = checkboxData[index];
|
|
if (rowData) {
|
|
$(this).find('.check-G').each(function (goodIndex) {
|
|
$(this).prop('checked', rowData.G[goodIndex] || false);
|
|
});
|
|
$(this).find('.check-B').each(function (badIndex) {
|
|
$(this).prop('checked', rowData.B[badIndex] || false);
|
|
});
|
|
$(this).find('.J').text(rowData.J || '');
|
|
} else {
|
|
$(this).find('.check-G').prop('checked', false);
|
|
$(this).find('.check-B').prop('checked', false);
|
|
$(this).find('.J').text('');
|
|
}
|
|
});
|
|
} else {
|
|
console.warn('해당 페이지 데이터가 없습니다. 초기화 중입니다.');
|
|
$('.inputItem').val('');
|
|
$('#mainTable tbody tr').each(function () {
|
|
$(this).find('.check-G').prop('checked', false);
|
|
$(this).find('.check-B').prop('checked', false);
|
|
$(this).find('.J').text('');
|
|
});
|
|
}
|
|
}
|
|
|
|
console.clear();
|
|
console.log('초기로드 데이터 상태:', iListData);
|
|
});
|
|
|
|
$(document).ready(function () {
|
|
|
|
|
|
$(document).on('click', '.saveData', function() {
|
|
saveData();
|
|
});
|
|
|
|
|
|
$(document).on('click', '.approvalBtn', function () {
|
|
const userName = '<?=$user_name?>';
|
|
const todayStr = '<?=$todayStr?>';
|
|
|
|
$('#approval').text(userName);
|
|
$('#approvalDate').html(todayStr + ' <i class="bi bi-x-circle remove-approval" style="cursor: pointer;"></i>');
|
|
|
|
// 저장 로직
|
|
// updateApprovalData(userName, todayStr);
|
|
saveData();
|
|
});
|
|
|
|
|
|
$(document).on('click', '.remove-approval', function () {
|
|
$('#approval').text('');
|
|
$('#approvalDate').text('');
|
|
|
|
// JSON 데이터에서 승인자 정보 제거
|
|
let formData = JSON.parse($('#iList').val() || '[]');
|
|
const approvalIndex = formData.findIndex(item => item.approval);
|
|
if (approvalIndex !== -1) {
|
|
formData[approvalIndex].approval.approver.name = '';
|
|
formData[approvalIndex].approval.approver.date = '';
|
|
}
|
|
$('#iList').val(JSON.stringify(formData));
|
|
|
|
Toastify({
|
|
text: "승인 정보가 삭제되었습니다.",
|
|
duration: 2000,
|
|
close: true,
|
|
gravity: "top",
|
|
position: "center",
|
|
style: { background: "linear-gradient(to right, #ff5f6d, #ffc371)" }
|
|
}).showToast();
|
|
|
|
saveData();
|
|
});
|
|
|
|
});
|
|
|
|
|
|
function saveData() {
|
|
const page = $('#page').val(); // 현재 페이지 값 가져오기
|
|
const maxPage = parseInt($('#lotVolumn').val(), 10); // 최대 페이지 값 가져오기
|
|
|
|
showMsgModal();
|
|
|
|
// iListData 초기화 및 pages 배열 추가 (수정)
|
|
if (!iListData || typeof iListData !== 'object') {
|
|
console.warn('iListData가 유효하지 않습니다. 초기화합니다.');
|
|
iListData = {
|
|
approval: {},
|
|
pages: [] // pages 배열 초기화
|
|
};
|
|
}
|
|
|
|
// pages 배열이 없으면 생성 (수정)
|
|
if (!iListData.pages) {
|
|
iListData.pages = [];
|
|
}
|
|
|
|
// 페이지 데이터 초기화 (수정)
|
|
for (let i = 1; i <= maxPage; i++) {
|
|
if (!iListData.pages[i - 1]) {
|
|
console.log(`페이지 ${i}가 존재하지 않습니다. 초기화합니다.`);
|
|
iListData.pages[i - 1] = { // pages 배열은 0부터 시작
|
|
page: i.toString(),
|
|
inputItems: {},
|
|
checkboxData: []
|
|
};
|
|
}
|
|
}
|
|
|
|
// 공통 데이터 저장 (수정)
|
|
iListData.approval = {
|
|
writer: {
|
|
name: $('#writer').text().trim(),
|
|
date: $('#writerDate').text().trim()
|
|
},
|
|
approver: {
|
|
name: $('#approval').text().trim(),
|
|
date: $('#approvalDate').text().trim()
|
|
}
|
|
};
|
|
|
|
// 현재 페이지 데이터 생성 및 저장 (수정)
|
|
const pageData = {
|
|
page: page,
|
|
inputItems: {},
|
|
checkboxData: []
|
|
};
|
|
|
|
$('.inputItem').each(function () {
|
|
const inputName = $(this).attr('name');
|
|
pageData.inputItems[inputName] = $(this).val() || null;
|
|
});
|
|
|
|
$('#mainTable tbody tr').each(function () {
|
|
const rowData = {
|
|
G: [],
|
|
B: [],
|
|
J: $(this).find('.J').text() || null
|
|
};
|
|
$(this).find('.check-G').each(function () {
|
|
rowData.G.push($(this).prop('checked') || null);
|
|
});
|
|
$(this).find('.check-B').each(function () {
|
|
rowData.B.push($(this).prop('checked') || null);
|
|
});
|
|
pageData.checkboxData.push(rowData);
|
|
});
|
|
|
|
// 빈 값 제거 (수정)
|
|
pageData.checkboxData = pageData.checkboxData.filter(row => {
|
|
return row.J !== null && row.J !== "" ||
|
|
row.G.some(val => val !== null && val !== undefined) ||
|
|
row.B.some(val => val !== null && val !== undefined);
|
|
});
|
|
|
|
// pages 배열에 페이지 데이터 저장 (수정)
|
|
iListData.pages[parseInt(page) - 1] = pageData;
|
|
|
|
// 전체 페이지 검사 및 ACIdoneDate 업데이트 (수정)
|
|
// 전체 페이지 검사 및 ACIdoneDate 업데이트 (수정)
|
|
const allPagesJudgementsAreGood = iListData.pages.every(page =>
|
|
page.checkboxData.every(row => row.J === '적')
|
|
);
|
|
|
|
if (allPagesJudgementsAreGood) {
|
|
const today = new Date();
|
|
const formattedDate = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;
|
|
$("#ACIdoneDate").val(formattedDate);
|
|
} else {
|
|
$("#ACIdoneDate").val('');
|
|
}
|
|
|
|
// JSON 데이터로 변환 및 저장 (수정)
|
|
console.log('JSON 데이터로 변환하여 저장 전 자료 iListData : ', iListData);
|
|
try {
|
|
const jsonString = JSON.stringify(iListData, null, 2);
|
|
$('#iList').val(jsonString);
|
|
console.log('JSON 데이터로 변환하여 저장 전 자료 jsonString : ', jsonString);
|
|
|
|
if (ajaxRequest) {
|
|
ajaxRequest.abort();
|
|
console.log('기존 AJAX 요청 중단.');
|
|
}
|
|
|
|
const num = $('#num').val();
|
|
const ACIaskDate = $('#ACIaskDate').val();
|
|
const ACIdoneDate = $('#ACIdoneDate').val();
|
|
|
|
ajaxRequest = $.ajax({
|
|
url: "insert_iList.php",
|
|
type: "post",
|
|
data: { num: num, ACIaskDate: ACIaskDate, ACIdoneDate: ACIdoneDate, iList: jsonString },
|
|
dataType: "json",
|
|
success: function (response) {
|
|
console.log('데이터 저장 성공:', response);
|
|
ajaxRequest = null;
|
|
Toastify({
|
|
text: "저장완료",
|
|
duration: 2000,
|
|
close: true,
|
|
gravity: "top",
|
|
position: "center",
|
|
style: {
|
|
background: "linear-gradient(to right, #00b09b, #96c93d)"
|
|
}
|
|
}).showToast();
|
|
hideMsgModal();
|
|
},
|
|
error: function (xhr, status, error) {
|
|
if (status !== 'abort') {
|
|
console.error('데이터 저장 실패:', error);
|
|
alert("저장 중 오류가 발생했습니다: " + error);
|
|
} else {
|
|
console.log('AJAX 요청이 중단되었습니다.');
|
|
}
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('JSON 직렬화 오류:', error);
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
$('#mainTable tbody tr').each(function() {
|
|
var $row = $(this);
|
|
var $judgementCell = $row.find('.J');
|
|
var screenorslat = $('#screenorslat').val();
|
|
|
|
function updateJudgement() {
|
|
var isValidWidth = true;
|
|
var isValidHeight = true;
|
|
var isValidhomegap = true;
|
|
var isValidbottombargap = true;
|
|
var gapTolerance = 30;
|
|
|
|
// 길이
|
|
var pageWidth = parseFloat($("#pageWidth").text()) || 0;
|
|
$row.find('input[name="openWidth"]').each(function() {
|
|
var value = parseFloat($(this).val());
|
|
if (isNaN(value)) {
|
|
isValidWidth = false;
|
|
return false;
|
|
}
|
|
var lowerLimit = pageWidth - gapTolerance;
|
|
var upperLimit = pageWidth + gapTolerance;
|
|
if (value < lowerLimit || value > upperLimit) {
|
|
isValidWidth = false;
|
|
}
|
|
// console.log('openWidth : ', value);
|
|
// console.log('pageWidth : ', pageWidth);
|
|
// console.log('openWidth valid : ', isValidWidth);
|
|
judgeCheckbox($row, isValidWidth);
|
|
});
|
|
|
|
// 높이
|
|
var pageHeight = parseFloat($("#pageHeight").text()) || 0;
|
|
$row.find('input[name="openHeight"]').each(function() {
|
|
var value = parseFloat($(this).val());
|
|
if (isNaN(value)) {
|
|
isValidHeight = false;
|
|
return false;
|
|
}
|
|
var lowerLimit = pageHeight - gapTolerance;
|
|
var upperLimit = pageHeight + gapTolerance;
|
|
if (value < lowerLimit || value > upperLimit) {
|
|
isValidHeight = false;
|
|
}
|
|
// console.log('openHeight : ', value);
|
|
// console.log('pageHeight : ', pageHeight);
|
|
// console.log('openHeight valid : ', isValidHeight);
|
|
judgeCheckbox($row, isValidHeight);
|
|
});
|
|
|
|
// 가이드레일 홈간격
|
|
if(screenorslat == '스크린')
|
|
{
|
|
var guiderailHolegapUpLimit = 10;
|
|
var guiderailHolegapDownLimit = 5;
|
|
}
|
|
else
|
|
{
|
|
var guiderailHolegapUpLimit = 25;
|
|
var guiderailHolegapDownLimit = 7;
|
|
}
|
|
$row.find('input[name="homegap"]').each(function() {
|
|
var value = parseFloat($(this).val());
|
|
if (isNaN(value)) {
|
|
isValidhomegap = false;
|
|
return false;
|
|
}
|
|
var lowerLimit = guiderailHolegapDownLimit;
|
|
var upperLimit = guiderailHolegapUpLimit;
|
|
if (value < lowerLimit || value > upperLimit) {
|
|
isValidhomegap = false;
|
|
}
|
|
// console.log('openHeight : ', value);
|
|
// console.log('pageHeight : ', pageHeight);
|
|
// console.log('openHeight valid : ', isValidhomegap);
|
|
judgeCheckbox($row, isValidhomegap);
|
|
});
|
|
|
|
|
|
// 하단마감재간격
|
|
var bottombarHolegapUpLimit = 25;;
|
|
$row.find('input[name="bottombargap"]').each(function() {
|
|
var value = parseFloat($(this).val());
|
|
if (isNaN(value)) {
|
|
isValidbottombargap = false;
|
|
return false;
|
|
}
|
|
var upperLimit = bottombarHolegapUpLimit;
|
|
if (value >= upperLimit) {
|
|
isValidbottombargap = false;
|
|
}
|
|
// console.log('openHeight : ', value);
|
|
// console.log('pageHeight : ', pageHeight);
|
|
// console.log('openHeight valid : ', isValidbottombargap);
|
|
judgeCheckbox($row, isValidbottombargap);
|
|
});
|
|
|
|
var allFieldsFilled = true;
|
|
var allGood = true; // 모든 체크박스가 적합인지 확인
|
|
var anyBad = false; // 부적합 체크박스가 하나라도 체크되었는지 확인
|
|
|
|
// 현재 행이 rowspan의 첫 번째 행인지 확인
|
|
var $goodChecks = $row.find('.check-G').filter(function () {
|
|
return $(this).closest('tr').index() === $row.index();
|
|
});
|
|
|
|
var $badChecks = $row.find('.check-B').filter(function () {
|
|
return $(this).closest('tr').index() === $row.index();
|
|
});
|
|
|
|
// 적합/부적합 체크박스 상태 확인
|
|
var allGood = true;
|
|
var anyBad = false;
|
|
|
|
$goodChecks.each(function () {
|
|
if (!$(this).is(':checked')) {
|
|
allGood = false;
|
|
}
|
|
});
|
|
|
|
$badChecks.each(function () {
|
|
if ($(this).is(':checked')) {
|
|
anyBad = true;
|
|
}
|
|
});
|
|
|
|
// 디버깅용 로그
|
|
// console.log('allGood:', allGood);
|
|
// console.log('anyBad:', anyBad);
|
|
// console.log('allFieldsFilled:', allFieldsFilled);
|
|
|
|
// 모든 필드가 채워지지 않았으면 공백으로 설정
|
|
// 판정 업데이트
|
|
if ( isValidWidth && isValidHeight && isValidhomegap && isValidbottombargap && allGood && !anyBad) {
|
|
$judgementCell.text('적');
|
|
} else {
|
|
$judgementCell.text('부');
|
|
}
|
|
}
|
|
// 페이지 로드 시 초기 판단
|
|
updateJudgement();
|
|
|
|
// 체크박스 토글
|
|
$row.find('td').each(function() {
|
|
var $goodCheck = $(this).find('.check-G');
|
|
var $badCheck = $(this).find('.check-B');
|
|
|
|
$goodCheck.on('change', function() {
|
|
if ($(this).is(':checked')) {
|
|
$badCheck.prop('checked', false);
|
|
}
|
|
updateJudgement();
|
|
updateFinalJudgement();
|
|
});
|
|
|
|
$badCheck.on('change', function() {
|
|
if ($(this).is(':checked')) {
|
|
$goodCheck.prop('checked', false);
|
|
}
|
|
updateJudgement();
|
|
updateFinalJudgement();
|
|
});
|
|
});
|
|
|
|
// input 값 변경 시 판정 업데이트
|
|
$row.find('input').on('input', updateJudgement);
|
|
$row.find('input').on('input', updateFinalJudgement);
|
|
});
|
|
|
|
// 최종 종합 판정 업데이트 함수
|
|
function updateFinalJudgement() {
|
|
var allPass = true;
|
|
var allJudged = true;
|
|
|
|
$('#mainTable tbody tr .J').each(function() {
|
|
var judgementText = $(this).text();
|
|
|
|
if (judgementText === '') {
|
|
allJudged = false;
|
|
}
|
|
|
|
if (judgementText === '부') {
|
|
allPass = false;
|
|
$(this).css('background-color', '#f8d7da');
|
|
} else {
|
|
$(this).css('background-color', '');
|
|
}
|
|
});
|
|
|
|
if (allJudged) {
|
|
if (allPass) {
|
|
$('#resultJudgement').val('합격');
|
|
$('#resultJudgement').css('background-color', '#ffff');
|
|
} else {
|
|
$('#resultJudgement').val('불합격');
|
|
$('#resultJudgement').css('background-color', '#f8d7da');
|
|
}
|
|
} else {
|
|
$('#resultJudgement').val('');
|
|
}
|
|
}
|
|
|
|
// 페이지 로드 시 최종 판정 업데이트
|
|
updateFinalJudgement();
|
|
|
|
});
|
|
|
|
function judgeCheckbox($row, isValidWidth) {
|
|
var $goodCheck = $row.find('.check-G');
|
|
var $badCheck = $row.find('.check-B');
|
|
|
|
if (!isValidWidth) {
|
|
$goodCheck.prop('checked', false); // 'G' 체크 해제
|
|
$badCheck.prop('checked', true); // 'B' 체크 활성화
|
|
} else {
|
|
$goodCheck.prop('checked', true); // 'G' 체크 활성화
|
|
$badCheck.prop('checked', false); // 'B' 체크 해제
|
|
}
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
// 초기화 버튼 클릭 이벤트
|
|
$('.initialBtn').on('click', function() {
|
|
// 초기화 확인 알림
|
|
Swal.fire({
|
|
title: '초기화',
|
|
text: "모든 데이터를 초기화하시겠습니까?",
|
|
icon: 'warning',
|
|
showCancelButton: true,
|
|
confirmButtonColor: '#3085d6',
|
|
cancelButtonColor: '#d33',
|
|
confirmButtonText: '예, 초기화합니다',
|
|
cancelButtonText: '취소'
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
// iList 값을 빈 배열로 초기화
|
|
const initialData = JSON.stringify([]); // 빈 배열로 초기화
|
|
|
|
// iList hidden input에 초기화된 데이터 설정
|
|
$('#iList').val(initialData);
|
|
|
|
// 초기화된 데이터 저장 요청
|
|
$.ajax({
|
|
url: 'insert_iList.php', // 데이터를 저장할 PHP 파일 경로
|
|
type: 'POST',
|
|
data: {
|
|
num: $('#num').val() ,
|
|
tablename: $('#tablename').val() ,
|
|
update_log: $('#update_log').val() ,
|
|
iList: initialData },
|
|
success: function(response) {
|
|
Swal.fire({
|
|
title: '초기화 완료',
|
|
text: "모든 데이터가 초기화되었습니다.",
|
|
icon: 'success',
|
|
confirmButtonText: '확인'
|
|
}).then(() => {
|
|
// 페이지 새로고침
|
|
setTimeout(function () {
|
|
hideMsgModal();
|
|
location.reload();
|
|
}, 1000);
|
|
});
|
|
},
|
|
error: function(jqxhr, status, error) {
|
|
Swal.fire({
|
|
title: '오류',
|
|
text: "초기화 중 오류가 발생했습니다.",
|
|
icon: 'error',
|
|
confirmButtonText: '확인'
|
|
});
|
|
console.log("AJAX Error: ", status, error);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
$(document).ready(function() {
|
|
// 'allclick' ID를 가진 요소를 클릭했을 때 실행
|
|
$('#allclick').on('click', function() {
|
|
// 1. 모든 체크박스를 체크 상태로 설정
|
|
// $('.check-G').prop('checked', true);
|
|
|
|
showMsgModal(3); // 파일처리중
|
|
|
|
// 값 설정
|
|
$('#openWidth').val($('#pageWidth').text());
|
|
$('#openHeight').val($('#pageHeight').text());
|
|
|
|
var screenorslat = $('#screenorslat').val();
|
|
if(screenorslat == '스크린')
|
|
$('#homegap').val('9');
|
|
else
|
|
$('#homegap').val('20'); // 철재인경우
|
|
|
|
$('#bottombargap').val('23');
|
|
|
|
// 3. 강제로 input 요소의 input/change 이벤트 발생
|
|
$('input[name="openWidth"]').each(function() {
|
|
$(this).trigger('input'); // 또는 'change' 이벤트
|
|
});
|
|
|
|
setTimeout(function () {
|
|
$('.check-G').trigger('click');
|
|
console.log('.check-G 요소가 클릭되었습니다.');
|
|
hideMsgModal();
|
|
}, 1000); // 1초 후 실행
|
|
|
|
// 저장 (주석 처리된 부분)
|
|
// saveData();
|
|
});
|
|
|
|
});
|
|
|
|
// 부트스트랩 툴팁
|
|
$(document).ready(function() {
|
|
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
|
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
return new bootstrap.Tooltip(tooltipTriggerEl);
|
|
});
|
|
});
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const pageSelect = document.getElementById('pageSelect');
|
|
const prevPageBtn = document.getElementById('prevPage');
|
|
const nextPageBtn = document.getElementById('nextPage');
|
|
let currentPage = $("#page").val();
|
|
const totalPages = <?= $lotVolumn ?>;
|
|
|
|
// Select 변경 시 페이지 이동
|
|
pageSelect.addEventListener('change', function() {
|
|
currentPage = parseInt(this.value, 10);
|
|
updatePage(currentPage);
|
|
});
|
|
|
|
// 이전 페이지 버튼 클릭 이벤트
|
|
prevPageBtn.addEventListener('click', function() {
|
|
if (currentPage > 1) {
|
|
currentPage--;
|
|
updatePage(currentPage);
|
|
}
|
|
});
|
|
|
|
// 다음 페이지 버튼 클릭 이벤트
|
|
nextPageBtn.addEventListener('click', function() {
|
|
if (currentPage < totalPages) {
|
|
currentPage++;
|
|
updatePage(currentPage);
|
|
}
|
|
});
|
|
|
|
// 페이지 업데이트 함수
|
|
function updatePage(page) {
|
|
// 페이지 값 업데이트
|
|
currentPage = page;
|
|
pageSelect.value = page; // Select 요소의 값을 갱신
|
|
$("#page").val(page)
|
|
// saveData(); // 주석 처리된 부분 (사용 시 활성화)
|
|
$('#board_form').submit(); // 서버로 페이지 데이터 전송
|
|
}
|
|
|
|
// 초기 페이지 설정
|
|
// updatePage(currentPage);
|
|
});
|
|
|
|
|
|
|
|
$(document).ready(function () {
|
|
displayFileLoad(); // 기존 파일 로드
|
|
// displayImageLoad(); // 기존 이미지 로드
|
|
var tablename = $("#drivetablename").val();
|
|
var page = $("#page").val();
|
|
|
|
// 드롭 영역 설정
|
|
const dropArea = $("#dropArea");
|
|
dropArea.on("dragover", function (e) {
|
|
e.preventDefault();
|
|
dropArea.css("border-color", "blue"); // 드래그 중 표시
|
|
});
|
|
|
|
dropArea.on("dragleave", function (e) {
|
|
e.preventDefault();
|
|
dropArea.css("border-color", "#ccc"); // 드래그 해제 시 원래대로
|
|
});
|
|
|
|
dropArea.on("drop", function (e) {
|
|
e.preventDefault();
|
|
dropArea.css("border-color", "#ccc"); // 드롭 시 원래대로
|
|
|
|
const files = e.originalEvent.dataTransfer.files;
|
|
if (files.length > 0) {
|
|
processFiles(files, tablename, "attached", "upfile", page);
|
|
}
|
|
});
|
|
|
|
// 파일 선택 이벤트 처리
|
|
$("#upfile").change(function (e) {
|
|
processFiles(this.files, tablename, "attached", "upfile", page);
|
|
});
|
|
|
|
// 파일 업로드 및 처리 함수
|
|
function processFiles(files, tablename, item, upfilename, page) {
|
|
var num = $("#num").val();
|
|
if (!files || files.length === 0) {
|
|
console.warn("파일이 선택되지 않았습니다.");
|
|
return;
|
|
}
|
|
|
|
showMsgModal(3); // 파일처리중
|
|
const formData = new FormData();
|
|
for (const file of files) {
|
|
formData.append(upfilename + "[]", file);
|
|
}
|
|
|
|
// 추가 데이터 설정
|
|
formData.append("tablename", tablename);
|
|
formData.append("item", item);
|
|
formData.append("upfilename", upfilename);
|
|
formData.append("folderPath", "uploads");
|
|
formData.append("DBtable", "picuploads");
|
|
formData.append("num", num);
|
|
formData.append("page", page);
|
|
|
|
// AJAX 요청
|
|
$.ajax({
|
|
url: "/filedrive/GD_page.php",
|
|
type: "POST",
|
|
enctype: "multipart/form-data",
|
|
processData: false,
|
|
contentType: false,
|
|
data: formData,
|
|
success: function (response) {
|
|
// console.log("응답 데이터:", response);
|
|
|
|
let successCount = 0;
|
|
let errorCount = 0;
|
|
let errorMessages = [];
|
|
|
|
response.forEach((item) => {
|
|
if (item.status === "success") {
|
|
successCount++;
|
|
} else if (item.status === "error") {
|
|
errorCount++;
|
|
errorMessages.push(`파일: ${item.file}, 메시지: ${item.message}`);
|
|
}
|
|
});
|
|
|
|
if (successCount > 0) {
|
|
Toastify({
|
|
text: `${successCount}개의 파일이 성공적으로 업로드되었습니다.`,
|
|
duration: 2000,
|
|
close: true,
|
|
gravity: "top",
|
|
position: "center",
|
|
backgroundColor: "#4fbe87",
|
|
}).showToast();
|
|
}
|
|
|
|
if (errorCount > 0) {
|
|
Toastify({
|
|
text: `오류 발생: ${errorCount}개의 파일 업로드 실패\n상세 오류: ${errorMessages.join("\n")}`,
|
|
duration: 5000,
|
|
close: true,
|
|
gravity: "top",
|
|
position: "center",
|
|
backgroundColor: "#f44336",
|
|
}).showToast();
|
|
}
|
|
|
|
setTimeout(function () {
|
|
hideMsgModal();
|
|
if (item === "attached") displayFile();
|
|
if (item === "image") displayImage();
|
|
}, 1000);
|
|
},
|
|
error: function (jqxhr, status, error) {
|
|
console.error("업로드 실패:", jqxhr, status, error);
|
|
},
|
|
});
|
|
}
|
|
|
|
// 파일 불러오기
|
|
function displayFile() {
|
|
fetchFiles(tablename, "attached", "#displayFile");
|
|
}
|
|
|
|
// 이미지 불러오기
|
|
function displayImage() {
|
|
fetchFiles(tablename, "image", "#displayImage");
|
|
}
|
|
// 파일/이미지 데이터 가져오기
|
|
function fetchFiles(tablename, item, targetSelector) {
|
|
|
|
var tablename = $("#drivetablename").val();
|
|
var page = $("#page").val();
|
|
const params = $("#num").val();
|
|
|
|
if (!params) {
|
|
console.error("ID 값이 없습니다. 데이터를 불러올 수 없습니다.");
|
|
return;
|
|
}
|
|
|
|
$.ajax({
|
|
url: "/filedrive/GD_page.php",
|
|
type: "GET",
|
|
data: { num: params, tablename: tablename, item: item, folderPath: "uploads", page : page },
|
|
dataType: "json",
|
|
success: function (data) {
|
|
// console.log("데이터:", data);
|
|
$(targetSelector).html(""); // 기존 내용 초기화
|
|
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
data.forEach(function (fileData, index) {
|
|
const realName = fileData.realname || "다운로드 파일";
|
|
const link = fileData.link || "#";
|
|
const fileId = fileData.fileId || null;
|
|
|
|
if (!fileId) {
|
|
console.error("fileId가 누락되었습니다. index: " + index, fileData);
|
|
$(targetSelector).append(
|
|
"<div class='text-danger'>파일 ID가 누락되었습니다.</div>"
|
|
);
|
|
return;
|
|
}
|
|
|
|
$(targetSelector).append(
|
|
"<div class='row mt-1 mb-2'>" +
|
|
"<div class='d-flex align-items-center justify-content-center'>" +
|
|
"<span id='file" + index + "'>" +
|
|
"<a href='#' onclick=\"popupCenter('" + link + "', 'filePopup', 800, 600); return false;\">" + realName + "</a>" +
|
|
"</span> " +
|
|
"<button type='button' class='btn btn-danger btn-sm' id='delFile" + index + "' onclick=\"deleteFile('" + index + "', '" + fileId + "', '" + tablename + "', '" + item + "')\">" +
|
|
"<ion-icon name='trash-outline'></ion-icon>" +
|
|
"</button>" +
|
|
"</div>" +
|
|
"</div>"
|
|
);
|
|
|
|
|
|
});
|
|
} else {
|
|
$(targetSelector).append(
|
|
""
|
|
);
|
|
}
|
|
},
|
|
error: function (error) {
|
|
console.error("파일 불러오기 오류:", error);
|
|
},
|
|
});
|
|
}
|
|
|
|
// 파일 삭제
|
|
window.deleteFile = function (index, fileId, tablename, item) {
|
|
Swal.fire({
|
|
title: "삭제 확인",
|
|
text: "정말 삭제하시겠습니까?",
|
|
icon: "warning",
|
|
showCancelButton: true,
|
|
confirmButtonText: "삭제",
|
|
cancelButtonText: "취소",
|
|
reverseButtons: true,
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
showMsgModal(3); // 파일처리중
|
|
$.ajax({
|
|
url: "/filedrive/GD_page.php",
|
|
type: "DELETE",
|
|
data: JSON.stringify({
|
|
fileId: fileId,
|
|
tablename: tablename,
|
|
item: item,
|
|
folderPath: "uploads",
|
|
DBtable: "picuploads",
|
|
}),
|
|
contentType: "application/json",
|
|
dataType: "json",
|
|
success: function (response) {
|
|
hideMsgModal();
|
|
if (response.status === "success") {
|
|
// console.log("삭제 완료:", response);
|
|
$("#file" + index).remove();
|
|
$("#delFile" + index).remove();
|
|
}
|
|
},
|
|
error: function (error) {
|
|
console.error("삭제 실패:", error);
|
|
},
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
});
|
|
// 기존 파일 로드 함수
|
|
function displayFileLoad() {
|
|
const data = <?php echo json_encode($savefilename_arr); ?>; // PHP에서 전달된 파일 배열
|
|
var tablename = $("#drivetablename").val();
|
|
|
|
$("#displayFile").html(""); // 기존 내용 초기화
|
|
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
data.forEach(function (fileData, index) {
|
|
const realName = fileData.realname || "다운로드 파일";
|
|
const link = fileData.link || "#";
|
|
const fileId = fileData.fileId || null;
|
|
|
|
if (!fileId) {
|
|
console.error("fileId가 누락되었습니다. index: " + index, fileData);
|
|
$("#displayFile").append(
|
|
"<div class='text-danger'>파일 ID가 누락되었습니다.</div>"
|
|
);
|
|
return;
|
|
}
|
|
$("#displayFile").append(
|
|
"<div class='row mt-1 mb-2'>" +
|
|
"<div class='d-flex align-items-center justify-content-center'>" +
|
|
"<span id='file" + index + "'>" +
|
|
"<a href='#' onclick=\"popupCenter('" + link + "', 'filePopup', 800, 600); return false;\">" + realName + "</a>" +
|
|
"</span> " +
|
|
"<button type='button' class='btn btn-danger btn-sm' id='delFile" + index + "' onclick=\"deleteFile('" + index + "', '" + fileId + "', '" + tablename + "', 'attached')\">" +
|
|
"<ion-icon name='trash-outline'></ion-icon>" +
|
|
"</button>" +
|
|
"</div>" +
|
|
"</div>"
|
|
);
|
|
|
|
|
|
});
|
|
} else {
|
|
$("#displayFile").append(
|
|
""
|
|
);
|
|
}
|
|
}
|
|
|
|
// 기존 이미지 로드 함수
|
|
function displayImageLoad() {
|
|
const data = <?php echo json_encode($saveimagename_arr); ?>; // PHP에서 전달된 이미지 배열
|
|
var tablename = $("#drivetablename").val();
|
|
|
|
$("#displayImage").html(""); // 기존 내용 초기화
|
|
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
data.forEach(function (fileData, index) {
|
|
const realName = fileData.realname || "다운로드 파일";
|
|
const thumbnail = fileData.thumbnail || "/assets/default-thumbnail.png";
|
|
const link = fileData.link || "#";
|
|
const fileId = fileData.fileId || null;
|
|
|
|
if (!fileId) {
|
|
console.error("fileId가 누락되었습니다. index: " + index, fileData);
|
|
$("#displayImage").append(
|
|
"<div class='text-danger'>파일 ID가 누락되었습니다.</div>"
|
|
);
|
|
return;
|
|
}
|
|
$("#displayImage").append(
|
|
"<div class='row mb-3'>" +
|
|
"<div class='d-flex align-items-center justify-content-center'>" +
|
|
"<a href='#' onclick=\"popupCenter('" + link + "', 'imagePopup', 800, 600); return false;\">" +
|
|
"<img id='image" + index + "' src='" + thumbnail + "' style='width:150px; height:auto;'>" +
|
|
"</a> " +
|
|
"<button type='button' class='btn btn-danger btn-sm' id='delImage" + index + "' onclick=\"deleteFile('" + index + "', '" + fileId + "', '" + tablename + "', 'image')\">" +
|
|
"<ion-icon name='trash-outline'></ion-icon>" +
|
|
"</button>" +
|
|
"</div>" +
|
|
"</div>"
|
|
);
|
|
|
|
});
|
|
} else {
|
|
$("#displayImage").append(
|
|
""
|
|
);
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
function fetchMissingPages() {
|
|
var item = 'attached';
|
|
var tablename = '인정검사사진';
|
|
var lotVolumn = $("#lotVolumn").val();
|
|
var num = $("#num").val();
|
|
$.ajax({
|
|
url: "/filedrive/GD_page.php",
|
|
type: "GET",
|
|
data: { tablename: tablename, num: num, action: "checkMissingPages", lotVolumn: lotVolumn , item : item },
|
|
dataType: "json",
|
|
success: function (data) {
|
|
console.log("미완료 페이지 데이터 return값 :", data);
|
|
const missingPagesButtons = document.getElementById("missingPagesButtons");
|
|
missingPagesButtons.innerHTML = ""; // 기존 버튼 초기화
|
|
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
data.forEach(function (page) {
|
|
const button = document.createElement("button");
|
|
button.className = "btn btn-warning btn-sm m-1";
|
|
button.textContent = `${page}`;
|
|
button.addEventListener("click", function () {
|
|
navigateToPage(page);
|
|
});
|
|
missingPagesButtons.appendChild(button);
|
|
});
|
|
} else {
|
|
missingPagesButtons.innerHTML =
|
|
"<span class='text-success'>모든 페이지가 등록되었습니다.</span>";
|
|
}
|
|
},
|
|
error: function (error) {
|
|
console.error("사진 등록 미완료 페이지 오류:", error);
|
|
},
|
|
});
|
|
}
|
|
|
|
function navigateToPage(page) {
|
|
// 페이지 이동 로직 (여기에서 서버 요청 또는 페이지 값 설정 가능)
|
|
document.getElementById('pageSelect').value = page;
|
|
$("#page").val(page);
|
|
console.log(`페이지 ${page}로 이동합니다.`);
|
|
// 예시로 페이지 폼 제출 (필요 시 활성화)
|
|
$('#board_form').submit();
|
|
}
|
|
|
|
// 미완료 페이지 버튼 생성 호출
|
|
fetchMissingPages();
|
|
});
|
|
</script>
|