22 Commits

Author SHA1 Message Date
6ab6c29bf9 권한체크 변경 2025-07-23 17:21:16 +09:00
84133db18a 각 페이지별 권한을 설정하여 조회시키도록 수정 2025-07-23 17:20:08 +09:00
fcc95c6c0a 기간별 수량 조회 페이지 신설 2025-07-23 16:55:58 +09:00
95fbca87ab 페이지 직접 실행 방지 코드 추가 및 공백, 주석 정리 2025-07-23 16:55:45 +09:00
99a9a6fd42 권한 없는 사용자의 메뉴 접근 방지를 위한 코드 추가 2025-07-23 16:55:26 +09:00
cc2ee8cbb3 css 파일명 변경 및 인쇄를 위한 no-print, only-print 스타일 추가 2025-07-23 16:20:20 +09:00
0817686f69 정렬 상태를 나타내는 아이콘 및 기본값 추가 2025-07-23 16:19:39 +09:00
223100a698 Merge branch 'latest.skin_edit' 2025-07-21 14:17:03 +09:00
1e7ba2d1e4 진행 > 예정 > 종료 순으로 순서 변경 2025-07-21 14:16:17 +09:00
cebd46a2e8 종료상태인 항목을 제외함 2025-07-21 14:14:34 +09:00
b25d713914 위젯 배경 부모 요소 무시하고 100% 지정, 배경색 지정 2025-07-09 11:18:08 +09:00
d2a66a9163 promotion latest skin 인라인 padding 삭제 2025-07-09 11:17:52 +09:00
86b593765a Merge branch 'latest.skin_edit' 2025-07-09 10:58:54 +09:00
8f0f32b3e2 폴더명 변경 2025-07-09 10:58:34 +09:00
d45c277f02 배너부분 별도로 분리 2025-07-09 10:56:12 +09:00
f95459ce77 event2 일므을 promotion으로 변경 2025-07-09 10:53:27 +09:00
e625446711 중간 배너를 위젯으로 추가 2025-07-09 10:52:31 +09:00
bccf145cf1 필요없는 주석 수정 2025-07-09 10:15:29 +09:00
999219f2ec 추후 수정을 위한 주석 추가 2025-07-09 10:15:20 +09:00
2ba6a6fb61 예정 > 진행 > 종료 순으로 변경함 2025-07-09 10:13:55 +09:00
c78f5557bb 시작일 빠른순으로 우선순위 > 시작일 최근순으로 우선순위로 변경 2025-07-09 10:12:35 +09:00
1154d140c1 상태 및 정렬 우선순위를 설정하고 그에 따라 정렬 출력, 상태를 설정했기 때문에 날짜를 if로 받아 처리하던 부분을 switch 로 변경하여 처리 2025-07-09 10:07:54 +09:00
20 changed files with 711 additions and 163 deletions

View File

@ -1,4 +1,6 @@
<?php
if (!isset($_SESSION['user_id'])) exit; //페이지 직접 실행 방지
include_once "_common.php";
// 테이블 존재 유무 확인 쿼리

View File

@ -2,8 +2,6 @@
include_once "_common.php";
if(!$_SESSION['user_id']) exit; // 로그인되어있지 않으면 확인 불가
$product_name = isset($_POST['product_name']) ? trim($_POST['product_name']) : exit;
$barcode = isset($_POST['barcode']) ? trim($_POST['barcode']) : exit;
$used = isset($_POST['used']) ? trim($_POST['used']) : exit;

View File

@ -2,6 +2,8 @@
// 베이커리 제품목록록
include_once "_common.php";
if (!isset($_SESSION['user_id'])) header( 'Location: FG_MANAGER_URL' ); // 로그인 되어있지 않으면 로그인 페이지로 보냄
include_once 'head.sub.php';
include_once FG_MANAGER_PATH."/head.php";
// 검색 변수 초기화

View File

