1176 lines
47 KiB
PHP
1176 lines
47 KiB
PHP
|
|
<?php
|
||
|
|
$tablename = 'instock';
|
||
|
|
?>
|
||
|
|
<?php include $_SERVER['DOCUMENT_ROOT'] . '/' . $tablename . '/common/head.php' ; ?> <!-- head 정보 불러오기 -->
|
||
|
|
<?php
|
||
|
|
|
||
|
|
$thickness = 0.6;
|
||
|
|
$width = 1180;
|
||
|
|
$weight = 830;
|
||
|
|
|
||
|
|
$itemTitle = '와이어 글라스 코팅직물 <br> ' . $spec ;
|
||
|
|
|
||
|
|
$spec = $thickness . ' * ' . $width;
|
||
|
|
|
||
|
|
$today = date("Y-m-d");
|
||
|
|
|
||
|
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/instock/commonDriveLoad.php'; // 구글드라이브 파일형태 이미지형태 읽어오기 모듈
|
||
|
|
|
||
|
|
$savetitle ='수입검사성적서';
|
||
|
|
?>
|
||
|
|
|
||
|
|
<?php include $_SERVER['DOCUMENT_ROOT'] . '/' . $tablename . '/common/instock_btn.php'; ?> <!-- Btn 정보 불러오기 -->
|
||
|
|
|
||
|
|
<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" > 수 </span>
|
||
|
|
<span class="text-dark me-1 fs-2" > 입 </span>
|
||
|
|
<span class="text-dark me-1 fs-2" > 검 </span>
|
||
|
|
<span class="text-dark me-1 fs-2" > 사 </span>
|
||
|
|
<span class="text-dark me-1 fs-2" > </span>
|
||
|
|
<span class="text-dark me-1 fs-2" > 성 </span>
|
||
|
|
<span class="text-dark me-1 fs-2" > 적 </span>
|
||
|
|
<span class="text-dark me-1 fs-2" > 서 </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>
|
||
|
|
|
||
|
|
<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="3">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>
|
||
|
|
|
||
|
|
<?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 '□'; // 빈 사각형
|
||
|
|
}
|
||
|
|
}
|
||
|
|
?>
|
||
|
|
|
||
|
|
<!-- 두 번째 행 (치수) -->
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" rowspan="2">2</td>
|
||
|
|
<td class="text-center align-middle" rowspan="2">치수 <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>
|
||
|
|
|
||
|
|
<!-- 0.8 이상 ~ 1.0 미만 범위 체크 -->
|
||
|
|
<td class="text-center align-middle" colspan="2"> <?=$thickness?> ± 10% </td>
|
||
|
|
<td class="text-center align-middle" rowspan="2">체크검사</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"> <?=$width?> ± 5.0 </td>
|
||
|
|
<td class="text-center align-middle" rowspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="record_widh1" name="record_widh1" 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_widh2" name="record_widh2" 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_widh3" name="record_widh3" value="" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
|
||
|
|
<!-- 무게 -->
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle">3</td>
|
||
|
|
<td class="text-center align-middle" colspan="2">무게 (g/㎡)</td>
|
||
|
|
<td class="text-center align-middle" colspan="2"><?=$weight?> ± 10%</td>
|
||
|
|
<td class="text-center align-middle" rowspan="13">공급업체 <br> 공인기관 <br> 성적서</td>
|
||
|
|
<td class="text-center align-middle" rowspan="11">입고시</td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="weight" name="weight" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
|
||
|
|
<!-- 밀도 -->
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" rowspan="2" >4</td>
|
||
|
|
<td class="text-center align-middle" colspan="1" rowspan="2" >밀도 <br> (올/5㎝)</td>
|
||
|
|
<td class="text-center align-middle" colspan="1" > Wrap <br> 경사 </td>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 80 ± 10% </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="density_Wrap" name="density_Wrap" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" colspan="1" > Weft <br> (위사) </td>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 75 ± 10% </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="density_Weft" name="density_Weft" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
|
||
|
|
<!-- 인장강도 -->
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" rowspan="2" >5</td>
|
||
|
|
<td class="text-center align-middle" colspan="1" rowspan="2"> 인장강도 <br> (N/50㎜) </td>
|
||
|
|
<td class="text-center align-middle" colspan="1" > Wrap <br> 경사 </td>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 3500 이상 </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="Tensile_Strength_Wrap" name="Tearing_Strength_Wrap" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" colspan="1" > Weft <br> (위사) </td>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 3000 이상 </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="Tensile_Strength_Weft" name="Tensile_Strength_Weft" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
|
||
|
|
<!-- 인열강도 -->
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" rowspan="2" >6</td>
|
||
|
|
<td class="text-center align-middle" colspan="1" rowspan="2" >인열강도 <br> (N) </td>
|
||
|
|
<td class="text-center align-middle" colspan="1" > Wrap <br> 경사 </td>
|
||
|
|
<td class="text-center align-middle" rowspan="2" colspan="2"> 250 이상 </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="Tearing_Strength_Wrap" name="Tearing_Strength_Wrap" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" colspan="1" > Weft <br> (위사) </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="Tearing_Strength_Weft" name="Tearing_Strength_Weft" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
|
||
|
|
<!-- 방염성능 -->
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" rowspan="4" >7</td>
|
||
|
|
<td class="text-center align-middle" colspan="2" rowspan="4" >방염성능 </td>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 잔염시간(s) : 5 이내 </td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="flame_retardant_performance1" name="flame_retardant_performance1" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="flame_retardant_performance2" name="flame_retardant_performance2" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="flame_retardant_performance3" name="flame_retardant_performance3" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 잔신시간(s) : 20 이내 </td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="remaining_time1" name="remaining_time1" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="remaining_time2" name="remaining_time2" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="remaining_time3" name="remaining_time3" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 탄화면적(㎠) : 40 이내 </td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="char_area1" name="char_area1" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="char_area2" name="char_area2" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="char_area3" name="char_area3" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" colspan="2"> 탄화길이(㎝) : 20 이내 </td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="CL1" name="CL1" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="CL2" name="CL2" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle" colspan="1">
|
||
|
|
<input type="text" class="form-control text-center noborder-input inputItem" id="CL3" name="CL3" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
|
||
|
|
<!-- 재질분석 -->
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" rowspan="2" >8</td>
|
||
|
|
<td class="text-center align-middle" colspan="2" rowspan="2" >재질분석 </td>
|
||
|
|
<td class="text-center align-middle" colspan="2" >KS D 3706 성분비교 <br> (STS316) </td>
|
||
|
|
<td class="text-center align-middle" rowspan="2" > 1회/5년 </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
5년 미도래 or 내용 기록, 부적합시 '부적합' 입력 <br>
|
||
|
|
<input type="text" class="form-control text-center text-primary fw-bold noborder-input inputItem" id="ksd_report" name="ksd_report" value="5년 미도래" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td class="text-center align-middle" colspan="2" > SEM, SEM-EDX 성분비교 <br> (Glass Fiber) </td>
|
||
|
|
<td class="text-center align-middle" colspan="3">
|
||
|
|
5년 미도래 or 내용 기록, 부적합시 '부적합' 입력 <br>
|
||
|
|
<input type="text" class="form-control text-center text-primary fw-bold noborder-input inputItem" id="sem_report" name="sem_report" value="5년 미도래" autocomplete="off">
|
||
|
|
</td>
|
||
|
|
<td class="text-center align-middle judgement"></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" id="input_memo" name="input_memo" style="height:50px;" autocomplete="off">
|
||
|
|
</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 weight = <?= isset($weight) ? $weight : 'null' ?>;
|
||
|
|
var silicon_dioxide = <?= isset($silicon_dioxide) ? $silicon_dioxide : 'null' ?>;
|
||
|
|
var silicon_dioxideCoating = <?= isset($silicon_dioxideCoating) ? $silicon_dioxideCoating : 'null' ?>;
|
||
|
|
var density_Wrap = <?= isset($density_Wrap) ? $density_Wrap : 'null' ?>;
|
||
|
|
var density_Weft = <?= isset($density_Weft) ? $density_Weft : 'null' ?>;
|
||
|
|
var Tensile_Strength_Wrap = <?= isset($Tensile_Strength_Wrap) ? $Tensile_Strength_Wrap : 'null' ?>;
|
||
|
|
var Tensile_Strength_Weft = <?= isset($Tensile_Strength_Weft) ? $Tensile_Strength_Weft : 'null' ?>;
|
||
|
|
var Tearing_Strength_Wrap = <?= isset($Tearing_Strength_Wrap) ? $Tearing_Strength_Wrap : 'null' ?>;
|
||
|
|
var Tearing_Strength_Weft = <?= isset($Tearing_Strength_Weft) ? $Tearing_Strength_Weft : 'null' ?>;
|
||
|
|
var flame_retardant_performance = <?= isset($flame_retardant_performance) ? $flame_retardant_performance : 'null' ?>;
|
||
|
|
var remaining_time = <?= isset($remaining_time) ? $remaining_time : 'null' ?>;
|
||
|
|
var char_area = <?= isset($char_area) ? $char_area : 'null' ?>;
|
||
|
|
var CL = <?= isset($CL) ? $CL : 'null' ?>;
|
||
|
|
|
||
|
|
$('#mainTable tbody tr').each(function() {
|
||
|
|
var $row = $(this);
|
||
|
|
var $judgementCell = $row.find('.judgement');
|
||
|
|
|
||
|
|
function updateJudgement() {
|
||
|
|
var allFieldsFilled = true;
|
||
|
|
var isValidThickness = true;
|
||
|
|
var isValidWidth = true;
|
||
|
|
var isValidSiO2 = true;
|
||
|
|
var isValidSiO2Coating = true;
|
||
|
|
var isValidWeight = true;
|
||
|
|
var isValidDensity = true;
|
||
|
|
var isValidTensileStrength = true;
|
||
|
|
var isValidTearingStrength = true;
|
||
|
|
var isValidFlameRetardant = true;
|
||
|
|
var isValidRemainingTime = true;
|
||
|
|
var isValidCharArea = true;
|
||
|
|
var isValidCL = true; // 탄화길이
|
||
|
|
var isValidKSDReport = true;
|
||
|
|
var isValidSEMReport = true;
|
||
|
|
|
||
|
|
// 두께 허용 범위 설정
|
||
|
|
var thicknessTolerance = thickness * 0.1
|
||
|
|
$row.find('input[name^="record_thickness"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false; // 필드가 비어있다면 allFieldsFilled를 false로 설정
|
||
|
|
return false; // 채워지지 않은 필드가 있으면 판단 중단
|
||
|
|
}
|
||
|
|
var lowerLimit = thickness - thicknessTolerance;
|
||
|
|
var upperLimit = thickness + thicknessTolerance;
|
||
|
|
if (value < lowerLimit || value > upperLimit) {
|
||
|
|
isValidThickness = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 너비 허용 범위 비교
|
||
|
|
$row.find('input[name^="record_widh"]').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="weight"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
var lowerLimit = weight - weight * 0.1;
|
||
|
|
var upperLimit = weight + weight * 0.1;
|
||
|
|
if (value < lowerLimit || value > upperLimit) {
|
||
|
|
isValidWeight = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 밀도 Wrap (경사) 비교
|
||
|
|
density_Wrap = 80;
|
||
|
|
$row.find('input[name="density_Wrap"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
var lowerLimit = density_Wrap * 0.9;
|
||
|
|
var upperLimit = density_Wrap * 1.1;
|
||
|
|
if (value < lowerLimit || value > upperLimit) {
|
||
|
|
isValidDensity = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 밀도 Weft (위사) 비교
|
||
|
|
density_Weft = 75;
|
||
|
|
$row.find('input[name="density_Weft"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
var lowerLimit = density_Weft * 0.9;
|
||
|
|
var upperLimit = density_Weft * 1.1;
|
||
|
|
if (value < lowerLimit || value > upperLimit) {
|
||
|
|
isValidDensity = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 인장강도 Wrap (경사) 비교
|
||
|
|
$row.find('input[name="Tensile_Strength_Wrap"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value < 3500) {
|
||
|
|
isValidTensileStrength = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 인장강도 Weft (위사) 비교
|
||
|
|
$row.find('input[name="Tensile_Strength_Weft"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value < 3000) {
|
||
|
|
isValidTensileStrength = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 인열강도 Wrap 비교
|
||
|
|
$row.find('input[name="Tearing_Strength_Wrap"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value < 250) {
|
||
|
|
isValidTearingStrength = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 인열강도 Weft 비교
|
||
|
|
$row.find('input[name="Tearing_Strength_Weft"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value < 250) {
|
||
|
|
isValidTearingStrength = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
// 방염 성능 비교 (잔염시간, 잔신시간, 탄화면적, 탄화길이)
|
||
|
|
|
||
|
|
// 잔염시간 비교 (5초 이내)
|
||
|
|
$row.find('input[name^="flame_retardant_performance"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value > 5) { // 잔염시간은 5초 이내
|
||
|
|
isValidFlameRetardant = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 잔신시간 비교 (20초 이내)
|
||
|
|
$row.find('input[name^="remaining_time"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value > 20) { // 잔신시간은 20초 이내
|
||
|
|
isValidFlameRetardant = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 탄화면적 비교 (40㎠ 이내)
|
||
|
|
$row.find('input[name^="char_area"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value > 40) { // 탄화면적은 40㎠ 이내
|
||
|
|
isValidFlameRetardant = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 탄화길이 비교 (20㎝ 이내)
|
||
|
|
$row.find('input[name^="CL"]').each(function() {
|
||
|
|
var value = parseFloat($(this).val());
|
||
|
|
if (isNaN(value)) {
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value > 20) { // 탄화길이는 20㎝ 이내
|
||
|
|
isValidFlameRetardant = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
// 재질분석 KSD 보고서 검증
|
||
|
|
$row.find('input[name="ksd_report"]').each(function() {
|
||
|
|
var value = $(this).val().trim(); // 공백 제거
|
||
|
|
if (value === '') { // 공백일 때 처리
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value === '부적합') {
|
||
|
|
isValidKSDReport = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 재질분석 SEM 보고서 검증
|
||
|
|
$row.find('input[name="sem_report"]').each(function() {
|
||
|
|
var value = $(this).val().trim(); // 공백 제거
|
||
|
|
if (value === '') { // 공백일 때 처리
|
||
|
|
allFieldsFilled = false;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (value === '부적합') {
|
||
|
|
isValidSEMReport = 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; // 모두 체크되지 않았다면 공백 표시
|
||
|
|
}
|
||
|
|
|
||
|
|
// 결과 출력
|
||
|
|
// console.log('isValidThickness:', isValidThickness);
|
||
|
|
// console.log('isValidWidth:', isValidWidth);
|
||
|
|
// console.log('allGood:', allGood);
|
||
|
|
// console.log('anyBad:', anyBad);
|
||
|
|
|
||
|
|
// 종합 판정 (모든 기준 만족 여부 확인)
|
||
|
|
if (!allFieldsFilled) {
|
||
|
|
$judgementCell.text(''); // 모든 필드가 채워지지 않았을 경우 공백 처리
|
||
|
|
} else {
|
||
|
|
if (isValidThickness && isValidWidth && isValidWeight && isValidDensity && isValidTensileStrength && isValidTearingStrength
|
||
|
|
&& isValidFlameRetardant && isValidRemainingTime && isValidCharArea && isValidCL && isValidKSDReport && isValidSEMReport && 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;
|
||
|
|
// '부'인 경우 해당 td의 배경색을 옅은 붉은 색으로 변경
|
||
|
|
$(this).css('background-color', '#f8d7da'); // 옅은 붉은 색
|
||
|
|
} else {
|
||
|
|
// '적'인 경우 배경색을 기본으로 설정
|
||
|
|
$(this).css('background-color', ''); // 기본 배경색 (없음)
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
if (allJudged) {
|
||
|
|
if (allPass) {
|
||
|
|
$('#resultJudgement').val('합격');
|
||
|
|
} else {
|
||
|
|
$('#resultJudgement').val('불합격');
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$('#resultJudgement').val('');
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
// 페이지 로드 시 최종 판정 업데이트
|
||
|
|
updateFinalJudgement();
|
||
|
|
});
|
||
|
|
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/' . $tablename . '/common/JS_instock.php'; ?> <!-- instock 후반부 공통 JS -->
|
||
|
|
|
||
|
|
</body>
|
||
|
|
</html>
|