Files
2026-06-11 18:47:38 +09:00

326 lines
14 KiB
PHP

<?php
/**
* 상담 리소스(상담사/공간) 관리
*/
$sub_menu = '850615';
include_once('./_common.php');
// 관리자 권한 확인
if (!$is_admin) {
alert('관리자만 접근할 수 있습니다.');
}
$g5['title'] = '리소스(상담사) 관리';
// --- 액션 처리 ---
// 그룹 추가/수정
if ($_POST['action'] == 'save_group') {
$group_name = trim($_POST['group_name']);
$group_id = (int)$_POST['group_id'];
if ($group_name) {
if ($group_id > 0) {
$sql = "UPDATE consultant_groups SET name = '{$group_name}' WHERE id = {$group_id}";
} else {
$sql = "INSERT INTO consultant_groups (name, is_active) VALUES ('{$group_name}', 1)";
}
sql_query($sql);
alert('저장되었습니다.', $_SERVER['PHP_SELF']);
}
}
// 그룹 삭제
if ($_POST['action'] == 'delete_group') {
$group_id = (int)$_POST['group_id'];
// 리소스가 있는지 확인
$cnt = sql_fetch("SELECT COUNT(*) as cnt FROM consultant_resources WHERE group_id = {$group_id}")['cnt'];
if ($cnt > 0) {
alert('해당 그룹에 속한 리소스가 있어 삭제할 수 없습니다.');
} else {
sql_query("DELETE FROM consultant_groups WHERE id = {$group_id}");
alert('삭제되었습니다.', $_SERVER['PHP_SELF']);
}
}
// 리소스 추가/수정
if ($_POST['action'] == 'save_resource') {
$resource_id = (int)$_POST['resource_id'];
$group_id = (int)$_POST['group_id'];
$name = trim($_POST['resource_name']);
$desc = trim($_POST['resource_desc']);
$is_active = isset($_POST['is_active']) ? 1 : 0;
if ($name && $group_id) {
if ($resource_id > 0) {
$sql = "UPDATE consultant_resources
SET group_id = {$group_id}, name = '{$name}', description = '{$desc}', is_active = {$is_active}
WHERE id = {$resource_id}";
} else {
$sql = "INSERT INTO consultant_resources
(group_id, name, description, is_active)
VALUES ({$group_id}, '{$name}', '{$desc}', {$is_active})";
}
sql_query($sql);
alert('저장되었습니다.', $_SERVER['PHP_SELF']);
}
}
// 리소스 삭제
if ($_POST['action'] == 'delete_resource') {
$resource_id = (int)$_POST['resource_id'];
// 예약 내역 확인 (안전 삭제)
$cnt = sql_fetch("SELECT COUNT(*) as cnt FROM consultant_reservations WHERE resource_id = {$resource_id}")['cnt'];
if ($cnt > 0) {
// 실제 삭제 대신 비활성화 처리 권장하지만, 여기서는 경고 후 삭제 방지
alert('해당 리소스로 접수된 예약이 있어 삭제할 수 없습니다. 대신 사용 안 함으로 설정해주세요.');
} else {
sql_query("DELETE FROM consultant_resources WHERE id = {$resource_id}");
alert('삭제되었습니다.', $_SERVER['PHP_SELF']);
}
}
// --- 데이터 조회 ---
$groups = [];
$result = sql_query("SELECT * FROM consultant_groups ORDER BY id");
while ($row = sql_fetch_array($result)) {
$groups[$row['id']] = $row;
}
$resources = [];
$result = sql_query("SELECT r.*, g.name as group_name
FROM consultant_resources r
LEFT JOIN consultant_groups g ON r.group_id = g.id
ORDER BY r.group_id, r.id");
while ($row = sql_fetch_array($result)) {
$resources[] = $row;
}
include_once(G5_ADMIN_PATH . '/admin.head.php');
?>
<style>
.resource-container { max-width: 1200px; margin: 0 auto; padding: 20px; display: grid; grid-template-columns: 300px 1fr; gap: 20px; }
.card { background: #fff; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
.card-header { padding: 15px; background: #f8f9fa; border-bottom: 1px solid #ddd; font-weight: bold; display: flex; justify-content: space-between; align-items: center; }
.card-body { padding: 20px; }
.group-list { list-style: none; padding: 0; margin: 0; }
.group-item { padding: 10px; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; }
.group-item:last-child { border-bottom: none; }
.group-item:hover { background: #f1f3f5; }
.resource-table { width: 100%; border-collapse: collapse; }
.resource-table th, .resource-table td { padding: 12px; text-align: left; border-bottom: 1px solid #eee; }
.resource-table th { background: #f8f9fa; font-weight: bold; }
.btn-xs { padding: 2px 6px; font-size: 11px; border-radius: 3px; }
.badge { padding: 3px 8px; border-radius: 10px; font-size: 11px; color: #fff; }
.badge-success { background: #28a745; }
.badge-secondary { background: #6c757d; }
.form-control { width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
@media (max-width: 768px) {
.resource-container { grid-template-columns: 1fr; }
}
</style>
<div class="resource-container">
<!-- 좌측: 그룹 관리 -->
<div class="card">
<div class="card-header">
<span>그룹 관리</span>
<button type="button" class="btn btn-primary btn-sm" onclick="openGroupModal()">+ 추가</button>
</div>
<div class="card-body" style="padding:0;">
<ul class="group-list">
<?php if (empty($groups)): ?>
<li class="group-item" style="justify-content:center; color:#999;">등록된 그룹이 없습니다.</li>
<?php else: ?>
<?php foreach ($groups as $group): ?>
<li class="group-item">
<span><?php echo htmlspecialchars($group['name']); ?></span>
<div>
<button type="button" class="btn btn-secondary btn-xs" onclick="openGroupModal(<?php echo $group['id']; ?>, '<?php echo htmlspecialchars($group['name']); ?>')">수정</button>
<button type="button" class="btn btn-danger btn-xs" onclick="deleteGroup(<?php echo $group['id']; ?>)">삭제</button>
</div>
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
</div>
</div>
<!-- 우측: 리소스 목록 -->
<div class="card">
<div class="card-header">
<span>리소스(상담사/공간) 목록</span>
<button type="button" class="btn btn-primary btn-sm" onclick="openResourceModal()">+ 리소스 추가</button>
</div>
<div class="card-body" style="padding:0;">
<table class="resource-table">
<thead>
<tr>
<th>그룹</th>
<th>이름</th>
<th>설명</th>
<th>상태</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<?php if (empty($resources)): ?>
<tr><td colspan="5" style="text-align:center; padding:30px; color:#999;">등록된 리소스가 없습니다.</td></tr>
<?php else: ?>
<?php foreach ($resources as $res): ?>
<tr>
<td><?php echo htmlspecialchars($res['group_name']); ?></td>
<td><strong><?php echo htmlspecialchars($res['name']); ?></strong></td>
<td><?php echo htmlspecialchars($res['description']); ?></td>
<td>
<?php if ($res['is_active']): ?>
<span class="badge badge-success">사용중</span>
<?php else: ?>
<span class="badge badge-secondary">중지</span>
<?php endif; ?>
</td>
<td>
<button type="button" class="btn btn-secondary btn-xs"
onclick="openResourceModal(<?php echo $res['id']; ?>, <?php echo $res['group_id']; ?>, '<?php echo htmlspecialchars($res['name']); ?>', '<?php echo htmlspecialchars($res['description']); ?>', <?php echo $res['is_active']; ?>)">
수정
</button>
<button type="button" class="btn btn-danger btn-xs" onclick="deleteResource(<?php echo $res['id']; ?>)">삭제</button>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- 그룹 추가/수정 모달 -->
<div id="groupModal" class="modal" style="display:none;">
<div class="modal-content" style="width:350px;">
<div class="modal-header">
<h3 id="groupModalTitle">그룹 추가</h3>
<span class="close" onclick="closeModal('groupModal')">&times;</span>
</div>
<div class="modal-body">
<form method="post">
<input type="hidden" name="action" value="save_group">
<input type="hidden" name="group_id" id="modal_group_id" value="0">
<div class="form-group">
<label>그룹명 (예: 내과, 회의실)</label>
<input type="text" name="group_name" id="modal_group_name" class="form-control" required>
</div>
<div style="text-align:right; margin-top:15px;">
<button type="submit" class="btn btn-primary">저장</button>
</div>
</form>
</div>
</div>
</div>
<!-- 리소스 추가/수정 모달 -->
<div id="resourceModal" class="modal" style="display:none;">
<div class="modal-content">
<div class="modal-header">
<h3 id="resourceModalTitle">리소스 추가</h3>
<span class="close" onclick="closeModal('resourceModal')">&times;</span>
</div>
<div class="modal-body">
<form method="post">
<input type="hidden" name="action" value="save_resource">
<input type="hidden" name="resource_id" id="modal_res_id" value="0">
<div class="form-group">
<label>그룹 선택</label>
<select name="group_id" id="modal_res_group" class="form-control" required>
<option value="">선택하세요</option>
<?php foreach ($groups as $group): ?>
<option value="<?php echo $group['id']; ?>"><?php echo htmlspecialchars($group['name']); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group">
<label>이름 (예: 김의사, A회의실)</label>
<input type="text" name="resource_name" id="modal_res_name" class="form-control" required>
</div>
<div class="form-group">
<label>설명 (선택)</label>
<input type="text" name="resource_desc" id="modal_res_desc" class="form-control">
</div>
<div class="form-group">
<label><input type="checkbox" name="is_active" id="modal_res_active" value="1" checked> 사용함</label>
</div>
<div style="text-align:right; margin-top:15px;">
<button type="submit" class="btn btn-primary">저장</button>
</div>
</form>
</div>
</div>
</div>
<!-- 삭제 폼 (히든) -->
<form id="deleteForm" method="post">
<input type="hidden" name="action" id="deleteAction">
<input type="hidden" name="group_id" id="deleteGroupId">
<input type="hidden" name="resource_id" id="deleteResourceId">
</form>
<script>
function openGroupModal(id = 0, name = '') {
document.getElementById('groupModalTitle').textContent = id ? '그룹 수정' : '그룹 추가';
document.getElementById('modal_group_id').value = id;
document.getElementById('modal_group_name').value = name;
document.getElementById('groupModal').style.display = 'block';
}
function openResourceModal(id = 0, groupId = '', name = '', desc = '', active = 1) {
document.getElementById('resourceModalTitle').textContent = id ? '리소스 수정' : '리소스 추가';
document.getElementById('modal_res_id').value = id;
document.getElementById('modal_res_group').value = groupId;
document.getElementById('modal_res_name').value = name;
document.getElementById('modal_res_desc').value = desc;
document.getElementById('modal_res_active').checked = (active == 1);
document.getElementById('resourceModal').style.display = 'block';
}
function closeModal(id) {
document.getElementById(id).style.display = 'none';
}
function deleteGroup(id) {
if(confirm('정말 삭제하시겠습니까?')) {
document.getElementById('deleteAction').value = 'delete_group';
document.getElementById('deleteGroupId').value = id;
document.getElementById('deleteForm').submit();
}
}
function deleteResource(id) {
if(confirm('정말 삭제하시겠습니까?')) {
document.getElementById('deleteAction').value = 'delete_resource';
document.getElementById('deleteResourceId').value = id;
document.getElementById('deleteForm').submit();
}
}
// 모달 외부 클릭 닫기
window.onclick = function(event) {
if (event.target.classList.contains('modal')) {
event.target.style.display = 'none';
}
}
</script>
<?php
include_once(G5_ADMIN_PATH . '/admin.tail.php');
?>