first commit 2

This commit is contained in:
hmw1001
2026-06-11 18:47:38 +09:00
parent c768729ce6
commit 6f534e33a6
11095 changed files with 1595758 additions and 0 deletions
+105
View File
@@ -0,0 +1,105 @@
document.addEventListener('DOMContentLoaded', function() {
const listBody = document.getElementById('bo_list_body');
const toggleBtn = document.getElementById('view-toggle-btn');
if (!listBody || !toggleBtn) {
return; // 필수 요소가 없으면 스크립트 중단
}
const toggleIcon = toggleBtn.querySelector('i');
const savedViewMode = localStorage.getItem('board_view_mode') || 'list'; // 기본값은 'list'
// 뷰 모드를 설정하고 버튼의 아이콘과 툴팁을 업데이트하는 함수
function setViewMode(mode) {
if (mode === 'card') {
listBody.classList.remove('list-view');
listBody.classList.add('card-view');
// 현재 카드뷰 -> 다음 행동은 '목록형 보기'
toggleIcon.className = 'fa fa-bars';
toggleBtn.title = '목록형으로 보기';
} else { // 'list'
listBody.classList.remove('card-view');
listBody.classList.add('list-view');
// 현재 목록뷰 -> 다음 행동은 '카드형 보기'
toggleIcon.className = 'fa fa-th-large';
toggleBtn.title = '카드형으로 보기';
}
// 사용자의 선택을 로컬 스토리지에 저장
localStorage.setItem('board_view_mode', mode);
}
// 토글 버튼 클릭 이벤트
toggleBtn.addEventListener('click', function() {
// 현재 뷰 모드를 확인하고 반대 모드로 전환
const currentMode = listBody.classList.contains('card-view') ? 'list' : 'card';
setViewMode(currentMode);
});
// 페이지 로드 시 저장된 뷰 모드를 적용
setViewMode(savedViewMode);
// 카드형 뷰에서 체크박스 클릭 시, 목록형 뷰의 동일한 체크박스도 동기화
const cardCheckboxes = document.querySelectorAll('input[name="chk_wr_id_card[]"]');
cardCheckboxes.forEach((cardChk, index) => {
cardChk.addEventListener('change', function() {
const listChk = document.getElementById('chk_wr_id_' + index);
if (listChk) {
listChk.checked = this.checked;
}
});
});
// ▼▼▼ [추가] 노출 상태 토글 기능 ▼▼▼
$('#bo_list_body').on('click', '.btn-status-toggle', function(e) {
e.preventDefault();
const button = $(this);
const wr_id = button.data('wr-id');
const is_on = button.hasClass('status-on');
const new_status = is_on ? 'hide' : 'show';
const bo_table = $('input[name="bo_table"]').val();
// 아이콘을 로딩 상태로 변경
button.find('i').removeClass('fa-toggle-on fa-toggle-off').addClass('fa-spinner fa-spin');
$.ajax({
url: board_skin_url + '/ajax.status_update.php',
type: 'POST',
data: {
bo_table: bo_table,
wr_id: wr_id,
status: new_status
},
dataType: 'json',
success: function(data) {
if (data.success) {
// 버튼 상태 업데이트
button.removeClass('status-on status-off');
button.find('i').removeClass('fa-spinner fa-spin');
if (data.new_status === 'hidden') {
button.addClass('status-off').attr('title', '노출 상태로 변경');
button.find('i').addClass('fa-toggle-off');
} else {
button.addClass('status-on').attr('title', '숨김 상태로 변경');
button.find('i').addClass('fa-toggle-on');
}
// 페이지를 새로고침하여 상태 배지 텍스트 등을 완전히 업데이트합니다.
location.reload();
} else {
alert(data.error || '상태 변경에 실패했습니다.');
// 실패 시 아이콘 원상복구
button.find('i').removeClass('fa-spinner fa-spin').addClass(is_on ? 'fa-toggle-on' : 'fa-toggle-off');
}
},
error: function() {
alert('서버와 통신 중 오류가 발생했습니다.');
// 실패 시 아이콘 원상복구
button.find('i').removeClass('fa-spinner fa-spin').addClass(is_on ? 'fa-toggle-on' : 'fa-toggle-off');
}
});
});
// ▲▲▲ 여기까지 ▲▲▲
});
@@ -0,0 +1,56 @@
// jQuery가 로드된 후 이 스크립트가 실행되어야 합니다.
$(function() {
// Datepicker 초기화
$(".datepicker").datepicker({
dateFormat: "yy-mm-dd",
changeMonth: true,
changeYear: true,
dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
monthNamesShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
});
// ▼▼▼ [핵심 수정] 여러 파일 미리보기 기능 ▼▼▼
const fileWrappers = document.querySelectorAll('.file_preview_wrapper');
fileWrappers.forEach((wrapper, index) => {
const previewBox = wrapper.querySelector('.file_preview');
const fileInput = wrapper.querySelector('input[type="file"]');
const previewText = previewBox.querySelector('.preview_text');
const existingFileInfo = wrapper.querySelector('.preview_info');
if (!previewBox || !fileInput) return;
// 1. 미리보기 박스를 클릭하면 숨겨진 파일 입력 필드가 클릭되도록 함
// previewBox.addEventListener('click', () => {
// fileInput.click();
// });
// 2. 파일이 선택되었을 때의 동작
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
if (file) {
// 기존 파일 정보가 있다면 숨김 (새 파일로 교체되므로)
if (existingFileInfo) {
existingFileInfo.style.display = 'none';
}
if (file.type.startsWith('video/')) {
// 동영상은 미리보기를 생성하지 않고 파일 이름만 표시
previewBox.style.backgroundImage = 'none';
previewText.textContent = `동영상: ${file.name}`;
previewText.style.display = 'block';
} else if (file.type.startsWith('image/')) {
// 이미지는 FileReader를 사용해 미리보기 생성
const reader = new FileReader();
reader.onload = function(e) {
console.log("sdfasdfasfd= > ",`url(${e.target.result})`)
previewBox.style.backgroundImage = `url(${e.target.result})`;
previewText.style.display = 'none'; // '클릭하여 파일 업로드' 텍스트 숨김
}
reader.readAsDataURL(file);
}
}
});
});
// ▲▲▲ 여기까지 ▲▲▲
});
@@ -0,0 +1,71 @@
// jQuery가 로드된 후 이 스크립트가 실행되어야 합니다.
$(function() {
// Datepicker 초기화
$(".datepicker").datepicker({
dateFormat: "yy-mm-dd",
changeMonth: true,
changeYear: true,
dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
monthNamesShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
});
// 노출 방식 라디오 버튼 제어
const exposureRadios = $('input[name="wr_1"]');
const reservationFields = $('#reservation_fields');
function toggleReservationFields() {
if ($('input[name="wr_1"]:checked').val() === 'RESERVED') {
reservationFields.slideDown();
} else {
reservationFields.slideUp();
}
}
exposureRadios.on('change', toggleReservationFields);
toggleReservationFields();
// ▼▼▼ [핵심 수정] 여러 파일 미리보기 기능 ▼▼▼
const fileWrappers = document.querySelectorAll('.file_preview_wrapper');
fileWrappers.forEach((wrapper, index) => {
const previewBox = wrapper.querySelector('.file_preview');
const fileInput = wrapper.querySelector('input[type="file"]');
const previewText = previewBox.querySelector('.preview_text');
const existingFileInfo = wrapper.querySelector('.preview_info');
if (!previewBox || !fileInput) return;
// 1. 미리보기 박스를 클릭하면 숨겨진 파일 입력 필드가 클릭되도록 함
previewBox.addEventListener('click', () => {
fileInput.click();
});
// 2. 파일이 선택되었을 때의 동작
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
if (file) {
// 기존 파일 정보가 있다면 숨김 (새 파일로 교체되므로)
if (existingFileInfo) {
existingFileInfo.style.display = 'none';
}
if (file.type.startsWith('video/')) {
// 동영상은 미리보기를 생성하지 않고 파일 이름만 표시
previewBox.style.backgroundImage = 'none';
previewText.textContent = `동영상: ${file.name}`;
previewText.style.display = 'block';
} else if (file.type.startsWith('image/')) {
// 이미지는 FileReader를 사용해 미리보기 생성
const reader = new FileReader();
reader.onload = function(e) {
console.log("sdfasdfasfd= > ",`url(${e.target.result})`)
previewBox.style.backgroundImage = `url(${e.target.result})`;
previewText.style.display = 'none'; // '클릭하여 파일 업로드' 텍스트 숨김
}
reader.readAsDataURL(file);
}
}
});
});
// ▲▲▲ 여기까지 ▲▲▲
});