@ -3,6 +3,7 @@
include_once "_common.php";
if (!isset($_SESSION['user_id'])) header( 'Location: FG_MANAGER_URL' ); // 로그인 되어있지 않으면 로그인 페이지로 보냄
include_once 'head.sub.php';
include_once FG_MANAGER_PATH."/head.php";
// 검색 변수 초기화
@ -140,7 +141,7 @@ if (!$authInfo) {
<thead class="table-light">
<tr class="align-middle">
<th class="text-center no-click">No.</th>
<th class="text-center" data-column="product_name" data-order="asc">품목 <span class="sort-icon" data-column="product_name"></span></th>
<th class="text-center" data-column="product_name" data-order="asc">품목 <span class="sort-icon fa fa-sort-up" data-column="product_name"></span></th>
<th class="text-center" data-column="barcode" data-order="asc">바코드 <span class="sort-icon" data-column="barcode"></span></th>
<th class="text-center" data-column="previous_stock" data-order="asc">전일재고 <span class="sort-icon" data-column="previous_stock"></span></th>
<th class="text-center" data-column="production" data-order="asc">생산 <span class="sort-icon" data-column="production"></span></th>

View File

@ -2,6 +2,7 @@
// 설정 파일 포함
include_once('_common.php');
if(!$_SESSION['user_id']) exit; // 로그인 되어있지 않으면 확인 불가
// 검색 날짜
$searchDate = $_POST['searchDate'];
$ord_by = $_POST['ordBy'];

View File

@ -0,0 +1,269 @@
<?php
// 베이커리 재고관리
include_once "_common.php";
if (!isset($_SESSION['user_id'])) header( 'Location: FG_MANAGER_URL' ); // 로그인 되어있지 않으면 로그인 페이지로 보냄
include_once 'head.sub.php';
include_once FG_MANAGER_PATH."/head.php";
// 검색 변수 초기화
!isset($search) ?? "";
!isset($where) ?? "";
!isset($search_count) ?? "";
$is_debug = false; // 디버깅 시 true로 변경
// ord_by 로 넘어온 값이 있으면 반영
$ord_by = isset($_REQUEST["ord_by"]) ? $_REQUEST["ord_by"] : "product_name ASC";
// 검색어 반영
$searchWord = $_GET["searchWord"] ?? "";
// 날짜 가져오기
$today = new DateTime();
$startDate = $_REQUEST["startDate"] ?? (clone $today)->modify('-7 days')->format('Y-m-d');
$endDate = $_REQUEST["endDate"] ?? (clone $today)->modify('-1 day')->format('Y-m-d');
// 최종 수정시간
$edit_datetime = date('Y-m-d H:i:s'); // 최종 수정 시간 업데이트
// 베이커리 계정인지 확인하고, 오늘 이후 날짜인 경우 생산-매출액란을 공란으로 출력하기 위한 변수
$is_bakery = ( $_SESSION['user_id'] == "bakery" ) ? true : false;
$is_bakery_input = ( strtotime($searchDate) >= strtotime(date("Y-m-d")) ) ? true : false;
// 합계 구하기
$totalBakeryInvenData = getBakeryInvenSumPeriod($startDate, $endDate, $searchWord);
// barcode별 그룹화된 상세 데이터를 구하기
$bakeryInvenData = getBakeryInvenDataPeriod($startDate, $endDate, $searchWord);
?>
<style>
/* 틀 고정
.tableWrapper {
overflow: auto;
height: 700px;
width: 100%;
}
#bakeryTable th {
position: sticky;
top: 0px;
}
*/
</style>
<div class="d-flex justify-content-between mb-3 ">
<div class="row align-items-start">
<h2>베이커리 기간별 현황</h2>
</div>
<div class="row align-items-end align-self-end only-print">
<p>조회일자 : <?=$startDate?> ~ <?=$endDate?></p>
</div>
</div>
<div class="d-flex justify-content-between mb-3 no-print">
<div class="row align-items-start flex-nowrap">
<div class="input-group">
<span class="input-group-text">시작일</span>
<input type="date" class="form-control" id="startDateInput" name="startDate" max="9999-12-31" value="<?= $startDate ?>">
<span class="input-group-text">종료일</span>
<input type="date" class="form-control" id="endDateInput" name="endDate" max="9999-12-31" value="<?= $endDate ?>">
</div>
</div>
<div class="row align-items-end">
<div class="input-group">
<input class="form-control" type="text" name="searchWord" id="searchWord" placeholder="상품명 검색" value="<?= htmlspecialchars($_GET['searchWord'] ?? '') ?>" />
<button class="btn btn-success" id="searchBtn" type="button">검색</button>
<button class="btn btn-primary" type="button" id="resetSearch">초기화</button>
</div>
</div>
<!--
<div class="row align-items-end">
<input type="file" id="inventoryFileInput" style="display:none;" accept=".xls,.xlsx" />
<div class="btn-group" role="group" aria-label="bakery-button">
<button type="button" class="btn btn-success" id="exportExcelButton">엑셀변환</button>
</div>
</div>
-->
</div>
<div class="table">
<h3>개요</h3>
<table class="table align-middle" id="bakeryTotalTable">
<thead class="table-light">
<tr class="align-middle">
<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">판매</th>
<th class="text-center">매출액</th>
</tr>
</thead>
<tbody>
<tr class="align-middle">
<th class="text-center"><?=number_format(cntUsedBakeryItems())?></th>
<th class="text-center"><?=number_format($totalBakeryInvenData['t_production'])?></th>
<th class="text-center"><?=number_format($totalBakeryInvenData['t_inhouse_use'])?></th>
<th class="text-center"><?=number_format($totalBakeryInvenData['t_recycling'])?></th>
<th class="text-center"><?=number_format($totalBakeryInvenData['t_disposal'])?></th>
<th class="text-center"><?=number_format($totalBakeryInvenData['t_sales'])?></th>
<th class="text-center"><?=number_format($totalBakeryInvenData['t_payment_amount'])?></th>
</tr>
</tbody>
</table>
</div>
<div class="tableWrapper">
<h3>상세</h3>
<table class="table align-middle table-hover <?php if( $bakeryInvenData) echo 'table-striped'?> bakery" id="bakeryTable">
<colgroup>
<col width="30px">
<col width="150px">
<col width="70px">
<col width="70px">
<col width="70px">
<col width="70px">
<col width="70px">
<col width="70px">
</colgroup>
<!-- 테이블 제목 -->
<thead class="table-light">
<tr class="align-middle">
<th class="text-center no-click">No.</th>
<th class="text-center" data-column="product_name" data-order="asc">품목 <span class="sort-icon fa fa-sort-up" data-column="product_name"></span></th>
<th class="text-center" data-column="production" data-order="asc">생산 <span class="sort-icon" data-column="production"></span></th>
<th class="text-center" data-column="inhouse_use" data-order="asc">업장사용 <span class="sort-icon" data-column="inhouse_use"></span></th>
<th class="text-center" data-column="recycling" data-order="asc">재활용 <span class="sort-icon" data-column="recycling"></span></th>
<th class="text-center" data-column="disposal" data-order="asc">폐기 <span class="sort-icon" data-column="disposal"></span></th>
<th class="text-center" data-column="sales" data-order="asc">판매 <span class="sort-icon" data-column="sales"></span></th>
<th class="text-center" data-column="payment_amount" data-order="asc">매출액 <span class="sort-icon" data-column="payment_amount"></span></th>
</tr>
</thead>
<!-- 테이블 데이터 -->
<tbody class="table-group-divider" id="bakeryTableBody">
<?php
if ( $bakeryInvenData ) {
// 데이터 가져와서 뿌리기
$i = 1; // number 표시를 위한 변수
foreach ($bakeryInvenData as $row) {
?>
<tr id="row-<?=$row['barcode']?>">
<td class="text-center"><?=$i?></td>
<td class="text-left"><?=htmlspecialchars($row['product_name'])?></td>
<td class="text-end"><span class="value"><?=number_format($row['production'])?></span>
<input class="form-control text-end d-none" type="text" value="<?=$row['production']?>" id="production-<?=$row['barcode']?>" product_name="<?=$row['product_name']?>" aria-label="production" readonly>
</td>
<td class="text-end"><span class="value"><?=number_format($row['inhouse_use'])?></span>
<input class="form-control text-end d-none" type="text" value="<?=$row['inhouse_use']?>" id="inhouse_use-<?=$row['barcode']?>" product_name="<?=$row['product_name']?>" aria-label="inhouse_use" readonly>
</td>
<td class="text-end"><span class="value"><?=number_format($row['recycling'])?></span>
<input class="form-control text-end d-none" type="text" value="<?=$row['recycling']?>" id="recycling-<?=$row['barcode']?>" product_name="<?=$row['product_name']?>" aria-label="recycling" readonly>
</td>
<td class="text-end"><span class="value"><?=number_format($row['disposal'])?></span>
<input class="form-control text-end d-none" type="text" value="<?=$row['disposal']?>" id="disposal-<?=$row['barcode']?>" product_name="<?=$row['product_name']?>" aria-label="disposal" readonly>
</td>
<td class="text-end"><?=number_format($row['sales'])?></td>
<td class="text-end"><?=number_format($row['payment_amount'])?></td>
</tr>
<?php
$i++;
} // endforeach
?>
</tbody>
<!-- 합계 데이터 출력 -->
<tfoot class="no-print">
<tr>
<td colspan="2" class="text-center">합계</th>
<td class="text-end" id="total_production"><?=number_format($totalBakeryInvenData['t_production'])?></td>
<td class="text-end" id="total_inhouse_use"><?=number_format($totalBakeryInvenData['t_inhouse_use'])?></td>
<td class="text-end" id="total_recycling"><?=number_format($totalBakeryInvenData['t_recycling'])?></td>
<td class="text-end" id="total_disposal"><?=number_format($totalBakeryInvenData['t_disposal'])?></td>
<td class="text-end" id="total_sales"><?=number_format($totalBakeryInvenData['t_sales'])?></td>
<td class="text-end" id="total_payment_amount"><?=number_format($totalBakeryInvenData['t_payment_amount'])?></td>
</tr>
</tfoot>
<?php
} else {
// 데이터가 없을 경우 출력
echo "<tr class='align-middle'>";
echo "<td class='text-center' colspan='9'> 자료가 존재하지 않습니다 </td>";
echo "</tr></tbody>";
} // endif
?>
</table>
</div>
<script>
const startDateInput = document.getElementById('startDateInput');
const endDateInput = document.getElementById('endDateInput');
const searchInput = document.getElementById('searchWord');
const searchBtn = document.getElementById('searchBtn');
const resetBtn = document.getElementById('resetSearch');
// URL 쿼리 갱신 함수
function getUrlWithParams(paramsToUpdate = {}, paramsToDelete = []) {
const url = new URL(window.location.href);
// 업데이트
for (const key in paramsToUpdate) {
url.searchParams.set(key, paramsToUpdate[key]);
}
// 삭제
for (const key of paramsToDelete) {
url.searchParams.delete(key);
}
return url.toString();
}
// 날짜 변경 시
function onDateChange() {
const url = getUrlWithParams({
startDate: startDateInput.value,
endDate: endDateInput.value,
});
window.location.href = url;
}
// 검색 버튼 클릭 시
function onSearchClick() {
const url = getUrlWithParams({
startDate: startDateInput.value,
endDate: endDateInput.value,
searchWord: searchInput.value,
});
window.location.href = url;
}
// 검색어 입력창에서 엔터 입력 시 검색 실행
searchInput.addEventListener('keydown', function (e) {
if (e.key === 'Enter') {
e.preventDefault(); // 폼 제출 방지
onSearchClick(); // 검색 함수 호출
}
});
// 초기화 버튼 클릭 시
function onResetClick() {
const url = getUrlWithParams({}, ['searchWord']);
window.location.href = url;
}
// 이벤트 바인딩
startDateInput.addEventListener('change', onDateChange);
endDateInput.addEventListener('change', onDateChange);
searchBtn.addEventListener('click', onSearchClick);
resetBtn.addEventListener('click', onResetClick);
</script>
<?php
include_once "tail.sub.php";
include_once FG_MANAGER_PATH."/tail.php";

View File

@ -0,0 +1,8 @@
<?php
if (!isset($_SESSION['user_id'])) exit; //페이지 직접 실행 방지
// 권한부여 및 체크
if ( !in_array($_SESSION['user_id'], $pageAuth['bakery']) || $_SESSION['user_id'], $pageAuth['admin']) ) {
alert('권한이 없습니다', false);
}
?>

