- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
601 lines
19 KiB
PHP
601 lines
19 KiB
PHP
<?php
|
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/load_GoogleDrive.php'; // 세션 등 여러가지 포함됨 파일 포함
|
|
if(!isset($_SESSION["level"]) || $_SESSION["level"]>8) {
|
|
sleep(1);
|
|
header("Location:" . $WebSite . "login/login_form.php");
|
|
exit;
|
|
}
|
|
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php';
|
|
|
|
$mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : '';
|
|
$num = isset($_REQUEST["num"]) ? $_REQUEST["num"] : "";
|
|
$tablename = isset($_REQUEST["tablename"]) ? $_REQUEST["tablename"] : "";
|
|
|
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/load_GoogleDriveSecond.php'; // attached, image에 대한 정보 불러오기
|
|
|
|
$title_message = "절곡 작업 " ;
|
|
?>
|
|
|
|
<title><?=$title_message?></title>
|
|
|
|
<style>
|
|
textarea {
|
|
overflow: hidden;
|
|
resize: none; /* 사용자 크기 조절을 방지 */
|
|
}
|
|
/* 기본 스타일 설정 */
|
|
input[type="checkbox"],
|
|
input[type="radio"] {
|
|
transform: scale(1.2); /* 크기 확대 */
|
|
margin: 3px; /* 여백 추가 */
|
|
}
|
|
|
|
/* "readonly" 상태일 때 스타일 설정 */
|
|
.readonly-checkbox,
|
|
.readonly-radio {
|
|
pointer-events: none; /* 사용자 상호작용 비활성화 */
|
|
opacity: 1; /* 불투명도 설정 */
|
|
color: red;
|
|
}
|
|
label {
|
|
font-size: 1.5em; /* 글꼴 크기 확대 */
|
|
display: inline-block;
|
|
margin: 5px 0;
|
|
}
|
|
.w-40{
|
|
width: 40%!important;
|
|
}
|
|
.w-60{
|
|
width: 60%!important;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<?php
|
|
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/mymodal.php';
|
|
|
|
// 첨부 이미지에 대한 부분
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
|
|
$pdo = db_connect();
|
|
|
|
$today = date("Y-m-d"); // 현재일자 변수지정
|
|
|
|
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); // $row 배열로 DB 정보를 불러온다.
|
|
if($count<1){
|
|
print "검색결과가 없습니다.<br>";
|
|
}else{
|
|
|
|
include $_SERVER['DOCUMENT_ROOT'] . "/output/_row.php";
|
|
|
|
}
|
|
}catch (PDOException $Exception) {
|
|
print "오류: ".$Exception->getMessage();
|
|
}
|
|
|
|
// print $bend_state;
|
|
|
|
$eList = json_decode($estimateList, true);
|
|
|
|
// 행의 수는 배열의 크기와 동일하므로, count() 함수를 사용하여 구합니다.
|
|
if(!empty($eList) and $eList !== '[]')
|
|
{
|
|
$surang = count($eList);
|
|
if($surang > 0 )
|
|
$screenorslat = '스크린' ;
|
|
}
|
|
else {
|
|
$eList = json_decode($estimateSlatList, true);
|
|
if(!empty($eList) and $eList !== '[]')
|
|
{
|
|
$surang_slat = count($eList);
|
|
if($surang_slat > 0 )
|
|
$screenorslat = '철재스라트' ;
|
|
}
|
|
}
|
|
|
|
// print '$screenorslat' . $screenorslat;
|
|
?>
|
|
|
|
<form id="board_form" name="board_form" method="post" enctype="multipart/form-data" >
|
|
|
|
<input type="hidden" id="mode" name="mode" value="<?= isset($mode) ? $mode : '' ?>">
|
|
<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="tablename" name="tablename" value="<?= isset($tablename) ? $tablename : '' ?>">
|
|
<input type="hidden" id="is_deleted" name="is_deleted" value="<?= isset($is_deleted) ? $is_deleted : '0' ?>">
|
|
<input type="hidden" id="screenorslat" name="screenorslat" value="<?= isset($screenorslat) ? $screenorslat : '' ?>">
|
|
|
|
<div class="container">
|
|
|
|
<div class="row justify-content-center align-items-center ">
|
|
<div class="card align-middle " style="width: 55rem;">
|
|
<div class="card-body text-center">
|
|
<div class="row d-flex justify-content-center align-items-center mb-3" >
|
|
<div class="col-sm-10" >
|
|
<div class="d-flex p-1 mb-1 justify-content-center align-items-center ">
|
|
<h3> <?=$title_message?> </h3>
|
|
<?php if($mode!=='view') { ?>
|
|
<button id="saveBtn" class="btn btn-dark btn-sm me-1 " type="button">
|
|
<? if((int)$num>0) print ' <i class="bi bi-hdd-fill"></i> 저장'; else print ' <i class="bi bi-hdd-fill"></i> 저장'; ?></button>
|
|
<? } ?>
|
|
<button type="button" class="btn btn-outline-dark btn-sm me-2" id="showlogBtn" > H
|
|
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-2" >
|
|
<button type="button" class="btn btn-outline-dark btn-sm " onclick="self.close();" > <i class="bi bi-box-arrow-left"></i> 창닫기 </button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row text-center justify-content-center">
|
|
<span class="text-primary fs-6">
|
|
관리자가 아래의 라디오버튼을 클릭하면 상태가 변경됩니다.
|
|
</span>
|
|
</div>
|
|
<div class="row text-center justify-content-center">
|
|
<div class="d-flex justify-content-center align-items-center w-75">
|
|
<table class="table table-bordered">
|
|
<tbody>
|
|
<tr class="text-center">
|
|
<td class="text-center" style="width:120px;">
|
|
<span class="badge bg-dark fs-6">절곡 진행상태</span>
|
|
</td>
|
|
<td colspan="2" style="width:350px;">
|
|
<?php
|
|
$states = ["등록", "접수", "제작중", "완료"];
|
|
$is_admin = ($user_name === '두진호' || $user_name === '개발자');
|
|
?>
|
|
<?php foreach ($states as $state): ?>
|
|
<?= $state ?>
|
|
<input type="radio" class="readonly-radio" name="bend_state" value="<?= $state ?>" <?= ($bend_state === $state) ? "checked" : "" ?> <?= $is_admin ? "" : "readonly" ?> style="pointer-events: <?= $is_admin ? 'auto' : 'none' ?>;">
|
|
<?php endforeach; ?>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<button id="saveBtn" type="button" style="display:none;"></button>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php include $_SERVER['DOCUMENT_ROOT'] . '/output/common/output_write_form.php'; // 공통으로 들어가는 부분 ?>
|
|
|
|
</form>
|
|
<div class="card align-middle " >
|
|
<div class="card-body text-center">
|
|
<div class="row text-center justify-content-center">
|
|
<div class="d-flex justify-content-center align-items-center w-75">
|
|
<button type='button' id="loadBendingWorkBtn_slat" class='btn btn-success-emphasis bg-success-subtle border border-success-subtle rounded-pill btn-sm fw-bold me-2' ><i class="bi bi-card-text"></i> 절곡 작업일지 </button>
|
|
<button type='button' id="loadmidInspectBendingBtn_slat" class='btn btn-danger-emphasis bg-danger-subtle border border-danger-subtle rounded-pill btn-sm fw-bold me-2' ><i class="bi bi-card-text"></i> 절곡-중간검사 </button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
|
|
function captureReturnKey(e) {
|
|
if(e.keyCode==13 && e.srcElement.type != 'textarea')
|
|
return false;
|
|
}
|
|
|
|
function recaptureReturnKey(e) {
|
|
if (e.keyCode==13)
|
|
exe_search();
|
|
}
|
|
function Enter_Check(){
|
|
// 엔터키의 코드는 13입니다.
|
|
if(event.keyCode == 13){
|
|
exe_search(); // 실행할 이벤트
|
|
}
|
|
}
|
|
|
|
function exe_search()
|
|
{
|
|
var postData = changeUri(document.getElementById("outworkplace").value);
|
|
var sendData = $(":input:radio[name=root]:checked").val();
|
|
|
|
$("#displaysearch").show();
|
|
if(sendData=='주일')
|
|
$("#displaysearch").load("./search.php?mode=search&search=" + postData);
|
|
if(sendData=='경동')
|
|
$("#displaysearch").load("./searchkd.php?mode=search&search=" + postData);
|
|
}
|
|
$(document).ready(function() {
|
|
$(document).on('click', '.fetch_receiverBtn', function() {
|
|
callreceiver();
|
|
});
|
|
|
|
$('#receiver').on('keypress', function(event) {
|
|
if (event.keyCode === 13) { // 엔터키의 코드는 13입니다.
|
|
callreceiver();
|
|
}
|
|
});
|
|
});
|
|
|
|
ajaxRequest_write=null;
|
|
|
|
function callreceiver() {
|
|
var search = $('#receiver').val(); // 검색어를 가져옴
|
|
console.log("Search term:", search); // 전달되는 값 확인
|
|
|
|
// AJAX 요청을 통해 데이터 가져오기
|
|
if (ajaxRequest_write !== null) {
|
|
ajaxRequest_write.abort();
|
|
}
|
|
ajaxRequest_write = $.ajax({
|
|
url: 'fetch_receiver.php',
|
|
type: 'POST',
|
|
data: { search: search },
|
|
dataType: 'json',
|
|
success: function(data) {
|
|
console.log("Response data:", data); // 서버로부터의 응답을 콘솔에 출력
|
|
var tbody = $('#ModalBody');
|
|
tbody.empty(); // 기존 데이터를 지움
|
|
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
data.forEach(function(row, index) {
|
|
var tr = $('<tr>').append(
|
|
$('<td>').addClass('text-center').text(index + 1),
|
|
$('<td>').addClass('text-center').html('<a href="#" onclick="intovaltel(\'' + row.phone + '\', \'' + row.receiver + '\'); return false;">' + row.receiver + '</a>'),
|
|
$('<td>').addClass('text-center').text(row.phone),
|
|
$('<td>').addClass('text-center').text(row.outputplace)
|
|
);
|
|
tbody.append(tr);
|
|
});
|
|
} else if (data.length === 0) {
|
|
var tr = $('<tr>').append(
|
|
$('<td>').attr('colspan', '4').addClass('text-center').text('No data available')
|
|
);
|
|
tbody.append(tr);
|
|
} else {
|
|
console.error('Unexpected data format:', data);
|
|
var tr = $('<tr>').append(
|
|
$('<td>').attr('colspan', '4').addClass('text-center').text('Error loading data')
|
|
);
|
|
tbody.append(tr);
|
|
}
|
|
|
|
$('#telModal').modal('show'); // 모달 띄우기
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
console.error('AJAX request failed:', textStatus, errorThrown);
|
|
var tbody = $('#ModalBody');
|
|
var tr = $('<tr>').append(
|
|
$('<td>').attr('colspan', '4').addClass('text-center').text('Error loading data')
|
|
);
|
|
tbody.append(tr);
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
// 페이지 로딩
|
|
$(document).ready(function(){
|
|
var loader = document.getElementById('loadingOverlay');
|
|
loader.style.display = 'none';
|
|
});
|
|
</script>
|
|
|
|
<script>
|
|
var mode = '<?php echo $mode; ?>';
|
|
var ajaxRequest_write = null;
|
|
</script>
|
|
|
|
<script>
|
|
var dataTable; // DataTables 인스턴스 전역 변수
|
|
var feeviewpageNumber; // 현재 페이지 번호 저장을 위한 전역 변수
|
|
|
|
var ajaxRequest_write = null;
|
|
|
|
$(document).ready(function() {
|
|
// DataTables 초기 설정
|
|
dataTable = $('#myTable').DataTable({
|
|
"paging": true,
|
|
"ordering": true,
|
|
"searching": true,
|
|
"pageLength": 500,
|
|
"lengthMenu": [25, 50, 100, 200, 500, 1000],
|
|
"language": {
|
|
"lengthMenu": "Show _MENU_ entries",
|
|
"search": "Live Search:"
|
|
},
|
|
"order": [[0, 'asc']]
|
|
});
|
|
|
|
// 페이지 번호 복원 (초기 로드 시)
|
|
var savedPageNumber = getCookie('feeviewpageNumber');
|
|
if (savedPageNumber) {
|
|
dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
|
|
}
|
|
|
|
// 페이지 변경 이벤트 리스너
|
|
dataTable.on('page.dt', function() {
|
|
var feeviewpageNumber = dataTable.page.info().page + 1;
|
|
setCookie('feeviewpageNumber', feeviewpageNumber, 10); // 쿠키에 페이지 번호 저장
|
|
});
|
|
|
|
// 페이지 길이 셀렉트 박스 변경 이벤트 처리
|
|
$('#myTable_length select').on('change', function() {
|
|
var selectedValue = $(this).val();
|
|
dataTable.page.len(selectedValue).draw(); // 페이지 길이 변경 (DataTable 파괴 및 재초기화 없이)
|
|
|
|
// 변경 후 현재 페이지 번호 복원
|
|
savedPageNumber = getCookie('feeviewpageNumber');
|
|
if (savedPageNumber) {
|
|
dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
function restorePageNumber() {
|
|
var savedPageNumber = getCookie('feeviewpageNumber');
|
|
// if (savedPageNumber) {
|
|
// dataTable.page(parseInt(savedPageNumber) - 1).draw('page');
|
|
// }
|
|
location.reload(true);
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
$("input[name='bend_state']").change(function() {
|
|
if ($(this).is(":checked")) {
|
|
$("#saveBtn").click();
|
|
}
|
|
});
|
|
|
|
$("#saveBtn").click(function() {
|
|
var form = $('#board_form')[0];
|
|
var data = new FormData(form);
|
|
|
|
// Log the form data to the console for debugging
|
|
for (var pair of data.entries()) {
|
|
console.log(pair[0] + ': ' + pair[1]);
|
|
}
|
|
Fninsert();
|
|
});
|
|
|
|
// 화면이 시작된 후
|
|
hideOverlay();
|
|
});
|
|
|
|
function Fninsert() {
|
|
// $("#mode").val('modify');
|
|
// 폼데이터 전송시 사용함 Get form
|
|
var form = $('#board_form')[0];
|
|
// Create an FormData object
|
|
var data = new FormData(form);
|
|
|
|
// Iterate over the FormData entries and log them
|
|
for (var pair of data.entries()) {
|
|
console.log(pair[0] + ': ' + pair[1]);
|
|
}
|
|
|
|
$("button").prop("disabled", true); // 모든 버튼 비활성화
|
|
|
|
showMsgModal(2); // 파일저장중
|
|
|
|
if ((typeof ajaxRequest_write !== 'undefined' && ajaxRequest_write) || ajaxRequest_write !== null) {
|
|
ajaxRequest_write.abort();
|
|
}
|
|
|
|
ajaxRequest_write = $.ajax({
|
|
enctype: 'multipart/form-data', // file을 서버에 전송하려면 이렇게 해야 함 주의
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
timeout: 600000,
|
|
url: "insert.php",
|
|
type: "post",
|
|
data: data,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
// console.log(data);
|
|
console.log(data.num);
|
|
|
|
setTimeout(function() {
|
|
if (window.opener && !window.opener.closed) {
|
|
if (typeof window.opener.restorePageNumber === 'function') {
|
|
hideMsgModal();
|
|
window.opener.restorePageNumber(); // 함수가 있으면 실행
|
|
}
|
|
}
|
|
setTimeout(function() {
|
|
if (data && data.num) {
|
|
hideMsgModal();
|
|
// 저장된 데이터 번호를 사용하여 새로운 페이지로 이동
|
|
window.location.href = 'write_form.php?mode=view&tablename=' + $('#tablename').val() + '&num=' + data.num;
|
|
}
|
|
}, 1000);
|
|
|
|
}, 1500);
|
|
|
|
|
|
},
|
|
error: function(jqxhr, status, error) {
|
|
console.log(jqxhr, status, error);
|
|
hideMsgModal();
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<!-- mode == 'view' 조회 화면일때 사용금지 시키는 구문 -->
|
|
<script>
|
|
$(document).ready(function() {
|
|
var mode = '<?php echo $mode; ?>';
|
|
|
|
if (mode === 'view') {
|
|
|
|
$('input, textarea').prop('readonly', true); // Disable all input, textarea, and select elements
|
|
$('input[type=hidden]').prop('readonly', false);
|
|
|
|
$('.viewon').prop('readonly', true);
|
|
$('.viewNoBtn').prop('readonly', true);
|
|
$('input[type=hidden]').prop('readonly', false);
|
|
|
|
$('.viewon').each(function() {
|
|
$(this).addClass('readonly-checkbox readonly-radio');
|
|
});
|
|
|
|
$('input[type=file]').prop('disabled', true);
|
|
$('label').css('font-size', '1.2em');
|
|
|
|
// select 속성 readonly 효과 내기
|
|
$('select[data-readonly="true"]').on('mousedown', function(event) {
|
|
event.preventDefault();
|
|
});
|
|
|
|
// checkbox 속성 readonly 효과 내기
|
|
$('input[type="checkbox"][data-readonly="true"]').on('click', function(event) {
|
|
event.preventDefault();
|
|
});
|
|
}
|
|
});
|
|
|
|
</script>
|
|
|
|
|
|
<script>
|
|
|
|
function adjustTextareaHeight(textarea) {
|
|
textarea.style.height = 'auto';
|
|
textarea.style.height = (textarea.scrollHeight) + 'px';
|
|
}
|
|
$(document).ready(function() {
|
|
var $comment = $('#comment');
|
|
if ($comment.length) {
|
|
adjustTextareaHeight($comment[0]); // 초기 높이 조정
|
|
$comment.on('input', function() {
|
|
adjustTextareaHeight(this);
|
|
});
|
|
}
|
|
|
|
var $updatecomment = $('#updatecomment');
|
|
if ($updatecomment.length) {
|
|
adjustTextareaHeight($updatecomment[0]); // 초기 높이 조정
|
|
$updatecomment.on('input', function() {
|
|
adjustTextareaHeight(this);
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
|
|
$(document).ready(function() {
|
|
|
|
// Log 파일보기
|
|
$("#showlogBtn").click( function() {
|
|
var num = '<?php echo $num; ?>'
|
|
// table 이름을 넣어야 함
|
|
var workitem = 'output' ;
|
|
// 버튼 비활성화
|
|
var btn = $(this);
|
|
popupCenter("../Showlog.php?num=" + num + "&workitem=" + workitem , '로그기록', 500, 500);
|
|
btn.prop('disabled', false);
|
|
});
|
|
|
|
// 모달창 닫기
|
|
$(document).on('click', '.Modalclose', function(e) {
|
|
$("#telModal").modal("hide");
|
|
});
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
<script>
|
|
$(document).ready(function () {
|
|
displayFileLoad(); // 기존파일 업로드 보이기
|
|
});
|
|
|
|
// 기존 파일 불러오기 (Google Drive에서 가져오기)
|
|
function displayFileLoad() {
|
|
$('#displayFile').show();
|
|
var data = <?php echo json_encode($savefilename_arr); ?>;
|
|
|
|
$("#displayFile").html(''); // 기존 내용 초기화
|
|
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
data.forEach(function (fileData, i) {
|
|
const realName = fileData.realname || '다운로드 파일';
|
|
const link = fileData.link || '#';
|
|
const fileId = fileData.fileId || null;
|
|
|
|
if (!fileId) {
|
|
console.error("fileId가 누락되었습니다. index: " + i, fileData);
|
|
return;
|
|
}
|
|
|
|
$("#displayFile").append(
|
|
"<div class='row mb-3'>" +
|
|
"<div class='d-flex mb-3 align-items-center justify-content-start'>" +
|
|
"<span id='file" + i + "'>" +
|
|
"<a href='#' onclick=\"downloadFile('" + fileId + "', '" + realName + "'); return false;\">" +
|
|
"<span class='fw-bold text-primary'>" + realName + "</span>" +
|
|
"</a>" +
|
|
"</span> " +
|
|
"</div>" +
|
|
"</div>"
|
|
);
|
|
|
|
});
|
|
} else {
|
|
$("#displayFile").append(
|
|
"<div class='text-center text-muted'>No files</div>"
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
// 철재스라트 절곡 작업일지 버튼 클릭 시
|
|
$(document).on('click', '#loadBendingWorkBtn_slat', function() {
|
|
var num = $("#num").val();
|
|
var screenorslat = $("#screenorslat").val();
|
|
|
|
if(screenorslat =='스크린')
|
|
var url = '/output/viewBendingWork.php?num=' + num ;
|
|
else
|
|
var url = '/output/viewBendingWork_slat.php?num=' + num ;
|
|
|
|
customPopup(url, '절곡작업일지', 800, 900);
|
|
});
|
|
|
|
|
|
// 철재스라트 절곡-중간검사 버튼 클릭 시
|
|
$(document).on('click', '#loadmidInspectBendingBtn_slat', function() {
|
|
var num = $("#num").val();
|
|
var screenorslat = $("#screenorslat").val();
|
|
|
|
if(screenorslat =='스크린')
|
|
var url = '/output/viewMidInspectBending.php?num=' + num ;
|
|
else
|
|
var url = '/output/viewMidInspectBending_slat.php?num=' + num ;
|
|
|
|
|
|
// 팝업 호출
|
|
customPopup(url, '절곡-중간검사', 800, 900);
|
|
});
|
|
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|