Files
sam-kd/instock/i_antifireglass.php

1352 lines
50 KiB
PHP
Raw Normal View History

<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/instock/commonRequest.php'; // 구글드라이브 세션 파일 포함
$title_message = '수입검사 성적서';
$tablename = 'instock';
$item = $title_message;
include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php';
// 품질담당자 및 관리자인 경우 권한 부여
$QCadmin = false ;
if($user_name=='이세희' || $user_name=='개발자' || $user_name=='함신옥' || $user_name=='노완호' )
$QCadmin = true ;
?>
<title> <?=$title_message?> </title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/style_inspection.css">
</head>
<body>
<?php
// JavaScript에서 전달된 변수들 받기
$num = isset($_REQUEST['num']) ? $_REQUEST['num'] : '';
$spec = isset($_REQUEST['spec']) ? $_REQUEST['spec'] : '';
$itemname = 'instock';
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
try {
$sql = "select * from {$DB}.{$tablename} where num = ? ";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(1, $num, PDO::PARAM_STR);
$stmh->execute();
$count = $stmh->rowCount();
$row = $stmh->fetch(PDO::FETCH_ASSOC);
include "_row.php";
} catch (PDOException $Exception) {
print "오류: " . $Exception->getMessage();
}
$iList = isset($iList) ? json_decode($iList, true) : [];
$orderman = $user_name;
$todayStr = date("m/d");
$indateStr = date("m/d", strtotime($inspection_date));
// JSON 데이터를 JavaScript 변수로 변환
echo "<script>";
echo "var iListData = " . json_encode($iList) . ";";
echo "</script>";
$item_name = isset($row['item_name']) ? $row['item_name'] : '';
// print $spec;
$itemTitle = ' 방화유리 ';
// $spec = '300*40*6T';
// 정규 표현식을 사용하여 값 추출
preg_match('/(\d+)\*(\d+)\*(\d+)T/', $spec, $matches);
if ($matches) {
$parsed_spec = "{$matches[3]} x {$matches[1]} x {$matches[2]}";
// echo $parsed_spec;
} else {
echo "올바른 형식의 spec 값이 아닙니다.";
}
$spec = "{$matches[3]} x {$matches[1]} x {$matches[2]}";
// 최종 결과 출력
$thickness = $matches[3];
$width = $matches[1];
$height= $matches[2];
$today = date("Y-m-d");
require_once $_SERVER['DOCUMENT_ROOT'] . '/instock/commonDriveLoad.php'; // 구글드라이브 파일형태 이미지형태 읽어오기 모듈
$item = 'file';
$pInput = "0";
$savetitle ='수입검사성적서';
?>
<form id="board_form" name="board_form" method="post" enctype="multipart/form-data" onkeydown="return captureReturnKey(event)" >
<div class="container mt-2">
<div class="d-flex align-items-center justify-content-end mt-1">
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-center">
<!-- 파일 선택 -->
<input type="file" id="upfile" name="upfile[]" multiple style="display:none;">
<button class="btn btn-dark btn-sm me-4" type="button" onclick="document.getElementById('upfile').click();">
<i class="bi bi-image"></i> </button>
<!-- 드롭 영역 -->
<div id="dropArea" style="border: 1px dashed #ccc; padding: 5px; width:320px; text-align: center;">
성적서 PDF drop 영역
</div>
</div>
<div class="d-flex mt-2 justify-content-center">
<!-- 파일 목록 표시 -->
<div id="displayFile"></div>
</div>
</div>
</div>
<?php if($QCadmin) { ?>
<button class="btn btn-primary btn-sm me-1 ms-2 approvalBtn" ><i class="bi bi-award-fill"></i>승인 </button>
<?php } ?>
<button type="button" class="btn btn-dark btn-sm me-1 ms-1 saveData" > <i class="bi bi-save"> </i> 저장 </button>
<button type="button" class="btn btn-dark btn-sm me-1 ms-1" onclick="generatePDF()"> PDF </button>
<!-- <button class="btn btn-dark btn-sm me-1" onclick="sendmail();"> <i class="bi bi-envelope-arrow-up"></i> 전송 </button> -->
<button type="button" class="btn btn-secondary btn-sm me-1 ms-1" onclick="self.close();"> <i class="bi bi-x-lg"></i> 닫기 </button>&nbsp;
</div>
</div>
<input type="hidden" id="id" name="id" value="<?= isset($num) ? $num : '' ?>" >
<input type="hidden" id="parentid" name="parentid" value="<?= isset($num) ? $num : '' ?>" >
<input type="hidden" id="fileorimage" name="fileorimage" value="<?= isset($fileorimage) ? $fileorimage : '' ?>" >
<input type="hidden" id="item" name="item" value="<?= isset($item) ? $item : '' ?>" >
<input type="hidden" id="tablename" name="tablename" value="<?= isset($tablename) ? $tablename : '' ?>" >
<input type="hidden" id="savetitle" name="savetitle" value="<?= isset($savetitle) ? $savetitle : '' ?>" >
<input type="hidden" id="pInput" name="pInput" value="<?= isset($pInput) ? $pInput : '' ?>" >
<input type="hidden" id="mode" name="mode" value="<?= isset($mode) ? $mode : '' ?>" >
<input type="hidden" id="timekey" name="timekey" value="<?= isset($timekey) ? $timekey : '' ?>" >
<input type="hidden" id="num" name="num" value="<?= isset($num) ? $num : '' ?>">
<input type="hidden" id="user_name" name="user_name" value="<?= isset($user_name) ? $user_name : '' ?>">
<input type="hidden" id="update_log" name="update_log" value="<?= isset($update_log) ? $update_log : NULL ?>">
<input type="hidden" id="item_name" name="item_name" value="<?= isset($item_name) ? $item_name : '' ?>">
<input type="hidden" id="iList" name="iList">
<div id="content-to-print">
<br>
<div class="container mt-3">
<div class="d-flex align-items-center justify-content-center m-1">
<table class="table " style="border-collapse: collapse;">
<thead>
<tr>
<th rowspan="3" class="text-center" style="width:70%;">
<div class="row">
<div class="col-sm-2">
<img src="../img/kdlogo.png" alt="경동기업" class="me-1" style="width:100%; height:auto;">
</div>
<div class="col-sm-10">
<div class="d-flex align-items-center justify-content-center m-1">
<span class="text-dark ms-1 me-1 fs-2" > &nbsp; </span>
<span class="text-dark me-1 fs-2" > &nbsp; </span>
<span class="text-dark me-1 fs-2" > &nbsp; </span>
<span class="text-dark me-1 fs-2" > &nbsp; </span>
<span class="text-dark me-1 fs-2" > &nbsp; </span>
<span class="text-dark me-1 fs-2" > &nbsp; </span>
<span class="text-dark me-1 fs-2" > &nbsp; </span>
<span class="text-dark me-1 fs-2" > &nbsp; </span>
</div>
</div>
</div>
</th>
<th rowspan="3" class="text-center fw-bold" style="height:100px;"> </th>
<th class="text-center p-1" style="width : 100px; height:22px; padding:2px;">담당</th>
<th class="text-center p-1" style="width : 100px; height:22px; padding:2px;">부서장</th>
</tr>
<tr style="height:40px;">
<th class="text-center">
<div id="chargedDiv" style="display: none;">
<span id="orderman"> <?=$orderman?> </span> <br> <?=$indateStr ?>
</div>
</th>
<th class="text-center">
<div id="approvalDiv" style="display: none;">
<?=$user_name?> <br> <?=$todayStr ?>
</div>
</th>
</tr>
<tr>
<th colspan="2"> 입고일자 : <?=$inspection_date?></th>
</tr>
</thead>
</table>
</div>
<div class="d-flex align-items-center justify-content-center m-1">
<table class="table table-bordered" style="border-collapse: collapse;">
<tbody>
<tr>
<td class="text-center align-middle lightgray"> </td>
<td colspan="2" class="text-center fw-bold"><?=$itemTitle?></td>
<td class="text-center align-middle lightgray">납품업체<br>제조업체</td>
<td class="text-center text-primary fw-bold"><?=$supplier?> <br> (<?=$manufacturer?>) </td>
</tr>
<tr>
<td class="text-center align-middle lightgray"> <br>(두께*너비*높이) </td>
<td colspan="2" class="text-center fw-bold"><?=$spec?></td>
<td class="text-center align-middle lightgray">로트번호</td>
<td colspan="1" class="text-center text-primary fw-bold">
<?=$lot_no?>
</td>
</tr>
<tr>
<td class="text-center align-middle lightgray">자재번호</td>
<td colspan="2" class="text-center fw-bold"><?=$material_no?></td>
<td class="text-center align-middle lightgray">검사일자</td>
<td colspan="1" class="text-center text-primary fw-bold">
<?=$indateStr?>
</td>
</tr>
<tr>
<td class="text-center align-middle lightgray">로트크기</td>
<td class="text-center text-dark fw-bold"><?=$received_qty?> </td>
<td class="text-center text-dark fw-bold"><?=$unit?> </td>
<td class="text-center align-middle lightgray">검사자</td>
<td class="text-center">
<div class="d-flex justify-content-center">
<button type="button" id="editButton" class="btn btn-primary btn-sm">검사자</button>
<div id="inputContainer" style="display: none;">
<input type="text" id="userNameInput" class="form-control d-inline-block noborder-input text-center" style="width:100px;" autocomplete="off" style="widtd: 100px;" value="<?=$user_name?>">
<button type="button" id="cancelButton" class="btn btn-outline-danger btn-sm"> <i class="bi bi-x"> </i> </button>
</div>
</div>
</td>
</tr>
<script>
$(document).ready(function() {
// '담당자 입력' 버튼 클릭 시 input 표시 및 버튼 숨김
$('#editButton').on('click', function() {
$('#editButton').hide();
$('#inputContainer').show();
$('#workdate').text('<?php echo $todayStr; ?>');
$('#chargedDiv').show();
});
// '취소' 버튼 클릭 시 원래 상태로 되돌림
$('#cancelButton').on('click', function() {
$('#inputContainer').hide();
$('#chargedDiv').hide();
$('#workdate').text('');
$('#editButton').show();
});
});
</script>
</tbody>
</table>
</div>
<?php
// 두께 범위에 맞는 체크된 사각형을 표시하는 함수
function renderCheckBox($min, $max, $value) {
if ($value >= $min && $value < $max) {
return '✅'; // 체크된 사각형
} else {
return '□'; // 빈 사각형
}
}
// 길이 범위에 맞는 체크된 사각형을 표시하는 함수
function renderLengthCheckBox($min, $max, $length) {
if ($length >= $min && $length < $max) {
return '✅'; // 체크된 사각형
} else {
return '□'; // 빈 사각형
}
}
// 이하
function renderincludeCheckBox($min, $max, $length) {
if ($length > $min && $length <= $max) {
return '✅'; // 체크된 사각형
} else {
return '□'; // 빈 사각형
}
}
?>
<div class="row justify-content-start m-1 mt-2">
<table id="mainTable" class="table table-hover" style="border-collapse: collapse;">
<thead>
<tr>
<th class="text-center align-middle" rowspan="2">NO</th>
<th class="text-center align-middle" rowspan="2" colspan="2">검사항목</th>
<th class="text-center align-middle" rowspan="2" colspan="2">검사기준</th>
<th class="text-center align-middle" rowspan="2">검사방식</th>
<th class="text-center align-middle" rowspan="2">검사주기</th>
<th class="text-center align-middle" colspan="3">측정치</th>
<th class="text-center align-middle" rowspan="2">판정 <br> (/)</th>
</tr>
<tr>
<th class="text-center">n1 <br> 양호/불량 </th>
<th class="text-center">n2 <br> 양호/불량 </th>
<th class="text-center">n3 <br> 양호/불량 </th>
</tr>
</thead>
<tbody>
<!-- 번째 (겉모양) -->
<tr>
<td class="text-center align-middle">1</td>
<td class="text-center align-middle" colspan="2">겉모양</td>
<td class="text-center align-middle" colspan="2">사용상 해로울 <br> 결함이 없을 </td>
<td class="text-center align-middle">육안검사</td>
<td class="text-center align-middle" rowspan="4">n = 3 <br>c = 0</td>
<td class="text-center align-middle">
<label>
<input type="checkbox" class="check-good"> OK
</label>
<label>
<input type="checkbox" class="check-bad"> NG
</label>
</td>
<td class="text-center align-middle">
<label>
<input type="checkbox" class="check-good"> OK
</label>
<label>
<input type="checkbox" class="check-bad"> NG
</label>
</td>
<td class="text-center align-middle">
<label>
<input type="checkbox" class="check-good"> OK
</label>
<label>
<input type="checkbox" class="check-bad"> NG
</label>
</td>
<td class="text-center align-middle judgement"></td>
</tr>
<!-- 번째 (치수) -->
<tr>
<td class="text-center align-middle" rowspan="3">2</td>
<td class="text-center align-middle" rowspan="3">치수 <br> (mm) </td>
<td class="text-center align-middle" rowspan="1">
두께
<input type="text" class="form-control text-center noborder-input inputItem" id="input_thickness" name="input_thickness" value="<?=$thickness?>" autocomplete="off">
</td>
<td class="text-center align-middle" colspan="2" > 6 ± 10% </td>
<td class="text-center align-middle" rowspan="3">체크검사</td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_thickness1" name="record_thickness1" value="" autocomplete="off">
</td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_thickness2" name="record_thickness2" value="" autocomplete="off">
</td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_thickness3" name="record_thickness3" value="" autocomplete="off">
</td>
<td class="text-center align-middle judgement" rowspan="1"></td>
</tr>
<!-- 너비 검사 -->
<tr>
<td class="text-center align-middle" rowspan="1">
너비
<input type="text" class="form-control text-center noborder-input inputItem" id="input_width" name="input_width" value="<?=$width?>" autocomplete="off">
</td>
<td class="text-center align-middle" colspan="2" > 300 ± 5.0 </td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_width1" name="record_width1" value="" autocomplete="off">
</td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_width2" name="record_width2" value="" autocomplete="off">
</td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_width3" name="record_width3" value="" autocomplete="off">
</td>
<td class="text-center align-middle judgement" rowspan="1"></td>
</tr>
<!-- 높이 검사 -->
<tr>
<td class="text-center align-middle" rowspan="1">
높이
<input type="text" class="form-control text-center noborder-input inputItem" id="input_height" name="input_height" value="<?=$height?>" autocomplete="off">
</td>
<td class="text-center align-middle" colspan="2" > 40 ± 5.0 </td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_height1" name="record_height1" value="" autocomplete="off">
</td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_height2" name="record_height2" value="" autocomplete="off">
</td>
<td class="text-center align-middle" rowspan="1">
<input type="text" class="form-control text-center noborder-input inputItem" id="record_height3" name="record_height3" value="" autocomplete="off">
</td>
<td class="text-center align-middle judgement" rowspan="1"></td>
</tr>
<!--SiO₂함유량 (%) -->
<tr>
<td class="text-center align-middle" rowspan="5"> 3 </td>
<td class="text-center align-middle" rowspan="1" colspan="2" > SiO₂함유량 <br> (%)</td>
<td class="text-center align-middle" colspan="2"> 98 이상 </td>
<td class="text-center align-middle" rowspan="5">공급업체 <br> 밀시트</td>
<td class="text-center align-middle" rowspan="5">입고시</td>
<td class="text-center align-middle" rowspan="5" colspan="3"> 공급업체 성적서로 <br> 대체 </td>
<td class="text-center align-middle judgement" rowspan="5"> </td>
</tr>
<tr>
<td class="text-center align-middle" colspan="2">밀도</td>
<td class="text-center align-middle" colspan="2"> 2.21 x 10³ kg/ </td>
</tr>
<tr>
<td class="text-center align-middle" colspan="2">경도</td>
<td class="text-center align-middle" colspan="2"> 580 KHN </td>
</tr>
<tr>
<td class="text-center align-middle" colspan="2"> 인장강도 <br> (N/) </td>
<td class="text-center align-middle" colspan="2"> 4.9 x 10 pa </td>
</tr>
<tr>
<td class="text-center align-middle" colspan="2"> 연화점 <br> () </td>
<td class="text-center align-middle" colspan="2"> 1700 </td>
</tr>
<!-- 종합판정 -->
<tr>
<td colspan="8" rowspan="4" class="text-center align-top">
<div class="text-start fw-bold mt-1">
<span>[부적합 내용]</span> <br>
<span>
<input type="text" class="form-control text-start inputItem noborder-input" style="height:50px;" id="input_memo" name="input_memo" autocomplete="off">
&nbsp;</span>
</div>
</td>
<td colspan="3" class="text-center align-middle yellowredBold">
<div class="d-flex justify-content-center align-items-center fw-bold">
<span class="text-dark">종합판정</span>
</div>
</td>
</tr>
<tr>
<td colspan="3" rowspan="3" class="text-center align-middle">
<div class="text-center fw-bold mt-3 fs-1 ">
<input type="text" class="form-control fs-2 text-center inputItem noborder-input" style="height:50px;" id="resultJudgement" name="resultJudgement" autocomplete="off">
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
</div> <!-- end of container -->
<div class="container mb-5 mt-2">
<div class="d-flex align-items-center justify-content-center mb-5">
</div>
</div>
<!-- 페이지로딩 -->
<script>
$(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;
$(document).on('click', '.saveData', function() {
saveData();
});
$(document).on('click', '.approvalBtn', function() {
// 승인자의 이름과 오늘 날짜 가져오기
const userName = '<?=$user_name?>'; // PHP로부터 가져온 사용자 이름
const todayStr = '<?=$todayStr?>'; // PHP로부터 가져온 오늘 날짜
// 승인 정보를 approvalDiv에 표시
$('#approvalDiv').html(
userName + '<br>' + todayStr +
' <i class="bi bi-x-circle remove-approval" style="cursor: pointer;"></i>'
);
$('#approvalDiv').show();
// 결재 정보를 업데이트하여 저장 로직에 반영
updateApprovalData(userName, todayStr);
saveData();
});
// 결재 정보 업데이트 함수
function updateApprovalData(userName, date) {
// 저장 로직을 위해 결재 정보 업데이트
let approvalData = {
writer: {
name: $('#orderman').text().trim(),
date: '<?=$indateStr?>'
},
reviewer: {
name: $('#reviewDiv').is(':visible') ? '<?=$user_name?>' : '',
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));
}
// 결재 취소 기능
$(document).on('click', '.remove-approval', function() {
// 결재 정보를 지우고 화면에서 숨김
$('#approvalDiv').html('').hide();
// 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 = '';
}
// JSON 문자열로 다시 저장
$('#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 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 saveData() {
// json 형태로 form문에 저장하기
let formData = [];
// 결재 부분 정보 저장
let approvalData = {
writer: {
name: $('#chargedDiv').is(':visible') ? '<?=$user_name?>' : '',
date: '<?=$indateStr?>'
},
approver: {
name: $('#approvalDiv').is(':visible') ? '<?=$user_name?>' : '',
date: '<?=$todayStr?>'
}
};
formData.push({ approval: approvalData });
// 검사자 정보 저장
let productionManager = $('#userNameInput').val();
formData.push({ productionManager: productionManager });
// 추가 정보 저장
formData.push({ num: $('#num').val() });
formData.push({ update_log: $('#update_log').val() });
formData.push({ memo: $('#memo').val() });
// Class 'inputItem' 값 저장
let inputItems = {};
$('.inputItem').each(function() {
let inputName = $(this).attr('name');
inputItems[inputName] = $(this).val();
});
formData.push({ inputItems: inputItems });
// 체크박스 상태 저장
let checkboxData = [];
$('#mainTable tbody tr').each(function(index) {
let rowCheckboxes = {
good: [],
bad: [],
judgement: $(this).find('.judgement').text()
};
$(this).find('.check-good').each(function() {
rowCheckboxes.good.push($(this).prop('checked'));
});
$(this).find('.check-bad').each(function() {
rowCheckboxes.bad.push($(this).prop('checked'));
});
checkboxData.push(rowCheckboxes);
});
formData.push({ checkboxData: checkboxData });
// JSON 문자열로 변환
let jsonString = JSON.stringify(formData);
// 숨겨진 필드에 JSON 데이터 설정
$('#iList').val(jsonString);
$("#overlay").show(); // 오버레이 표시
$("button").prop("disabled", true); // 모든 버튼 비활성화
// 폼데이터 전송시 사용함 Get form
var form = $('#board_form')[0];
var datasource = new FormData(form);
showMsgModal(2); // 파일저장중
$.ajax({
enctype: 'multipart/form-data',
processData: false,
contentType: false,
cache: false,
timeout: 600000,
url: "insert_iList.php",
type: "post",
data: datasource,
dataType: "json",
success: function(data) {
console.log(data);
setTimeout(function() {
Toastify({
text: "저장완료",
duration: 3000,
close: true,
gravity: "top",
position: "center",
style: {
background: "linear-gradient(to right, #00b09b, #96c93d)"
},
}).showToast();
saveAndClose(); //부모창 변경
hideMsgModal();
$("button").prop("disabled", false); // 모든 버튼 활성화
}, 1000);
$("#overlay").hide(); // 오버레이 숨김
},
error: function(jqxhr, status, error) {
console.log(jqxhr, status, error);
alert("An error occurred: " + error);
}
});
}
// 팝업 창에서 데이터 저장 및 닫기 함수
function saveAndClose() {
const updatedData = {
resultJudgement: $("#resultJudgement").val(),
// 필요한 다른 필드도 여기에 추가할 수 있습니다.
};
// 부모 창의 함수 호출
if (window.opener && typeof window.opener.closePopupAndUpdateRow === 'function') {
window.opener.closePopupAndUpdateRow(updatedData);
} else {
console.error("Parent window function not found");
}
// 팝업 창 닫기
// window.close();
}
// 초기값 불러오기
$(document).ready(function() {
console.log(iListData);
if (iListData.length > 0) {
// 결재 부분 정보
const approval = iListData.find(item => item.approval);
if (approval) {
if (approval.approval.writer.name && approval.approval.writer.date) {
$('#chargedDiv').show();
$('#chargedDiv').html(
approval.approval.writer.name + '<br>' + approval.approval.writer.date
);
} else {
$('#chargedDiv').hide().html('');
}
if (approval.approval.approver.name && approval.approval.approver.date) {
$('#approvalDiv').show();
$('#approvalDiv').html(
approval.approval.approver.name + '<br>' + approval.approval.approver.date +
' <i class="bi bi-x-circle remove-approval" style="cursor: pointer;"></i>'
);
} else {
$('#approvalDiv').hide().html('');
}
$('#workdate').text(approval.approval.writer.date);
}
// 검사자 정보
const productionManager = iListData.find(item => item.productionManager);
if (productionManager && productionManager.productionManager) {
$('#userNameInput').val(productionManager.productionManager).show();
$('#inputContainer').show();
$('#editButton').hide();
} else {
$('#userNameInput').val('');
$('#inputContainer').hide();
$('#editButton').show();
}
// inputItem 데이터 로드
const inputItems = iListData.find(item => item.inputItems);
if (inputItems && inputItems.inputItems) {
for (const [name, value] of Object.entries(inputItems.inputItems)) {
$(`.inputItem[name="${name}"]`).val(value);
}
}
// 체크박스 상태 로드
const checkboxData = iListData.find(item => item.checkboxData);
if (checkboxData && checkboxData.checkboxData) {
$('#mainTable tbody tr').each(function(index) {
const rowData = checkboxData.checkboxData[index];
if (rowData) {
$(this).find('.check-good').each(function(goodIndex) {
$(this).prop('checked', rowData.good[goodIndex]);
});
$(this).find('.check-bad').each(function(badIndex) {
$(this).prop('checked', rowData.bad[badIndex]);
});
$(this).find('.judgement').text(rowData.judgement);
}
});
}
}
});
// 첫번째 요소를 클릭하면 전체 로트번호 적용하기
$(document).ready(function() {
// id가 mainTable인 테이블의 첫 번째 td를 클릭했을 때 이벤트를 등록합니다.
$('#mainTable').on('click', 'td:first-child', function() {
// 클릭한 첫 번째 td의 형제인 두 번째 td 요소의 값을 가져옵니다.
var secondTdValue = $(this).siblings().find('input').val();
// id가 mainTable인 테이블에서 두 번째 td 요소에 해당 값을 적용합니다.
$('#mainTable tbody tr').each(function() {
$(this).find('td:nth-child(2) input').val(secondTdValue);
});
});
});
// 부트스트랩 툴팁
$(document).ready(function() {
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
});
</script>
<script>
$(document).ready(function() {
var thickness = <?= isset($thickness) ? $thickness : 'null' ?>;
var width = <?= isset($width) ? $width : 'null' ?>;
var height = <?= isset($height) ? $height : 'null' ?>;
var length = <?= isset($length) ? $length : 'null' ?>;
console.log('width', width);
console.log('height', height);
$('#mainTable tbody tr').each(function() {
var $row = $(this);
var $judgementCell = $row.find('.judgement');
function updateJudgement() {
var isValidThickness = true;
var isValidWidth = true;
var isValidHeight = true;
var isValidLength = true;
var isValidC = true;
var isValidSi = true;
var isValidMn = true;
var isValidP = true;
var isValidS = true;
var allFieldsFilled = true; // 모든 필드가 채워졌는지 확인하는 플래그
// 두께 허용 범위 설정
var Up_thicknessTolerance;
var Down_thicknessTolerance;
if (thickness < 16 ) {
Up_thicknessTolerance = 0.6;
Down_thicknessTolerance = 0.6;
}
// 두께 범위 비교
$row.find('input[name^="record_thickness"]').each(function() {
var value = parseFloat($(this).val());
if (isNaN(value)) {
allFieldsFilled = false;
return false;
}
var lowerLimit = thickness - Down_thicknessTolerance;
var upperLimit = thickness + Up_thicknessTolerance;
if (value < lowerLimit || value > upperLimit) {
isValidThickness = false;
}
});
// 너비 허용 범위 설정
$row.find('input[name^="record_width"]').each(function() {
var value = parseFloat($(this).val());
if (isNaN(value)) {
allFieldsFilled = false;
return false;
}
var lowerLimit = width - 5;
var upperLimit = width + 5;
if (value < lowerLimit || value > upperLimit) {
isValidWidth = false;
}
});
// 길이 허용 범위 설정
$row.find('input[name^="record_height"]').each(function() {
var value = parseFloat($(this).val());
if (isNaN(value)) {
allFieldsFilled = false;
return false;
}
var lowerLimit = height - 5;
var upperLimit = height + 5;
if (value < lowerLimit || value > upperLimit) {
isValidHeight = false;
}
});
// OK/NG 체크박스 상태 검사
var allGood = true;
var anyBad = false;
// 해당 행에 OK 체크박스가 있는지 확인
if ($row.find('.check-good').length > 0) {
$row.find('.check-good').each(function() {
// 체크박스가 undefined이거나 제대로 체크되지 않으면 필드가 채워지지 않은 것으로 판단
if (isNaN($(this).is(':checked'))) {
allFieldsFilled = false;
return false;
}
if (!$(this).is(':checked')) {
allGood = false;
}
});
}
// 해당 행에 NG 체크박스가 있는지 확인
if ($row.find('.check-bad').length > 0) {
$row.find('.check-bad').each(function() {
if (isNaN($(this).is(':checked'))) {
allFieldsFilled = false;
return false;
}
if ($(this).is(':checked')) {
anyBad = true;
}
});
}
// OK/NG 체크박스 상태 검사
var checkedGood = 0; // 체크된 OK 체크박스 수
var checkedBad = 0; // 체크된 NG 체크박스 수
// 각 열의 OK/NG 체크박스를 한 번만 확인하도록 변경
var goodChecks = $row.find('.check-good');
var badChecks = $row.find('.check-bad');
// 해당 행에 OK 체크박스가 있는지 확인
if (goodChecks.length > 0) {
goodChecks.each(function() {
if ($(this).is(':checked')) {
checkedGood++; // OK 체크박스가 체크되면 증가
}
});
}
// 해당 행에 NG 체크박스가 있는지 확인
if (badChecks.length > 0) {
badChecks.each(function() {
if ($(this).is(':checked')) {
checkedBad++; // NG 체크박스가 체크되면 증가
}
});
}
// 모든 체크박스가 다 체크되지 않았다면 공백으로 처리
if (checkedGood + checkedBad !== 3 && (goodChecks.length > 0 || badChecks.length > 0)) {
allFieldsFilled = false; // 모두 체크되지 않았다면 공백 표시
}
// 모든 필드가 채워지지 않았으면 공백으로 설정
if (!allFieldsFilled) {
$judgementCell.text('');
} else {
// 판정 업데이트
if (isValidThickness && isValidWidth && isValidHeight && isValidLength && isValidC && isValidSi && isValidMn && isValidP && isValidS && allGood && !anyBad) {
$judgementCell.text('적');
} else {
$judgementCell.text('부');
}
}
}
// 페이지 로드 시 초기 판단
updateJudgement();
// 체크박스 토글
$row.find('td').each(function() {
var $goodCheck = $(this).find('.check-good');
var $badCheck = $(this).find('.check-bad');
$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 .judgement').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('합격');
} else {
$('#resultJudgement').val('불합격');
}
} else {
$('#resultJudgement').val('');
}
}
// 페이지 로드 시 최종 판정 업데이트
updateFinalJudgement();
});
var ajaxRequest_write = null;
var ajaxRequest = null;
var ajaxRequest5 = null;
var ajaxRequest6 = null;
var ajaxRequest7 = null;
var isDisplaying = false;
$(document).ready(function () {
displayFileLoad(); // 기존 파일 로드
// displayImageLoad(); // 기존 이미지 로드
var tablename = $("#tablename").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");
}
});
// 파일 선택 이벤트 처리
$("#upfile").change(function (e) {
processFiles(this.files, tablename, "attached", "upfile");
});
// // 이미지 선택 이벤트 처리
// $("#upfileimage").change(function (e) {
// processFiles(this.files, tablename, "image", "upfileimage");
// });
// 파일 업로드 및 처리 함수
function processFiles(files, tablename, item, upfilename) {
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);
// AJAX 요청
$.ajax({
url: "/filedrive/fileprocess.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 = $("#tablename").val();
const params = $("#num").val();
if (!params) {
console.error("ID 값이 없습니다. 데이터를 불러올 수 없습니다.");
return;
}
$.ajax({
url: "/filedrive/fileprocess.php",
type: "GET",
data: { num: params, tablename: tablename, item: item, folderPath: "uploads" },
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> &nbsp;&nbsp;" +
"<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/fileprocess.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 = $("#tablename").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> &nbsp;&nbsp;" +
"<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 = $("#tablename").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> &nbsp;&nbsp;" +
"<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>
</body>
</html>