View File

@ -1,4 +1,6 @@
<?php
if (!isset($_SESSION['user_id'])) exit; //페이지 직접 실행 방지
?>
<script>
$(document).ready(function() {
var ordBy = <?php echo json_encode(isset($ord_by) ? $ord_by : ''); ?>;
@ -71,18 +73,21 @@ $(document).ready(function() {
function attachThClickEvent() {
$('table').off('click', 'th'); // 기존 이벤트 제거
$('table').on('click', 'th', function() {
// #bakeryTable에만 정렬 이벤트 등록
$('#bakeryTable').on('click', 'th', function() {
if ($(this).hasClass('no-click')) {
return; // no-click 클래스를 가진 th 요소는 클릭 이벤트를 무시하고 이후 코드 실행 안함
return; // no-click 클래스 th는 무시
}
console.log('th clicked:', $(this).data('column')); // 로그 추가
const column = $(this).data('column');
let order = $(this).data('order') || 'asc'; // 기본값 'asc'
let order = $(this).data('order') || 'asc';
order = order === 'asc' ? 'desc' : 'asc';
$(this).data('order', order);
sortTable(column, order); // 테이블 정렬 함수 호출
sortTable(column, order);
});
// 다른 테이블(#bakeryTotalTable 등)은 클릭해도 정렬 이벤트 없음
}
function sortTable(column, order) {
@ -102,9 +107,22 @@ $(document).ready(function() {
$.each(rows, (index, row) => {
tbody.append(row);
// 정렬 후 No. 열의 값을 재설정
$(row).find('td').eq(0).text(index + 1);
});
// 아이콘 업데이트
// 모든 th의 .sort-icon 초기화 (모든 아이콘 초기화)
$('#bakeryTable th .sort-icon').removeClass('fa fa-sort-up fa-sort-down').text('');
// 정렬된 컬럼의 아이콘만 선택하기
const $icon = $(`#bakeryTable th[data-column="${column}"] > .sort-icon`);
if (order === 'asc') {
// FontAwesome 아이콘 클래스 사용 시
$icon.addClass('fa fa-sort-up').text('');
} else {
$icon.addClass('fa fa-sort-down').text('');
}
}
function getColumnIndex(column) {

View File

@ -40,6 +40,14 @@ $recnum = 15; // 출력할 아이템 수
$pagenum = 20; // 한 페이지에 출력할 페이지 수
$query_limit = "LIMIT ".(($p - 1) * $recnum).",".$recnum; // 출력할 아이템 수 만큼만 가져오기
// 권한설정
$pageAuth = [
'bakery' => ['bakery', 'firstgarden'],
'vip' => ['ticket', 'firstgarden', 'service', 'gift', 'heyum', 'dksdpwl'],
'ticket' => ['ticket'],
'admin' => ['abc']
];
// page 설정
// 페이지가 많지 않기 때문에 수동으로 배열을 만들었지만, 페이지가 많아지면 DB를 이용하는것이 편함
// 1차배열의 index 순으로 출력함. 특정 메뉴가 상단에 출력되게 하고 싶다면 순서를 바꿔줄 것
@ -136,3 +144,4 @@ $setpage = array(
'purl' => FG_MANAGER_URL.'/bakery/bakery_stock.php'
)
);

37
manager/css/main.css Normal file
View File

@ -0,0 +1,37 @@
/* 전역 */
body {padding-top: 5em; font-size: 0.9em;}
/* 사이드바 폭 */
.offcanvas.show,.offcanvas.showing,.offcanvas.hiding {width: 250px; }
/* 로그인 */
.container-login button {margin-top: 20px; width: 100%;}
.container-login h2 {text-align: center;}
/* viplist 전체숫자 */
.viplist_head {}
.mod-label {width:200px;}
.unused td {color:gray !important}
/* 중복체크 */
.checkdup {height: 25px; text-align: right;}
/* 베이커리용 CSS */
.bakery tfoot {
font-weight: 600;
}
.sort-icon {
margin-left: 5px;
vertical-align: middle;
}
/* 인쇄시에만 출력되도록 */
.only-print { display: none !important; }
/* 프린트 시 출력되지 않도록 */
@media print {
.no-print { display: none !important; }
header, footer { display: none; }
/* 얘는 출력되어야 함 */
.only-print { display: block !important; }
}

View File

@ -1,17 +0,0 @@
/* 전역 */
body {padding-top: 5em; font-size: 0.9em;}
/* 사이드바 폭 */
.offcanvas.show,.offcanvas.showing,.offcanvas.hiding {width: 250px; }
/* 로그인 */
.container-login button {margin-top: 20px; width: 100%;}
.container-login h2 {text-align: center;}
/* viplist 전체숫자 */
.viplist_head {}
.mod-label {width:200px;}
.unused td {color:gray !important}
/* 중복체크 */
.checkdup {height: 25px; text-align: right;}

View File

@ -22,7 +22,7 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<link rel="stylesheet"href="<?=FG_MANAGER_URL?>/css/vip.css">
<link rel="stylesheet"href="<?=FG_MANAGER_URL?>/css/main.css">
<script src="<?=FG_MANAGER_URL?>/js/list.js"></script>
<script src="<?=FG_MANAGER_URL?>/js/ajax.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
@ -37,7 +37,7 @@
$page = basename($_SERVER['PHP_SELF'], '.php'); // 로그인 했다면 현재 페이지 이름 구함
?>
<!-- 내비게이션 시작 -->
<nav class="navbar navbar-expand-lg bg-body-tertiary fixed-top d-flex p-2">
<nav class="navbar navbar-expand-lg bg-body-tertiary fixed-top d-flex p-2 no-print">
<div class="container-fluid">
<a class="navbar-brand" href="<?=FG_MANAGER_URL?>">퍼스트가든 관리페이지</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
@ -45,6 +45,9 @@
</button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav me-auto mb-2 mb-lg-0 justify-content-end">
<?php if ( in_array($_SESSION['user_id'], $pageAuth['ticket']) || in_array($_SESSION['user_id'], $pageAuth['admin']) ) { ?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
입장처리
@ -54,6 +57,11 @@
<li><a class="dropdown-item" href="<?=FG_MANAGER_URL.'/annual_member/annual_member_list_ent.php'?>">연간회원</a></li>
</ul>
</li>
<?php } ?>
<?php if ( in_array($_SESSION['user_id'], $pageAuth['vip']) || in_array($_SESSION['user_id'], $pageAuth['admin']) ) { ?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
명단관리
@ -66,6 +74,11 @@
<li><a class="dropdown-item" href="<?=FG_MANAGER_URL.'/annual_member/annual_member_category.php'?>">연간회원 구분관리</a></li>
</ul>
</li>
<?php } ?>
<?php if ( in_array($_SESSION['user_id'], $pageAuth['bakery']) || in_array($_SESSION['user_id'], $pageAuth['admin']) ) { ?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
베이커리
@ -73,10 +86,14 @@
<ul class="dropdown-menu">
<li class="nav-item">
<a class="nav-link" href="<?=FG_MANAGER_URL.'/bakery/bakery_stock.php'?>">일일현황</a>
<a class="nav-link" href="<?=FG_MANAGER_URL.'/bakery/bakery_stock_view.php'?>">기간조회</a>
<a class="nav-link" href="<?=FG_MANAGER_URL.'/bakery/bakery_product_list.php'?>">제품목록관리</a>
</li>
</ul>
</li>
<?php } ?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
관리자

View File

@ -1,6 +1,7 @@
<?php
include_once '_common.php'; // 그누보드 설정 파일 불러오기
include_once 'config.php';
include_once 'head.php';
// 로그인 체크
if( isset($_SESSION['user_id']) ) { // 로그인 했다면

View File

@ -316,6 +316,76 @@ function get_total_count($db_name) {
return $R;
}
function getBakeryInvenDataPeriod($start_date, $end_date, $searchWord = "", $ord_by = "a.date ASC, b.product_name ASC") {
global $fg;
// 검색 조건
$search_sql = "";
if ($searchWord !== "") {
$searchWord = sql_real_escape_string($searchWord);
$search_sql = "AND b.product_name LIKE '%{$searchWord}%'";
}
$query = "SELECT
b.product_name,
SUM(a.production) AS production,
SUM(a.inhouse_use) AS inhouse_use,
SUM(a.recycling) AS recycling,
SUM(a.disposal) AS disposal,
SUM(a.sales) AS sales,
SUM(a.payment_amount) AS payment_amount
FROM {$fg['bakery_inventory_table']} AS a
LEFT JOIN {$fg['bakery_product_table']} AS b
ON a.barcode = b.barcode
WHERE b.used = 1
AND a.date BETWEEN '{$start_date}' AND '{$end_date}'
{$search_sql}
GROUP BY a.barcode
ORDER BY {$ord_by}";
error_log($query);
$result = sql_query($query);
$R = array();
while ($row = sql_fetch_array($result)) {
$R[] = $row;
}
return $R;
}
// 기간별 합계 수량 구하기
function getBakeryInvenSumPeriod($start_date, $end_date, $searchWord = "") {
global $fg;
$search_sql = "";
if ($searchWord !== "") {
$searchWord = sql_real_escape_string($searchWord);
$search_sql = "AND b.product_name LIKE '%{$searchWord}%'";
}
$query = "SELECT
SUM(a.production) AS t_production,
SUM(a.inhouse_use) AS t_inhouse_use,
SUM(a.recycling) AS t_recycling,
SUM(a.disposal) AS t_disposal,
SUM(a.sales) AS t_sales,
SUM(a.payment_amount) AS t_payment_amount
FROM {$fg['bakery_inventory_table']} AS a
LEFT JOIN {$fg['bakery_product_table']} AS b
ON a.barcode = b.barcode
WHERE b.used = 1
AND a.date BETWEEN '{$start_date}' AND '{$end_date}'
{$search_sql}";
error_log($query);
return sql_fetch($query); // 결과 없으면 false 반환
}
// 전체 품명 불러오기
function getBakeryProductList($ord_by = "ASC") {
global $fg;
@ -329,6 +399,21 @@ function get_total_count($db_name) {
return $R;
}
// 사용 중인(used=1) 품목 수 구하기
function cntUsedBakeryItems() {
global $fg;
$query = "SELECT COUNT(*) AS cnt FROM {$fg['bakery_product_table']} WHERE used = 1";
error_log($query);
$result = sql_fetch($query);
$result = $result['cnt'];
return $result;
}
// 어제자 최종재고 불러오기
function getPrevStock($date, $barcode) {
global $fg;

View File

@ -0,0 +1,21 @@
@charset "utf-8";
.fg_icon_menu {
background-color: #F3F3F3; padding-top: 50px; padding-bottom: 50px;}
.fg_icon_menu .fg_icon_menu_inner {position: relative; margin: 0px auto;}
.theme_btns {height:120px; border-radius: 10px; border:0px; background-repeat: no-repeat; background-size: cover; background-position: 0px 0px; display: flex; align-items: center; color:#fff; font-size: 20px; padding-left: 40px; padding-right: 40px; text-align: left;}
.theme_btns img {border:0px !important;}
.theme_btns span:nth-child(2) {margin-left: auto; height:20px;}
@media all and (max-width:1024px) {
.fg_icon_menu .fg_icon_menu_inner {width: 100% !important; }
.fg_icon_menu .rb_swipper_inner {padding-left: 20px; padding-right:20px; }
.fg_icon_menu .rb_swiper_paging_btn {top:14px;}
.fg_icon_menu .rb-swiper-slide {width: 100%;}
.fg_icon_menu .rb-swiper-slide {width: 100% !important;}
.fg_icon_menu .bbs_main_wrap_thumb_top_con {width: 100% !important;}
}
@media all and (max-width:768px) {
.fg_icon_menu .fg_icon_menu_inner {width: 100% !important;}
}

View File

@ -0,0 +1,102 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
?>
<link rel="stylesheet" href="<?php echo G5_URL ?>/rb/rb.widget/rb.fg_banner/style.css?ver=<?php echo G5_TIME_YMDHIS ?>">
<!--
경로 : /rb/rb.widget/rb.icon_menu/
사용자코드를 입력하세요.
-->
<div class="fg_icon_menu rb_w100_div rb_w100_<?php echo $row_mod['md_id'] ?>">
<div class="fg_icon_menu_inner" style="width:<?php echo $rb_core['main_width'] ?>px;">
<div class="rb_swiper" id="rb_swiper_<?php echo $rb_skin['md_id'] ?>_btm" data-pc-w="3" data-pc-h="2" data-mo-w="1" data-mo-h="1" data-pc-gap="30" data-mo-gap="20" data-autoplay="1" data-autoplay-time="4000" data-pc-swap="0" data-mo-swap="1">
<div class="rb_swiper_inner">
<div class="rb-swiper-wrapper swiper-wrapper">
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme1_bg.png');" onclick="window.open('/VR/2019(day).html');">
<span>23가지 테마가 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/vr_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme2_bg.png');" onclick="window.open('/VR/2019(night).html');">
<span>별빛이 흐르는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/vr_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme3_bg.png');" onclick="location.href='<?php echo G5_URL ?>/content/edu1';">
<span>교육과 체험이 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme4_bg.png');" onclick="location.href='<?php echo G5_URL ?>/facilities';">
<span>볼거리와 즐길거리가 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme5_bg.png');" onclick="location.href='<?php echo G5_URL ?>/dining';">
<span>맛있는 먹을거리가 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme6_bg.png');" onclick="location.href='<?php echo G5_URL ?>/news';">
<span>365일 쉬지 않는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
//부모 width를 무시하고 div 를 100%로 만들고, 모듈설정 버튼의 100% 처리를 위해 스크립트를 사용 합니다.
//복제 사용을 위해 $row_mod['md_id'](모듈ID) 를 활용 합니다.
function adjustDivWidth_<?php echo $row_mod['md_id'] ?>() {
const content_w = $('.rb_w100_<?php echo $row_mod['md_id'] ?>');
const firstAdminOv_w = content_w.nextUntil('.admin_ov').next('.admin_ov');
if ($(window).width() > <?php echo $rb_core['main_width'] ?>) {
content_w.css({
'width': '100vw',
'position': 'relative',
'left': '50%',
'transform': 'translateX(-50%)'
});
firstAdminOv_w.css({
'width': '100vw',
'left': '50%',
'transform': 'translateX(-50%)'
});
} else {
content_w.css({
'width': '100%',
'position': 'static',
'left': '0',
'transform': 'none'
});
firstAdminOv_w.css({
'width': '100%',
'left': '0',
'transform': 'none'
});
}
}
$(document).ready(adjustDivWidth_<?php echo $row_mod['md_id'] ?>);
$(window).resize(adjustDivWidth_<?php echo $row_mod['md_id'] ?>);
</script>

View File

@ -107,6 +107,51 @@ $rb_skin['md_auto_is'] 자동롤링 여부(1,0)
<div class="rb-swiper-wrapper swiper-wrapper">
<?php
$todays = date('Y-m-d');
foreach ($list as &$item) {
$start_date = $item['wr_1'] ?? '';
$end_date = $item['wr_2'] ?? '';
// 상태 및 정렬 우선순위 설정
if ($start_date && $end_date) {
if ($todays < $start_date) {
$item['_status'] = '예정'; // 예정
$item['_sort'] = 1;
} elseif ($todays > $end_date) {
$item['_status'] = '종료'; // 종료
$item['_sort'] = 3;
} else {
$item['_status'] = '진행'; // 진행 중
$item['_sort'] = 0;
}
} else {
$item['_status'] = '기타';
$item['_sort'] = 9;
}
// 시작일 없을 경우를 고려한 비교용 날짜 (미입력 시 최후순)
$item['_start_date'] = $start_date ? $start_date : '9999-99-99';
}
unset($item);
// 정렬: 상태 우선순위(_sort) → 시작일(_start_date)
usort($list, function ($a, $b) {
if ($a['_sort'] === $b['_sort']) {
// 시작일이 빠른 순서대로 하려는 경우 a, b의 순서를 변경하면 됨
return strcmp($b['_start_date'], $a['_start_date']);
}
return $a['_sort'] <=> $b['_sort'];
});
// 종료 상태인 항목 제외
$list = array_filter($list, function ($item) {
return $item['_status'] !== '종료';
});
// 정렬 후 list_count 재설정
$list_count = count($list);
for ($i=0; $i<$list_count; $i++) {
//썸네일
@ -139,17 +184,16 @@ $rb_skin['md_auto_is'] 자동롤링 여부(1,0)
$end_date = isset($list[$i]['wr_2']) ? $list[$i]['wr_2'] : '';
$rb_ev_ico = '';
if($start_date && $end_date) {
if ($todays < $start_date) {
// 진행 전
switch ($list[$i]['_status']) {
case '예정':
$rb_ev_ico = '<span class="rb_latest_event_label ev_label1 font-R" style="opacity:0.5;">예정</span>';
} elseif ($todays > $end_date) {
// 종료
break;
case '종료':
$rb_ev_ico = '<span class="rb_latest_event_label ev_label2 font-R">종료</span>';
} else {
// 진행 중
break;
case '진행':
$rb_ev_ico = '<span class="rb_latest_event_label main_rb_bg color-fff font-R">진행</span>';
}
break;
}
?>

View File

@ -1,57 +0,0 @@
@charset "utf-8";
.rb_latest_event {box-sizing: border-box; width: 100%; background-color: #F3F3F3; padding-top: 50px; padding-bottom: 50px;}
.rb_latest_event .rb_latest_event_inner {position: relative; margin: 0 auto;}
.rb_latest_event dd {position: relative;}
.rb_latest_event dd:last-child {margin-bottom: 0px;}
.rb_latest_event .bbs_main_wrap_con_ul1 {width: 100%; box-sizing: border-box; position: relative; margin-bottom: 20px;}
.rb_latest_event .bbs_main_wrap_con_ul1 img {width: 100%; height:auto; border-radius: 10px;}
.rb_latest_event .bbs_main_wrap_con_ul2 {width: 100%;}
.rb_latest_event .bbs_main_wrap_con_subj {font-size: 18px;}
.rb_latest_event .bbs_main_wrap_con_cont {font-size: 14px; color:#666; word-break: keep-all; margin-top: 5px;}
.rb_latest_event .bbs_main_wrap_con_cont a {color:#666;}
.rb_latest_event .bbs_main_wrap_con_info {font-size: 12px; color:#999; margin-top: 10px;}
.rb_latest_event .bbs_main_wrap_con_writer {margin-top: 20px;}
.rb_latest_event .bbs_main_wrap_con_writer span {display: inline-block;}
.rb_latest_event .prof_tiny_image img {width: 30px; height:auto; border-radius: 50%; margin-right: 5px;}
.rb_latest_event .prof_tiny_name {font-size: 12px; color:#999; line-height: 30px; margin-right: 10px;}
.rb_latest_event .bbs_list_label {font-size: 11px; border-radius: 4px; padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 2px;}
.rb_latest_event .bbs_main_wrap_tit_l a {font-size: 50px; color:#483729; letter-spacing: -2px;}
.rb_latest_event .icon_abs {position: absolute; right:10px; top:10px;}
.rb_latest_event .bbs_list_label.label1 {background-color: #FFC700; color:#fff;}
.rb_latest_event .bbs_list_label.label2 {background-color: #00A3FF; color:#fff;}
.rb_latest_event .bbs_list_label.label3 {background-color: #8ED100; color:#fff;}
.rb_latest_event .bbs_list_label.label4 {background-color: #AA20FF; color:#fff;}
.rb_latest_event .bbs_list_label.label5 {background-color: #25282B; color:#fff;}
.rb_latest_event .bbs_list_label.label6 {background-color: #D6DCE0; color:#000;}
.rb_latest_event .rb_latest_event_item_date {display: flex; align-items: center; line-height: 24px; border-top:1px solid #ddd; padding-top: 15px; margin-top: 17px !important;}
.rb_latest_event .rb_latest_event_item_date_1 {}
.rb_latest_event .rb_latest_event_item_date_2 {margin-left: auto;}
.rb_latest_event .rb_latest_event_label {padding: 5px 10px; border-radius: 20px; font-size: 12px;}
.rb_latest_event .rb_latest_event_label.ev_label1 {background-color: #25282B; color:#fff;}
.rb_latest_event .rb_latest_event_label.ev_label2 {background-color: #fff}
.rb_latest_event .bbs_main_wrap_sub {margin-left: 30px; margin-top: 8px; font-size: 18px; color:#483729;}
.rb_latest_event_inner_btm {margin-top: 60px !important;}
.theme_btns {width:100%; height:120px; border-radius: 10px; border:0px; background-repeat: no-repeat; background-size: cover; background-position: 0px 0px; display: flex; align-items: center; color:#fff; font-size: 20px; padding-left: 40px; padding-right: 40px; text-align: left;}
.theme_btns img {border:0px !important;}
.theme_btns span:nth-child(2) {margin-left: auto; height:20px;}
@media all and (max-width:1024px) {
.rb_latest_event .rb_latest_event_inner {width: 100% !important;}
.rb_latest_event .rb_swiper_paging_btn {top:14px;}
.rb_latest_event .bbs_main_wrap_tit_l a {font-size: 34px;}
.rb_latest_event .bbs_main_wrap_sub {float:none; margin-left: 0px; font-size: 16px}
.rb_latest_event .bbs_main_wrap_tit_l {float:none;}
.rb_latest_event .rb-swiper-slide {width: 100%;}
.rb_latest_event .bbs_main_wrap_tit_r {margin-top: -86px;}
.rb_latest_event_inner_btm {margin-top: 30px !important;}
.rb_latest_event .rb-swiper-slide {width: 100% !important;}
.rb_latest_event bbs_main_wrap_thumb_top_con {width: 100% !important;}
}
@media all and (max-width:768px) {
.rb_latest_event .rb_latest_event_item_date {display:block;}
.rb_latest_event .rb_latest_event_item_date_1 {font-size: 12px;}
.rb_latest_event .rb_latest_event_inner {width: 100% !important;}
}

View File

@ -58,9 +58,9 @@ $rb_skin['md_auto_is'] 자동롤링 여부(1,0)
<div class="bbs_main rb_latest_event rb_latest_event_<?php echo $row_mod['md_id'] ?>" style="padding-top:0px !important;">
<div class="bbs_main rb_latest_promotion rb_latest_promotion_<?php echo $row_mod['md_id'] ?>">
<div class="rb_latest_event_inner" style="width:<?php echo $rb_core['main_width'] ?>px;">
<div class="rb_latest_promotion_inner" style="width:<?php echo $rb_core['main_width'] ?>px;">
<!-- { -->
<ul class="bbs_main_wrap_tit">
@ -142,13 +142,13 @@ $rb_skin['md_auto_is'] 자동롤링 여부(1,0)
if($start_date && $end_date) {
if ($todays < $start_date) {
// 진행 전
$rb_ev_ico = '<span class="rb_latest_event_label ev_label1 font-R" style="opacity:0.5;">예정</span>';
$rb_ev_ico = '<span class="rb_latest_promotion_label ev_label1 font-R" style="opacity:0.5;">예정</span>';
} elseif ($todays > $end_date) {
// 종료
$rb_ev_ico = '<span class="rb_latest_event_label ev_label2 font-R">종료</span>';
$rb_ev_ico = '<span class="rb_latest_promotion_label ev_label2 font-R">종료</span>';
} else {
// 진행 중
$rb_ev_ico = '<span class="rb_latest_event_label main_rb_bg color-fff font-R">진행</span>';
$rb_ev_ico = '<span class="rb_latest_promotion_label main_rb_bg color-fff font-R">진행</span>';
}
}
?>
@ -221,9 +221,9 @@ $rb_skin['md_auto_is'] 자동롤링 여부(1,0)
</ul>
<?php if (isset($list[$i]['wr_1']) && $list[$i]['wr_1'] && isset($list[$i]['wr_2']) && $list[$i]['wr_2']) { ?>
<ul class="rb_latest_event_item_date mt-10 font-14 font-B main_color">
<li class="rb_latest_event_item_date_1"><?php echo get_text($list[$i]['wr_1']); ?> ~ <?php echo get_text($list[$i]['wr_2']); ?></li>
<li class="rb_latest_event_item_date_2"><?php echo $rb_ev_ico ?></li>
<ul class="rb_latest_promotion_item_date mt-10 font-14 font-B main_color">
<li class="rb_latest_promotion_item_date_1"><?php echo get_text($list[$i]['wr_1']); ?> ~ <?php echo get_text($list[$i]['wr_2']); ?></li>
<li class="rb_latest_promotion_item_date_2"><?php echo $rb_ev_ico ?></li>
</ul>
<?php } ?>
@ -258,54 +258,6 @@ $rb_skin['md_auto_is'] 자동롤링 여부(1,0)
</div>
<div class="rb_latest_event_inner rb_latest_event_inner_btm" style="width:<?php echo $rb_core['main_width'] ?>px;">
<div class="rb_swiper" id="rb_swiper_<?php echo $rb_skin['md_id'] ?>_btm" data-pc-w="3" data-pc-h="2" data-mo-w="1" data-mo-h="1" data-pc-gap="30" data-mo-gap="20" data-autoplay="1" data-autoplay-time="4000" data-pc-swap="0" data-mo-swap="1">
<div class="rb_swiper_inner">
<div class="rb-swiper-wrapper swiper-wrapper">
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme1_bg.png');" onclick="window.open('/VR/2019(day).html');">
<span>23가지 테마가 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/vr_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme2_bg.png');" onclick="window.open('/VR/2019(night).html');">
<span>별빛이 흐르는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/vr_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme3_bg.png');" onclick="location.href='<?php echo G5_URL ?>/content/edu1';">
<span>교육과 체험이 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme4_bg.png');" onclick="location.href='<?php echo G5_URL ?>/facilities';">
<span>볼거리와 즐길거리가 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme5_bg.png');" onclick="location.href='<?php echo G5_URL ?>/dining';">
<span>맛있는 먹을거리가 있는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
<div class="rb_swiper_list">
<button type="button" class="theme_btns" style="background-image:url('<?php echo G5_THEME_URL ?>/rb.img/theme6_bg.png');" onclick="location.href='<?php echo G5_URL ?>/news';">
<span>365 쉬지 않는<br>퍼스트가든</span>
<span><img src="<?php echo G5_THEME_URL ?>/rb.img/right_ico.svg"></span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
@ -313,7 +265,7 @@ $rb_skin['md_auto_is'] 자동롤링 여부(1,0)
//복제 사용을 위해 $row_mod['md_id'](모듈ID) 를 활용 합니다.
function adjustDivWidth_<?php echo $row_mod['md_id'] ?>() {
const content_w = $('.rb_latest_event_<?php echo $row_mod['md_id'] ?>');
const content_w = $('.rb_latest_promotion_<?php echo $row_mod['md_id'] ?>');
const firstAdminOv_w = content_w.nextUntil('.admin_ov').next('.admin_ov');
if ($(window).width() > <?php echo $rb_core['main_width'] ?>) {

View File

@ -0,0 +1,55 @@
@charset "utf-8";
.rb_latest_promotion {box-sizing: border-box; width: 100%; background-color: #fff; padding-top: 50px; padding-bottom: 50px;}
.rb_latest_promotion .rb_latest_promotion_inner {position: relative; margin: 0 auto;}
.rb_latest_promotion dd {position: relative;}
.rb_latest_promotion dd:last-child {margin-bottom: 0px;}
.rb_latest_promotion .bbs_main_wrap_con_ul1 {width: 100%; box-sizing: border-box; position: relative; margin-bottom: 20px;}
.rb_latest_promotion .bbs_main_wrap_con_ul1 img {width: 100%; height:auto; border-radius: 10px;}
.rb_latest_promotion .bbs_main_wrap_con_ul2 {width: 100%;}
.rb_latest_promotion .bbs_main_wrap_con_subj {font-size: 18px;}
.rb_latest_promotion .bbs_main_wrap_con_cont {font-size: 14px; color:#666; word-break: keep-all; margin-top: 5px;}
.rb_latest_promotion .bbs_main_wrap_con_cont a {color:#666;}
.rb_latest_promotion .bbs_main_wrap_con_info {font-size: 12px; color:#999; margin-top: 10px;}
.rb_latest_promotion .bbs_main_wrap_con_writer {margin-top: 20px;}
.rb_latest_promotion .bbs_main_wrap_con_writer span {display: inline-block;}
.rb_latest_promotion .prof_tiny_image img {width: 30px; height:auto; border-radius: 50%; margin-right: 5px;}
.rb_latest_promotion .prof_tiny_name {font-size: 12px; color:#999; line-height: 30px; margin-right: 10px;}
.rb_latest_promotion .bbs_list_label {font-size: 11px; border-radius: 4px; padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 2px;}
.rb_latest_promotion .bbs_main_wrap_tit_l a {font-size: 50px; color:#483729; letter-spacing: -2px;}
.rb_latest_promotion .icon_abs {position: absolute; right:10px; top:10px;}
.rb_latest_promotion .bbs_list_label.label1 {background-color: #FFC700; color:#fff;}
.rb_latest_promotion .bbs_list_label.label2 {background-color: #00A3FF; color:#fff;}
.rb_latest_promotion .bbs_list_label.label3 {background-color: #8ED100; color:#fff;}
.rb_latest_promotion .bbs_list_label.label4 {background-color: #AA20FF; color:#fff;}
.rb_latest_promotion .bbs_list_label.label5 {background-color: #25282B; color:#fff;}
.rb_latest_promotion .bbs_list_label.label6 {background-color: #D6DCE0; color:#000;}
.rb_latest_promotion .rb_latest_promotion_item_date {display: flex; align-items: center; line-height: 24px; border-top:1px solid #ddd; padding-top: 15px; margin-top: 17px !important;}
.rb_latest_promotion .rb_latest_promotion_item_date_1 {}
.rb_latest_promotion .rb_latest_promotion_item_date_2 {margin-left: auto;}
.rb_latest_promotion .rb_latest_promotion_label {padding: 5px 10px; border-radius: 20px; font-size: 12px;}
.rb_latest_promotion .rb_latest_promotion_label.ev_label1 {background-color: #25282B; color:#fff;}
.rb_latest_promotion .rb_latest_promotion_label.ev_label2 {background-color: #fff}
.rb_latest_promotion .bbs_main_wrap_sub {margin-left: 30px; margin-top: 8px; font-size: 18px; color:#483729;}
.theme_btns {width:100%; height:120px; border-radius: 10px; border:0px; background-repeat: no-repeat; background-size: cover; background-position: 0px 0px; display: flex; align-items: center; color:#fff; font-size: 20px; padding-left: 40px; padding-right: 40px; text-align: left;}
.theme_btns img {border:0px !important;}
.theme_btns span:nth-child(2) {margin-left: auto; height:20px;}
@media all and (max-width:1024px) {
.rb_latest_promotion .rb_latest_promotion_inner {width: 100% !important;}
.rb_latest_promotion .rb_swiper_paging_btn {top:14px;}
.rb_latest_promotion .bbs_main_wrap_tit_l a {font-size: 34px;}
.rb_latest_promotion .bbs_main_wrap_sub {float:none; margin-left: 0px; font-size: 16px}
.rb_latest_promotion .bbs_main_wrap_tit_l {float:none;}
.rb_latest_promotion .rb-swiper-slide {width: 100%;}
.rb_latest_promotion .bbs_main_wrap_tit_r {margin-top: -86px;}
.rb_latest_promotion .rb-swiper-slide {width: 100% !important;}
.rb_latest_promotion bbs_main_wrap_thumb_top_con {width: 100% !important;}
}
@media all and (max-width:768px) {
.rb_latest_promotion .rb_latest_promotion_item_date {display:block;}
.rb_latest_promotion .rb_latest_promotion_item_date_1 {font-size: 12px;}
.rb_latest_promotion .rb_latest_promotion_inner {width: 100% !important;}
}