Files
sam-kd/member/list.php

338 lines
12 KiB
PHP
Raw Normal View History

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
if (!isset($_SESSION["level"]) || $_SESSION["level"] > 5) {
sleep(1);
header("Location:" . $WebSite . "login/login_form.php");
exit;
}
include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php';
$title_message = '회원관리';
?>
<title><?= $title_message ?></title>
<body>
<?php if($mycompany ==='경동')
require_once($_SERVER['DOCUMENT_ROOT'] . '/myheader.php');
else
require_once($_SERVER['DOCUMENT_ROOT'] . '/myheader1.php');
?>
</head>
<?php
$tablename = "member";
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
$mode = isset($_REQUEST["mode"]) ? $_REQUEST["mode"] : "search";
$search = isset($_REQUEST["search"]) ? $_REQUEST["search"] : "";
// 새로 추가: 소속 검색값 (corpSearch)
$corpSearch = isset($_REQUEST["corpSearch"]) ? $_REQUEST["corpSearch"] : $mycompany ;
$partSearch = isset($_REQUEST["partSearch"]) ? $_REQUEST["partSearch"] : "";
// corp.json 파일에서 소속 목록 불러오기
$corpFile = $_SERVER['DOCUMENT_ROOT'] . '/member/corp.json';
$corpData = [];
if (file_exists($corpFile)) {
$corpJson = file_get_contents($corpFile);
$corpData = json_decode($corpJson, true);
if (!is_array($corpData)) { $corpData = []; }
}
// part.json 파일에서 부서 목록 불러오기
$partFile = $_SERVER['DOCUMENT_ROOT'] . '/member/part.json';
$partData = [];
if (file_exists($partFile)) {
$partJson = file_get_contents($partFile);
$partData = json_decode($partJson, true);
if (!is_array($partData)) {
$partData = [];
}
}
// 기본 SQL 쿼리 (검색조건 미포함)
$sql = "SELECT * FROM {$DB}.{$tablename} ORDER BY num DESC";
// 검색 조건 구성: 검색어와 소속 및 부서 검색 조건을 모두 고려
$conditions = [];
$bindParams = [];
if ($mode == "search") {
if (!empty($search)) {
// member 테이블의 모든 컬럼에 대해 LIKE 검색 (예제)
$columns = [];
$stmt = $pdo->query("SHOW COLUMNS FROM " . $DB . "." . $tablename);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$columns[] = $row['Field'];
}
$searchConditions = [];
foreach ($columns as $index => $col) {
$paramName = ":search{$index}";
$searchConditions[] = "$col LIKE $paramName";
$bindParams[$paramName] = "%$search%";
}
$conditions[] = "(" . implode(" OR ", $searchConditions) . ")";
}
if (!empty($corpSearch)) {
// 소속(division) 검색 조건 추가
$conditions[] = "division LIKE :corpSearch";
$bindParams[":corpSearch"] = "%$corpSearch%";
}
if (!empty($partSearch)) {
// 부서(part) 검색 조건 추가
$conditions[] = "part LIKE :partSearch";
$bindParams[":partSearch"] = "%$partSearch%";
}
if (!empty($conditions)) {
$sql = "SELECT * FROM {$DB}.{$tablename} WHERE " . implode(" AND ", $conditions) . " ORDER BY num DESC";
}
}
$stmt = $pdo->prepare($sql);
if ($mode == "search" && !empty($bindParams)) {
foreach ($bindParams as $paramName => $paramValue) {
$stmt->bindValue($paramName, $paramValue, PDO::PARAM_STR);
}
}
$stmt->execute();
?>
<form name="board_form" id="board_form" method="post" action="list.php?mode=search">
<div class="container-fluid justify-content-center">
<div class="d-flex mt-3 mb-3 justify-content-center align-items-center">
<span class="text-secondary fs-5 mx-2"><?= $title_message ?></span>
<button type="button" class="btn btn-dark btn-sm mx-2" onclick='location.reload()'>
<i class="bi bi-arrow-clockwise"></i>
</button>
</div>
<div class="d-flex mt-3 mb-3 justify-content-center align-items-center">
<h5><span class="text-secondary">연차 전자결재 중간결재자는 eworks_lv 2 설정합니다.</span></h5>
</div>
<div class="d-flex mt-2 mb-2 justify-content-center align-items-center">
<button type="button" class="btn btn-dark btn-sm mx-1" onclick="popupCenter('initsettings.php', '소속관리', 600, 800);return false;"> 소속관리 </button>
<button type="button" class="btn btn-dark btn-sm mx-1" onclick="popupCenter('setline.php', '결재라인 등록', 600, 500);return false;"> 결재라인 </button>
<!-- 소속 검색 select 추가 -->
<div class="inputWrap30 mx-1">
<select name="corpSearch" id="corpSearch" class="form-select w100px mx-1" style="font-size: 0.9rem; height: 32px;">
<option value=""><?= "(소속)" ?></option>
<?php foreach($corpData as $corp): ?>
<option value="<?= htmlspecialchars($corp, ENT_QUOTES, 'UTF-8') ?>" <?= ($corpSearch === $corp) ? 'selected' : '' ?>>
<?= htmlspecialchars($corp, ENT_QUOTES, 'UTF-8') ?>
</option>
<?php endforeach; ?>
</select>
</div>
<!-- 부서 검색 select 추가 -->
<div class="inputWrap30 mx-1">
<select name="partSearch" id="partSearch" class="form-select w120px mx-1" style="font-size: 0.9rem; height: 32px;">
<option value=""><?= "(부서)" ?></option>
<!-- 옵션은 JS에서 동적으로 채워짐 -->
</select>
</div>
<!-- 기존 검색어 입력 -->
<div class="inputWrap30 mx-1">
<input type="text" id="search" class="form-control w150px mx-1" name="search" value="<?= htmlspecialchars($search, ENT_QUOTES, 'UTF-8') ?>" onkeydown="SearchEnter();" placeholder="검색어">
<button class="btnClear"></button>
</div>
<button type="button" id="searchBtn" class="btn btn-dark btn-sm mx-1">
<i class="bi bi-search"></i> 검색
</button>
<button type="button" class="btn btn-dark btn-sm mx-1" onclick="popupCenter('write_form.php', '등록', 900, 800);return false;">
<i class="bi bi-pencil"></i> 신규
</button>
</div>
<div class="row d-flex">
<table class="table table-hover" id="myTable">
<thead class="table-primary">
<tr>
<th class="text-center"> 번호 </th>
<th class="text-center"> 소속회사 </th>
<th class="text-center"> 퇴직여부 </th>
<th class="text-center"> ID </th>
<th class="text-center"> 파트 </th>
<th class="text-center"> 성명 </th>
<th class="text-center"> 직위 </th>
<th class="text-center"> 레벨 </th>
<th class="text-center"> 입사일 </th>
<th class="text-center"> HP </th>
<th class="text-center"> Email </th>
<th class="text-center"> 순서 </th>
<th class="text-center"> 회계권한 </th>
<th class="text-center"> 전자결재 <br> eworks_lv</th>
<th class="text-center"> 1 결재권자</th>
<th class="text-center"> 법인카드 </th>
<th class="text-center"> 급여계좌 </th>
</tr>
</thead>
<tbody>
<?php
try {
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); // 전체 결과 배열로 가져오기
$total_row = count($results);
$start_num = $total_row;
foreach ($results as $row) {
include '_row.php';
?>
<tr onclick="redirectToView('<?= $num ?>')">
<td class="text-center"><?= $start_num ?></td>
<td class="text-center"><?= $division ?></td>
<td class="text-center text-danger fw-bold"><?= ($quitDate === '0000-00-00' || $quitDate === '' || $quitDate === null) ? '' : '퇴직' ?></td>
<td class="text-center"><?= $id ?></td>
<td class="text-center"><?= $name ?></td>
<td class="text-center"><?= $part ?></td>
<td class="text-center"><?= $position ?></td>
<td class="text-center"><?= $lv ?></td>
<td class="text-center"><?= ($enterDate === '0000-00-00' || $enterDate === '' || $enterDate === null) ? '' : $enterDate ?></td>
<td class="text-center"><?= $hp ?></td>
<td class="text-center"><?= $email ?></td>
<td class="text-center"><?= $numorder ?></td>
<td class="text-center"><?= $authority ?></td>
<td class="text-center"><?= $eworks_lv ?></td>
<td class="text-center"><?= $first_approval_name ?></td>
<td class="text-center"><?= $card_company ?>/<?= $card_number ?> </td>
<td class="text-center">
<?= $pay_bank ? "{$pay_bank}/{$pay_account}/{$pay_holder}" : '' ?>
</td>
</tr>
<?php
$start_num--;
}
} catch (PDOException $Exception) {
print "오류: " . $Exception->getMessage();
}
?>
</tbody>
</table>
</div>
</div>
</form>
<!-- 페이지로딩 -->
<script>
// 페이지 로딩
$(document).ready(function() {
var loader = document.getElementById('loadingOverlay');
if(loader)
loader.style.display = 'none';
});
</script>
<script>
var dataTable; // DataTables 인스턴스 전역 변수
var noticepageNumber; // 현재 페이지 번호 저장을 위한 전역 변수
$(document).ready(function() {
// DataTables 초기 설정
dataTable = $('#myTable').DataTable({
"paging": true,
"ordering": true,
"searching": false,
"pageLength": 50,
"lengthMenu": [50, 100, 200, 500, 1000],
"language": {
"lengthMenu": "Show _MENU_ entries",
"search": "Live Search:"
},
"order": [[0, 'desc']]
});
// 페이지 번호 복원 (초기 로드 시)
var savedPageNumber = getCookie('memberpageNumber');
if (savedPageNumber) {
dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
}
// 페이지 변경 이벤트 리스너
dataTable.on('page.dt', function() {
var noticepageNumber = dataTable.page.info().page + 1;
setCookie('memberpageNumber', noticepageNumber, 10); // 쿠키에 페이지 번호 저장
});
// 페이지 길이 셀렉트 박스 변경 이벤트 처리
$('#myTable_length select').on('change', function() {
var selectedValue = $(this).val();
dataTable.page.len(selectedValue).draw(); // 페이지 길이 변경 (DataTable 파괴 및 재초기화 없이)
// 변경 후 현재 페이지 번호 복원
savedPageNumber = getCookie('memberpageNumber');
if (savedPageNumber) {
dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
}
});
});
function restorePageNumber() {
var savedPageNumber = getCookie('memberpageNumber');
if (savedPageNumber) {
dataTable.page(parseInt(savedPageNumber) - 1).draw('page');
}
}
function redirectToView(num) {
var title = '<?=$title_message?>';
popupCenter('write_form.php?mode=modify&num=' + num, title, 900, 800);
}
$(document).ready(function() {
$("#searchBtn").click(function() {
document.getElementById('board_form').submit();
});
});
function SearchEnter() {
if (event.keyCode == 13) {
document.getElementById('board_form').submit();
}
}
$(document).ready(function(){
$("input").attr("autocomplete", "off");
});
</script>
<script>
$(document).ready(function(){
// PHP의 부서 JSON 데이터를 JS 변수로 저장 (각 항목은 ['corp'=> ..., 'part'=> ...] 형식)
var partData = <?= json_encode($partData) ?>;
// PHP에서 전달된 부서 검색 값 (기존에 선택된 값)
var initialPart = "<?= htmlspecialchars($partSearch, ENT_QUOTES, 'UTF-8') ?>";
// 부서 select 업데이트 함수
function updatePartSelect(selectedCorp) {
var $partSelect = $('#partSearch');
$partSelect.empty();
$partSelect.append('<option value=""><?= "(부서)" ?></option>');
// 선택된 소속과 일치하는 부서 옵션만 추가
$.each(partData, function(index, dept) {
if(dept.corp === selectedCorp) {
$partSelect.append('<option value="'+ dept.part +'">'+ dept.part +'</option>');
}
});
// 만약 초기 부서값이 있다면 선택
if(initialPart !== "") {
$partSelect.val(initialPart);
}
}
// 페이지 로드 시, 이미 소속이 선택되어 있다면 부서 옵션 업데이트
var initialCorp = $('#corpSearch').val();
updatePartSelect(initialCorp);
// 소속 select 변경 시 부서 select 업데이트
$('#corpSearch').on('change', function(){
var selectedCorp = $(this).val();
updatePartSelect(selectedCorp);
});
});
</script>
</body>
</html>